Piezo Midi Marimba

Hey there hackers!
I've been scouring the internet for the right collection of words to help me learn how I can do this project. I'm a beginner, which is why I wanna start this out with, I'm super new to electronics, and arduino.

Anyway, to the project. I need a way to mount a minimum of 72 piezo discs to 6 octaves worth of keys. My immediate impression is that I need at least 72 io on my arduino, which I would need a custom expansion shield for.

Does anyone else have any ideas though? How can I get the velocity sensitive traits of the piezo discs, as well as the 6 octaves worth of keys?
Thanks in advance, and pardon my silliness if I show any,
Tim

Unless you've got an IQ over 160, you may want to learn the basics of hardware and software first.
The ones with the genius+ IQ's do that too. They just don't need to be told.

Learn faster with the Feynman technique.

Ho boy, thank goodness you were here to remind me that I should keep learning, here I was about to quit. But, you did it, you brought me back, with your warm rousing comments on my IQ. No, really, so full of meaning and warmth, you are the reason I will complete my project, because you, your just a plain inspiration GoForSmoke (that name deserves real reward, I mean that is also a very deep and interesting name).

So now that we got the "your an idiot" comment out of the way, I'd love to still hear from the members of this community that actually don't thrive on telling fools to leave how I could complete this task or how I am not going to because it's impossible.
Please and thank you!

It is not impossible, but it is a surprisingly difficult "ask", poorly suited for an array of microprocessors - which is what you would need at minimum. About twelve of them.

An analog approach - or hybrid - will probably be better.

What was pointed out to you was that you need to start by getting a basic Arduino and one piezo disc and after an extensive number of exercises with basic functions - measuring inputs and reporting to the Serial Monitor - you could then figure out how to attach the piezo disc and measure its behaviour, then figure out how to characterise that input.

If you get a satisfactory result from that exercise, you might then expand your prototype to six piezo discs and if that can produce a suitable result, proceed to work out how to add another eleven microcontrollers.

"velocity sensitive" suggests a range of value corresponding to how hard the note was struck, which indicates reading analog levels.
I would suggest the best way to do that is to use multi-channel ADC chips with SPI interface so that the Arduino can very quickly read them.

Marimba have pretty short note-sounding time, and from videos I've seen, no more than 4 notes are struck at a time by a single player, with 2 mallets in each hand.

Say you sampled a pieze every 1mS, then in 72mS you could sample them all. That gives you 1000uS to read a note and compare it to a previous sample to decide if the peak was reached, maybe make a decision on its rate of increase to give an indication of velocity.
That would correlate to a sample rate of 13.89 samples/note/second.

To do that, a bank of fast ADCs would be recommended, such as
http://www.digikey.com/product-detail/en/ADS7952SDBT/296-23503-5-ND/1880861.
This one has 16 inputs, so you'd need 5.
It takes 2 SPI.transfer() to read a conversion. The device can be initialized to automatically cycle thru its channels.
16 MHz Arduino can read from devices at nearly 1byte/uS.
Reading all 16 channels would then take a little over 32uS - reading all 80 channels would take 5x that, so 160uS, or 0.16mS, leaving 0.84mS to do whatever math needs doing to make a decision on notes that are active and then pass that info on, presumably to a MIDI device that would do whatever with it. I would do it using direct port manipulation and inline assembly code:

PORTD = PORTD & 0b11111011; // D2 low for first device
chip1[0] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip1[1] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
:
:
chip1[30] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip1[31] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
PORTD = PORTD | 0b00000100; D2 high for first device

PORTD = PORTD & 0b11110111; // D3 low for first device
chip2[0] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip2[1] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
:
:
chip2[30] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip2[31] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
PORTD = PORTD | 0b00001000; D3 high for first device

PORTD = PORTD & 0b11101111; // D3 low for first device
chip3[0] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip3[1] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
:
:
chip3[30] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip3[31] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
PORTD = PORTD | 0b00010000; D3 high for first device

PORTD = PORTD & 0b11011111; // D3 low for first device
chip4[0] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip4[1] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
:
:
chip4[30] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip4[31] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
PORTD = PORTD | 0b00100000; D3 high for first device

PORTD = PORTD & 0b10111111; // D3 low for first device
chip5[0] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip5[1] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
:
:
chip5[30] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
chip5[31] = spdr; nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
PORTD = PORTD | 0b01000000; D3 high for first device

("spdr" might not be the correct register to read from for an input byte from the MISO pin, but it's something like that).
That leaves an array of 160 bytes, each pair representing the level of one note, ready be processed. And 840uS to decide what to do with the data.
Maybe 8 bits of resolution is all you need, that would shorten the amount of processing needed (byte math vs int math).

I suspect you'd want a little filtering on the piezo output to smooth the AC type signal into more of an envelope to be sampled.

timisaberry:
Ho boy, thank goodness you were here to remind me that I should keep learning, here I was about to quit. But, you did it, you brought me back, with your warm rousing comments on my IQ. No, really, so full of meaning and warmth, you are the reason I will complete my project, because you, your just a plain inspiration GoForSmoke (that name deserves real reward, I mean that is also a very deep and interesting name).

So now that we got the "your an idiot" comment out of the way, I'd love to still hear from the members of this community that actually don't thrive on telling fools to leave how I could complete this task or how I am not going to because it's impossible.
Please and thank you!

Save it for when I ask how to do something equally beyond my current abilities.

Did I comment on your IQ? No. I mentioned what IQ it would take for someone to go from zero to project in a short amount of time. And then I mentioned that that person would still take the learning path to get there. I even provided a link to show it.

I did not say to leave. I did not say that the task is impossible. Where did you get that anyway?

LEARN BASICS FIRST BEFORE TRYING HARDER THINGS. THEN YOU CAN DO THE HARDER THINGS.

But you know what? You've got to find these things out for yourself since you can't take advice as given.
I just tried to save you 2 or 3 years of mistakes or worse. I won't be doing that again soon.

CrossRoads:
Marimba have pretty short note-sounding time, and from videos I've seen, no more than 4 notes are struck at a time by a single player, with 2 mallets in each hand.

Say you sampled a pieze every 1mS, then in 72mS you could sample them all. That gives you 1000uS to read a note and compare it to a previous sample to decide if the peak was reached, maybe make a decision on its rate of increase to give an indication of velocity.
That would correlate to a sample rate of 13.89 samples/note/second.

I've made piezo touch sensors that work off digital pins. The circuit from the piezo loads a wire and how many reads it takes to bring that LOW is the analog of the touch. The read time is generally much faster than analog reads.