Hello everyone
I need to make a circuit which would read out frequency of the microphone input as simply as possible, and print it in monitor in any shape or form (as long as it can distinguish 2 different pure tones apart) so i was wondering if it was possible to do it without an amplifier?
Would merely connecting a microphone to a battery and read out the value like it is a potentiometer be enough, or would the difference be too weak? (I am planning on using an ordinary computer microphone, connected with audio jack)
End goal is to make a simple robot arm which would be controlled remotely by harmonica tones.
Thanks in advance
You'll probably need a preamp in any case. And, you need to bias the Arduino input in order to read the negative half of the waveform.
I'd recommend a [u]microphone board[/u] which will have a preamp with a biased output. And, I'd recommend one with a gain adjustment pot.
Also, make sure to get a mic with board analog-audio out. There are "sound sensor" boards that put-out a digital high when the signal (amplitude) is above a threshold and there are boards that put out a varying DC voltage proportional to the loudness/amplitude (loosing any frequency information).
Would merely connecting a microphone to a battery
Only condenser mics need power. Most computer mics are electret condensers and the soundcard provides 5V. If you're connecting to an Arduino the Arduino can provide power so you shouldn't need a (separate) battery. (The power will create a DC bias, which is not real precise, and is generally filtered-out and then the "real" bias is supplied from the preamp.)
On the software side you can use FFT (DFT or HFT) for frequency detection (there are libraries) or you can use something called autocorrelation. Frequency detection can be tricky and all real-world sounds contain harmonics & overtones so this may, or may not, work.
DVDdoug:
On the software side you can use FFT (DFT or HFT) for frequency detection (there are libraries) or you can use something called autocorrelation. Frequency detection can be tricky and all real-world sounds contain harmonics & overtones so this may, or may not, work.
Autocorrelation is generally a better approach for detecting frequencies with harmonic overtones compared to FFT approaches.
In my experience electret microphones with the max9814 (40-60 dB gain) work best for Arduino frequency detection applications. The various "20 dB gain" boards aren't sensitive enough to work well with anything but loud sounds.