PERRY: Design and Open-Water Verification of a LoRa-Activated Vertical Profiling Float
Abstract. PERRY is a vertical profiling float built for the non-ROV device task of the 2026 MATE competition. On a LoRa activation signal it runs two profiles to a set depth, logging pressure and depth on the way, and transmits the record when it resurfaces. It moves by a buoyancy engine: a stepper motor drives the plunger of a syringe to take in or push out water, which shifts the craft's weight against the water it displaces. The hull is acetone-vapor-smoothed ABS, closed by static o-rings in glands sized for 25% compression. Field testing showed marine grease admitting water at the seals, and the switch to silicone grease fixed it. Depth is held by a PID controller on Bar02 depth with hand-set gains. In open water it profiled to 4 m, resurfaced, and returned its data. On a team build, I did the programming, the electronics, and the buoyancy design.
1Pressure Sealing
The hull is a sealed pressure vessel in two pieces, a housing and a lid, and the seal between them is the core mechanical problem of the craft. Static o-rings close the joint. The gland was sized from the o-ring cross-section for 25% compression, with a rectangular groove 1.5 times the o-ring width to leave room for lateral expansion under load, and fillets in the groove corners so the seal does not cut on an edge. A PTFE gasket backs the o-ring stack. The pressure sensor is potted in epoxy where it passes through the hull. A 2.5 cm port in the lid takes a rubber stopper, so a pressure rise inside the hull pushes the stopper out instead of loading the joint.
The grease selection was decided by test. The first field tests were run with marine grease, and the hull took on water at the seals. Switching to silicone grease stopped the ingress, and the open-water mission was run on silicone.
The hull is FDM-printed in ABS on a Bambu Lab printer, at 100% infill for the housing and 75% for the internal supports and battery packs. A printed surface is layered and porous and unsuited to sealing, so the housing was acetone-vapor smoothed in a chamber, using the solvent pass as a conformal surface treatment to close the layer lines. The print was set up for the treatment: extra perimeter walls were added so the smoothing pass could not open the surface into the infill. Fasteners are stainless bolts into brass heat-set inserts. The finished hull is 27.84 cm tall and 15.00 cm in diameter.
2Buoyancy Engine
Depth is driven by a buoyancy engine rather than thrusters. The engine is a 500 mL plastic syringe whose plunger rides on a lead screw turned by a NEMA 17 stepper through a TMC2209 driver under UART control. Drawing water in makes the craft heavier than the water it displaces and it sinks. Pushing water out does the reverse. Between the two the craft can hover. Only about 50 mL of that capacity is needed to move it between the surface and the target depth. The 500 mL syringe was a large overestimate from early in the project, before the craft's mass of about 10 lb (4.5 kg) was known. The 50 mL figure was set by estimate against that mass and confirmed by trial rather than by a formal buoyancy calculation, and that is recorded as a limitation in Section 6.
Trim comes from lead fishing weights seated in cavities at the bottom of the housing, with the AA packs stacked above them, so the mass sits low and the float rides upright. Figure 2 shows the arrangement in section.
3Depth Control
Depth is closed-loop. The ESP32 reads depth from the Bar02 and runs a PID controller against the target depth, and the controller output sets how many steps the buoyancy engine takes and in which direction. The competition task set the target at 2.5 m. The gains were set by hand. The schedule did not leave time for a tuning campaign, so the loop was run with guessed gains adjusted by trial until the craft reached and held the 4 m test target well enough to complete the mission. Overshoot, settling time, and steady-state error were not recorded. This loop is the only feedback control on the craft. Profile sequencing and the transmit step run open-loop on mission logic.
4Electronics and Firmware
An ESP32, programmed in the Arduino IDE, runs the mission logic: arming over LoRa, profile sequencing, sensor logging, and data return. Power is eight AA cells in four two-cell packs, wired as two separate 6 V supplies on a common ground, behind a switch and a fuse, with a regulator dropping the logic supply to 3.3 V. Depth and pressure are read from a Blue Robotics Bar02 (MS5837-02BA) on the I²C bus. The radio is a REYAX RYLR896 LoRa module on the 915 MHz ISM band, configured with AT commands and driven over a 115200-baud hardware UART. The stepper driver is commanded over a second UART. All electronics were assembled and soldered on protoboard. I drew the circuit diagram in the team's submitted float document.
The mission sequence is short. The float powers on and waits for a go signal over LoRa. On the signal it steps the engine, reads and stores a pressure sample, and repeats until it reaches the target depth, then reverses to the surface, packages the log, and transmits it. It runs the descent-and-return cycle twice, once per profile, before shutting down.
| Subsystem | Component | Interface / process |
|---|---|---|
| Controller | ESP32, Arduino IDE | mission logic, logging, radio |
| Pressure and depth | Blue Robotics Bar02 (MS5837-02BA) | I²C, potted in epoxy |
| Buoyancy engine | 500 mL syringe, NEMA 17 stepper, TMC2209 | UART, about 50 mL of the 500 used |
| Depth control | PID on Bar02 depth | gains set by hand, not tuned |
| Radio | REYAX RYLR896 LoRa, 915 MHz | UART, 115200 baud, AT commands |
| Power | eight AA cells as two 6 V supplies, switch, fuse | 3.3 V regulator for logic |
| Hull | FDM ABS, Bambu Lab printer | chamber vapor smoothed, static o-rings at 25% compression, silicone grease |
| Size and mass | 27.84 cm tall, 15.00 cm diameter | about 10 lb (4.5 kg) |
| Assembly | protoboard, hand soldered | — |
5Open-Water Verification
The craft completed its mission profile in open water: it profiled to 4 m, resurfaced, and delivered its logged data over the radio link. Figure 3 shows the commanded mission profile.
6Known Limitations
- Seal integrity is verified to 4 m only. Maximum safe operating depth has not been characterized.
- The buoyancy engine's 50 mL allowance was set by estimate and checked by trial, not by a formal buoyancy budget. Displacement was not measured.
- PID gains were set by hand and adjusted by trial, not tuned by a method. Overshoot, settling time, and steady-state error at the 4 m target were not recorded.
- Effective LoRa range was not measured. The link is verified only at mission distances.
- Sensor sample rate was not formally recorded.
- Single Bar02 sensor with no redundancy, so a sensor fault ends the mission.
7Role, Attribution, and Team Document
Team project, Crush Depth float team. I did the programming, the electronics, and the physics and buoyancy side of the craft, and previously served as Float Team Technical Lead, taking the subteam through LoRa communications, ESP32 development, stepper motors and drivers, and board assembly. Of the three projects on this site, this is the one I had the most fun building.
PERRY was a late decision. The team's 2026 competition documents had already been submitted when we committed to building the float, so the document below describes the design as filed, and PERRY is the craft built to it. The document does not use the name.
- Non-ROV Device: Vertical Profiling Float, 2026 (PDF, 2 pages). Design summary, circuit diagram, and software flow chart. Figures by Luke Salazar, me, and Jake Dudley.