Skip to content
all projects

2023 - 2025 · Robotics · Research · Environment

AquaGator: Underwater Water-Quality Robotics

An autonomous underwater robot that live-monitors water quality in Northwest Pennsylvania lakes. Published at FLAIRS-37.

★ Published at FLAIRS-37★ Presented at the Regional Science Consortium and NCUR 2025
AquaGator underwater ROV

Overview

AquaGator is an autonomous underwater vehicle (AUV) built to monitor the water quality of lakes in Northwest Pennsylvania. Equipped with sensors for temperature, pH, dissolved oxygen, and turbidity, it navigates predefined routes and transmits data in real time - replacing slow, expensive manual sampling.

Why It Matters

  • Enhanced data collection: continuous measurements across a whole body of water instead of single-point samples.
  • Cost efficiency: a small robotic platform replaces boat trips and lab turnaround.
  • Accessibility: local conservation groups can run their own monitoring.
  • Timely interventions: real-time data means problems like algal blooms get caught early.

How We Built It

I worked on the robot end to end: designing the frame, wiring propulsion and power, building analog and digital control systems, integrating the sensor suite, waterproofing the housing, and programming automated sensor measurements and depth movements with Arduino. I also developed the graphing and analysis software in Python and HTML that turns raw sensor readings into usable charts.

Collaboration

The project was a collaboration with Allegheny College's Undergraduate Research, Scholarship, and Creative Activities (URSCA) program and the Watershed Conservation Research Center.

Building Two ROVs

We built two robots from SeaMATE kits, the Barracuda and the TriggerFish, each with a frame made of half-inch and three-quarter-inch PVC pipe. Our kit came with four motors instead of the three we first designed for, so we reworked the frame to carry two forward-facing propellers, a crab propeller, and a vertical propeller. That gives the ROV four ranges of motion: surge, heave, yaw, and sway.

The ballast system is cut-up household pool noodles, which is exactly as fun as it sounds and gives the body neutral buoyancy in the water. The control box connects through a 50 foot tether and takes 13.5 to 14 volts through Anderson Powerpole connectors, and we ran it off a portable power generator so the robot was not chained to a wall outlet. For the TriggerFish we swapped drilled corner pieces for T-shaped PVC corners, which let water flow steadier and the frame fill faster.

Waterproofing Everything

Underwater robots are mostly a waterproofing project with motors attached. The cameras live inside acrylic tubes: the lens is epoxied to a clear disk with 5 minute epoxy, the disk is cemented to the tube with acrylic gap filler, and then a slow-curing epoxy is poured in around the cable and left to cure overnight. For wire joints we used a trick where you put hot glue over the solder, slide heat shrink over it, and heat it so the glue reflows and forms around the wires.

From Analog to Digital

We built the Barracuda control box in analog mode first, joysticks straight to motors. Then we converted it to digital so it could be programmed: soldering an Arduino directly into the control board across 32 pins, adding the relay system, and fitting an HC-05 Bluetooth module whose pins have to be bent to a 45 degree angle with needle-nose pliers before they will sit right. After the conversion the ROV could take programmed commands, and optionally be driven from an Android phone over Bluetooth.

The Water Quality Sensors

The science payload is five Atlas Scientific probes: pH, dissolved oxygen, conductivity, oxidation-reduction potential, and temperature. A serial port expander lets all five share a single Arduino Uno. Calibration happens in UART mode with every cable extension attached, because the cable itself affects the reading. Data can stream to a laptop as CSV through a Python logger, or, when a laptop cannot come along on the water, log to a microSD card in FAT16 or FAT32 format.

Depth Sensing and Arduino Automation

Depth comes from an Adafruit LPS35HW water resistant pressure sensor running over I2C. The control box Arduino had no spare pins facing up, so we soldered the sensor wires to the backs of the GND, 5V, SCL, and SDA pins instead, with an LTC4311 I2C extender boosting the signal down the long cable. Waterproofing the sensor involved a balloon, self-fusing silicone tape, and hot glue. The sensor zeroes itself wherever it powers on, so the trick is to switch it on at the surface before diving.

On top of that we wrote automation sketches: one that descends to one foot and holds for testing, one that slows the motors as the robot approaches a target depth, and the complete version that constantly loops comparing current depth against the desired depth and correcting.

The Flask Live Monitoring Dashboard

Our first live monitoring setup used Node-RED, but it was not friendly for people new to the program, so I rebuilt it as a Flask app that needs no internet at all. On launch it automatically detects which serial port has the water quality sensors and which has the depth sensor, so nobody has to go hunting for COM port numbers, then it opens the browser to the local dashboard on its own. The homepage shows live graphs of all five sensors, updating roughly every 10 seconds, with pressure and depth in the sidebar.

  • Individual chart pages for DO, RTD, EC, pH, and ORP when you only care about one reading
  • A heatmaps page showing how readings change as depth increases, downloadable for reports
  • Reading versus time and reading versus depth graph pages, every graph downloadable
  • A data page showing the full CSV, with download and a checkbox-guarded clear between locations
  • A water quality analysis page that alerts when readings fall outside expected ranges
  • A notes page that saves locally so field notes survive a restart

It runs on both Windows and Linux, and there is a one-click .bat or .desktop shortcut so launching it in the field is a double-click, not a terminal session.