ENGR 100-600 | University of Michigan

ROV Control Box Assembly

Step-by-Step Instructions for Assembly of a Wireless Remote ROV Control Box – ENGR100-600

Last updated: Fall 2024

Background

The ROV control system consists of the ROV payload and the ROV control box. The ROV payload is provided to you. The ROV control box is designed and built by you and your team. Read this Background section before building your ROV control box so that you understand how the overall system is intended to work. If anything is unclear, ask questions!!

ROV Payload Overview

The ROV payload system is shown in Fig. The payload itself is the clear plastic cylinder with the electronics inside. A yellow, neutrally buoyant tether connects the payload to a blue and yellow buoy with black antennas at the top. This buoy stays at the surface of the water to transmit and receive wireless signals from your control box. Your control box will have buttons and/or switches (seen in the lower right of this picture) that are wired into a breadboard/Arduino circuit board system. The Arduino has its own antenna with which it transmits and receives data from the buoy.

TODO
The ROV payload system you will be working with this semester.

ROV Payload Theory of Operation

The ROV is maneuvered in the water by 4 constant (single) speed reversible thrusters. A payload is installed on the ROV that controls the thrusters and carries a video camera to carry out its function as a mobile underwater inspection device. The payload also has some instrumentation that sends data back to the operator about the ROV’s operating status. Power to the payload is provided by a 4.8 Ah 3S lithium ion battery in an independently detachable submersible compartment. The payload is also capable of operating up to two submersible servo motors. (Currently, the payloads are only set up to operate one servo.) The payload is sealed and need not (and should not!) be opened under normal circumstances.

The ROV has two radio links: a two way link at 2.4 gHz that passes thruster control and payload instrumentation data, and a one-way link at 5.8 gHz that transmits the video. This allows the ROV to operate without a hard wire tether linking it to the shore/operator. However, since high frequency radio cannot be sent through water, the ROV must tow a buoy which is tethered to the surface above it that carries the radio transmitters. The depth of operation of the ROV is thus limited by the length of the tether to its transmitter buoy, in our case about 25 feet, but it is otherwise free to roam as far as the range of the radios, subject to keeping an open surface above itself it so the tether to the surface does not get tangled. The 5.8 gHz radios with simple antennae are good out to a few hundred feet as long as unobstructed line of sight is maintained. The 2.4gHz control radio has selectable power levels with maximum range greater than 1 km.

ROV Payload Components

The payload’s internal components comprise:

  1. An Arduino “Micro” microcomputer
  2. Motor control switching circuitry using 16 solid state relays.
  3. A Bosch BNO 055 inertial measurement unit (IMU)
  4. A Pololu ACS724 current measurement sub board
  5. An Adafruit DS3231 real time clock
  6. A pressure transducer
  7. A conductivity probe

These components reside on two custom fabricated printed circuit boards inside the ROV casing.

The payload permanently attaches an external submersible video camera with LED lighting.

The surface buoy carries:

  1. A Pololu AStar 32U4 Arduino
  2. A 5.8 gHz video transmitter
  3. An nRF24L01 2.4gHz transceiver

Communication between the payload Arduino and buoy Arduino is via serial link. The AStar 32U4 in turn talks to the nRF24L01 via SPI protocol (a short distance protocol). The video signal to the 5.8 gHz transmitter is a direct passthrough of the camera output. The video receiver unit (Fig) is self contained and independent of the ROV controller. It has an internal rechargeable battery and can capture received video to an SD card.

TODO
The video receiver unit... otherwise known as a video monitor. The video from your ROV's camera will be displayed here.

Log Data Sent FROM the Payload

Payload instrumentation sends the following data packet to the ROV control box once per second:

  1. Pitch, roll, and yaw data from the IMU. The zero yaw value is fixed each time the payload is powered up. Whatever direction it is facing when powered will be 0 yaw.
  2. Timestamp. ROV clocks are set to Universal time so they will be 5 hours ahead of Ann Arbor local time (4 hrs during DST).
  3. Pressure in cm of depth in the water.
  4. Battery voltage.
  5. Instantaneous current draw.
  6. Ambient temperature.
  7. Conductivity probe reading. This functions as a leak detector for the payload. Conductivity will read near zero if the probe remains dry. If enough water enters the payload to wet the probe, conductivity will rise to some number between roughly 50 and 300 depending on the ambient water quality.

If you ever see a conductivity reading, GET YOUR ROV OUT OF THE WATER IMMEDIATELY! There is a leak in the payload!

Control Data Sent TO the Payload

To control the payload 6 numbers must be set by the ROV Control Box:

  1. 4 bytes that contain either a 0, 1, or 2. The values correspond to the state of each of the four thrusters: off, on, or reverse respectively.
  2. 2 bytes containing an angle from 0-180° to control servo positions. These need not be set if servos are not in use.

ROV Control Box Overview

The ROV control box is what you will use to “drive” your ROV; the control box sends the control data described above. The control box will include the buttons and switches that your use to control the thrusters as well as a video monitor and LCD display. A sample control box is shown in Fig.

