sphere200g_p123  ·  SEA — the Drake Passage drifter

Buoy Parts Book

Every part in the Ø200 mm printed sphere — what it is, how it is wired, and why it is done that way rather than the obvious way. This describes SEA, the drifting buoy released mid-Drake Passage, which carries everything the design has. LAND-1 and LAND-2 are the same probe built to the same drawings; the table below is the complete list of what they leave out or do differently, and nothing after it repeats the distinction.

7 printed parts 660 g of filament 21 Ah of battery ~79 mAh a day, typical 4 messages a day

What differs on LAND-1 and LAND-2

Two land stations beside reference series on King George Island, each the other's backup. Same hull, same carrier, same sensors, same pin map, same battery and the same solar crown — the differences are the keel, the schedule and what the two temperature channels are pointed at.

 SEA — described in this bookLAND-1 / LAND-2
Keel530 g steel ballast in a printed collar under a bolted lidomitted — the station is bolted to a bracket instead
Droguesea anchor on a line below the hullnone
Internal screws1511 — the ballast lid's four are not needed
Transmit4× a day, 00/06/12/18 UTC1× a day
GPS fixevery 2 h — the track is the measurementonce a day, for the clock only
Messageschema 3, 77 bytesschema 2, 189 bytes
Energy~48 / ~79 / ~151 mAh a day~20 mAh a day
DS18B20 probesame part, same pocket — reads water along the tracksame part, same pocket — reads ground or snow
BME280 humiditysealed inside: a condensation canaryreal outside air, so the station needs a radiation shield

Everything else in this book is the same part, in the same place, wired the same way.

Iridium antenna Ø19 × 49, out through the cap gland Pressure vent bore at z +65, on a ridge flat Solar crown — 3 pockets Voltaic P123, 66 × 66, at z +51.5 Equator flange, z 0 bonded, then clamped by 8 × M5 Main platform, z −27 to −30 the dry bay above it: modem, carrier Battery platform, z −53 6 × 18650 lying across, 21 mm pitch Steel ballast, z −78 530 g keel on the cavity floor Ø200 mm
Drawn to scale, z in mm from the equator — the hull spec's own datum. Almost everything lives below the waterline: the electronics deck sits 27 mm down, the cells lie on their sides another 16 mm below that, and the steel disc is on the cavity floor. That distribution is the whole reason a floating sphere turns its solar panels back toward the sky instead of drifting upside down.

How it all connects

Sun charges a pack; the pack feeds one always-on 3.3 V rail; the two hungry parts get switched rails of their own. Everything else is signalling — two I²C buses, one serial link to the modem, one 1-Wire line and two gated analogue dividers. The drawing is the power; the table under it is every part, including the data.

P123 P123 P123 solar combiner, upper shell · 3 × 1N5817 · one JST-XH crosses the equator Solar charger bq25185 · Adafruit #6106 charge + power path 1.5 A 6 × 18650 — 21 Ah 3.0–4.2 V, six in parallel VBAT U3 TPS22918 ON = IO26 RockBLOCK 9603 pin 8 · 3.0–5.4 V · 470 mA helical antenna · SMA coax F1 1.1 A MCP1700 LDO 3.3 V · 1.6 µA idle JP1 3V3 — always on FireBeetle ESP32 BME280 · 0x77 BMP581 · 0x47 MAX17048 · 0x36 DS18B20 · 1-Wire U2 TPS22918 SAM-M8Q GPS ON = IO25 battery-side power the 3.3 V rail JP1 and JP2 are shunt jumpers — pull one and a meter goes in series with that rail. The modem rail taps VBAT before F1: a polyfuse's resistance would eat the margin against the modem's 3.0 V minimum. JP2 sits in that rail, between U3 and the plug.
Two rails leave the pack. VBAT goes straight to the modem through its own switch; everything else comes off the 3.3 V rail behind the LDO. Nothing on the 3.3 V rail is ever switched except the GPS — the three sensors idle in microamps and are cheaper to leave on than to gate.

The power source, close up

The drawing above compresses the whole left-hand side into two boxes. Here is that part alone: what physically joins what, in what connector, and where the one thing that surprises people happens — the charger’s BAT pad is not an output. It is a node the pack sits on and the loads hang off.

① HARVEST P123 #1 P123 #2 P123 #3 combiner board Voltaic P123 · 66 × 66 × 2.9 mm · IP67 · 0.64 W each Vmp 6.07 V · Imp 110 mA · Voc 7.09 V · Isc 120 mA [D] 3 × 110 mA nominal → ~187 mAh per sun-hour once derated JST-SM at each panel, and the FEMALE half is on the panel side: it is live whenever there is light, and a recessed contact cannot be shorted by a dropped tool. 24 AWG. Combiner = perfboard in the upper shell: D1–D3 1N5817, both junctions, a deferred TVS pad. The carrier has no solar role. the equator flange JST-XH — the only solar wire that crosses the flange, and a different family on purpose: a panel physically cannot be plugged into the charger input. ② CHARGER SOLAR IN Solar charger — bq25185 (#6106) linear — battery current ≈ panel current input window 5–18 V · CV termination 4.2 V cold-charge inhibit on its own TS pin 5 V boost UNUSED — EN pad to GND (PROC-15) TS 10 kΩ NTC #1 sits at the pack Cold-charge inhibit happens here, in hardware and off the carrier. The MCU never sees this sensor. NTC #2 below is a SECOND sensor, not a tap off the same one: the gate and the flag that reports it must not be able to fail together, and one broken lead would otherwise remove both at the same instant. ③ BAT BAT — one node, not an output meteo-carrier — J5, two wires BATT+ / GND — two wires only, 20 AWG ↑ VBAT tapped BEFORE F1 → U3 → modem, ~500 mA in TX ↓ F1 1.1 A → MCP1700 LDO → the 3V3 rail fuse ~1.5 A JST-PH MAX17048 pack in, charger out JST-PH 3V3 off the Qwiic chain is its SUPPLY. The two JST-PH ports are the pack it MEASURES — separate pins, which is what lets a 3.3 V rail power a gauge watching 4.2 V. ⚠ PROC-18 — inline is inferred from the two ports, not decided. 10 kΩ NTC #2 → carrier IO13 / IO34 ④ PACK 6 × NCR18650GA — protected button-top 3450 mAh each · ~21 Ah in parallel · 3.0–4.2 V power path proposed — not yet decided supply only, not the measured pack
Three connector families, on purpose. JST-SM panel→combiner, JST-XH combiner→charger, JST-PH pack→charger: a panel cannot be plugged into a battery port, and the keying does the remembering instead of the builder. Wire is 24 AWG on the solar side and 20 AWG on the pack side — the pack link is the one that carries current, and most of it flows away from the charger.

