Technology

How the buoy works

S.C.O.U.T. runs for a long time because it spends most of its time asleep. One constraint shapes the whole design: a battery-powered buoy, deployed for a year or more, that can transmit only a small packet three times a day.

At a glance

The buoy in numbers

Deployment depth
2–8 m
Endurance
1+ year unattended (target)
Build platform
Feather M0 + RFM95
Radio
915 MHz LoRa · BW 500 kHz · +11 dBm
Transmit
3 slots a day · 00:10 / 08:10 / 16:10 UTC
Range
~2 km line of sight (datasheet)
Water temperature
DS18B20 · ±0.5 °C
Turbidity
Raw ADC counts · higher = clearer
Power
Two primary lithium D cells (direction, not final)
Electronics housing
4.4 in ID × 5 in tall
Cost
< $5,000 (engineering target)

Every value is the canonical one in the project's Knowledge Hub facts. Targets are marked as targets; nothing here is a field measurement yet.

How it works

The data path

Sense

The buoy wakes about every 30 minutes, reads water temperature and battery voltage, samples turbidity less often, and returns to sleep.

Store

Each wake appends one row to an on-board CSV log, timestamped in UTC. Raw data never leaves the buoy: the full archive, audio included, stays in on-board storage and is retrieved by hand.

Transmit

Three times a day, at 00:10, 08:10 and 16:10 UTC, the buoy sends its latest reading to shore as a 44-byte packet over a 915 MHz LoRa link, roughly 2 km line of sight. No cellular service or internet is used at the buoy.

Publish

On shore, an ESP32-S3 base station receives each packet and forwards it over WiFi. The telemetry pipeline validates it, runs quality control and NOAA Coral Reef Watch thermal-stress metrics, and regenerates this dashboard, using only the Python standard library.

Operating cycle

Built to run unattended for a year

Battery life is the whole game, so the buoy spends almost all of its time asleep and wakes only to do a small, fixed amount of work.

The controller sits in a low-power standby state and wakes on a real-time-clock alarm roughly every 30 minutes. It samples, appends one row to the microSD log, checks the battery, and returns to sleep. It transmits only in three fixed slots a day, at 00:10, 08:10 and 16:10 UTC, not on every wake.

Running untended for a year is a firmware problem as much as a hardware one. A hardware watchdog resets the buoy if it ever hangs, and the record counter and last-transmit time are held in retained memory, so a reset resumes the record cleanly instead of starting over. As the battery falls the buoy conserves first: it transmits less often and pauses non-essential sensing before it ever risks the core temperature record. A State-of-Health field rides in every packet, so resets and init failures are visible from shore without a site visit.

Wake cadence
~30 min RTC alarm (48 samples / day)
Transmit cadence
1 packet / day
Between samples
Standby sleep; radio powered down
Recovery
Hardware watchdog resets a hung buoy
Continuity
Record counter & last-TX retained across resets
Low battery
Throttle transmission, pause non-essential sensing
Health
State-of-Health flags travel in every packet

Inside the buoy

The subsystems

Power

Long-life primary cells

The buoy runs on two sealed 3.6 V lithium-thionyl-chloride D cells with no solar panel, with the electronics sleeping between wake-ups and every part running on a single 3.3 V rail. The target is over a year of unattended operation.

Compute

Duty-cycled state machine

The microcontroller sleeps most of the time and wakes on a timer to sense, log, and occasionally transmit.

Comms

LoRa radio

A 915 MHz LoRa link reaches roughly 2 km line-of-sight to shore, with no cellular service or internet required at the buoy.

Firmware

SAMD21 firmware

Firmware targets the Feather M0 (Arduino SAMD21). The packet codec is byte-identical to the shore decoder, and both the codec and scheduler are unit-tested.

Mechanical

Enclosure and mooring

The electronics stay sealed above the waterline. One sensor of each type sits at a single point below the buoy, with spares kept for field replacement.

Shore

ESP32-S3 base station

A Feather ESP32-S3 with a LoRa radio receives each packet and forwards it over WiFi. A standard-library Python pipeline validates it, runs the analysis, and regenerates this site.

MCU and radio

Hardware platform

The microcontroller and radio are settled in ADR-0001, which lets firmware and wiring proceed. A production PCB target is kept on the shelf.

The confirmed build platform is the Adafruit Feather M0 with an RFM95 radio: an Arduino SAMD21 core with the RadioHead RH_RF95 driver, an Adalogger FeatherWing for the microSD card and PCF8523 real-time clock. An ESP32-C3 with an SX1262 radio is kept as the future production-PCB target; current firmware is written for the SAMD21.

The current Rev A schematic — the project's first full electrical baseline — is ERC-clean and has undergone pre-hardware schematic and integration verification against manufacturer documentation. Physical assembly and bench validation are the next step.

