sphere200g_p123 · SEA — the Drake Passage drifter
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.
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 book | LAND-1 / LAND-2 | |
|---|---|---|
| Keel | 530 g steel ballast in a printed collar under a bolted lid | omitted — the station is bolted to a bracket instead |
| Drogue | sea anchor on a line below the hull | none |
| Internal screws | 15 | 11 — the ballast lid's four are not needed |
| Transmit | 4× a day, 00/06/12/18 UTC | 1× a day |
| GPS fix | every 2 h — the track is the measurement | once a day, for the clock only |
| Message | schema 3, 77 bytes | schema 2, 189 bytes |
| Energy | ~48 / ~79 / ~151 mAh a day | ~20 mAh a day |
| DS18B20 probe | same part, same pocket — reads water along the track | same part, same pocket — reads ground or snow |
| BME280 humidity | sealed inside: a condensation canary | real 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.
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.
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.
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.
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
| Part | Power | Data | Pins on the MCU |
|---|---|---|---|
| Solar panels ×3 | source — 6 V, 110 mA each | — | — |
| Charger | panels in, pack and VBAT out | — | off-board: BATT+ and GND to J5, nothing else |
| FireBeetle ESP32 | 3V3, always on | it is the bus master | every pin below is its own |
| BME280 | 3V3 — 4-pin header, not Qwiic | I²C0, 0x77 | IO21 SDA0 / IO22 SCL0 |
| BMP581 | 3V3 via SOCK_BARO | I²C0, 0x47 | IO21 / IO22, the same pair |
| MAX17048 | 3V3 via Qwiic QW1; the pack on its own JST-PH | I²C0, 0x36 | IO21 / IO22 — it watches the pack, not the rail it runs on |
| SAM-M8Q GPS | 3V3_GPS — switched by U2 | I²C1, its own bus | IO25 gates U2; IO18 SDA1 / IO19 SCL1 |
| RockBLOCK 9603 | VBAT_RB_SW — switched by U3, tapped before F1 | UART, plus its own sleep pin | IO26 gates U3; IO16 RB_TX / IO17 RB_RX; IO14 RB_ONOFF |
| DS18B20 probe | 3V3 via J8, 4.7 kΩ pull-up | 1-Wire — data and clock share one line | IO4 OW_DATA |
| NTC — carrier leg | none at rest: excited only for the read | analogue divider | IO13 SENSE_EXC → J7 → IO34 NTC_SENSE |
| NTC — charger leg | the charger's own TS pin | none — it gates in hardware | not on the carrier at all |
| Leak pads | none at rest: same IO13 excitation | analogue, 100 kΩ + 100 nF | IO13 → 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.
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.
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.
~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
| Pin | Net | What it does |
|---|---|---|
| IO16 / IO17 | RB_TX / RB_RX | Serial link to the satellite modem |
| IO18 / IO19 | SDA1 / SCL1 | GPS bus (I²C1) — its own, see the backfeed note |
| IO21 / IO22 | SDA0 / SCL0 | Sensor bus (I²C0) — BME280, MAX17048, BMP581 |
| IO25 | GPS_EN | Turns the GPS rail on via the load switch |
| IO26 | RB_EN | Turns the modem's battery rail on, through the second load switch |
| IO14 | RB_ONOFF | The modem's own sleep input — wired as the alternative to cutting its rail |
| IO4 | OW_DATA | 1-Wire to the sea-temperature probe, 4.7 kΩ pull-up |
| IO13 | SENSE_EXC | Excites the NTC and leak dividers — high only during a read |
| IO34 | NTC_SENSE | Battery temperature (ADC1, input-only) |
| IO35 | LEAK_SENSE | Leak pads (ADC1, input-only) |
| spare | IO23, IO36, IO39 | Unallocated |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
~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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.