Converting Piano Toy to MIDI Keyboard.

Dependencies:   mbed mbed-STM32F103C8T6 USBDevice_STM32F103

How to turn kids' old piano toy to a MIDI keyboard

Inspired by http://www.codetinkerhack.com/2012/11/how-to-turn-piano-toy-into-midi.html I did the same with a Blue Pill module using Mbed.

The old toy was capable to play only one tone at a time:
Zoom in
https://os.mbed.com/media/uploads/hudakz/minikeyboardtoy01.jpg



A bit of reverse-engineering was needed to re-use the original printed boards. The results are below.

Original PCBs with switches traced to the connector pins:

Zoom in
https://os.mbed.com/media/uploads/hudakz/keys.jpg Zoom in
https://os.mbed.com/media/uploads/hudakz/buttons.jpg

Schematic:

Zoom in
https://os.mbed.com/media/uploads/hudakz/schematic.png

Wiring:

https://os.mbed.com/media/uploads/hudakz/wiring.png



Then I replaced the original chip with a Blue Pill module and added a USB connector:
Zoom in
https://os.mbed.com/media/uploads/hudakz/minikeyboardtoy02.jpg

Works great when connected over an USB cable to a Linux Ubuntu 18.04 machine

Installed software:

  • Yoshimi: An excellent MIDI software synthesizer for Linux.
    Zoom in
    https://os.mbed.com/media/uploads/hudakz/yoshimi.png
  • Patchage: Provides a graphical interface to connect jack and midi inputs and outputs.
    Zoom in
    https://os.mbed.com/media/uploads/hudakz/patchage.png

How to use it:

  • Connect the Keyboard to the PC over an USB cable.
  • Run Yoshimi.
  • Run Patchage and connect the Mbed USB Audio MIDI 1 output to Yoshimi's input (drag Mbed Audio MIDI 1 over yoshimi input and drop)

https://os.mbed.com/media/uploads/hudakz/connection.png

  • To apply the changes close the Patchage!
  • On Yoshimi's toolbar click on Instruments and select Show Stored ...
  • Select a bank and click on the instrument you'd like to play.
    https://os.mbed.com/media/uploads/hudakz/instruments.png

Have fun :-)

Revision:
0:75d307e38488
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MidiKey.h	Wed Apr 08 17:47:23 2020 +0000
@@ -0,0 +1,23 @@
+#ifndef MIDIKEY_H
+#define MIDIKEY_H
+
+#include "mbed.h"
+#include "USBMIDI.h"
+
+class MidiKey
+{
+public:
+    MidiKey(USBMIDI& midi, uint8_t note, DigitalInOut& row, DigitalIn& col) :
+        _midi(midi), _note(note), _row(row), _col(col), _position(0), _lastPos(0) {}
+    virtual ~MidiKey() {}
+    void scan();
+private:
+    USBMIDI&        _midi;
+    uint8_t         _note;
+    DigitalInOut&   _row;
+    DigitalIn&      _col;
+    uint8_t         _position;
+    uint8_t         _lastPos;
+};
+
+#endif // MIDIKEY_H