The BAT pad is not an output. The pack, the charger’s BAT pad and the carrier’s J5 are one electrical point. Nothing draws through the charger — the LDO and the modem’s load switch hang straight off the node, and the charger merely pushes current into it when the sun is up. That is why the wiring page can say the discharge path “never passes the charger” while the drawing above it shows VBAT leaving one: same node, two ways of saying it. The practical consequence is that those two BATT+/GND wires carry the modem’s ~500 mA transmit burst, not just charge current.

The carrier, close up

The board itself, seen from above, with every socket and every wire port that the connection table gives it. The ESP32 module plugs into the middle; the off-board things stand around the edge with the cable that joins each of them, pin by pin. Pins are grouped by job, not by their place on the module’s header — the physical positions are what calipers on the two modules settle, and that is a gate layout cannot start without.

meteo-carrier — one board, five copies ≤ 100 × 80 mm · every wire port is JST-XH · ground is a pour on the back, not drawn J5 ▸ solar charger bq25185, off-board 1 BATT+ · 5 GND · 20 AWG XH-5: 2, 3, 4 are dead the BAT node — see above 1 × × × 5 F1 1.1 A U1 MCP1700 3.3 V LDO · 1.6 µA JP1 3V3 — the always-on rail VBAT — tapped before F1 U3 TPS22918 modem rail switch JP2 VBAT_RB_SW ≈500 mA in TX RB_EN → U3 ON R2 100k ↓ GND J6 ▸ RockBLOCK 9603 1 → pin 8, 3.0–5.4 V 2 GND 3 RXD ← IO17 4 TXD → IO16 5 On/Off ← IO14 (v3.D) 5 wires · ~500 mA in TX 1 2 3 4 5 UART + On/Off → J6 SOCK_FB — two turned-pin strips ESP32-WROOM-32E radio · RTC RAM FireBeetle 2 ESP32-E plugged, never soldered Low Power Pad cut asleep 23.9 h a day USB-C SOCK_DEVKIT — the wider pair, soldered on every board, empty on the probes IO26 IO17 IO16 IO14 3V3 GND IO25 IO18 IO19 IO21 IO22 IO4 IO13 IO34 IO35 3V3 GND GPS_EN R1 100k ↓ GND U2 TPS22918 GPS rail switch out → 3V3_GPS SDA1 / SCL1 — I²C1 GND 1 2 3 4 QW2 ▸ SAM-M8Q GPS 0x42 · I²C1 · a bus of its own rail live ~2 min/day on LAND, ~12 on SEA; off, its pull-ups die with it — the backfeed fix SDA0 / SCL0 — I²C0 GND 3V3 1 2 3 4 QW1 ▸ MAX17048 fuel gauge 0x36 · I²C0 · always on one Qwiic cable: supply + data the pack sits on its JST-PH ports — see the close-up above OW_DATA R3 4.7 kΩ ↑ 3V3 GND 3V3 1 2 3 J8 ▸ DS18B20 temperature probe 1 DATA · 2 GND · 3 3V3 1-Wire · through the hull sea on SEA, ground on LAND SENSE_EXC NTC_SENSE R4 10k ↓ GND R5 100k LEAK_SENSE C6 100n ↓ GND GND 1 × 3 1 × 3 J7 ▸ NTC #2, 10 kΩ at the pack 1 excite · 2 empty · 3 sense NTC #1 goes to the charger J9 ▸ leak pads, cavity wall 1 sense · 2 empty · 3 GND no bias at rest · IO35 reads SOCK_BARO · 7-way Fermion BMP581 0x47 · header soldered once INT SDO CSB SDA SCL GND 3V3 n/c n/c n/c SDA0 SCL0 GND 3V3 SCL0 SDA0 the same pair as IO21/IO22 BME280 — seat open 0x77 · a header board GND · 3V3 · SDA0 · SCL0 ⚠ PROC-17: socket or cable? power, always on a switched rail logic and data a net name with no wire = the same copper a numbered column is a port where a cable leaves
Two wires in, everything else out. The only thing that arrives on this board is BATT+/GND at J5 — the solar side never touches it since the combiner moved to the upper shell. From that node the board makes two rails: VBAT, tapped before the polyfuse so F1’s resistance never eats the modem’s margin, switched by U3 and handed straight to the RockBLOCK; and 3V3, through F1, the LDO and JP1, feeding the ESP32, both Qwiic ports, the barometer socket and the temperature probe’s lead. The GPS gets its rail from U2 and its bus from IO18/IO19, both its own. Every part with a price is in a socket or on a cable; the soldered parts are two switches, a fuse, a regulator, five resistors and four capacitors.

The two jumpers are instruments as much as switches. A shunt on JP1 connects the 3.3 V rail; pull it and the board is dead, which is how the rule “never feed 3V3 while USB is plugged in” becomes something a tired person cannot get wrong. Put a meter across the same two pins instead of the shunt and it reads the whole board’s sleep current without cutting a trace — every microamp figure in this book is meant to be measured there. JP2 does the same for the modem rail. And the board carries no I²C pull-up resistors of its own: the breakouts supply them, three sets in parallel on the sensor bus and the GPS’s own pair on its bus, which is exactly why switching the GPS rail off works.

Every part — what powers it, what talks to it

PartPowerDataPins on the MCU
Solar panels ×3source — 6 V, 110 mA each
Chargerpanels in, pack and VBAT outoff-board: BATT+ and GND to J5, nothing else
FireBeetle ESP323V3, always onit is the bus masterevery pin below is its own
BME2803V3 — 4-pin header, not QwiicI²C0, 0x77IO21 SDA0 / IO22 SCL0
BMP5813V3 via SOCK_BAROI²C0, 0x47IO21 / IO22, the same pair
MAX170483V3 via Qwiic QW1; the pack on its own JST-PHI²C0, 0x36IO21 / IO22 — it watches the pack, not the rail it runs on
SAM-M8Q GPS3V3_GPS — switched by U2I²C1, its own busIO25 gates U2; IO18 SDA1 / IO19 SCL1
RockBLOCK 9603VBAT_RB_SW — switched by U3, tapped before F1UART, plus its own sleep pinIO26 gates U3; IO16 RB_TX / IO17 RB_RX; IO14 RB_ONOFF
DS18B20 probe3V3 via J8, 4.7 kΩ pull-up1-Wire — data and clock share one lineIO4 OW_DATA
NTC — carrier legnone at rest: excited only for the readanalogue dividerIO13 SENSE_EXC → J7 → IO34 NTC_SENSE
NTC — charger legthe charger's own TS pinnone — it gates in hardwarenot on the carrier at all
Leak padsnone at rest: same IO13 excitationanalogue, 100 kΩ + 100 nFIO13 → R5 → IO35 LEAK_SENSE, J9

