loading

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

Featured
Picture of Convert a toy piano to work as a midi device and use it with Synthesia
Dataflow.jpg
Goal of this project:
Convert a cheap toy piano to work as a midi device and use it with Synthesia (http://www.synthesiagame.com/)
Other programs that use midi inputs can also be used.

Approach:
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.


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
 
nsljivic10 months ago

Any way to run MIDI Yoke on Windows 8+ ?

Luke7412 (author)  nsljivic10 months ago

I still use windows 7 and i hadn't any problems. On the midi OX forums they suggest to install midi yoke with "Windows User Account Control" turned off.

http://www.midiox.com/cgi-bin/yabb/YaBB.pl?board=MYInstall;action=display;num=1374889053

P.S. Don't forget to turn "Windows User Account Control" back on after the installation has completed.

The forum contains a lot of other helpful information concerning Midi yoke installation. http://www.midiox.com/cgi-bin/yabb/YaBB.pl?board=MYInstall

I hope this is useful.

nsljivic Luke741210 months ago

I havent seen your reply :D but i ran it with troubleshoot compatibility, used Test program, and installed it smoothly.. Tnx.
But i still have some trouble. I use Arduino Uno, (0-13 + GND) and an piano keyboard with 47 keys, and 15 pins input/output. I did every step, but SM's TX and RX flashes just once red, and nothing happens even when i press keys.. Maybe i should change the code in arduino? any hints? :D

Luke7412 (author)  nsljivic10 months ago

My arduino code is used on an arduino mega so it won't work on arduino uno. But the general structure is there. You should make a for loop over all digital input pins, read every pin and compare it to its previous state (stored in prevPinState). if there is a change: send a midi command. You also have to choose another "offset". this is used to convert the pin index to the corresponding midi key note number. (see http://newt.phys.unsw.edu.au/jw/notes.html)

Also make sure the indexes of "prevPinState" are correct.

FueGoDj1 year ago

CAN U POST MORE PICS FOR THE CONNECTIONS OF THE CONNECTORS

Girts2 years 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)  Girts2 years 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).
danjovic2 years ago
Nice.
You can do this also with a Standard Arduino (UNO, Diecimila, etc) and a bunch of shift registers.
Luke7412 (author)  danjovic2 years 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 (http://www.maximintegrated.com/products/interface/io_expanders.cfm). There also exist keypad encoders like the EDE 1188 (http://singlechips.com/pdf/ede1188.pdf) but I am not  sure you could use them for this application.