My First ROV Project

Well I’ve been lurking the forums here for a few months as I slowly begin piecing together my own DIY ROV. I decided to try and build my own as a learning experience and am attempting to build it from the ground up myself. It’s a slow process due to time and my limited experience but I absolutely love it so far. My end goal is a vectored thruster setup (6 thrusters total). I have two of the T100s so far and will add the others as funds permit.

My main focus thus far has been to work out the electronics and software for an analog joystick-control setup. This weekend I finally have what seems to be a functioning setup (according to my Oscilloscope and two “test” thrusters). Right now its a single joystick but I have my concerns about the ease of use with a single joystick and may go with two of them if real-world testing confirms this. Video streaming will also be a great learning process as I don’t have much experience with serial protocols (which will probably be my next step.) Anyway glad to have a place like this see other like-minded folks having fun with ROVs.

Some pics:

Breadboard testing:

Beautiful! I really love it. What ICs are you using?

Thanks Jacob. So far a PIC16F1937 and some Quad AND gate ICs

My humble test “jig”

Great work! I will be taking the same approach with my ROV so I hope we can share our experiences. I will also be going for joystick control but mine will be a Logitech USB unit which is very suitable for ROV movement. At the moment I’m running this through a PC and still working on the software which will convert the joystick data into RS-232.

I’ve also gone for the Pololu Maestro to control the 6 thrusters, you can set up all the motor control parameters over USB, having done that you can send UART data from your MCU to control all the thrusters.

I’m happy to know that I’m not the only one taking an alternative route, keep at it!


Very cool Sarawak. So far I’ve been able to achieve what should give me forward/reverse lateral (left/right), rotational (360 degree pivot) and dive/surface control through the single joystick. I’m doing this through 2 AD conversions and converting that to the proper forward/reverse pulse widths for each thruster and sending it to the corresponding ESCs via my logic ICs.

I found out that the potentiometer in the knob of the joystick I sourced is not so great quality and constantly drifts compared to the pots used for the x,y axis (which seem to work just fine.) So with that being the case I am currently using an interrupt that is triggered from the push-button in the joystick handle and addresses rotational movement and depth control via the other two potentiometers in the joystick. I’m still contemplating the best way to handle live video streaming as that is a completely foreign endeavour for me.


Well in between numerous other responsibilities I have continued to chug away with my project. The entire control system for the thrusters is complete as of now (though it will undoubtedly be revised as time goes on). I feel like it is a decent starting point anyway. At the moment I plan on using two separate Cat5 cables to send the signals to the six thrusters underwater. This was kind of a kludge at the last minute as I originally intended to use a single cable but different documentation and online research lead me to believe that the twisted pairs shouldn’t be split up and that each signal should travel down a dedicated twisted wire pair.

I ended up building a separate driver circuit in the control box to boost the 5v signals to 12v in hopes of providing a more robust transmission over 100m of cat5 cable. I then made two separate boards for the receiving end that will go inside the ROV. One is a switching regulator circuit to step the battery voltage down to 5v. The other uses some RS232 receiver ICs and NAND gates to convert the 12v signal from the surface to 5v and then invert the output of the RS232 ICs before sending it along to the ESCs. It seems to work in a lab testing environment but the jury is still out on real world testing. I just ordered two more T-100 thrusters and some water-tight enclosure gear so the next step is to work on a frame/body and hopefully start water testing soon.
Some pics are attached of the device so far.

inside control box:

regulator and level converting circuits for inside ROV (soldering at 3am sometimes makes you place Cat5 jacks upside down lol):

Update (frame construction)

Well today I put my PVC frame together. Additionally, I interfaced the Blue Robotics leak tester with my electronics circuit in order to send an alert to a piezoelectric speaker I will be mounting to the control box. The frame seems ok at the moment and I will hopefully start mounting the thrusters and water-tight compartments to it in the next few days.


Coat of black paint

Four thrusters and one water-tight housing mounted last night. I’m waiting on two more thrusters (which will control depth) and a second water-tight housing. I’ll most likely have to spend some time playing with the location of all the components until I can get a feel for the center of gravity/buoyancy. I do have some closed cell foam on hand, but since this is my first time doing this I really have no idea how much I will need. Additionally, I have yet to seriously research battery options, but things are starting to take shape.