Three things in that table are the whole argument of the design. The GPS has its own I²C bus, because leaving it on the shared one and cutting its rail backfeeds about 2 mA through its protection diodes. Both load switches carry a 100 kΩ pull-down (R1, R2), so a rail cannot come up while the ESP32 boots and its pins are undefined. And the two analogue dividers are excited by IO13 rather than wired across the battery, so at rest they draw nothing at all.

The nets in this table are the contract, not a description of it: they are the column headings of device/hardware/carrier/connection-table.csv, which is what the board is fabricated from.

01

The brain

One small computer runs the whole probe, and it spends almost all its life asleep. It wakes for about three seconds every hour, reads the sensors, appends the result to a buffer that survives sleep, and goes back down. Four times a day, at 00/06/12/18 UTC, it wakes for longer and sends the buffer.

Sleeping is not an optimisation, it is the design. Awake the ESP32 draws about 50 mA; asleep it draws microamps, and all twenty-four hourly wakes together cost about 1 mAh a day — next to nothing.

The buoy spends ~48 best / ~79 typical / ~151 degraded mAh a day — a band rather than a number, because nobody has yet measured how long a satellite session takes in Southern Ocean swell. The modem is around 80 % of that bill and everything else is rounding.

FireBeetle 2 ESP32-E DFRobot DFR0654-F
ESP-WROOM-32E
owned 31 per probe dfrobot.com ↗ DFRobot FireBeetle 2 ESP32-E: a small black board with an ESP32-WROOM-32E module, USB-C socket and a white JST battery connector.

socketed on the carrier · Low Power Pad cut · ~3 s wake ×24/day · RTC RAM buffers 5 days

The microcontroller — the same ESP32 silicon as an $8 dev board, on a carrier built for low power. It has to reach ~12–23 µA in deep sleep, and every endurance figure in this book assumes it does. A plain DevKit idles in the milliamps and would empty the pack before the season ended, which is why no probe carries one.

Every deployed board has its "Low Power Pad" cut. Uncut, that pad feeds an onboard RGB status LED idling at ~500 µA, which holds the whole always-on rail at ~534 µA — ~12.8 mAh a day, larger than the GPS fix and all twenty-four hourly wakes combined. Inside a sealed opaque hull nobody can ever see that LED. Cut, the rail sits at ~26–37 µA, under 1 mAh a day. A board that reaches a probe uncut is not built to specification.

The board is built to one configuration: pad cut, socketed, and carrying the same firmware image as its two siblings. There is no spare board anywhere in the project, so any of the three has to be able to replace any other in the field without a rebuild.

The cut is irreversible, so the µA meter is a precondition, not a follow-up. The bench INA219 resolves to about ±0.4 mA and a cut board should draw 26–37 µA — a tenth of that instrument's own noise, so it reads the same whether the board draws 20 µA or 300. A board cut before the µA meter arrives therefore cannot be confirmed either way, and the cut cannot be undone to try again. The order is fixed: cut one board, measure it, then cut the other two — a bad result costs one board rather than three (backlog FW-08).

Readings live in RTC RAM — a small block of memory that stays powered through deep sleep — so nothing is lost between wakes, and the buffer has to hold about five days of readings against a run of failed satellite passes. The board is socketed, never soldered, so a dead one can be swapped without touching the carrier.

The carrier is laid out around this module's pin list, which is the most restrictive of the sockets the board has to serve. IO32/IO33 are not broken out at all; IO0/2/12/15 are strapping pins the chip samples at boot and so cannot be driven; IO1/3 are the USB console. Every allocation fits what is left — which is why the two rail gates sit on IO25/IO26 (present on every candidate, survive deep sleep, not strapping) and why both analogue sense jobs sit on input-only ADC1 pins.

Carrier PCB meteo-carrier, rev. 2
bench + deployed variants
to fab3 + 1 bench

~45 solder joints · modules socketed · discretes soldered

The board everything plugs into. A breadboard cannot cross the Drake Passage — vibration and damp find every loose jumper — so each module gets a socket, each external wire gets a terminal, and the handful of support parts (the two load switches, pull-ups, the sense divider) get soldered down.

Pin map — every allocation exists on both candidate modules

PinNetWhat it does
IO16 / IO17RB_TX / RB_RXSerial link to the satellite modem
IO18 / IO19SDA1 / SCL1GPS bus (I²C1) — its own, see the backfeed note
IO21 / IO22SDA0 / SCL0Sensor bus (I²C0) — BME280, MAX17048, BMP581
IO25GPS_ENTurns the GPS rail on via the load switch
IO26RB_ENTurns the modem's battery rail on, through the second load switch
IO14RB_ONOFFThe modem's own sleep input — wired as the alternative to cutting its rail
IO4OW_DATA1-Wire to the sea-temperature probe, 4.7 kΩ pull-up
IO13SENSE_EXCExcites the NTC and leak dividers — high only during a read
IO34NTC_SENSEBattery temperature (ADC1, input-only)
IO35LEAK_SENSELeak pads (ADC1, input-only)
spareIO23, IO36, IO39Unallocated
02

The senses

Three chips share one two-wire bus (I²C0 on IO21/IO22), each answering to its own address, and all three stay powered all the time because they idle in microamps. The GPS gets a second bus of its own. The two analogue sensors — battery temperature and the leak pads — hang off input-only pins on ADC1.

ADC1 is not an arbitrary choice. The ESP32's other converter, ADC2, becomes unreadable whenever the radio is active. Putting both analogue sense jobs on ADC1 means nothing in this design cares what the radio is doing.

BME280 SparkFun SEN-13905, with headers owned 1ordered 22 GY spares sparkfun.com ↗ SparkFun BME280 breakout, SEN-13905: a small red board with two soldered 0.1 inch header rows and no Qwiic connector.

I²C0 · 0x77 · 4-pin header · read every wake · never switched off

Air temperature and relative humidity, on the always-on sensor bus with the barometer and the fuel gauge. Four wires — power, ground and the two bus lines — off a 0.1 in header soldered to the board.

It is not the Qwiic board this project thought it had. Every record said SparkFun's Qwiic version until 2026-09-09; the board actually owned is SEN-13905, which carries plain headers and no Qwiic connector, so it cannot join the keyed chain the fuel gauge sits on. Nothing electrical moves — same sensor, same 0x77, same bus — but the keying does: a four-pin clip cannot be inserted backwards and a header can. How it attaches to the carrier is still open.

Pressure is not its job — that belongs to the BMP581, which reaches an accuracy this part cannot. What it carries is temperature and humidity, and sealed inside the hull the humidity channel does double duty as a condensation canary: rising internal RH is the first sign the hull is no longer dry.

Fermion BMP581 DFRobot SEN0667 owned 3buy 1 dfrobot.com ↗ DFRobot Fermion BMP581: a small black board with the sensor die, two solder jumpers marked I2C_Pull_Up and I2C ADDR, and two mounting holes.

