A while ago, some people at work asked me to build them a couple of buttons to be used for a quiz. After some discussion, we agreed that a wireless system would be the most convenient. Building upon the Party Button design, this is the result.
In an effort to keep debugging to a minimum, I decided not to design a complete system from scratch. Instead, the electrical part of the build consists of an Arduino Pro Mini and a nRF24L01+ wireless RF module. Both can be had extremely cheap from various online shops. I got mine from eBay for around €4 and €1.50 respectively.
The push buttons, i.e. the switches, themselves are the same as the ones used in my Party Pushbutton. Both the Arduino and the RF module work fine down to 2.7V, so 2 AA batteries in series are used for power. Since I was asked to make eight of these buttons, one last addition is a 3-way DIP switch. This is used to set the ID that is transmitted on a button press. A small connection PCB keeps the whole setup tidy and modular.
On the receiver side, an Arduino Pro Micro and the same RF module are used. The Pro Micro has build-in USB, so can be programmed to act as a USB device (e.g. a keyboard) if required. In this case, however, it just prints out the ID of any received button push over a serial interface. Because the RF module runs at maximum 3.6V, a voltage regulator is used to bring down the USB’s 5V to 3.3V.
Low power Arduinos
Some modifications were required on the transmitter Arduinos (i.e. the ones in the button) to make them low power. The switches should run as long as possible (preferably a year at least) on a single battery charge. To save as much power as possible, the software running on the ATMega328 disables all on-board circuitry and goes into sleep mode, only waking up from an interrupt when the switch is pressed. That should reduce the power consumption to ~1 µA when idle.
The Arduino board has a power LED though, so that was desoldered, because it consumed a few mA. Because the boards are powered by batteries, the on-board voltage regulator can be bypassed. However, measuring the actual power consumption showed that over 25 mA was being consumed, even with the ATMega sleeping. Apparently the voltage regulator on the Arduinos I bought pulled in lots of current through its output. Desoldering the regulator fixed the problem and brought the power consumption down below what my multimeter can measure (<1 µA).
The result is that the wireless buttons consume less power than the batteries’ self-discharge rate. Ignoring the self-discharge, they could keep running on one battery charge for close to 297 years. Good enough for me!
The button housing is a slightly improved version of the one used for the Party Pushbutton. The whole switch housing is now submerged into the button housing, which makes for a much more streamlined appearance. This requires a small black shim, which was lasercut from black plexi to match the switch housing. Some spraypaint and varnish protect the lasercut MDF wood from the elements (read: liquids). The connection PCB has a mounting hole to screw it into the button housing, and the battery holder is secured with an attachment piece and a zip tie.
For the receiver, I designed and lasercut a small plexi box. An important detail here is the attachment of the micro USB cable. Instead of leaving an opening for a cable to the Arduino’s USB connector, the USB cable is permanently plugged in and clamped by the housing. That way it’s impossible to break off the Arduino’s fragile connector by accidentally pulling the cable in the wrong direction.
A PC on the receiver side captures incoming serial data and displays the ID of the button that was pushed first. It also shows the order in which the other buttons were pushed and how long after the first button push that happened. Of course this can be easily extended to filter out “spammers”, …