TODO
A sample ROV control box with video monitor and LCD screen.

The design of the control box is completely up to your team. This document describes how to make this sample control box. You may adapt these instructions in whatever way you need for your own control box.

ROV Control Box Theory of Operation

The control box comprises the following components:

  1. Case
  2. Arduino Nano Every microcomputer with wiring shield
  3. 16 x 2 character LCD display
  4. SD card writer
  5. nRF24L01 radio
  6. Manual control input devices: switches and potentiometers

As in the buoy, the Arduino communicates to the nRF24L01 via SPI. It also talks to the SD card writer via SPI, which allows multiple devices to be on the SPI bus in parallel. Communication to the LCD display is via I2C protocol.

Any battery between approx 6.5 - 12 V can be used to power the control box. We have rechargeable 2S lithium ion and lithium iron phosphate packs available for powering controllers.

Insertion of an SC card to the controller writer is optional. However if one is present, all data received from the payload will be logged to a .csv file on the card.

Programming the ROV Control System

Since payloads are shared by teams they must present a consistent interface, thus payload (and buoy) programming is fixed and may not be modified by users.

The payload Arduino operates at roughly 10 cycles per second. On each cycle, it reads the onboard instruments, loads the data into a packet for the nRF24L01 radio and sends the packet up a serial link to the Arduino in the buoy. As soon as the buoy has a packet it sends it off to the nRF24L01 for transmission. The pair of nRF24L01 radios in the buoy and control box implement an automatic response system, so as soon as the control box receives payload data it responds by sending back the current control data.

When the return packet arrives at the buoy, it sends the data as serial data down to the payload. The payload arduino reads it, sets the states for the motors and servos, and starts the execution of the next loop. All synchronization is driven by the payload controller; the other components in the system just wait for it to initiate and then respond. Each payload is numbered and a control box is paired to a payload by entering that number in the control box Arduino code, recompiling and uploading it to the control box.

ROV Control Box Logic

You will be provided with a computer program that has a basic control scheme for the thrusters and servo already set up. If you would like to implement custom code, or just want to understand the program better, these next sections give detail on the logic required for controlling the thrusters and servo.

Thruster Control

The control box will respond to the payload automatically each time it receives a packet from the payload, so all the control box has to do is keep its output data buffer up to date and it will get sent on schedule.

As noted above, the control box reads the position of a set of thruster control switches and loads data representing those states into the 4 control bytes to be sent to the payload. The stock Arduino code provided implements default logic for doing this based on the use of either one toggle switch or two push buttons for each thruster. In the case of a toggle, pushing one way will be forward, pushing the other will be reverse, and the neutral position is off. For two pushbuttons, one will actuate forward and one will actuate reverse.

Since each team builds its own controller, teams are free to build and program their control box motor logic for any control scheme they can conceive, as long as in the end the arduino sends a 0, 1, or 2 to the payload for each motor and as long as their combination of input devices doesn’t require more than 10 input lines on the Arduino (that is all that are available).

Servo Control

There are two simple ways to control a servo:

  1. Connect a 10KΩ potentiometer to the arduino with the outer leads going to 5V and ground and the center signal lead connected to A0 or A1 on the Arduino. Map the analog reading of 0-254 into an angle of 0-180° and send that to the payload. The servo will rotate in synchrony with the potentiometer knob. This scheme is implemented in the default programming supplied.

  2. Use two push buttons: push one and have the servo angle increase, push another for it to decrease, possibly a third button to reset it to its home position. If you want to implement this scheme and can’t figure out how, talk to a peer mentor, I/A, or instructor.

Building the ROV Control Box

Your ROV is operated using a control box that your team will build from scratch. These instructions walk you through building a basic control box.

Read through these instructions all the way to the end BEFORE you start building or customizing your design so you understand all the requirements beforehand!

Prepare the Case

When laying out holes and/or slots from the outside of the case, be sure to check any interference with the mounting bosses on the inside of the case.

  1. Drill holes for switches where desired. 1/4” for toggles, 15/32” or 1/2” for pushbuttons. Layout your switches from the inside of the box to avoid putting switch holes though the mounting bosses in the cover plate. TODO
  2. Use a Dremel to cut a slot large enough for the 2 x 4 pin header to the radio to fit through - approx 5/16” x 5/8”. Locate top of slot approx 1 5/8" from upper edge of side wall. This slot must be big enough for the 2 x 4 terminal header to fit through. TODO
  3. If applicable, drill a ¼” hole for a servo control potentiometer. (Skip this step if you are not using a potentiometer.)
  4. Drill two holes for the battery holder.
  5. Drill a 1/2“ hole in the back somewhere for the battery wires to pass through. TODO
  6. Drill two 7/64” holes on the diagonal to locate the display holder.
  7. Cut a slot about 1/2” by 1/4” approximately 1/2“ to the left of where your display will mount. TODO

Mount Switches

Mount the switches (buttons and/or toggles) according to your control box design. Lock washers should be placed under each nut.