I²C0 · 0x47 · SOCK_BARO header · read every wake

The precision barometer, ±0.3 hPa. Pressure is the most scientifically useful thing a small probe can produce — it is what weather models actually ingest — and it only counts if it is genuinely accurate, which is why this part exists separately from the BME280.

It also reports its own die temperature, which is not a weather number: it is the correction term. Electronics warm the air around them, and comparing die temperature to air temperature is how that self-heating gets subtracted back out.

Two practical constraints. The Fermion breakout has no Qwiic connector, so a pin header is soldered to it once and then it plugs into a socket on the carrier like the MCU does. And it only offers two I²C addresses (0x47 / 0x46), so a maximum of two can ever share a bus — which matters at calibration time, when all three flying units plus the reference are run side by side and each needs its own logger. Its address does not clash with the BME280's 0x77 or the fuel gauge's 0x36.

DS18B20 waterproof probe 1-Wire, stainless tip
Ø6.3 × 50 mm
owned 3buy 21 per probe Waterproof DS18B20 probe: a stainless steel tip on a black cable ending in three stripped wires, red, yellow and black.

1-Wire on IO4 · 4.7 kΩ pull-up to 3V3 · J8, pin order DATA·GND·3V3 · read every wake

A sealed stainless temperature probe sitting in a pocket in the bottom of the hull. It reads water temperature along the track — something no fixed station can measure, and enough to detect crossing an ocean front, one of the mission's four questions.

The pocket is unconditional, so the probe is too. The hull spec draws the pocket and its threaded roof bore on every hull whether a sensor goes into it or not, and blanking a hole is an untested variant of a joint that has never been pressure-tested. Fitting the gland the bore was drawn for is the better job than closing it off.

"1-Wire" means data and clock share a single line: the sensor and the ESP32 take turns pulling it low, and a 4.7 kΩ resistor pulls it back up when neither is. That makes it the only sensor here needing a pin that can both drive and read — everything else analogue sits on input-only pins. It is also the reason IO4 was spent rather than one of the cheaper input-only spares.

It is potted with thermally conductive epoxy — a different, faster-setting product than the structural one. Its lead reaches the dry cavity through a PG7 gland in the pocket roof, which is a real penetration: the thread is formed in 3 mm of printed plastic and has never been pressure-tested, so no hull is printed for deployment until it has been.

SAM-M8Q GNSS SparkFun GPS-15210
u-blox M8, chip antenna
owned 1buy 2 sparkfun.com ↗ SparkFun SAM-M8Q GNSS breakout: a red square board with the u-blox module, a backup battery disc, two Qwiic connectors and the I2C, JP1 and JP2 jumpers.

I²C1 (IO18/IO19) · rail switched by IO25 · a fix every 2 h · ~70 mA with the MCU up

Position and true UTC. The position is the measurement here — the drift track is what the buoy exists to produce. UTC matters just as much: the ESP32's clock drifts by minutes over months, the buoy transmits at fixed synoptic hours, and a timestamp that has quietly slid cannot be lined up against the reference series it was deployed to compare with.

A fix of a minute or two only works because the SparkFun board keeps a backup battery that holds the satellite almanac warm between power-ups, so it does a warm start (30 s – 2 min) rather than a cold one. The board may do better than that on SEA: SparkFun's guide puts the hot start (~1 s) window at four hours, and SEA fixes every two — inside it. LAND, at one fix a day, is outside it and keeps the warm-start figure. That assumption is still untested — it is one of the bench gates, and at 12 fixes a day this probe is heavily exposed to it: slow acquisition doubles the GPS line from ~14 to ~28 mAh/day.

Why its own bus. This is called the single most important electrical decision on the board. I²C lines are held high by pull-up resistors, and every chip has protection diodes from its pins to its own supply. Cut the GPS's power while its data lines stay on the shared sensor bus, and current flows from the bus pull-ups, through those diodes, into the dead chip — roughly 2 mA continuously, about 60 mAh/day — three-quarters of the buoy's entire daily budget, burned by a chip that is supposed to be switched off. Switching the GPS off would have cost more than leaving it on.

The load switch makes it worse, not better: it actively pulls the switched rail to ground, which hard forward-biases those diodes instead of letting the rail float up to where they stop conducting. Series resistors were tried on paper and rejected — 1 kΩ only halves it. A bus buffer chip works but costs $2 and an SMD part.

The fix costs nothing: give the GPS the second bus. The SparkFun breakout carries its own pull-ups powered from its own supply, so killing the rail kills the pull-ups too and there is nothing left to push current anywhere. It is not free in firmware, though — whenever the rail is off, IO18/IO19 must be set to inputs with the ESP32's internal pull-ups disabled, or the problem is rebuilt from the other side.

MAX17048 fuel gauge Adafruit #5580, STEMMA QT / Qwiic
ModelGauge algorithm
owned 3buy 1 adafruit.com ↗ Adafruit MAX17048 fuel gauge: a small black board with two JST-PH battery ports, two STEMMA QT connectors and a six-pin header row.

I²C0 · 0x36 · read every wake · ~4 µA hibernate

Battery millivolts and a state-of-charge percentage. Worth being precise about how it works: it is not a coulomb counter — it never measures current. It watches voltage and runs it through a lithium-cell model that accounts for load sag and relaxation. That is far better than a raw voltage reading, but it is still an inference from voltage.

That model matters because voltage lies here. The transmit window pulls about 290 mA from the pack; a reading taken near it shows a battery far emptier than it is. And lithium cells sit on a flat plateau for most of their discharge — between roughly 30 % and 80 % the voltage barely moves, which is exactly the range you want a number for.

It has three jobs. Millivolts ride in every message as telemetry. The percentage drives the cadence downshift — 4 → 2 → 1 messages a day — so a run of dark weeks degrades the mission gracefully instead of killing it. And the same reading gates the low-voltage lockout: below about 3.0 V, no transmit and no GPS, deepest hibernation, waking rarely to re-check. That reading is taken at the very top of the wake, before any rail is powered.

Why not just a resistor divider on an ADC pin? That was the alternative and it is still recorded as the zero-part fallback, but the ESP32's ADC is nonlinear and noisy, and this reading sits under the only over-discharge protection the design has. The discharge path runs battery → LDO → everything and never passes through the charger, so no hardware can cut it; a hardware disconnect was weighed and declined, because it inserts a failure point into the one path that must never break and hard-cuts mid-transmission instead of parking cleanly. Two hardenings come with the pick: a watchdog, so a hung loop cannot stay awake for weeks, and fail-toward-lockout — a failed read or a wedged bus is treated as low battery, never as "assume fine".