So I’ve been spending the last few weeks doing a significant code rewrite to transmit joystick commands via the PIC UART peripheral as opposed to my previous (and less ideal) method of handling thruster control from my joystick by sending PWM signals down four separate wires. It became obvious that the number of wires I would need to handle thruster control as well as deal with sensor data would be excessive. So…back to the drawing board. Having never wrote much PIC assembly code for serial communication it’s been a learning curve, but the last 3 weeks or so have allowed me to reach the point where I have a successful program that sends joystick commands in 8-bit data packets via UART. The next step is to begin writing the program for the ROV MCU that will decode the packets and send the appropriate signal to each thruster ESC.

It wasn’t easy to scrap a significant amount of time spent writing code and soldering boards for the original version, but clearly it seems that this is the best way to go right now. The learning process has been well worth it.

Awesome, I think this is a good move and worth the effort in the long run. Are you writing all of the PIC code in assembly?

Thanks Jacob. Yes everything is in PIC assembly. I do have some experience in C, but I’ve never programmed PICs in the C language. My first introduction to these MCUs was in assembly a couple of years ago so I guess I just feel more comfortable with it even though I don’t consider myself a seasoned expert.

Update: Github page and continued progress

Still chugging along and making progress. I made a Github page containing my work so far on programs for the “control box/joystick” mcu and the microcontroller that will process data on the ROV itself. There are still bugs and it’s extremely rough at best but will hopefully improve as time goes on. The code is probably somewhat meaningless at the moment without electronic schematics displaying the interfacing of some external ICs. Those will get uploaded as well at some point in the future once everything gets worked out on the bread-board. The circuitry is quite different from my previous adventure and I aim to redo the schematic files.

Currently, there is successful communication of the joystick controller to the ROV MCU. Additionally, the ROV based MCU is outputting signals to what will eventually be 6 ESC/thruster connections. However, there are some glitches showing up in the forward PWM signals that are due to coding errors that need to be resolved. Once that gets sorted I plan to start some simple sensor integration with the BR leak detector and integrate it into the data stream. One day this thing will hopefully get in the water lol.

As a side note, this is my first foray in using git and Github and there are probably some serious shortcomings in my documentation that will improve as I gain more experience using the platform.

Github page:

Breadboard fun:

Well it seems like I’ve made some decent progress. The topside MCU is converting the analog joystick input to speed/direction values that are sent via UART to the receiving/sub-surface MCU. The sub-surface MCU also seems to be correctly parsing out my data packets and sending appropriate PWM signals to 6 outputs (which will eventually be connected to the thruster ESCs).
I’ve gone through several different methods for encoding the thruster data and have settled on a method that seems to work well (for now). One concern I have is the baud rate for the UART communication. Any thoughts as to best standard practices with about 100 feet of CAT5 cable? I’m curious as to what kind of signal interference issues an underwater/natural environment might present.

I had to put the project aside for a bit to tend to other things but I’m still working on it. Currently I’m on a second revision of the circuit board and control box. The six thrusters are responding appropriately via an RS-232 interface. I’ve also successfully integrated the BR leak detector module into the circuit/assembly programs for both the sub-sea and topside devices. Waiting on the second water-tight compartment to come in the mail from Blue Robotics and then I’ll need to pick a suitable battery. I also plan on interfacing the temp/depth sensor with the PIC MCUs and outputting the data to a Hitachi 44780 LCD. That might take some time however. All in all it’s been a fun long term project.

The schematics I’ve drawn up so far are posted in my github repo for anyone interested. The project is under considerable amount of development however so the changes are continuous.

Latest version of control box:

1 Like

Still chugging away. I added ICSP headers to both boards (top-side and subsurface) to allow for easier firmware updates. The control box ICSP circuitry is accessed from an external RJ-11 connector I fixed to the side of the box (next to the RJ-45 tether connector). My big plan for the next month is to better organize the code into modular sub files to allow for easier maintainability/readability. As this thing grew over time, the code has become less than ideal in those areas. After that I plan to work on interfacing the BR temp/pressure sensor with the PIC16F1937 and a simple Hitachi 44780 type display. I spent the weekend potting cables/penetrators in the waterproof housing but may not get to test anything till the Spring (its freezing here).


That’s very impressive! I would love to see a video of it operating.
I look forward to your results !

Thanks Patrick! Hopefully soon enough.

I’ve also been working on a simple website to document the progress of the project so far.

There are many things that are in a continuous state of change at the moment and I constantly need to go back and update/edit numerous parts of the documentation (so be forewarned). I’m currently working on interfacing the BAR30 pressure/temperature module and its taking a bit of time considering this is not a full-time endeavour for me. (doing 32 bit arithmetic in assembly language on an 8-bit MCU can be an exercise in frustration). Also finally got a LiPo battery to do some testing once it warms up a bit.

:hushed: Try a 32 bit MCU!

1 Like