(you can skip the part between /* and */ if you want to go straight to the point)
/*
I've been designing microtonal instruments for a year now, not professionally, but obsessively (i think music really needs to go beyond 12 tones per octave, and I really need instruments to play with!). I'm enjoying a lot my last design, which is quite much like a Kelstone:
(BTW, I swear I found out about the Kelstone after I finished my design!)
Main difference is, mine is fretless, with a glass fingerboard. It sounds really cool, but I was thinking about unusual methods of amplification. So the thought came to my mind, instead of amplyfing the pickup sound, perhaps I could amplify the mechanical impact on the string.
By having a 1 cm wide glass sheet under each string, both of its extremes resting on piezo sensors, I should be able to measure the impact on any part of the glass. Then use an Arduino to translate that signal into something to drive the solenoid to hit the string at the proper velocity.
*/
So basically it's about measuring impact on piezos -> reading from the Arduino -> driving 12 independent solenoids to hit each string. How feasible is that? How should I control the velocity? If with PWM, do I need some sort of PWM shield or multiplexer? Which kind of solenoids should I use? are 12V solenoids enough to get a loud strike?
Thanks! If I ever get it done I promise you a blog so others can repeat and improve the design.
... instead of amplyfing the pickup sound, perhaps I could amplify the mechanical impact on the string. <...> By having a 1 cm wide glass sheet under each string, both of its extremes resting on piezo sensors, I should be able to measure the impact on any part of the glass. Then use an Arduino to translate that signal into something to drive the solenoid to hit the string at the proper velocity.
So is the glass-on-piezo in contact with the strings at all times? Would this not act as a 'bridge' to de-tune the instrument?
Second, the Arduino can use an analog input to process the piezo output (after some amplification, likely) but I am having a difficult time trying to figure out what caused the piezo to activate if not the solenoid? Perhaps you plucked the string first?
So basically it's about measuring impact on piezos -> reading from the Arduino -> driving 12 independent solenoids to hit each string. How feasible is that?
I think some boning up on Nyquist frequency is in order since that reading will likely answer your question: "The Nyquist frequency is the bandwidth of a sampled signal, and is equal to half the sampling frequency of that signal." Many fine articles on the web. My UNO @ 16MHz can process FFT for 2 channels from around 300Hz to over 3kHz but anything over that would require significant investment in optimizing what is already an optimized algorithm. I personally do not think an 8-bit 328 would ever be able to handle a wide dynamic range and 12 indepent channels, too. I may take 1 uC per solenoid and even that may fail depending on the upper end of the frequency being examined.
So is the glass-on-piezo in contact with the strings at all times? Would this not act as a 'bridge' to de-tune the instrument?
Second, the Arduino can use an analog input to process the piezo output (after some amplification, likely) but I am having a difficult time trying to figure out what caused the piezo to activate if not the solenoid? Perhaps you plucked the string first?
The strings are in contact with the glass only when you hammer them against it, like in any other tapping style of playing. The bridge is at the other side of the strings and is stable. The nut would be your hammering finger.
When you hammer a string against the glass, because the glass is resting on two piezo sensors, they should receive the impact. It'd be something like this:
------------------------------------- ->String
------------------------------------- -> Glass fingerboard
0 0 -> piezos
Of course, they would also act as a contact microphone, picking up the vibration of the string, but i guess that would be marginal compared to your finger hitting the glass. I mean, i've used piezos to amplify guitars, and no string plucking was as loud as striking the piezo itself, so I'm wishfully thinking we wouldn't have a feedback problem as in -> you hammer the string, hitting the glass -> arduino reads the piezo -> solenoid hits the string at proper velocity-> piezo reads the vibration of the string as hit by the solenoid -> eternal loop. Or maybe that happens a bit but it's easy to overcome using a threshold or filter.
OK,
I understand the mechanics. There is still the issue of the 8-bit uC bandwidth, so I'm going to buttout and maybe some of the 32-bit experts will provide input on products such as Due.
Thanks anyway Ray!
I forgot the second part of your comment but I'll google about that.
However, I was thinking maybe placing a digital pot in front of each solenoid makes it much easier, so I can use it as a voltage divider deciding how many volts will push the solenoid against the string. That'd be much easier than PWM for instance, but I don't know if it would behave as desired. I'll order some digital pots and I'll give it a try.
Before anyone warns me, I know I'll have to protect the arduino with a diode so the solenoid doesn't create a "backwards voltage" as it falls back
Also another question: how fast is it to switch pinmode between analogRead and analogWrite? Maybe I can use the same pins to read the piezos and send the signal (later amplified) to the solenoid.
Since I'm just a noob and these are my first steps in electronics (loving it, though) I don't know if any of the two above would solve the problem Mrburnette posed, if it could do the job of pwming 12 independent solenoids, sometimes making a few of them strike simultaneously, I mean simultaneously at least to the human eye. Of course, in any case, amplifying the signal with a transistor for each one.
Also I've been googling to see if anyone had used the digital pot approach I mentioned earlier, changing the current or voltage to the solenoid as velocity control, but I'm really surprised that I couldn't find anything similar. I mean, it's apparently the easiest way. Apparently.