RavePad
Hello everyone! My name is Patrick Duffany (P Duff), and this is my first attempt ever building a project! The RavePad is a MIDI controller that can interface with Music Software like FL Studio and has some super cool light patterns using the FastLED and WS2812B byte addressable LEDs. If you have any questions about the project, feel free to post something in the comments and I will get back to you when I can. Let's Go!
Supplies
Here are all of the supplies that were required to build the project. I tried to include the Amazon links that I used to order the parts in case anyone was interested in building.
- Arduino Nano (https://amzn.to/3efSONF)
- USB-A to Mini0-B Cable (https://amzn.to/3uliXQO)
- Soldering Helping Hands (https://amzn.to/3vETD8y)
- M3 M4 and M5 Screws (https://amzn.to/33h9ONk)
- 24 AWG Solid Wire (https://amzn.to/2SsyhwU)
- White TPU Filament (https://amzn.to/3b2ivPT)
- Black PLA Filament (https://amzn.to/3b2BlGq)
- Soldering Station (https://amzn.to/3xLWJJN)
- 36 Tactile Push Buttons (https://amzn.to/3tjRGwO)
- WS2812B Byte Addressable LEDs (https://amzn.to/2QSERfH)
- 36 1N4002 Rectifier Diodes (https://amzn.to/33fvk4W)
- 3D Printer (https://amzn.to/3vHsnGx)
- Prototyping Perfboard (https://amzn.to/3nPf6ZW) *More Info on Perfboard in Building the RavePad*
- Solder Wire (https://amzn.to/3xLxjvH)
- Wire Strippers (https://amzn.to/3eU6xc3)
- Glue (https://amzn.to/3unMjhe)
Manufacturing the RavePad
I created the Base, Cover, and LED Holders using the Black PLA Filament and created the Buttons using the white PLA Filament with supports. The idea is to have the Buttons go through the open squares in the Base to act as a cover for the tactile switches. The small triangle openings in the Base are for the LED Holders to slide into once you have connected all of the WS2812B LEDs onto the LED Holders. The openings in the corner of the Base is for the Perfboard to be inserted there. An idea of how this looks can be seen in Video 1. To print everything, just download the STL files attached.
Once all of the components are printed, now to start building the RavePad! First you are going to want to cut all of the WS2812B LED's into pieces and glue them onto the LED Holders. On the LEDs you are going to see a white arrow on each LED. Be sure that when you glue each LED onto the LED Holders that the arrows are pointing in the direction of the one in front of it (It should resemble a snaking pattern that goes up and down each LED Holder, like in the Snake.jpg). Once you have all 36 LEDs glued on the LED Holder, you need to solder the 5V, Ground, and Data I/O copper pads to eachother. To do so, I pre-soldered the copper pads and used some stripped 24 AWG wire to connect each copper pad to the neighboring LED as seen in LEDs.jpg. Once all LED Holders were soldered, I glued each LED Holder in place in the small triangle divot in the Base.
Building the RavePad
Next, you will have to put the cap on each of the tactile switches, and put each switch into one of the white spaces with the cap against the white space. You are now going to want to put the Perfboard lying on top of the pins of the switches and mark where on the Perfboard the button should be inserted into.
Note about the Perfboard
The Perfboard that is included in the Amazon link above does not fit flush to the Base enclosure, so I had to secure it using glue. It still works correctly, however if you want it to be a perfect fit with the base enclosure you are going to have to create a PCB Board. The site that I used was https://jlcpcb.com/, and to create a Gerber File (Blueprint for the PCB Board), JLCPCB has an online web application to create a Gerber File attached here
Once you have the switches attached to the Perfboard, you can put the switches with Perfboard backing back into their respective white slots, and solder the back pins of each switch to secure them in place. Now that the switches are secured, you can start to solder one pin from each switch in a column and in a row to a single piece of stripped 24 AWG wire!
Why should I have to do that? Since the build is using an Arduino Nano, we will not have the 36 Digital pins for each of the 36 switches. As a work around, if you created 6 columns of wire being scanned by the Arduino, and 6 rows of wire that are connected to ground, then we can code to whenever a button is pressed, it will run into the ground, letting the Arduino know that specific switch was pressed while only using 12 digital pins. Once the columns and rows are created, I added a diode to each pin that was connected to the ground wire as a means to lift the entire wire to prevent the column and row wires from touching, and also to prevent ghosting on the RavePad.
The final step in building is to connect each of the column and row wires to the Arduino Nano, and the 5V, Ground, and data pin from the LEDs to the Arduino Nano. To do this, all you have to do is solder a piece of the 24 AWG wire with the ends stripped to the columns and rows of the wires, and then solder them into the Arduino Nano (which luckily comes without the header pins attached). You also do the same for connecting the 5V, Ground, and Data pin on the LEDs. I soldered Columns 1 - 6 to Digital Pins D3 - D8, and Rows 1 - 6 to Digital Pins D9, D10, D11, D12, A0, and A1. The final product should look similar to Final.jpg.
Now to coding!
Programming the RavePad
To program it, all you have to do is download Arduino, and download my code! To program the Arduino Nano, ensure that you have "Arduino Nano" Selected in the board section (Tools > Board: > Arduino AVR Boards > Arduino Nano), you select the correct processor (Tools > Processor: > ATmega328P), and you select the correct port (Tools > Port > Whatever port you are using).
The Arduino Nano will most likely require a CH340 driver in order to serially communicate with the operating system. To download the drivers to your port, follow the link here for download and installation instructions on how to update your port with the CH340 driver.
Now when you open the code in Arduino, you will have to install the Keypad and FastLED libraries in order for the project to work. To do this, you have to go to Sketch > Include Libraries > Manage Libraries then type in Keypad and FastLED into the search bar. The versions and authors of the code that I used are below
FastLED (Daniel Garcia, Version 3.4)
Keypad (Mark Stanley, Alexander Brevig, Version 3.1.1)
I have left in text comments within my code to assist with your understanding if you are unsure about what each function does. Once you have uploaded the code to the Arduino Nano, its now time to download the software to make the RavePad work!
Downloads
Downloading the Software
Once you have downloaded all of the software below, you will be able to use the RavePad as a MIDI controller in FL Studio! In order for the RavePad to interface with MIDI software, you will have to create a MIDI Port by using MIDI Loop, and create a Serial - MIDI Port Bridge using Hairless MIDI. To create a MIDI Port in Loop MIDI, all you have to do is create a Port by naming the Port, and pressing the + button in the bottom left, as seen in Loop.mp4.
Once you have created a MIDI Port, you will be able to open Hairless MIDI and select the port you are using in Serial Port, and select the MIDI Port you are using in MIDI Out. To begin serial communication between the RavePad and the Hairless MIDI software, ensure that you select Serial <-> MIDI Bridge On in the top right of the program, as shown in Hairless.mp4.
Finally, to interface the RavePad with FL Studio, open FL Studio and to go Options > MIDI Settings > Input and enable the Loop MIDI Port. Make sure that the Loop MIDI Port is the same Serial Port that is being used in Hairless MIDI! You can see how to do this in FL Studio.mp4.
Finished!
Thank you so much for giving my project a read! This has been my first project that I have ever build to interface with an Arduino so I still have a lot to learn. Despite that, I am excited to see what I can build in the future and hope to come back to Instructables to publish another project! Attached is a video for additional clarification, and if you have any questions, comments, or concerns feel free to leave them in the comments below!