The open question is not whether to keep it but whether its percentage is trustworthy at −20 °C: the cell model is characterised near room temperature, and here it is watching six cells in parallel in Antarctica. The lockout threshold is deliberately left tunable until the cold-chamber work runs.

10 kΩ NTC thermistor B ≈ 3950, leaded
2 at the battery pack
buy 82 per probe

IO13 excites → NTC #2 (J7) → IO34 (ADC1) → 10 kΩ → GND · NTC #1 wires to the charger’s TS pin, a separate part

A resistor whose resistance falls as it warms, fixed to the battery pack. It exists because charging a lithium cell below freezing plates lithium metal onto the anode and permanently damages it — and this probe lives below freezing. Discharging cold is harmless; charging cold is what destroys the pack.

The cruelty is in the timing: solar panels harvest best on cold clear days, so the conditions that produce charging current are the conditions where the pack is coldest. Left alone, the probe would ruin its own battery exactly when it was charging well. The cells’ own protection boards do not cover this — they watch voltage and current, not temperature.

The charger gates; the MCU only reports. The actual cold-charge inhibit happens in hardware, on the charger board's own TS pin, off the carrier entirely — and on its own thermistor, the second of the two at the pack. The carrier's own divider does not protect anything; it just measures pack temperature so the firmware can set the "NTC gate state" flag in the message. Safety in hardware, reporting in software, on separate parts, so the gate and its report cannot fail together.

The divider is gated, and that is the clever part. A permanently wired 10 kΩ + 10 kΩ divider across the battery would waste current forever. Instead the top of the divider is driven by IO13, which goes high only for the hourly read — so at rest the whole thing draws nothing. IO13 does the same job for the leak pads.

There are two of them, and that is deliberate (decided 2026-09-08). One belongs entirely to the charger, one entirely to the carrier. Sharing a single thermistor would have hung the charge inhibit on the same node IO13 swings from 0 to 3.3 V every hour — and worse, one broken lead would have removed both the protection and the flag that reports it, in the same instant. A second $1 part keeps them independent.

Leak pads two bare pads on a boss
cavity wall, z ≈ −83
copper only, no part to buy

IO13 excites → 100 kΩ → IO35 (ADC1) → T9 → pads · 100 nF to GND · 50 ms settle, 8-sample median

Two exposed pads about 3 mm above the floor of the cavity, at the lowest point water would collect. Dry, nothing conducts; wet, the water bridges them and the leak bit goes out in the next message. If the seal ever fails we want the probe to say so, not die quietly.

The pads carry no standing voltage, and that is deliberate: a permanently biased pair of electrodes sitting in condensation would electrolyse — corroding themselves away and slowly draining the battery. They are excited only during the read, off the same IO13 line as the thermistor.

The 100 nF capacitor to ground is not decoration either. The ESP32's ADC wants to see a low source impedance, and the 100 kΩ excitation resistor is nowhere near low enough. The capacitor fixes that, but it and the resistor form a 10 ms time constant — which is precisely why the firmware waits 50 ms after raising IO13 and then takes the median of eight samples. Read it immediately and you measure the capacitor charging, not the water.

03

The voice

There is no phone signal in the Drake Passage, so the probe talks to satellites. Iridium is the one constellation that covers the poles, and it charges by the byte — which is why readings are batched all day and sent in one short burst, and why a full day of data is squeezed into 77 bytes.

This group is also the most expensive thing on the probe by a wide margin, and the biggest single line in the power budget — around 80 % of the daily energy — 29 to 116 mAh across the four windows.

RockBLOCK 9603 Ground Control, SMA version
$302
owned 2buy 1 groundcontrol.com ↗ RockBLOCK 9603: a green board carrying the silver Iridium 9603 module, two blue supercapacitors and a gold SMA connector.

UART IO16/IO17 · VBAT on pin 8, gated by IO26 · 3.0–5.4 V, 470 mA · 4×/day at 00/06/12/18 UTC

The satellite modem — the only part that can get a message off Antarctica with no infrastructure at all. The ESP32 talks to it over a plain serial link using AT commands, hands it a small packet, and it uplinks to whichever Iridium satellite is overhead.

Four transmits a day, at 00/06/12/18 UTC. Those are the main synoptic hours — the times the world's weather stations all report — so the data drops straight into an existing frame of reference. Three-hourly reporting (adding 03/09/15/21) was the alternative and was declined: it doubles the energy for what the mission spec judged no additional operational value. Each message carries six hourly readings, so all 24 readings still get home; only the latency changes.

The important detail is in the firmware, not the hardware: the reading buffer is cleared only when the modem confirms the send actually succeeded. A satellite pass that fails costs a retry, never data. That single rule is what makes the whole store-and-forward design honest.

It runs straight off the battery. The module accepts 3.0–5.4 V on pin 8 and the pack is 3.0–4.2 V, so no conversion is needed at all. The 1.3 A figure you see quoted is the bare Iridium module's peak — the RockBLOCK board hides it behind supercapacitors of its own, so the supply never delivers more than 470 mA. Those supercapacitors must never be removed; the datasheet says doing so will destroy the module.

Three minutes of transmitting is ~14 mAh, against 1 mAh for all twenty-four hourly wakes combined. That is why the rail is switched off entirely between windows, gated by IO26 with a 100 kΩ pull-down holding it off while the ESP32 boots.

Cutting the rail has a price: those supercapacitors take about 10 seconds to charge at every power-up before the Iridium module will do anything. Roughly 1.3 mAh a window — small, but it is paid four times a day, and it went uncounted in the budget until 8 September.

How long a session actually lasts is the largest unknown in the whole budget, and it has never been measured. A buoy washed by swell loses its sky view mid-pass and retries; the four windows are costed at 1.5, 3 and 6 minutes each for the best, typical and degraded cases, and that one term alone swings the daily total from ~48 to ~151 mAh — which is the difference between eleven months of life and under four. Measuring it is the highest-priority bench job before the September freeze.

Maxtena M1621HCT-P-SMA P/N 100-00003-02
Ø19 × 49 mm · $80
owned 2buy 1 maxtena.com ↗ Maxtena M1621HCT-P-SMA: a black cylindrical helical antenna about 19 mm across, with a gold SMA plug on its base.

1616–1626 MHz · 2.8 dBic · VSWR ≤ 1.5 · passive, no DC on the coax · IP67

The antenna the modem transmits through — a passive helical tuned to Iridium's band. Passive means it contains no amplifier and needs no power, so the coax carries only the radio signal and there is nothing on it that can fail.

Iridium satellites cross overhead from any direction, unlike a geostationary dish that can be aimed once. The antenna therefore needs a clear view of the entire sky, which is why it stands proud at the very top of the sphere and why nothing may sit above it.

