Hi I'm wondering if it is possible to use microphones to not only detect a signal, but also determine the direction the sound is coming from (say a clap, knock, etc.) I was thinking about using multiple microphones placed in some shape, equidistant apart around a single point, and then based on the magnitude of the signal received at each microphone, somehow triangulating to find the direction of the source. I feel like it should be somewhat feasible but I can't quite figure it out. Any ideas? Thanks.
Maybe not magnitude, but time of arrival.
It may be possible as this sort of thing was done in WW1 to locate enemy artillery using two or more listing posts. In the 1930's attempts where made to use the same trick for aircraft detection but radar came along (IR was also tried).
You may want to look at how touch screens work as they make use of surface acoustic waves (SAW) tech.
Mark
this sort of thing was done in WW1 to locate enemy artillery using two or more listening posts
... using geophones built from ration crates and a chart recorder which was probably clockwork.
Phase is a key to calculate precise direction.
http://coolarduino.wordpress.com/2012/10/01/sound-localization/
.. using geophones built from ration crates and a chart recorder which was probably clockwork.
And bits of string as I recall.
A maybe useful wiki article,
Mark
Sergey_Page:
I feel like it should be somewhat feasible but I can't quite figure it out. Any ideas? Thanks.
It sounds feasible in theory, but you would need to calculate the magnitude of the time difference you need to measure in order to know whether it was something an Arduino could achieve in practice. To calculate it, you'd need to know the distances between the sound source and the two sound receivers and do a speed-of-sound calculation to see what sort of time difference you're trying to measure. The bigger the time difference, obviously, the easier it is to measure. In other words if your two receivers are twenty meters apart that will be easier to get working than if they were twenty millimeters apart.
The basic numbers look ok. Speed of sound = 340 m/s or 0.34 m/ milli sec and of course we have microseconds available on the arduinos.
Mark
Kind of like a boomerang?
Ben Heck did something like this for his robotic luggage episode. He had a very specific sound though, he used the transmitter from an ultrasonic sensor pair, and a pair of receivers to pick up the sound.
http://www.mimio.com/en-NA/Products/MimioTeach-Interactive-Whiteboard.aspx
The pen makes a buzzing noise when pressed (each pen/eraser has a specific buzz frequency) and the Mimio is able to track it using two microphones on the ends of the bar.
Their first version was sold ~1999 so you can be sure the electronics weren't that fancy.
I was using a sonic x-y digitiser (about 40cm square) on a PDP-8 a good 20 years earlier - you can be certain neither the electronics nor the software were sophisticated ![]()
AWOL:
I was using a sonic x-y digitiser (about 40cm square) on a PDP-8 a good 20 years earlier - you can be certain neither the electronics nor the software were sophisticated
With this and Mimeo mentioned earlier, they would likely have used discrete analog
and digital chips, rather than a microprocessor, and those would have been plenty
fast enough for sound processing. No s.w. involved. The Arduino can't do A/D
conversions fast enough for this app. You need some sort of external analog
preprocessing and envelope or threshold detectors. Then, measure time
differences with the Arduino.
PDP-8's are pre microchip, they had real core memory, the CPU was the size suitcase, the word size was 12 bits and with 8k of memory the whole thing stood 6ft tall. They where great fun.
oric_dan - the uno can do 79k conversion/sec in 8 bit mode which is more than fast enough for this ap but why do you think you need an adc? That's far from the best way! Think about it, draw out the waveforms. Answer on Sunday as I'm off to tankfest.
Mark
holmes4:
PDP-8's are pre microchip, they had real core memory, the CPU was the size suitcase, the word size was 12 bits and with 8k of memory the whole thing stood 6ft tall. They where great fun.oric_dan - the uno can do 79k conversion/sec in 8 bit mode which is more than fast enough for this ap but why do you think you need an adc? That's far from the best way! Think about it, draw out the waveforms. Answer on Sunday as I'm off to tankfest.
Mark
Aha, the d/s says this: "Up to 76.9kSPS (Up to 15kSPS at Maximum Resolution)", so I suspect the
Arduino is actually closer to the 15kSPS value, unless you write special code, plus you would have
to sample 2 separate ADC channels at least.
You might indicate what is the "best way". Any way you go, I think it will require some external
analog processing, filtering, and maybe thresholding.
they had real core memory
4096 12-bit words.
Happy days.