Welcome to Synthiam!

The easiest way to program the most powerful robots. Use technologies by leading industry experts. ARC is a free-to-use robot programming software that makes servo automation, computer vision, autonomous navigation, and artificial intelligence easy.

Get Started
Saudi Arabia
Asked — Edited

Sound Detection & 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.


Upgrade to ARC Pro

Your robot can be more than a simple automated machine with the power of ARC Pro!

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.

Saudi Arabia
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 ;)
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.