It is ground-plane independent — most small antennas need a metal sheet beneath them to work against, and this one does not. Combined with being IP67 in its own right, that is what lets it pass straight out through the threaded gland in the crown. The hull needs no bulkhead connector face and no flat panel for it to bolt to.

Amphenol RF jumper 135110-03-06.00
RG-316 DS, 50 Ω, 6" · $26.50
owned 1buy 2 digikey.com ↗ Amphenol RF 135110-03-06.00: a short RG-316 coaxial cable with an SMA plug at one end and an SMA jack at the other.

SMA jack ↔ SMA plug · entirely inside the cavity

The short coaxial cable between antenna and modem. It looks like a trivial part and it is not — it is the one cable in the drawer with the right connector genders.

The antenna ends in a male plug, so whatever it screws into must be a socket. This cable is jack (socket) on one end and plug on the other, which is exactly the pairing needed. The $5 generic jumpers already in the drawer are male on both ends and cannot mate the antenna at any price. Its part description on the distributor's site hides the gender entirely; it took a direct question to the manufacturer to confirm.

50 Ω throughout, because a mismatched cable reflects transmit power back into the modem instead of radiating it.

04

The power plant

Sun charges a battery; the battery feeds a single always-on 3.3 V rail; the two hungry parts get switched rails of their own so they cost nothing when idle. Three domains, and the whole argument of the design is in which things are allowed to be always-on.

The buoy must survive the dark months on battery alone — ~11.6 months best, ~7.1 typical, ~3.6 degraded with zero sun — so solar extends life but is never counted on. That is why every microamp of idle draw gets argued about, and why a 2 mA leak was treated as a design emergency.

Voltaic P123 solar panel 6 V, 0.64 W, ETFE
66 × 66 × 2.9 mm, IP67
owned 3buy 63 per probe voltaicsystems.com ↗ Voltaic P123 solar panel, front: a 66 by 66 mm dark textured cell behind a clear ETFE face with a thin silver border. The same panel from behind, showing the label: Model P123 R1F, Power 0.64 W, Vmp 6.07 V, Imp 0.11 A, Voc 7.09 V, Isc 0.12 A, and the V- and V+ solder pads.

Vmp 6.07 V · Imp 110 mA · Voc 7.09 V · 3 in parallel → ~187 mAh per sun-hour

Three panels in three flat pockets cut into the crown of the sphere, wired in parallel — about 1.9 W together in good sun. Facing three different directions means a rolling buoy nearly always has one of them lit, which matters far more than peak output does.

Parallel, never series, and that is a hard rule. In parallel the array's voltage stays at one panel's 7.09 V open-circuit, which sits inside the input window of both candidate chargers. In series it would triple, blowing straight past the fallback charger's 10 V limit.

ETFE-faced and IP67, so spray and UV are not a problem. The crown pockets were dimensioned around this exact panel — a 76.166 mm pocket with a 71.4 mm seat — which is why the smaller P122 in the drawer is bench stock and not a substitute.

1N5817 Schottky diode 3 per probe, one per panel buy 10

on the solar combiner board in the upper shell · one per panel · ~0.3–0.45 V drop

One diode in series with each panel, on the way to the charger. Panels wired in parallel while facing different directions will fight: a shaded panel stops being a source and becomes a load, draining the lit ones through the common node.

A diode only lets current pass one way, so each panel can contribute or sit idle but never take. Schottky specifically, not an ordinary silicon diode: a Schottky drops about 0.3–0.45 V where a standard one drops 0.7. When the panel only makes 6 V and every volt matters to the charger's input window, that difference is worth the part number — and it is also why the diodes must exist in exactly one place. Put a second set on the carrier "for safety" and every panel pays the drop twice, about 0.9 V off a 6 V panel.

They live on a small solar combiner board in the upper shell, next to the panels, rather than on the carrier. The panels plug into it, it carries the three diodes and both junctions, and one JST-XH pair is the only solar wire that crosses the equator — which is one less thing threaded past the flange the hull has to seal around.

Solar charger Adafruit #6106 (bq25185)
chosen 8 Sept 2026
owned 2buy 11 per probe adafruit.com ↗ Adafruit bq25185 charger #6106: a small black board with USB-C, a JST-PH battery socket and a green screw terminal.

off-board on standoffs · exchanges only BATT+ and GND with the carrier

Charges the pack from the panels, and does power-path switching: when the sun is out the probe runs from the panels directly rather than cycling the battery. Every avoided charge/discharge cycle is battery life kept.

It has two jobs, not three. It does not supply the modem: the RockBLOCK takes 3.0–5.4 V straight from the pack and buffers its own transmit burst, so the 5 V boost on this board is dead weight. Its enable pad is tied to GND — nothing drives it any more, and an unused boost whose enable floats can come up on its own, which is a milliamp in a design budgeted in microamps.

Why this board and not the bq24074. Both do charging and power path, and both carry the temperature pin that inhibits cold charging — so the tie broke on price and on nothing else mattering: this one is $9 against $15. The bq24074 stays in the drawer, and one measurement could still promote it: if the bench meter shows this board does not idle in microamps, it is the fallback. The charger sits off-board on a terminal block, so that swap costs no board work.

Panasonic NCR18650GA 3450 mAh, protected button-top
6 in parallel per probe
owned 1920 on order 18650batterystore.com ↗

6 × 3450 mAh ≈ 21 Ah · ~17 Ah usable at +2 °C · 21 mm bay pitch · ~6.8 months, zero sun

The entire energy reserve. Six cells in parallel — which raises capacity, not voltage, so the pack behaves electrically like one very large 3.0–4.2 V cell. They drop into six bays printed directly into the battery platform, sitting low in the hull where the water is the thermal buffer.

"Protected" means each cell carries its own tiny circuit board that disconnects it if it is shorted or drained too far. This is the last line of defence, and it protects the cell — it fires at about 2.5 V. The firmware lockout fires at 3.0 V and protects the mission. They are not redundant with each other; they defend different things.

Match their charge before wiring them in parallel. Connect a full cell to a half-empty one and the difference dumps between them as current with nothing to limit it. This is also why 39 cells were bought against a need of 18 — a parallel bank wants spares that came off the same shelf at the same state of charge.

Nickel-plated cell contacts uxcell, 16.5 × 16 mm
12 per probe
1 spring + 1 plate per bay

fitted by hand after printing · bay walls raised 1.5 mm to back them

The metal ends of each printed cell bay — a spring at one end, a flat plate at the other. Plastic cannot conduct, and soldering directly to a cell is how you ruin one: the heat damages the internals near the terminal.

The spring does two jobs at once — it makes the electrical contact and it keeps the cell pressed against the plate so it cannot rattle. Nickel plating rather than bare copper because it does not oxidise into a resistive film, and a growing contact resistance in a parallel bank means one cell quietly stops contributing.

