- 1 x Arduino Nano. They’re really powerful and fulfill this task perfectly. Probably you could use a simpler microcontroller for this.
- 5 x push buttons, better if you mix the colors.
- Some AWG30 wiring.
- A 3D printer, like the Anycubic i3 Mega.
- A mini USB cable to connect everything.
- A couple of M2.5 screws.
The 3D design was made using Fusion 360, my favorite program to design things to be built on a 3D printer. The learning curve can be harsh, but once you grasp how everything revolves around sketches everything starts to make sense.
If you don’t feel like learning Fusion 360, you can get the 3D files clicking here. As you can see, the design is pretty simple, just a box with a lid and some holes, and a small structure to hold the Arduino Nano in place.
I printed it using SUNLU black PLA with a layer height of 0.3, no need for fine detail anyway.
The electronics in this project are braindead easy. Just connect one of the leads of each button to ground, and connect the other leads to D2, D3, D4, D5 and D6 in the Arduino Nano. Boom, you’re done.
Stick everything into the box and place the two screws in the corners to close the lid.
The software is the “hardest” part, but it’s all done for you already. You can find the latest release of the software at https://github.com/JoseTomasTocino/ArduinoButtonPad/releases.
First, you need to flash the Arduino using the sketch contained in the ArduinoSketch.zip file of the release. Check the code, it’s pretty simple. It just sends a string using the serial port whenever you press (actually, release) a button.
Then, you need a desktop application to control what happens in your operating system whenever you press a button. This app has been developed using C++ and Qt 5.14, and it’s obviously open source. You’ll find the compiled 64bit version of the software for Windows in the ArduinoButtonPad-1.0.0.zip file of the release.
The software is pretty straightforward. The functionality is separated in three groups.
- Serial communication info: here you’ll find some info about the serial port the Arduino is using to send the signals. If it says none, make sure your Arduino is properly connected and the click Scan COM ports.
- Profiles: here you can configure a profile for the buttons. These define what action each button does. You can have many different profiles for every situation, and type what command should each button launch. You can also toggle the checkbox at the botton to use the fifth button to cycle through the profiles, so you can jump from one profile to another really easily.
- Other settings: you can select whether this preferences window of the application should appear at the beginning, and whether the application should start automatically when Windows boots.
There’s always room for improvement, and I’ve come across some ideas during the development that I may or may not tackle at the future:
- The feeling of the pushbuttons is not so good. I’d rather use some more tactile, clicky buttons. It would be great to use some Cherry MX Blue switches, that’d be rad.
- Using an Arduino Nano is kind of overkill. If I knew actual electronics I could’ve done a dedicated circuit for this, but that’s way beyond my knowledge. However, trying to use something like Digispark’s ATTiny85 could also work.
- The 3D printed enclosure is OK, but it could be improved, specially the lid that kind of hovers over the box. I should’ve added an inner lip to improve the fit.
I hope you like this project and find it interesting. If you have any suggestions, leave them in the comments or open an issue to the bug tracker at GitHub.
Thanks for reading!