Velocity-sensitive, contactless MIDI keyboard with polyphonic aftertouch for Teensy synth


Well-known member
Since there are so many synth projects on this forum, yet just a few talk about controllers for synths, I would like to introduce you to one of the projects I've been working on for some time... and I'm trying to motivate myself to finish it.

From the old times I got a musical keyboard made on an injection molding machine


The problem with it was that it only had mechanical contacts and only one contact per key, which provided only on/off readings, meaning without dynamics. Such an "organ" keyboard.
Besides, the contacts corroded over time and despite implementing various bounce-filtering algorithms, it wasn't possible to achieve adequate reliability during playing.

So, I thought about a modernization aimed at two things:
- Reliable key press detection
- Reading the velocity (force) of the key press.

The classic approach used in all keyboards produced by renowned manufacturers (Fatar - keyboards in most synthesizers from various companies, or Yamaha and Roland's own solutions) is membrane (rubber) switches with two switches per key. The velocity is calculated by measuring the time between the first and second row of switches making contact.

This is still a mechanical solution.

However, I thought that I am not limited by "standard" solutions and can do anything.

I was most interested in eliminating mechanical contacts, which are unreliable and characterized by noise (interference) during on/off switching.

At first, I thought about an optical solution (with optocouplers), but I quickly gave up.

Then I thought about using analog Hall sensors.

For those less familiar with electronics - an analog Hall sensor is an electronic component that converts the intensity of a magnetic field into voltage. When a magnet is placed near the Hall sensor, the voltage at the Hall sensor's output will change depending on the position of the magnet.

By using Hall sensors under each key, I could not only read the velocity between two fixed points but also across the entire length of the key's movement and also sense the position after pressing. Since the keys rest on a felt pad, the position measurement after pressing the key will correspond to the pressure on the key after pressing (aftertouch).

In this way, I simultaneously have both velocity sensitivity and polyphonic aftertouch.

It should be noted that polyphonic aftertouch is very rare in synthesizers due to cost.
Typically, synthesizers have only one sensor (force-sensitive resistor) for the entire keyboard, and thus aftertouch is mono.
One of the few synthesizers that had polyphonic aftertouch was the Yamaha CS-80 - Vangelis's favorite instrument, and thanks to the exceptional expressiveness of the keyboard with polyphonic aftertouch, the amazing soundtrack for [Blade Runner]( was created.

In my solution, each key is read individually in full analog, which allows for the implementation of polyphonic aftertouch.

Conceptually, the matter is quite simple. Under each key, there is a neodymium magnet, which, when pressing the key, moves closer to the Hall sensor


The Hall sensors are connected to a 16x1 analog multiplexer (HC4067 chip).
Since my keyboard has 4 octaves, I need 4x12 sensors = 48, so 3 boards with multiplexers. The output of the 3 multiplexers will be connected to the analog inputs of the Teensy, which will handle the A/D conversion and will implement MIDI over USB.

This is how the keys with attached magnets and Hall sensors with the analog multiplexer look like



The schematic of one multiplexer board:


What is shown in the photos is done already.
I just need to connect all of this to the Teensy and program it.

I hope that sharing this project with you will motivate me to finish it soon :)

Stay tuned.