Wednesday, October 5, 2016

Wireless buzzers

Wireless buzzers:

  • Designed in Autodesk Fusion 360
  • 3D printed with Ultimaker 2 using clear PLA (layer height 0.1)
    • Pieces are printed in sections and fastened with M3 inset nuts and bolts
    • Transparency of the filament is used to create a thin (0.3mm) viewing window for the OLED display inside. Heated glass printbed helps make the 3 layers smooth and clear.
    • Because 3D printed plastic has a fine layered pattern, this make it terrible for pieces to slide past each other while in same orientation. Therefore i've printed 3 "sliders" that are printed in a different orientation so the smooth glass facing side of the print is in contact with the walls of the moving button/top cap.
    • Once assembled, the button enclosure interlocks with itself. Top cap is captive by same bolts that hold sliders in place.
  • Electronics:
    • Adafruit Feather M0+ with RFM69HCW 900mhz module
    • Adafruit OLED Featherwing for control unit display
    • Misc small buttons, switches, LEDs, piezos, and wiring.
    • 2000mAh lithium polymer cell
  • Software:
    • Programmed in Arduino environment
    • LowPowerLabs RFM69 library
      • modified SendWithRetry() to delay by additional specified random time to desynchronize collision deadlocks.
    • RTC library for low power standby function of buzzer buttons between buzzes.
    • Adafruit OLED library
  • Interface Features
    • Display RSSI or battery level of each buzzer
    • Silent mode - no buzzing or lighting so the trivia host can call out who buzzed in first.
    • Automatic reset - optionally allow the buzzer to automatically reset the lockout after 5s or 10s so the host does not have to press the button so much.
    • Central reset button - reset the lockout so the buzzers can buzz again; long press to select auto-reset time 
    • Battery measurements are normalized to a standard li-poly discharge curve (binned  every 10% runtime) to give charge level reflective of runtime.
  • Future features
    • Auto power control - dial transmit power back to conserve power based on RSSI; already supported by RFM69 library but not used here as batteries are already so overwhelmingly large and transmissions are so short.
    • Battery disconnection alarm - if the device is plugged in without being switched on first, the battery will not charge. There may be a way to use some external electronics with pulldown resistors to detect if the battery is attached to warn the user that the battery is not charging.

 Installing the electronics on the base station.

 Oops i designed it backwards. Had to reprint this mirrored.
 Above: the original design with one large button. Nice and clicky with good unified tactile and auditory feedback but would not click reliably when clicked on the edge of the top buttoncap. Switched to a 3-button design instead. Also seen: the 3 sliders, to be bolted on the midsection sideways as an interface between the midsection and the top buttoncap.
 Fitting test for the midsection of the buzzer unit.

The underside features some air vents and the piezo speaker. Silicone feet.
ON/OFF switch and the charging port. The switch fully disconnects the battery when off to minimize discharge during storage. Unfortunately, this means that if the switch is OFF, the device will not charge. Additionally there is no easy way to detect if the battery is attached (unless I of measure the batt pin through a voltage divider). If I could, at least I can warn the user with an annoying buzz until the battery is connected.


  1. Fantastic work, can you share your code?

  2. good question. i have to go through my backups to find them first!

  3. hi
    i like your great work. i would like to make a similar project like yours for my kids, but i'm not good at coding. can you perhaps post your code, that would be very sincer from you.

  4. I lost my code! Let this be a lesson to all to back up your arduino code immediately after writing it!!!