Musical Keyboard - Lots of Buttons, Simultaneous Input

Hi! I'm brand new to this site, and to Arduino. Thank you so much for reading!

I want to create an electronic MIDI keyboard, based on the Janko layout. You can learn about that layout here. Basically, this is what I'm looking to make:

Five rows, five octaves per row is my goal for the time being. That's 5 x 5 x 12 = 300 unique buttons. Ideally I'd be capable of processing at least 10 simultaneous key presses. The keys need to be pressure sensitive. The keyboard does NOT need to produce any of its own sounds.

I have no idea what the feasibility is with Arduino - is this the right platform? I asked a couple people about this and the words "multiplex" and "daisy chain" got thrown around. As I understand it, multiplexing is a problem if I want simultaneous input. What is daisy chaining? Is there another more obvious approach? Am I on the wrong site? I'm pretty green to this world, but excited and driven.

lucasnewman:
I have no idea what the feasibility is with Arduino - is this the right platform? I asked a couple people about this and the words "multiplex" and "daisy chain" got thrown around. As I understand it, multiplexing is a problem if I want simultaneous input. What is daisy chaining? Is there another more obvious approach? Am I on the wrong site? I'm pretty green to this world, but excited and driven.

I suspect 'daisy chain' is used here as synonymous with 'cascade', which in this context means cascading shift registers. The link illustrates output registers but the concept applies to inputs also. Searching 'midi' on this site will yield many results.

p.s. Do read the stickies at the top of every topic. You'll be glad you did.

Also, check out the Audio topic.

The tricky part of this is the velocity sensitivity, or as you call it pressure. Normally this is done with two contacts per switch, using a special switch. Without this requirement your problem is simple and multiplexing will not be a problem, it is fast compared to a human's motion.
You used to be able to get these switches but I have not seen one in 30 years.

LinnStrument is an example of a complex MIDI instrument with open source firmware written for the Arduino Due. Search youtube for a couple of talks Geert Bevin (software engineer) gives about the firmware.

Grumpy_Mike:
The tricky part of this is the velocity sensitivity, or as you call it pressure.

The term "pressure sensitive" might also mean "aftertouch" . This might be channel aftertouch where there is one value for the whole instrument (pressure sensor for the whole keyboard) or polyphonic aftertouch (pressure sensor for each key). Guess which is even more tricky than velocity sensitivity. :slight_smile:
See: Aftertouch | Electronic Music Wiki | Fandom

The pressure sensitivity makes me think pressure sensor and analog input. That in itself makes it more difficult as an ADC is slow compared to a digital input so scanning all those 300 keys may take too long. OTOH solving this would automatically solve "aftertouch" which seems to be basically a pressure sensor.

If double switch for speed detection that'd make for a whole different problem of reading the key press, easier as it's digital, harder as it requires storing the moment the first switch is triggered, and comparing that to the moment the second switch is triggered - maybe just microseconds apart. Won't such keys produce an analog output themselves?

Yes indeed the quote from that site:-

Relatively few synths and controller keyboards implement polyphonic aftertouch because it requires a more expensive mechanism.

Is the key, unless you have a synth capable of doing something with the information then it is a waste of time and money implementing the controller.

Note you will not have to scan all the keys for this information only the keys that have been pressed.

wvmarle - not sure what you mean by the keys producing an analogue output.

Grumpy_Mike:
wvmarle - not sure what you mean by the keys producing an analogue output.

Pressure sensitivity can not be a plain 1/0, on/off kind of signal.

It could be a double signal (based on the speed the key goes down, rather than the actual force that's applied, that needs timing - two switches that get triggered one after the other as the key moves down), it could be a pressure sensor which returns an analog voltage (it sounds like "aftertouch" is doing something like that).

Unless I totally misunderstand how those keys work - and then I'd like to hear OPs comment on their exact working.

Pressure sensitivity can not be a plain 1/0, on/off kind of signal.

Well it can but I see what you mean now, thanks.

If you take what is in effect an after touch reading and apply it to the note velocity in the MIDI note you will get a passable velocity sensitive keyboard. I have done this with a keyboard made out of coins and a capacitave touch sensor. The touch sensor reading is different depending on the area of the contact you are covering with your finger. So a heavy touch spreads out the pads of your finger and gives a different reading to a light touch which you can map into the note's velocity. It is better than nothing.

Given the OP said :-

I'm brand new to this site, and to Arduino.

Then I think this is an overambitious project. Although doable he has a very steep learning curve ahead.