Hydrophone AUV

I'm in an electrical engineering course, and a month into the project, I've realized how far over my head I am. Basically what I intend to do is create an autonomous bot that can navigate a tank of water by responding to sounds. If I pound on the side the tank, the hydrophones should pick up where the sound is coming from and drive to its source. I have 4 hydrophones and 4 amplifiers as well as motor controllers and arduinos, but I don't know anything about coding.
Does anyone want to help me get started?

What is your submersible. Home brew or a toy or something else you purchased. Links? Pix?

These might help you on your quest of the deep
Probably not :wink:
I would like to do a project like this someday.
But this is a cool ROV though.
it is AVR project, but probably portable to the arduino
Uses PWM pins to control, serial interface to surface by cable.


actually, I've got the structural aspect of it fairly finalized.
here is a screen grab of my Solid Works mockup:

the hydrophones will be placed an equal distance away from one another on the sides of the craft, but due to a variety of design issues, I may be switching to a side by side dual-cylinder design instead.
i appreciate the replies. hope this helps.

What type of motor and controllers and voltage?
How many?
You probably need logic level FETs for other electronic than the motors.
Use either 4 analog inputs or digital, makes more sense with analog to adjust threshold for sound, the sound output must be converted to 0-1.1V or 0-3.3V or 0-5V to be able to use analog input.
It is hard to write software if you haven't complete picture of what hardware, I am not going to write your software, but can give you tips.


i am using 4 "Rule 24 Marine 360 12-Volt Bilge Pumps" as motors,and each side of the craft will be controlled by a L298 motor controller. my power source is a Tenergy Li-Ion 18650 Pack 11.1V 2200mAh.

Assuming the amplifiers give you 0-5V signals:
read the analogpins one by one
if the signal gets past a threshold value, put it in a temporary int variable.
after the reading you triangulate the values and put in a variable, perhaps int or float with the heading 0-360 degrees and perhaps vertical heading float of 0-360 degrees probably easier to use radians but that is a minor technicality :wink:
You reset the temorary variables for the analog inputs.
Now comes the dilemma:
How do we know how long we power the motors towards this direction?
Do you have some sensors for heading?
Gyros? GPS?
if this is just a dumb reaction you can power the motors for the time you THINK it will take to do so many degrees left/right, up/down.
and wait for the sound to come again.
Sounds should be read even though the ROV is making a turn and heading parameter should be corrected.
If you on the other hand do have some mesurement of heading then it is just a comparison between the heading value ve want to reach and mesured real heading value and power appropiate pumps till the value is reached.


Nice looking ROV. What materials are you using for its construction?

read the analogpins one by one
if the signal gets past a threshold value, put it in a temporary int variable.
after the reading you triangulate the values and put in a variable,

That will not work, you need to measure the difference in the time of arrival of the sound. Assuming it is any sound then you need to take a number of reading into an array and then analyse it for any phase shift. That will give you the angle of the sound.

I didn't know that the arduino could take simultanius readings of all the pins :o

@Grumpy_Mike /// that is exactly what i am looking to do. from a hardware aspect, i think that i am set, but the software side of it has me feeling very overwhelmed. any help that you or ArduinoM can supply would be much appreciated.

@TonyD /// thanks. the primary cylinder in the center is just a simple plastic container that i got at a convince store. the wings, fins, and handles are all laser cut acrylic sheets.

i appreciate the replies.
keep 'em coming.

Just build the hardware, the software bit will be much easier to do then. As all the parameters will be known then, the control bit will be much more logical.


I didn't know that the arduino could take simultanius readings of all the pins

That's why you need to put the readings into an array. When doing the phase shift analysis you need to adjust for the time difference between samples.

@ArduinoM /// that process seems like the logical route, but the way that my class is structured is not catered towards that. i have a pretty lengthy deadline for the final product, but my prototype that displays the crafts primary functions is due in about a week. i was planning on just having a program that lights up LEDs that correspond to the direction of sound that the hydrophone cluster picks up.

Clearly my knowledge of soundprocessing is not that great :slight_smile:

My projects ar all about pumps/motors, temperature sensors and lightdetectors, so those areas I can help mostly with.

But I know this much, the speed of sound in vater is 4.3 times greater than in air, and as such harder to detect phase variations.

Seems to me that I was too late to google up this guy as he seems to have left the school and his private files deleted:

But if you track him down, he might give you his code :slight_smile:
[edit]Might be her :slight_smile: anyways the responsible person for this project is:
Here is a sound triangulating robot project:
Look at the AVR MCU source code, it is not arduino code but VERY similar :slight_smile: