Archive for the ‘Uncategorized’ Category

Hi All,

I have not posted for a while, but have been busy building my 2nd generation ROV. I was struggling a bit with the first model to get all the electronics inside, so this 2nd version has a longer and wider body.

I just finished today the main body work. Hopefully next week adding 2 lights and some motors so I can test and shoot some footage underwater.

here some pics:
Front of ROV
Back of ROV

After last week’s successful test of the main body and cable connector, I started to assemble all the electronics. I made a big cable winder with about 80meters of CAT5+metal cable. In the middle of the winder will be the wireless access point (battery powered), this will allow me to wind down and up the ROV while also having connectivity with it.

I Split the CAT5 cable into 2 network connections. A standard 100mb ethernet connection only uses 2 pair of cables, as my CAT5 has 4 pairs, you can run 2 connections over it. By just using pins 1,2,3 and 6 you will have a 100mb network connection and make sure you use 2 pairs, do not just mix any wire.

I successfully tested this setup, using one part of the cable connected to the arduino and the other part cable connected to my high definition IP Camera.

Next step is to make some Lights on the ROV, so we can test the camera underwater and actually see something :-)

Today I went out on the lake to test my new connector into the ROV. At my initial test the connection leaked a little water, so I designed a new plug and added more glue into the connectors.

Here a video of how it went:

This monday evening it was great weather, so I went out to do a first test of my depth sensor. I am using an MEAS MSP-300-100-P-4-N-1, i found it on digikey and cost about 80euros. They have many versions of these sensors. The one I am using takes an input of anything between 9v and 20v and outputs between 1v to 5v depending on how much pressure (PSI) it measures. This sensor is very easy to connect to an arduino, just put the output port on an analog port of the arduino and your are done. I did use an external battery (11.4v) to provide the input power as I found the 9v output from the arduino did not work well.

The Sensor is threaded on an american standard NTP 1/4″, so had to do a little searching to find a threading bit to make this thread in my back plate, but that worked fine. I pre-drilled with a 11mm drill a whole and made the thread. No o-ring was used, just the sensor was tightly screwed in the backplate and it was waterproof :-) (at least for now tested up to 28meters).

I send up a simple program on my arduino that would log the analog output every second so I could analyze the data afterwards. While I was sending my ROV to the bottom of my lake I was able to monitor it on my fishfinder. On the was back up, I stopped at ~24 meters and took a picture of the fishfinder, so I was able to match this data with the ROV log to see how I could calculate the actual depth of the arduino based on the raw data.

When the ROV is above water it was measuring a RAW value of 201 (about 1v), so any addition pressure would have to have this value extracted. Based on my fishfinder data, I was able to calibrate my sensor and came up with this formula for measuring depth (in fresh water).
Depth = (AnalogReadRaw – 201) / 7.585

Tonight we went out for the first underwater test. We found a spot of ±26 meters deep in the local lake and lowered the ROV with no electronics onboard yet down in the water. After a few minutes of swimming and capturing it on our fishfinder (see pic) we raised the ROV and… we had water inside :-( not fully flooded but a little big of water, so we need to do some investigation of where the water is leaking in from.

Some things learned tonight;
- need better laptop screen that is actually visible in the sun.
- need to design cable management system to lower and bring back the ROV.

Mapping software
To figure out where the lower the ROV, I used a simple fishfinder (Garmin C300) and my Garmin Colorado handheld GPS. Both where connected to a laptop running Dr.Depth. Some awesome bit of software that logs all the data (depth, location, temperature) and maps this all automatically including full 3d Mapping of the lake floor.

build my first frame tonight, not sure everything will fit in, but will do for the first underwater test this coming weekend. i will then test if the main pipe is watertight and if the networking, yes i will attempt to use normal gigabit ethernet as my communications wire, will work over the distance. hope to test till 30 meters deep.

I making the heart of my ROV from an aluminium tube. The inside diameter is 100mm and the wall is 5mm think, so in total diameter of 110mm and the tube is 200mm long. The window is 10mm thick plexiglass.

I made the front and back plates out of 10mm thick aluminium plates with my CNC machine. On the back I am working on making waterproof plugs. Not sure if they will work, will hopefully be able to test at 30meter depth in a week or so.

This is how my project got started. I had seen a demonstration that a brush-less motor can just run underwater with (hopefully) no problems. I had to test this out.

I did some searching, I wanted to have a fairly small outrunner motor, so the outside spins and the inside stays fixed. Second I wanted a motor that does not spin too fast, and third the motor would ideally have m5 tread on it, as my propellers already had this.

I ended up with a hexTronik DT700 brushless outrunner 700kv ($21.90) and using  Car ESC with reverse so I can easily turn the motor in either direction. Bought I bought via hobby king, below the links.

Here is the initial test. The ESC is connected to an arduino that is controlled by my pc. Sorry for the crappy video work, will make better movies in the future :-)

Here the code I used in the arduino to control the ESC using PWM:

#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 
const int buttonPin1 = 2;
const int buttonPin2 = 3;
int buttonState1 = 0;
int buttonState2 = 0;
int speed = 5;
void setup() 

   pinMode(buttonPin1, INPUT);
   pinMode(buttonPin2, INPUT);
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object void loop()

  if (Serial.available() > 0) {
    int inByte =;

    switch (inByte) {
    case 's':
      val = 90;
    case 'f':
      val = 90 + speed;
    case 'r':
      val = 90 - speed;
    case '1':
      speed = 5;
    case '2':
      speed = 10;
    case '3':
      speed = 15;
       case '4':
      speed = 20;
        case '5':
      speed = 25;
       case '6':
      speed = 30;
        case '7':
      speed = 35;


  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 

The ESC is in ‘rest’ at a PWM of 90, any value above it goes forward, anything below it goes reverse. By typing 1..6 + you can set the speed. By pressing the ‘f’ + the motor will move forward. By pressing ‘s’ + the motor stops. By pressing “r” + the motor goes in reverse. You can only change the speed when the motor is standing still.

Components used:


Welcome to my new website about my desire to make myself a underwater remote operated vehicle (ROV).