The Arduboy Pro Rumble itself is a homemade Leonardo backpack that has a vibration motor attached to Speaker Pin 2. Game makers can use the Arduboy2 Tones commands to add rumble to their game. The system also features broken out Serial connection to connect the the Ardumiibo Scanner and future peripherals.
The Ardumiibo scanner is a PN532 NFC Scanner with a Neopixel ring that can scan collectible items from the real world into your game.
An Arduboy based nod to Tiger Electronics handhelds, Rumble Features, and Amiibos
- Bill of Materials
- Assembly
- Arduboy Pro Rumble Game Console
- Powerboost
- Boost Cables
- Scanner
- Software
- Examples
- Arduino Leonardo
- 10mm x 2.5mm Disc Shape Vibration Motor for Cell Phone - 3v
- Mine was from uxcel but these look just as good. (https://www.amazon.com/tatoko-12000RPM-Wired-Phone-Vibration/dp/B07L5V5GYG/ref=sr_1_2?dchild=1&keywords=vibration+motor+cell+phone&qid=1624498175&sr=8-2)
- 2n2222 NPN transistor
- 3x 110 ohm resistors
- 10uF 50V capacitor
- Diode
- 7x tactile momentary push buttons
- RGB LED
- piezo buzzer
- On off switch
- 2.42" i2c SSD1309 OLED
- USB data cable (for booster cable)
- 3d printer files
- Adafruit Powerboost 500
- 3.7V 1200mAh Lipo Battery
- 3d printer files
- [24LED Neopixel ring] (https://www.amazon.com/gp/product/B0774JNSCF/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)
- PN532 NFC Reader
- USB data cable (for booster cable)
- Adafruit Powerboost 500
- On off switch
- Booster cable for Powerboost
- 3.7v 500 mAh Lipo battery
- Leonardo Pro Micro
- Perfboard to mount up everything nice
- NFC stickers for ardumiibos. (https://www.amazon.com/THONSEN-NTAG215-Stickers-Perfectly-NFC-Enabled/dp/B07MKWHYQK/ref=sr_1_5?dchild=1&keywords=rfid+stickers&qid=1624482994&sr=8-5)
- Good luck.
-
Add hot glue as wire stress relief as you go.
-
Start printing the 3d printer files listed in the 3d parts section of this Github or listed in the BOM above.
- You can either contact me for a pcb and I can order some more, you can make your own using the schematics from the giuthub, or you can breadboard this out. Up to you.
-
Solder the Male header pins into the middle of the PCB so that it's like a backpack for the Leonardo. The Male pins on the PCB face DOWN towards the Leonardo female pins.
-
Solder in your two resistors top right, and the 7x tactile buttons onto the top of the board.
-
Solder in your Screen. All the pins should line up on the left hand side. If you're breadboarding this, refer to the schematics for how to hook up the display.
- The only items facing the front of the PCB are the buttons and those two resistors. And the Screen
- Install female header pins where the broken out ICSP header is.
- Directly beneath the female header pins, install the third resistor.
- Solder in the transistor with the flat part facing up, curved part towards the bottom.
- Solder in the diode with the white stripe facing the way it is on the board. Once again refer to the schematic for help, or the pictures on the pcb.
- Install the capacitor with negative stripe facing the right.
- I would install the Speaker, vibraating motor, and RGBLED on the back of the PCB.
-
The vibrating motor goes on the two holes to the right of the capacitor circuit. Install the vibrating motor with ground wire on the left. (If PCB back is facing you.)
-
The speaker is labeled for the front, but I find it works better on the bottom of the board. the speaker wire holes are directly left of the diode.(If PCB back is facing you.) Solder in the piezo speaker with the positive wire on the left.
-
The serial cable wires are also labeled for the top, but I like them better on the bottom. You should be able to see the traces on the PCB. If the back of the OCB is facing you RX is the left hole of the gold pads. TX is the right. (the front of the board has them labeled as JP1.)
-
You're also going to need to tack a ground wire onto one of the nubs of a ground wire, as you need this for serial and I forgot.
- This illustrates the ground wire, but the other wires are on top, which I mentioned not to do.
- You should probably hook everything up to your data cable at this point and run the included "Rumble Demo" to make sure everything's working right. We're about to cut up that data cable so, test it now, anyway.
- Follow the directions from Adafruit to hook up a switch to your Powerboost. You're going to want to mount the switch with wires instead of directly to the board so we can remote mount it.
You may as well wire up both powerboosts, and make two boost cables. We need the boost cables to be able to pass data through .
Let me just preface this with I didn't know the powerboost would take up so much room. They look so small.
Do your best to put everything in the case and rout the USB out the top holes, and the Serial cable out the bottom. It's pretty self explanatory so here are some pictures of how I did it. Feel free to design your own case at this point.
Glue down the Piezo and the vibrating motor to the back inside of the, where the empty resources are. You probably want to add a few dabs of glue to the front part of the case to keep your d pad in place, too.
- On the PN532 NFC RFID module Solder on the 4 90 degree pins that came with your module so that they are sticking out the side that reads "TXD RXD"
- Carefully switch the module to IIC/ I2c mode by flipping the jumper.
- More info can be found here: https://www.electroschematics.com/nfc-rfid-module-pn532/
- And here: http://wiki.sunfounder.cc/index.php?title=PN532_NFC_RFID_Module
- The Arduino Pro Micro will sit in the bottom of the Scanner case, along with the Powerboost hooked up to it's booster cable
- The middle bdoy is where the PN532 will sit, and you will pass wires through the holes to the bottom of the case. (If you've printed the case this will be very evident.)
- The top faceplate is in 3 parts, and the NEOPIXEL ring is glued into the back of the light diffuser ring part.
- Run the wires from the top section of the box where the LEDs are, THrough the body, and into the base so you can solder them into the Pro Micro as follows.
Pro Micro | Module |
---|---|
VCC | VCC PN532 |
VCC | 5v LED Ring |
GND | GND PN532 |
GND | GND LED Ring |
Pin 2 | PN532/ SDA |
PIN 3 | PN532/ SCL |
PIN 4 | LED Ring Data In |
Unfortunately I can't show you the wires in the pro micro because fitting everything in the box is a hard task. Once it's in there, it's in.
- Use plenty of hot glue for attaching and wire stress relief.
-
I use the Arduino IDE so I can't speak to the Arduboy game loaders.
-
Use Mr Blinky's homemade Package for running the 1309. Select Homemade Arduboy, Leonardo, and SSD1309. Standard Arduino Core.
- https://github.com/MrBlinky/Arduboy-homemade-package
- Blinky's software worked for me out of the box, but I remember way back having to change some addresses or running the patcher for uploading games. You can find out all about that on the Arduboy forums and in Mr. Blinky's docs.
-
Install the PN532 Arduino Library
-
Install the Adafruit Neopixel Library
- (https://github.com/wimberlyw/ardumiibo/tree/main/Scanner%20Programs)
- This is basically boilperplate from the PN532 libraries, and the Adafruit Neopixel library.
-https://github.com/wimberlyw/ardumiibo/tree/main/Examples
- https://youtu.be/rNLjulla09I
- Use the word "keys" for the key example
- Use "pots" for the potion example.
- Try Everything out!
- Rumble just uses the Tone library BeepPin2.
- Essentially The scanner is just passign a string over serial.
- Read the examples!
void setup()
{rumble.begin();//Set up Rumble Motor}
if (arduboy.justPressed(B_BUTTON)) {
rumble.tone(beep.freq(523.251), 5); /beep.freq(523.251) is used to convert 523.251Hz to the required count
}
- Turn on :
power_usart1_enable(); // Arduboy turns off serial power, so we need that to connect to the RFID reader
Serial1.begin(115200);// Begin communication with the Serial port/ Reader over Serial 1"
-
Set up a dummy string to save the message we receive from Serial.
String Message;//Storing messages from the scanner as a string here.
-
If the Serial is receiving a message, check to see if it's ours.
- If it is, do something.
THIS LINE MAKES SERIAL NOT LOCK UP EVERYTHING BY SCANNING ALL THE TIME, BUT ONLY WHEN DATA COMES You could do a "Blocking" version if you wanted the user to be stuck somewhere until they scan something. Just don't include serial available.
if(Serial1.available()){ Message = Serial1.readStringUntil('\r'); //Store incoming data
if(Message != ""){
//We've found that the writer apps put an extra " en/" in the string, so we take it out.
Message.remove(0,3);
// if it exists, do stuff.
if(Message.indexOf(potionCode) >= 0){ //if our code exists in what was scanned
//do stuff
Serial1.flush(); //Clear the serial buffer of any info
arduboy.delayShort(1000); //add a lil delay time
heartsEarned++;
}