Saudi Arabia
Asked — Edited

Sound Detection &Amp; Feedback

I'm looking for a way (shield) to track sounds at any spot around, like when I try to talk then it will identify the source (direction) of my sound. in other word, robot's head/eyes can follow people while they're talking to each other.


ARC Pro

Upgrade to ARC Pro

ARC Pro is your passport to a world of endless possibilities in robot programming, waiting for you to explore.

#1  

There is a stereo sound option that makes the robot look in the direction of a loud noise. If you want more precise sound direction detection you need modules made for that and use a few ports to determine general direction of a speaking person. Here is a module I bought. But you will need at least three to really do what you want and some programming ofcourse which is a new frontier for me. User-inserted image

These will each use one adc port on your ezb and you need three. One pointing slightly to the right one slightly to the left of robots view and one front and center. Your going to need to insert code that compares the three values of the sensors and if right or left is significantly louder (which will take adjustments of the values that indicate that im sure) the head servo will turn to the pre designated position for that side.

http://www.ebay.com/itm/Sound-Sensor-Module-for-Arduino-Sensor-Shield-PIC-MCU-/150917251621?pt=LH_DefaultDomain_0&hash=item23235e8225

Saudi Arabia
#2  

Yes ! .. this is what I'm looking for.

ARC has some straight commands like :

If ( GetADC ( [Port] ) [Condition] [Value] )

but once the servo will have relative angles (depends on the value of each sensor) then I need to do some mathmatical comparison between these values to get the most effective (non fixed) angle which is "I think" not practical in ARC unless someone has tried it before, ummm something like long cascaded IF statements :

If (GetADC(ADC1) condition value1)   # IF TRUE
If (GetADC(ADC2) condition value1)   # THEN IF TRUE
If (GetADC(ADC3) condition value1)   # THEN IF TRUE
Servo (servoPort, position1)         # THEN MOVE SERVO
..
..
..
If (GetADC(ADC1) condition value2)
If (GetADC(ADC2) condition value2)
If (GetADC(ADC3) condition value2)
Servo (servoPort, position2)
..
..
..

it will work in EZ-SDK for sure, so I'm going to figure this out after getting these modules.

Thanks for the help ;)

#3  

Your welcome. Try to keep it simple at first. Simple is better. Like make servo right or left movement a designated amount say 30 degrees. I would love to borrow your code if you make it work.