MCP1700-3302E/TO 3.3 V LDO, TO-92
250 mA, 1.6 µA quiescent
ordered 10 lcsc.com ↗

VBAT → polyfuse F1 → MCP1700 → 3V3 rail · always on

A three-legged regulator turning the battery's varying 3.0–4.2 V into a steady 3.3 V. It is here for exactly one number: it costs 1.6 µA to run. A typical regulator burns more than the sleeping ESP32 does, which would make the entire sleep budget pointless.

This is the always-on rail — brain, sensor bus and the three I²C chips hang off it and are never switched. It is also the rail that must never fail: the discharge path runs battery → this regulator → everything, never through the charger, which is precisely why nothing was allowed to be inserted in series with it.

TPS22918 load switch TI, SOT-23-6, ×2 per probe
each with a 100 kΩ pull-down
buy 82 per probe ti.com ↗

U2: 3V3 → GPS, ON = IO25 · U3: VBAT → modem, ON = IO26

Two of them. The first is an electronically operated switch for the GPS rail — a MOSFET plus the control circuitry to drive it cleanly. GPS is the second-hungriest thing on the probe and it is wanted for two minutes a day; leaving it powered would cost more than every sensor combined.

The pull-down resistor is not optional. While the ESP32 is booting its pins are undefined for a few milliseconds, and a floating gate could switch the rail on. The resistor guarantees "off" is the default state, including during a brownout or reset.

The second is identical and does the same job for the modem. It sits on VBAT, driven by IO26, and cuts the modem's power between transmit windows. Rated 2 A against a 500 mA load, it drops about 26 mV.

Its output-discharge feature — which actively drains the rail when it switches off — is the detail that turned the shared-bus leak into a serious drain rather than a small one, because it holds the dead chip's supply at ground and keeps its protection diodes conducting. It is a good feature that happened to make a bad wiring choice worse, and it is part of why the GPS ended up on its own bus.

Pack fuse ~1.5 A inline
at the BAT node
buy 4

worst legitimate draw ≈ 0.6 A · ~2.5× headroom

A fuse in series with the whole battery bank. Its rating is set by the largest current the probe is supposed to draw — the modem's ~500 mA plus an awake ESP32, about 0.6 A. Anything meaningfully above that is a fault. The fuse has to be small enough to act on one: a 3 A fuse in front of a 0.6 A load would let a 2 A fault burn indefinitely, which is not protection.

A 21 Ah bank into a harness short, inside a sealed hull, is the case it exists for. It is redundancy rather than the primary defence: every cell is the protected type, each board cutting at around 8 A, and a short pulls through all six at once so they trip together. It is fitted anyway because it is a few dollars against a fire in a hull nobody can open.

05

The hull

Two printed half-shells, glued and bolted at the equator, with five more printed parts inside. The hull is not packaging — it is the pressure boundary, the flotation and the mount for everything else, which makes the fasteners and the adhesive structural parts of it rather than accessories.

Four are built: three that deploy, and a fourth sacrificed to a 48-hour submersion test that proves the bonding process actually works before three real probes depend on it.

Polymaker PolyLite ASA PF01031, yellow, 1.75 mm buy 4 kg660 g per probe shop.polymaker.com ↗

Tg 98 °C · 43.8 MPa X-Y / 32 MPa Z · 3 mm wall, 5 perimeters · dry 7 h at 70 °C

The filament every printed part is made of. ASA rather than the usual PLA or PETG for two reasons: it does not go brittle and chalky under UV, and it bonds properly to epoxy and to itself.

The Z-strength number is the one that matters. A printed part is much weaker across its layers than along them — 32 MPa versus 43.8 — and the equator seam runs exactly across the layers. That weakness is why the joint is bonded and bolted rather than trusting either alone.

High-visibility yellow, which is the right colour for something you may have to spot in a grey sea. Dry the spool for 7 hours at 70 °C before printing — ASA absorbs moisture from the air, and wet filament prints weak and stringy, which on a pressure boundary is not cosmetic.

Equator flange hardware M5 × 16 socket cap ×8 · ISO 7092 washers ×16 · plain hex nuts ×8 · A4-316 owned, all three

~619 mm seam · stack closes at exactly 16.0 mm · 0.00 mm proud · 8 mm open-end spanner

Eight bolts clamping the two half-shells together. Their first job is holding the joint evenly closed while the epoxy cures; afterwards they are permanent mechanical backup should the bond ever let go.

A4-316 marine stainless throughout, and that is a rule, not a preference: two different metals in contact with seawater form a battery and the less noble one corrodes away. Every external fastener on the probe is the same alloy, which is also why the flange uses plain through-holes and nuts rather than brass inserts.

Plain nuts, not nylon-insert ones. Self-loosening under vibration needs the joint faces to slip sideways against each other, and a flange bonded across its full annulus cannot slip — no mechanism, no need for the locking nut.

The stack closes at exactly 16.0 mm and the bolt lands flush, so there is zero margin: a 1.6 mm washer or a nut 0.7 mm taller than specified will not fit. Use an open-end spanner — a socket fouls the curve of the hull.

Marine epoxy + slow hardener West System 105/209 or equivalent
~60 g per hull
buy starter kit

pot life ≥ 45 min · flange faces, 6 mm lap, external fillet, wire potting, gland, ballast bed

The actual seal — bolts alone do not make a hull watertight. It bonds both flange faces and the overlapping lap that backs them, fills the fillet outside, and pots every wire that passes through the shell.

The slow hardener is the specification, not a convenience. A 619 mm seam takes time to lay up evenly, and a fast epoxy that goes off in fifteen minutes will start curing before the second half is closed.

Wear gloves, without exception: amine hardeners are cumulative skin sensitisers — you can work with them for years and then abruptly become allergic — and this is a build with students on it.

Colloidal silica thickener e.g. West System 406 · ~10 g per hull buy

A very light powder stirred into the same epoxy — not a different product. Liquid epoxy sags out of a vertical groove and cures somewhere useless; thickened, it stays where it is put, which is what the external fillet running around the equator needs.

Pressure vent Amphenol LTW VENT-PS2NBK-O8001
M6 × 0.75, ePTFE, IP68
buy 4

seats from the pocket side in the crown's vent pocket · required on every probe

A small screw-in plug with a breathable membrane. A fully sealed sphere would measure only its own internal pressure, which makes the barometer — the probe's most valuable sensor — useless. The membrane lets air pressure equalise while blocking liquid water.

It has a second job the barometer does not care about: without it, the hull would balloon and crush as temperature swings, working the equator joint back and forth for months.

The thread is M6 × 0.75. Order against the part number above, not against a size remembered from a list — an M12 vent will not fit the pocket and cannot be made to.