Mount the Arduino Nano Shield Board

  1. Drill 7/64" holes in the two lower center bosses of the box. It’s okay to drill all the way through.
  2. Use a jumper wire with a pin to push open all the sockets on the Arduino shield before you install it. You may need to back out the screws on some of the terminals.
  3. Use two 3mm x 6mm screws to attach the shield to the box. The Vin terminal should be at the upper right. You may need to use a Dremel to elongate the hole at the bottom of the shield to match the span of the holes in the box. TODO

Mount the LCD Display

Mount the LCD display on its bracket to the box using two 1” #4 screws and cap nuts. The display is right side up if the terminal pins are on the left.

Mount the SD Card Reader Board

  1. If the mid-level boss on the left side is not blocked by your switch locations, drill that out to 7/64” and mount the SD card reader there with a 3mm x 6mm screw.
  2. If that space is not available, drill a hole somewhere there is space and use a short #4 screw and a nut and a nylon spacer to mount the SD card writer. Wherever you end up placing the writer you will have to cut a hole in the side of the control case to get the card in and out of it. TODO

Wire the Switches

  1. You can wire all your switch grounds in series by running one wire from one switch to another and then just one wire to ground on the control board.
  2. On a toggle switch, the center goes to ground. Internally, the switch throws diagonally, meaning that as you look at the switch, when the lever is pushed up, the lower contact is connected and vice versa.
  3. The push button switches are symmetric, it doesn’t matter which side is to ground.
  4. Extend your switch ground circuit to include the ground pin on the SD card reader.

Connect the Switches to the Arduino

Connect the sense wires from the switches to the Arduino shield. Remember you are looking at the inside of the box so the switch on the left is on the right on the outside, and also that the toggle switches connect such that when you push the switch “up” that connects to the bottom contact. Thruster A (forward) is contact D2, Thruster A (reverse) is D3, and so on, continuing up to Thruster D (reverse) at D9. It’s a good idea to use multiple wire colors for these to make things easier to trace. For instance one color for the forwards and one color for the reverses.

TODO

Wire the SD Card Reader

  1. 5V pin to the 5V pin on the Arduino shield
  2. CLK to D13 (SCK)
  3. DO to D12 (MISO)
  4. DI to D11 (MOSI)
  5. CS to A3 (D17)

TODO

Connect the nRF24L01 Radio

  1. Drill holes in the box that allow the radio holder with radio to line up with the slot cut in Step 2 of Prepare the Case. TODO
  2. Put a 2 x 4 terminal header on a 7” long piece of 8 conductor ribbon cable. The red wire on the ribbon should be oriented on the right side with the ribbon running down from the header and the pin side of the header facing down. Line the cable up through the opening. Use a small channel lock plier or a vice to gently close the header over the cable, then install the lock tab.
    • Note: You can also use double-ended Dupont wires as an alternative to the ribbon cable.
  3. Separate the conductors about 2” away from the open end of the ribbon cable. Counting from the red wire as #1, cut off the free end of wire #7. TODO
  4. Strip each of the remaining wires back about 1/4” with a 28 gauge stripper and twist the bare ends.
  5. Starting with the the red wire as #1 insert the free ends into the Arduino shield as follows:
    1. #1 (Vin) to 3V3 (RED)
    2. #2 (GND) to GND (possibly shared with an existing wire)
    3. #3 (CSN) to A7 (D21)
    4. #4 (CE) to A6 (D20)
    5. #5 (MOSI) to D11 (shared with SD reader)
    6. #6 (SCK) to D13 (shared with SD reader)
    7. #8 (MISO) to D12 (shared with SD reader)

    When adding a wire to a terminal that already has a heavier wire in it, it may be easier to remove the heavier wire, insert the lighter one and then add the heavier back in again.

    TODO

Connect the LCD Display

  1. Obtain four "mixed gender" jumper wires - i.e. socket on one end and pin on the other.
  2. On the Arduino shield:
    1. Connect SCL to A5 (D19)
    2. Connect SDA to A4 (D18)
    3. Connect Vin to 5V (shared with wire to SD reader)
    4. Connect GND to GND

TODO

Make a Battery Connector

  1. Obtain a barrel jack assembly. TODO
  2. Connect the red wire to Vin on the Arduino shield.
  3. Connect the black wire to ground.
  4. Install an Arduino Nano in the shield. The USB jack should face the outside! Make sure the pin labels on the Nano match the labels on the shield.
  5. Cut access windows in one side panel for the USB connection and SD card insertion.
  6. Add a bracket to hold the display unit. The display can be attached to the bracket with a large strip of Velcro.
  7. Assemble the top and bottom section of the case with the side panels installed.

The Completed Sample ROV Control Box

Here are some pictures of what this completed sample ROV control box looks like:

TODO
This is the completed sample control box including the video monitor.
TODO
Here is what the completed sample control box looks like from the back. You can see how the X-shaped bracket is used to hold the video monitor in place.
TODO
This is a closer view of just the control box itself, including the LCD display for data from the payload.

When your ROV control box is completed, remember that you have to program the Arduino in your control box with the number of the payload you need to pair it with. This is how your control box knows which payload it is supposed to be “talking” to.