Sound Localization

I need to determine if a sound comes from within a relatively large trapezoidal area (~15yds on longest side). The exact location of the sound is not necessarily important. If the sound comes from within the area, a switch(relay?) needs to be triggered.

Would it be feasible to use my Arduino Mega 2560 and 4 microphones at each corner to make this determination? How would you suggest I accomplish this?

if you can try, try this

then, if it works, you can add filters to filter out some uninteresting frequencies (like birds)
cheers

I woudl start with two mics, one on each side,

and try to get a reading from each one, if you can get an anaolge read to work on the mic, ( i dont know, but i guess you can) then you can store the two analogue reads in variables, then with an if statement you can control the output, for example,

int mic1 =0;
int micpin1=xxxxx;
int mic2 =0;
int micpin2=xxxxx;

mic1=analogRead(micpin1);
mic2=analogRead(micpin2);

if(mic1<mic2)
digitalWrite(relay2,HIGH);

Im a bit of a noob, but thats how i would start, the first step is obviously printing some meaningful number to serial after reading just one mic,

Since you said you got 4 microphones, you could try to focus them using "umbrellas" and point some of them to the "target yard" and focus some of them "not in the targeted yard". Then you could read an analog input (but i think a small preamp will be required), and compare the noise levels as stated in the post above...
I'm not quite an expert of acoustics, so i'd suggest you ask someone who is....

How often does the sound repeat?. Do you know its volume?

The WW1 trick used just 2 mic's. But they where diricional and could be moved.

Mark

Like this.(see attached)

The sound would be a human voice, a fairly loud call (single word, such as "pull"). I am thinking along the lines of a voice release system for trapshooting.

I am thinking somehow detect the spike at each microphone(FFT maybe?), then compare the time of arrival at each mic, decide whether the sound came from between the mics, then trigger the relay if true.

There needs to be ~167ms delay between the call and the relay being triggered, so there should be plenty of time to perform calculations.

text3030-8.gif

reed92:
Like this.(see attached)

The sound would be a human voice, a fairly loud call (single word, such as "pull"). I am thinking along the lines of a voice release system for trapshooting.

I am thinking somehow detect the spike at each microphone(FFT maybe?), then compare the time of arrival at each mic, decide whether the sound came from between the mics, then trigger the relay if true.

There needs to be ~167ms delay between the call and the relay being triggered, so there should be plenty of time to perform calculations.

this concept would work, but in case of more serious analysis you would need an external reference...If you want something more serious and somewhat noise tolerant, you would need to have mics outside your area, and in your area.
Imagine fireworks, where sound comes from above. In that case you need to know if the sound is in the targeted area, and outside that area... And if you have same noise outside and inside the area, the RELAY will stay off... Where in your case the same example would cause your RELAY to go on...
cheers hope i helped ]:smiley:

I am thinking somehow detect the spike at each microphone(FFT maybe?), then compare the time of arrival at each mic, decide whether the sound came from between the mics, then trigger the relay if true.

Have you determined how fast sound travels the length of your field? At 1100 feet per second, the sound would travel the length of your field (45 feet) in 40 milliseconds. That doesn't give you much latitude in determining where in the middle the sound is coming from.

PaulS:

I am thinking somehow detect the spike at each microphone(FFT maybe?), then compare the time of arrival at each mic, decide whether the sound came from between the mics, then trigger the relay if true.

Have you determined how fast sound travels the length of your field? At 1100 feet per second, the sound would travel the length of your field (45 feet) in 40 milliseconds. That doesn't give you much latitude in determining where in the middle the sound is coming from.

exactly

Yes, I am aware of the speed of sound. If the person is close to one mic and it takes ~40ms for the sound to reach the farthest mic, that still leaves the arduino 120-130ms to make the calculations. Sounds like a lot of time to me.

that still leaves the arduino 120-130ms to make the calculations. Sounds like a lot of time to me.

It is. The problem is that you seem to need to know where in the field the sound is coming from, not just that there is some sound, somewhere. The greatest time difference is if the voice is at one corner of the field and the microphone is at the opposite corner.

If there are multiple microphones, and the sound is coming from the center of the area, the time it takes to reach each microphone will be very close to equal, making it hard to get any distinction between the 4 inputs.

Add to that that it takes time to read sound levels, and by the time you've read all 4, the sound may have ended, and you might still not have good data.