Internal mounts M5 × 10 socket cap into
M5 × 8, Ø7.117 brass heat-set inserts
screws owned 60buy 12 inserts

15 per build · ballast lid 4 · battery platform 4 · main platform 4 · solar platform 3

What holds the four internal platforms into the shell. Printed threads strip; brass ones do not. A heat-set insert is a knurled brass sleeve pushed in with a soldering iron — the plastic melts around the knurls and locks it permanently.

The bore is cut deliberately undersize with a 1 mm sump at the bottom for the plastic the insert displaces. Melted material has to go somewhere; without the sump the insert stops proud and the platform will not seat.

The exact insert matters more than "M5 heat-set" suggests: the bore is sized for a Ø7.117 × 8.0 body, and the common generic sizes are Ø7.0 × 9.5 or Ø6.4 × 8. A narrower one spins in the mouth instead of melting in; a longer one has nowhere to go.

These are stainless screws into brass inside a sealed dry hull, which is the one place the same-alloy rule is relaxed — a galvanic couple needs an electrolyte, and if there is water in there the probe has already failed on other grounds.

Panel-frame fasteners M3 × 6 socket cap into
M3 × Ø4.0 × 4.0 brass inserts
owned 145 of each6 per probe

6 panel-frame lugs · Ø3.5 bore cut 5.0 deep · driven from inside the cavity

Six hold the three solar-panel frames onto the crown — two per frame. They are driven outward from inside the cavity, through a hole in the shell, which makes them fasteners on a real hull penetration. A seventh held the vent cover until that part was abandoned on 2026-09-10.

The 4.0 mm length is the right one and the 5.0 is not, even though both are in the drawer: the bore is 5.0 deep, so an insert as long as its own bore has no sump and stops proud of the surface.

The screw crosses 3 mm of shell plus a 0.5 mm air gap before it reaches thread, leaving only 2.5 mm of engagement — so every fraction of a millimetre a bonded frame sits proud comes straight off that. The × 6 length absorbs about half a millimetre of it, which is the accepted margin.

Closed-cell foam pad 3 mm sheet, ~120 × 110 mm per build buy 1 A4 sheet

Bonded to the underside of the main platform, pressing down on the cells below. 18650 cells vary slightly in diameter, and a cell that can move in its bay will eventually break a contact. The foam takes up the 3 mm gap and absorbs the variation without needing each bay to be a precise fit. Closed-cell specifically — open-cell foam would soak up any condensation and hold it against the pack.

Acetone technical grade, ~100 ml per hull buy if absent

Two jobs. Dissolved with scrap ASA it makes a slurry brushed inside the empty shells — it fills the microscopic gaps between print layers that would otherwise seep, and because it is the same material it fuses rather than coats. Neat, it degreases the flange faces before bonding: epoxy will not stick to a fingerprint.

Desiccant + carbon sachets 2 × 10 g indicating silica gel + 1 activated carbon buy 4 sets

Sealed inside the cavity at assembly. Whatever warm damp air is trapped when the hull closes will condense on the electronics the first cold night. The indicating type changes colour, which makes it a test instrument as well as a consumable — opening the submersion test article and seeing the colour tells you immediately whether water got in. The carbon sachet mops up epoxy cure vapour, which otherwise sits in the cavity and upsets the humidity sensor for weeks.

06

The keel

A sphere floats happily in any orientation, which is exactly wrong here: the solar panels, the antenna and the vent are all on one side of it. Weight low in the hull fixes that permanently, with no moving parts and nothing to run flat.

Steel bench block OWDEN, stepped puck
Ø76.5 × 16.2 mm, 69.04 cm³
owned 1530 g measured

calm waterline −2.2 mm · freeboard to the vent bore 67.2 mm calm, 54.8 at full drogue pull

The ballast — half a kilo of steel in the foot of the sphere. It pulls the centre of gravity below the centre of buoyancy, and that separation is the entire righting mechanism: tip the buoy and gravity turns it back, every time, with nothing to wear out or run flat.

Steel rather than lead, deliberately. This probe is expendable and may well be lost at sea, and lead is not something to leave in the Southern Ocean. Steel is about 30 % less dense so it takes more volume for the same mass — an accepted cost. It doubles as a real bench tool, which is why it was cheap.

It must be painted or epoxy-coated before it goes in: the chrome plating chips, and bare steel rusts in a hull that can condense.

Ballast collar + lid printed ASA, part of the hull set
4 × M5 into brass inserts
printed

A printed ring the steel puck drops into and a hollow lid screwed down over it. A loose half-kilo weight inside a buoy in a Drake Passage storm is a wrecking ball — it would destroy the battery platform above it in minutes. Four M5 screws into heat-set inserts clamp it so it cannot shift at all. The lid is hollow to save mass where mass is not wanted: high up.

Drogue materials not yet chosen
harness attaches outside, pierces nothing
own work cycle

at full pull the waterline rises to +10.2 mm — the case the freeboard rule is sized against

An underwater sea-anchor on a line below the buoy. Without one the buoy is pushed by wind on the exposed part of the sphere and tracks the weather instead of the current — which would make the drift measurement answer the wrong question entirely.

A drogue hangs deep enough to be gripped by water rather than air, so the assembly moves with the current and the buoy is dragged along by it. Still open design work — but its pull is already in the hydrostatics, because a drogue under load pulls the buoy down, and the vent bore has to stay above water even then.

owned in the drawer ordered paid for, not arrived to buy not yet bought

What is still missing

The three biggest gaps are the third satellite modem and antenna (~$350 together), 4 kg of filament for four hulls, and the small electronics believed bought until a receipt check on 8 September found no such order — the load switches and the thermistors. A third charger (~$9) joined that list the moment the charger was chosen: two boards of each candidate looked like enough stock only while both types counted.

No bulk capacitor appears on that list, because the design has none: the modem runs straight off the battery and buffers its own transmit burst. The charger was chosen on 8 September — the bq25185 — so what is open about it now is verification, not the pick: its idle current is bench gate ①.

Part photographs are the manufacturers' own, from the product pages linked beside each part: DFRobot (FireBeetle, BMP581), SparkFun (BME280, SAM-M8Q), Adafruit (MAX17048, charger), Ground Control (RockBLOCK), Maxtena (antenna), Voltaic (solar panel), DFRobot (BMP581, and a photograph of the same commodity waterproof DS18B20) and Amphenol/Digi-Key (the RF jumper). They show the catalogue part, not the individual unit in the drawer — which is a distinction this project has already paid for once, when the BME280 turned out to be a different board from the one every document named.

Live quantities and prices are in device/hardware/bom/bom-prod.md; what is physically in the drawer is device/hardware/inventory.md; nets and pins are in the carrier spec; the hull's own figures are in device/enclosure/buoy-description.md. This page is a plain-English reading of those; each figure's home is the document that owns it.