Convert a toy piano to work as a midi device and use it with Synthesia

Picture of Convert a toy piano to work as a midi device and use it with Synthesia
Goal of this project:
Convert a cheap toy piano to work as a midi device and use it with Synthesia (
Other programs that use midi inputs can also be used.

The pushbuttons of the piano are used to make a simple pull-down circuit for the arduino mega. The arduino interprets the keystrokes and sends serial midi data to the pc. Then this data is send to a virtual midi port with "serial-midi converter". This midi port is connected to Synthesia via "MIDI Yoke". MIDI Yoke is a driver that creates virtual ports. Each port has an input and an output which are connected. With MIDI Yoke you can couple different midi programs without any physical hardware.

Remove these adsRemove these ads by Signing Up

Step 1: Parts and tools

Picture of Parts and tools
List of the parts needed for this project:

- Toy piano
- Arduino mega (This project van also be done with an arduino uno but you should use an line decoder to expand your arduinos inputs.)
- Flat ribbon cable (from old pc)
- Connectors (1 for piano and 1 for arduino)

List of tools needed: 

- Soldering iron
- Desoldering pump or wick
- Ohmmeter
- Hot glue or any other strong glue

Step 2: Hardware

The pushbuttons of the piano keys are used to make simple pull down circuits. The internal pull-up resistors in the atmega IC are used so we don't need extra external pull-up resistors. 

- Open the toy piano and locate the pushbuttons corresponding to the piano keys.
- Check if all the buttons have a common line. This is the ground line.
- Locate and remove the main IC. Solder wires to all leads going to the buttons including the ground wire.
- Check you didn't make any shorts while soldering. (ohmmeter)
- Solder the other ends to the connector for the flat ribbon cable.
- Make a cutout in the housing of the piano for the connector.
- Reassemble the piano.
Girts1 year ago
So,as I understand,i can use this not only for toy piano,but for whatever buttons I want,right?The red wire whitch isn't connected to the flat ribbon cable is the +9V Lead?
Thank You.
Luke7412 (author)  Girts1 year ago
You can use this for whatever buttons you want. I've seen a simular project where they used pieze sensors to monitor the strokes on a xylophone and convert these to midi.
The red wire is connected to ground. This is because i used the internal pull up resistors of the arduino. If you press a button, you will pull the voltage to ground. (Inverse logic: button pressed is LOW, button released is HIGH).
danjovic1 year ago
You can do this also with a Standard Arduino (UNO, Diecimila, etc) and a bunch of shift registers.
Luke7412 (author)  danjovic1 year ago
It should be possible. You will have to use extra hardware because these standard arduinos don't have a lot of I/O ports. The most obvious thing to do, would be to use a IO port expander ( There also exist keypad encoders like the EDE 1188 ( but I am not  sure you could use them for this application.