Primo - Piano Glove
My piano has been collecting dust... I bought it and never put much effort into learning it the original way. So I decided to put together an app with falling notes, with a glove that guides you in playing. Well, the problem with that is I never touched a piece of hardware 😭😭😭 I had a lot of self doubt but it turned out to work just as expected thanks to the help and guidance of many clever people I met during this hackathon 😁 I decided to try this hackathon solo, but it was definitely not possible without them.
What it does
Primo is a piano teacher you wear, with an LED strip that sits above the keys and lights the note to play in green, with the next note glowing dim blue. A glove taps the finger you should use with a small vibration motor. The piano itself is the judge: the system listens over MIDI and only advances when you press the right key. Wrong notes flash red where you pressed. The glove runs wireless on a battery, and finishing a piece earns you a comet sweep across the strip.
How I built it
With two microcontrollers and a laptop. An ESP32-S3 renders frames on a 144 LED strip using a tiny text protocol over USB, so you can debug it by literally typing commands into a serial monitor. A XIAO ESP32-C3 on the glove takes 5 byte Bluetooth packets, one intensity per finger, and drives coin vibration motors through a MOSFET channel I built on a breadboard: gate resistor, pull down, flyback diode, motor. A Python engine on the laptop runs the practice logic, a two anchor calibration wizard maps notes to LEDs, and a typing simulator stands in when there is no keyboard. The firmware never trusts the host: motor power is capped at 70 percent duty in hardware code, and a 500 millisecond watchdog shuts everything off if commands stop arriving.
Challenges I ran into
- My first ever solder bridge, right across the power pins. I learned what solder wick is at 11 pm. The soldering iron slipped and knocked a tiny component clean off the main board. The board survived. - I aged five years. The battery sparked during soldering and went silent. It turned out its protection circuit had tripped exactly like it was designed to, and it woke up again after a minute on the charger. The amount of soldering smoke didn't help either 😂
- A long fake emergency where the battery read 1.5 volts, caused entirely by the multimeter's HOLD button being on.
- The motor turned itself on with no command. That is how I learned MOSFETs contain a hidden body diode, and that swapping source and drain makes it conduct forever.
- The breakout boards printed pin numbers that do not match their physical order, so I identified pins electrically instead of trusting the silkscreen.
- A USB hub that quietly dropped our MIDI keyboard mid session, and Windows Bluetooth creating phantom serial ports that froze our device discovery. I patched the code live to skip them and to reconnect instead of crashing.
Accomplishments that I am proud of
- Every safety gate got measured before power touched anything fragile: adapter polarity with a multimeter, diode direction on every channel, and the big one, proving the motor sees about 3.0 volts at full command instead of the battery's 4.2. I recorded a working demo at every tier before building the next: guided scale with LEDs, then a thumb that buzzes in sync with the engine, then the whole loop wireless on battery power. And the channel design is honest engineering: one fingertip works end to end, and the other four are copies, not new problems.
What I learned
Measure instead of assume. Wire colors lie, printed pin numbers lie, and frozen multimeter displays lie, but a continuity beep never does. Keep one bare wire in play at a time. Heat shrink goes on before you solder, always, no exceptions, I forgot twice. And some failures are actually the system working: a watchdog killing your motor after half a second is not a bug, it is the reason this thing is safe to wear.
What's next for Primo - The Piano Glove
Four more fingers, since the parts are on the table and each channel is a copy of the first. A sewn version with a proper little circuit board instead of a breadboard on the forearm. The engine already renders black keys in a darker green and mirrors sessions to a web UI on your phone, so friends can watch your accuracy live. After that: camera based finger recognition to replace hardcoded fingering, and support for both hands on a full 88 key piano. 😁
Built With
- cpp
- esp32-c3
- esp32-s3
- lungs
- python
Log in or sign up for Devpost to join the conversation.