Microcontroller
Adafruit Feather M0 (SAMD21)
Radio
RFM95 LoRa · RadioHead RH_RF95 · 915 MHz
Clock
PCF8523 RTC (wake alarm + timestamps)
Storage
microSD via Adalogger FeatherWing
Power
Rev A prototype: 1S LiPo through an Adafruit PID 6106 charger/boost board, regulated 5 V system rail. Longer-term deployment battery architecture remains under evaluation (ADR-0002)
Temperature
DS18B20 digital thermometer (±0.5 °C)
Turbidity
Seeed Grove 101020752 optical transmittance sensor at 3.3 V, wired straight to the ADC — bench validation pending
Acoustic
Planned for a later electrical revision; hydrophone/interface selection under review
Enclosure
3D-printed flange housing, large O-ring seal, 4.4 in bore
Future PCB
ESP32-C3 + SX1262
Decision
ADR-0001, accepted 2026-08-14

Electrical design

Rev A electrical schematic

SCOUT's Rev A electrical prototype establishes the controller/radio, power, temperature, turbidity and logging architecture. The schematic is ERC-clean and has undergone pre-hardware schematic and integration verification against manufacturer documentation — physical assembly and bench validation are the next step. Click to view full resolution.

SCOUT Rev A electrical schematic: Feather M0 + RFM95 controller/radio, PID 6106 charger/boost power path, DS18B20 temperature, SEN0189 turbidity divider, and the Adalogger RTC/microSD logging stack.
Rev A prototype electrical design

The packet

44 bytes, three times a day

The binding constraint on a LoRa link is bandwidth. The buoy stores full data locally and transmits only its latest compact reading, three times a day, rather than raw waveforms. The packet layout is a versioned contract: the firmware encoder and the shore decoder are byte-identical, checked by a cross-language test so the two can never silently drift apart.

Raw audio is never transmitted. There is not enough LoRa bandwidth for waveform data, so the buoy stores audio on board and sends a 14-byte summary of each recording in the 44-byte packet. This is a settled design decision.

Packet size
44 bytes (140-byte ceiling)
Cadence
3 fixed slots / day: 00:10, 08:10 and 16:10 UTC
Sampling
1 record / 30 min (48 / day)
Carries
The latest temperature, turbidity & battery reading
Integrity
Counter + CRC; malformed frames dropped
Schema
Versioned; byte-identical buoy ↔ shore codec

Mechanical

Sealed above, sensing below

The electronics stay dry in a sealed housing above the waterline: a 3D-printed flange housing (4.4 in bore, 5 in tall) closed by a bolted lid and sealed with a large off-the-shelf O-ring, with cable glands in the lid. It sits in a printed float that holds it upright at the waterline, with the antenna above and the mooring attached to the float.

Below the housing, S.C.O.U.T. uses one sensor of each type at a single point rather than a multi-depth string (ADR-0003); the extra units on the bill of materials are field spares. The mooring is fixed and reef-safe, chosen to hold station with minimal disturbance to what it is measuring.

Mechanical design

The printed parts

John Ryan Myrdal's CAD for the two printed floats, the electronics housing and its cap, and the turbidity-sensor housing, printed in PETG. Each drawing links to its full sheet.

Engineering drawing, Float A
Float A
Engineering drawing, Float B
Float B
Engineering drawing, Electronics housing
Electronics housing
Engineering drawing, Electronics housing cap
Electronics housing cap
Engineering drawing, Turbidity sensor housing
Turbidity sensor housing

Mechanical design

Will it stay upright?

Battery, electronics and antenna sit above the waterline, so a buoy is top-heavy by nature. We float every design in software before printing it.

Pick a design

Slide through the fifteen we have modelled, oldest to newest.

Change the weight

Make the electronics housing heavier or lighter.

Read the verdict

Green means it rights itself. The numbers behind it are underneath.

Open the explorer full screen

Each design’s real CAD is filled with water in 3 mm cubes. The waterline is where the water it displaces weighs as much as the buoy; then it is tilted in 5° steps to see which way the lift pushes. Checked against a plain cylinder, it matches draft and stiffness to about 1%.

What it does not tell us yet

Part masses for the concept designs are estimated from CAD volume, not weighed. Only printed and weighed parts (the bolted-wedge parts and the mushroom float) use measured weights, so trust those results most. The model is still water only: no waves, wind or mooring pull. Every estimate is listed in the simulator’s README.

References

Where these choices are grounded

The communications design leans on published LoRa-over-water propagation studies; the rest is specified in the project's own engineering records.

Communications over water

  • Jovalekić, N., Drndarević, V., Pietrosemoli, E., Darby, I. & Zennaro, M. (2018). Experimental Study of LoRa Transmission over Seawater. Sensors 18(9), 2853. doi.org/10.3390/s18092853
  • Gutiérrez-Gómez, A. et al. (2021). A Propagation Study of LoRa P2P Links for IoT Applications: The Case of Near-Surface Measurements over Semitropical Rivers. Sensors 21(20), 6872. doi.org/10.3390/s21206872