Submersible ROV Project Help

Hello.

I'll start by saying I am new to Arduino, and have minimal electronics experience.

I have been building an ROV on and off for the last couple of years. The main hurdles I am running into are the control boards and the tether. As I said, I don't have much electronics experience, so I never liked the idea or had the energy to build my own control boards especially since I didn't really know what I was doing. Well, the Arduino changes all of that, it eliminates the need to design/build my own controller and to me it seems like an excellent platform for this kind of a project and for learning. I have many questions regarding the Arduino's actual capabilities but it mostly breaks down to the number of inputs and outputs I need and then how to get sensor information back to the surface.

To best explain the issues I am thinking about, I will first list the intended specs of the ROV:

Control Boards:
-TX Arduino Uno (surface, interfaces with PC or PS2 controller)
-RX Arduino Mega (ROV)

Tether
-150' to 300' of Cat5/Cat5e

Power Supply:

-2 onboard (ROV) 12v lead acid batteries, typically found in alarm systems

Sensors:
-Barometric Pressure Sensor (needs 2x analog in)
-Compass module (needs 2x analog in)
-RCA Camera Module (needs it's own twisted pair over the cat5)

Actuators:
-4 Thrusters, 2 for up/down/roll, 2 for fwd/rev/left/right (for now I want to stay away from proportional/speed control of the thrusters as there seem to be only dual motor shields or breakout boards out there)
-4 Lights
-The Arduino Mega will drive a relay board that will control the motors and lights (on/off), one relay for the lights, one relay pair for each thruster

So the biggest issue I think is the communication between the two Arduinos. The configuration that sounds the best to me is to use two Arduinos, one at the surface(UNO) one on board the ROV(MEGA). That way I can interface a joystick or PS2 controller to the Uno on the surface, or even connect it to a PC with an ethernet shield or something. And also with the Mega onboard the ROV I have tons of extra pins for expansion. Anyways, from what I understand, the signal strength from the Tx and Rx pins built on the Arduino would not be adequate over a distance of 300' of cat5 on a twisted pair. I have googled as much as I can on this issue and it seems the best way to do it is over RS485 for its long distance capability.

I found this tutorial : http://www.gammon.com.au/forum/?id=11428 to breakout the Arduinos to RS485. Now this setup (correct me if I am wrong) is a half-duplex? Meaning it cannot send/receive simultaneously. I'm wondering how much this would affect the sensor data updates, making their way back to the surface, since I would probably almost always be moving the unit forward/backwards or something, therefore almost always transmitting. Again correct me if I am wrong, but this could be overcome by using a full-duplex RS485 setup? And if I understand correctly, this means I would need to use two twisted pairs on the cat5?(which is fine).

I have seen some different configurations for this on google anyway such as using one Arduino with an ethernet shield straight to a PC on the surface. Now this is not Ideal since I need a camera onboard and I have read (correct me if I'm wrong) that the Arduino does not have the ability to decode video, let alone stream it. So if I use an ethernet shield directly that takes away my twisted pair for the video signal. The solution to this that I have read is having an network switch onboard the ROV with an IP camera. That idea seems mickey-mouse because it means extra weight and power consumption.

The other thing I was wondering, based on the sensors I listed above, does this seem like too much information to be passing along at a time? (ie the Barometric Pressure sensor has a built-in thermometer, and can calculate altitude etc). I suppose it would depend on how often the program would poll to update the sensor values? That's also why I want to use the Arduino Mega on board, because it has more processing power.

Am I overthinking any of this?

Anyways, any help/guidance at all would be greatly appreciate.

Thanks!

I have been building an ROV on and off for the last couple of years.

So how much of the project have you completed and tested? Some things seem easy but become difficult to successfully implement. There have been previous discussions and links to ROV projects in this and the old forum that might be worth reviewing.

http://www.google.com/search?hl=en&as_q=rov&as_epq=&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=http%3A%2F%2Farduino.cc%2Fforum%2Findex.php&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=

I have completed the frame and the main "capsule" where the Arduino, batteries and electronics will reside. It was always just a matter of getting a good control system going. I also built the relay board which I was considering housing in a separate smaller capsule filled with wax like they do at http://www.homebuiltrovs.com/.

Anyways thanks for the link, I was searching the arduino forums internally which oddly did not yield as many results as having google sift through it.

All the sensors i'm gonna use are from sparkfun.com and most of them have tutorials on how to interface them with an Arduino. What I'm really trying to figure out is transmitting to and from the ROV...

You can talk in two directions using the standard serial link (UART). Connect one device's TX to the other's RX and vise-versa. If the Arduino output pins are not strong enough to transmit 300' use a line driver or two RS485 drivers to create a full duplex link.

If you only use one RS485 link you need a protocol to avoid both devices talking at the same time. The simplest is a master-slave or command-response protocol. The master initiates all communication and the slave only answers. Whenever the slave receives a message from the master, it waits a short time and then sends it's response to the master. The master can poll the slave for any sensor data it needs. A more common but more complicated protocol has time slots and collision detection, but with only two devices you don't need that complexity.

So I've attached a schematic of a full duplex setup using two LTC490's based on a typical connection from the datasheet ( I also included the figure of that typical connection).

Now, does this seem to make sense? are the connections to the arduino's correct? and the capacitors across the 5v and ground/cable shield on either end I think are only necessary for proper AC termination, is that right?

I apologize in advance if anything is incorrectly represented, this is my first foray into Fritzing...

Thanks again!

The connections are correct.

The 120 Ohm resistors are for terminating the lines. The termination balances the impedance of the line and reduces or eliminates reflections and ringing which can interfere with the signal.

The capacitors across 5V and ground are for noise reduction. They are called 'bypass capacitors' and it is always a good idea to put capacitors across power and ground of each IC. If there is noise on the 5V supply line it can interfere with the IC. And the IC can create noise on the supply that might interfere with something else (like the Arduino). The capacitors absorb the noise and help all the parts play well together.

Best of luck
Steve Turner

Thank you for the prompt reply. The chips should be coming in tomorrow.