Topically, Thor is a drum-trigger controlled RGB LED driver that makes my 8pc double-bass drum kit light up while being played. I hate the way many similar projects allow the ambient vibrations of the drum kit and room to set off the LEDs at a near-constant dim flickering when they are not being actively hit, so Thor uses software-configurable threshold levels to allow an individualized response for each drum.
This is actually a surprisingly simple circuit; An Arduino Nano reads from 8 analog inputs, each composed of a piezo trigger, zener diode and 1M resistor. Then, assuming the velocity of the drum being hit is enough to cross the software-defined threshold level (configurable on the control console side), the Nano uses a 74HC595 shift register via SPI (to handle RGB LED color mixing) to fade in/out the channel's drum-side strip of RGB LEDs in the color most recently defined by the control console. Each "channel" is directed out over a CAT-5 cable with 2 wires for current and single wires for 12v+, 5v+, 3 for SPI and 1 for the piezo's return.
In a nutshell:
- Arduino boots and waits for handshake from control console (CC).
- CC sets the piezo trigger threshold values and LED color for each channel.
- Arduino awaits input from the piezo triggers. If the value returned by the trigger is greater than the defined threshold for that channel, the Arduino then uses ShiftPWM to mix the proper color and drive the TIP120 transistors attached sequentially to each of the 74HC595's outputs.
- Said transistors output directly to the channel's RJ45 port, which transports everything to the trigger/LEDs drum-side.
Does it work?