Nobotic USV, CD25D conversion, companion note to the Electronics and Wiring Plan

Node Boxes Explained v9.6

How the boxes around the boat work: what a node is, how the Pi talks to it, what an opto and a 1-wire chain are, and how the release channels trigger a burn wire without ever releasing by accident. Two boxes are team-built: the central node beside the battery and compute area, and Release Node B, a small second release node at the stern. Everything else is a purchased controller that already carries its own microcontroller. Written to be read cold. Sources: the Electronics and Wiring Plan, the Compute Bay Housing and Wiring Plan sec 9 to 11, the Build Guide sec 8.2A.

CAN data (blue)release path, live only when enabled (red)safe / idle state (green)field wiring, 24 V or sensor leads (brown)

1. The big picture

The Pi is the brain. It never touches a burn wire, a pump or a motor directly. It sends short messages down one wire, the CAN bus, and boxes do the physical work where the work is. Two of them are team-built. The central node, a $11 microcontroller (the Nucleo) beside the battery and compute area, listens on the bus, reads its sensors, triggers its release channels and switches the convenience loads. Release Node B is a second small release node at the stern, on the house bus with its own fuse; it carries the horn-B burn-wire channel of each drogue lid, behind the same two-conditions enable-then-release interlock (the steering pull-pin paths it once carried are DELETED at v9.4 - single-actuator steering). Splitting the channels means one box death can no longer remove every release on the boat. The other boxes are purchased controllers with their own brains: the VESC (motor controller; the backup VESC B and its phase-transfer contactor are MOVED TO BOAT 2 at v9.5, Mike 2026-09-05, so Boat 1 sails with one VESC), the em-trak transponder. (The rudder actuator, the Ewellix CAHB-22 at v9.6, is a plain DC actuator with no brain and no bus; the central node drives it.) (The FSESC box and the backup/aux actuators are DELETED at v9.4 - single-actuator steering; the aux rudder is Boat 2 only.) If the bus goes quiet, every box falls back to a safe state on its own: the Ewellix's self-locking screw holds the rudder where it is, the release buses stay dead (no enable, no gate), the VESC ramps to zero. The rule behind this: no safety default depends on a message arriving (Build Guide 5.1).

Pi A (brain) CAN HAT, both buses CAN bus: one twisted pair + 24 V, every box hears every message Central nodereleases, monitoring, loads Release Node Bstern releases, house bus FSESC boxdeleted v9.4 (Boat 2) Ewellix CAHB-22 (v9.6)rudder: no bus, central node drives it Aft junctionterminals, PoE (no node) Native gearVESC A, em-trak actuators, burn wires,probes, relays drogue lids (horn B) BLDC motor, encoder B rudder arm (self-locking) bilge, post, cameras;trunk to central
Figure 1. One wire (the CAN bus) carries every command and every report. The team-built central node sits beside the battery, busbars and compute area; the team-built Release Node B sits at the stern; the FSESC box is DELETED at v9.4 (retained as Boat 2 reference); the Ewellix steering actuator is driven by the central node (a plain DC actuator, not a bus device; confirmed 2026-09-15); the aft junction is a passive terminal box whose sensors ride a trunk to the central node (one trunk is likely enough at v9.5; count at fit-out).

How a message is addressed

Every box on the bus has a number (its address). Every message has a number that says what it is. We choose the numbers once and print them on the lids. Example: central node = address 40; message "enable" = 40-01; message "release channel N" = 40-02 with N inside it; its status report back = 40-81. Release channels are numbered too: 1 and 2 = the drogue lids (horn A on the central node, horn B on Release Node B), 3 to 6 = the four JSD release actuators (central node), 7 to 9 = reserved for the Boat 2 aux rudder (unwired), 10 to 15 = RETIRED at v9.4 (pull-pins), 16 = RETIRED (trim decouple). Release Node B has its own address and carries its own channel subset; the release-channel map is OWNED by the Electronics and Wiring Plan v9.6 sec 4.3. Purchased gear (the VESC in its own frames, the em-trak in NMEA 2000; on Boat 2 the Electrak in J1939) already has its own numbering and the Pi speaks theirs to them. The battery watchman (SBMS0) is on no bus. At v9.5 (Mike, 2026-09-05; this reverses the monitoring-only decision of 2026-08-29) it has one hand: its EXTIO4 output pauses all five solar chargers through five Victron VE.Direct non-inverting remote on/off cables (ASS030550320) wired in parallel, through a 1k 1 W resistor. It pauses on a high cell, on the pack below 32 F, or when the SBMS0 itself is dead. A dead watchman pauses charging for at most 10 minutes: then the central node's bypass on relay channel 8 restarts the chargers and charging continues. It controls no load; the Pi controls no charging. Its telemetry reaches Pi A through the Electrodacus WiFi/USB add-on board and the USB isolator (optional).

2. Inside the team-built nodes

Two team-built boxes share this skeleton. The central node is the full build: sensor breakouts (humidity, and at v9.5 a BME280 barometer moved inside from the deleted post weather pod; no gas sensor breakout: deleted, do not re-propose), one 8-channel opto board, one 8-channel relay module, the MOSFET boards, the Ewellix reversing drive and its steering power-cut relay, and one MCP23017 I2C expander. The expander (v9.5, Mike 2026-09-05) is a 16-output chip on a screw-terminal board, about $6; it drives only the convenience outputs - the switched-load relays (Compute Bay Plan v9.6 sec 11: four loads, the bilge pump manual-on and the charge bypass) and the steering power-cut coil - with pull-down resistors under its terminal screws so a reset reads as OFF. If the expander or the I2C bus dies, its outputs float: the loads drop out (same as a dead node, already accepted) and the steering power-cut relay de-energizes to CLOSED, so steering keeps its feed. Every release channel and the enable relay stay on native Nucleo pins, so the expander is never in the release chain. With that the Nucleo uses 17 of its 22 pins (was 64 asked of it at v9.4) and has 5 spare. Release Node B is the short build: the Nucleo on its screw-terminal carrier, the CAN transceiver, an enable relay and its MOSFET pairs, fed from the house bus through its own fuse. Only the boards bolted on for inputs and outputs differ. Any later node would look the same again (for example a small forward node for the lightning detector, if the AS3935 false-triggers next to Pi B). Nothing is soldered: the Nucleo plugs into a screw-terminal carrier, every board has screw terminals, the DIN blocks take ferrules, and the 5 V converter has wire leads.

plastic IP67 box, glued to a pad, cables in through glands at the bottom 24 V feed ingland 5 A autoreset breaker DIN terminal rail24 V, ground, every fieldwire lands here first 24 V to 5 V converterpotted, fixed, wire leads Nucleo-G431 (KB or RB)on a screw-terminal carrierruns the node's program CAN transceiverthe bus interface to the teeoutside the box Opto input board8 things in (switches,probes, contacts)8 clean yes/no out field Output boardsrelay module (24 V coils) orMOSFET switch moduleNucleo pin says on/off, board switches 24 Vloads via MCP23017 expander pins (v9.5) to solenoid,motor, relay coil 24 V for the loads Sensor breakoutshumidity, BME280, 1-wire probes
Figure 2. The skeleton of the central node; Release Node B is the same pattern with fewer boards (no opto board at all at v9.5). Field wiring lands on DIN terminals; the Nucleo only ever sees 3.3 V signals, through the opto board for inputs and through relay or MOSFET boards for outputs. At v9.5 the MCP23017 expander sits on the I2C line between the Nucleo and the relay module for the seven convenience outputs (not drawn); the release MOSFETs and the enable relay stay on Nucleo pins. The 24 V that actually moves things never passes through the microcontroller.

What an opto is

An optocoupler is a tiny LED and a light sensor sealed in one chip. Current from the field side lights the LED; the light turns on the sensor on the computer side. There is no metal path between the two sides, only light. So a 24 V switch out on the rudder, or a lightning surge on a long lead, can be read by the 3.3 V computer without any way for the 24 V or the surge to get in. The "8-channel opto board" is eight of these with screw terminals: eight field wires in, eight clean yes/no signals to the Nucleo.

field side (24 V, long wires) computer side (3.3 V, Nucleo) LED switch closes → current sensor clean yes/no to a pin only light crosses this gap no wire between the sides: surges cannot cross
Figure 3. Optocoupler in one picture. The board version repeats this eight times with screw terminals.

What a 1-wire chain is

DS18B20 temperature probes are called "1-wire" because many probes share one data wire (plus power and ground). Each probe has a serial number burned in at the factory. The Nucleo asks them one at a time, a few times a minute, and puts the temperatures on the CAN bus. A Nucleo can run several chains, one per pin: the central node has chain 1 for the six battery probes and chain 2 for compartment air (the motor jacket and bearing probes are DELETED at v9.5, Mike 2026-09-05: the motor's own thermistor feeds the VESC, which derates by itself). One 4.7 k resistor across data and 3.3 V, held under a terminal screw, is the only extra part.

Nucleo3.3 V, GND, pin D2 3.3 V data GND 4.7 k probe 28-A1… probe 28-7C… probe 28-F0…
Figure 4. Three probes on one chain. Add probes by tapping the same three wires; the serial numbers tell them apart.

3. The release channels, step by step

These are the channels in the central node and Release Node B that can do something irreversible (drop a drogue lid, cut a burn wire), so they are built like a two-key vault: two independent conditions, no single fault. Two independent things must both be true before anything moves, and with no power at all it can do nothing.

The channels are split across the two nodes. Release Node B carries the horn-B channel of each drogue lid (the steering pull-pin stations and their channels 10 to 15 are DELETED at v9.4); the central node carries the rest. Both nodes use the same two-conditions enable-then-release interlock shown here, each behind its own enable relay and release bus. Each drogue box's two channels also reach their nodes by separate physical routes (Transom Drogue Box Guide). One box death or one flooded trunk can no longer remove every release on the boat.

24 V infuse ENABLE relayopen when idle RELEASE BUS: dead until enabled, times out by itself Nucleo closes it on ENABLE(relay module channel 1) Channel type A: solenoid (T8 actuators) solenoidor actuator flyback diode MOSFETon = RELEASE N ground Nucleo pin Channel type B: burn wire (drogue lids) burn wirenichrome coils SHORT relayDELETED v9.5two conditions remain MOSFETon = RELEASE N ground Nucleo pin Opto input board (readbacks DELETED v9.5) • confirm switches: all DELETED (drogue lid v9.2, pull-pins v9.4, JSD + bridle v9.5) - speed drop + aft camera • daily resistance test: DELETED v9.5 • relay-state readback: DELETED v9.5 Nucleoreports on CAN to Pi A"channel 3 released" (commanded)
Figure 5. Two channel types on one release bus. Idle: enable relay open, release bus dead, MOSFETs off. Nothing can release even if a wire chafes to 24 V. Enabled: bus live for a timed window. Release N: the node turns on that channel's MOSFET. The burn-wire short relays are DELETED at v9.5 (Mike, 2026-09-05): the release bus is already dead until the enable relay closes and each channel also needs its MOSFET on, so two conditions remain and the third is dropped; this also reverses the v9.4 addition of short relays and an opto board to Release Node B. The confirm switches, the daily resistance test and the relay readbacks are DELETED with them: the node reports what it commanded, and drogue deployment is confirmed by speed drop and the aft camera. Both release nodes repeat this pattern, each with its own enable relay and release bus.
StateEnable relay (condition 1)Release busBurn-wire short relay (DELETED at v9.5)MOSFETs (condition 2)Can anything release?
No power at allopendeadnoneoffNo
Idle, poweredopendeadnoneoffNo, even with a shorted wire
Enabled (signed command)closed, timer runninglivenoneoffNot yet
Release channel NclosedlivenoneN on for set timeOnly channel N
Timer expiresopensdeadnoneoffNo

The parts, and why each is there

PartJob in one lineWhy not skip it
Fuse on the feedProtects the wire into the boxStandard practice; a short in the box must not take the branch down
Enable relay (relay module channel)Cuts all release power until the Pi says ENABLE, then only for a timed windowThe first of the two independent faults needed to release. A relay is a real air gap; software cannot leak through it
MOSFET switch per channelThe Nucleo's RELEASE command turns one channel on for a set timeThe second independent fault. Handles the solenoid or burn-wire current the Nucleo pin cannot
Flyback diode across each solenoidAbsorbs the coil's kick when switched offWithout it the kick kills the MOSFET
Normally-closed short relay across each burn wire - DELETED at v9.5 (Mike, 2026-09-05)Was: shorted when idle so no stray current could heat the wire; opened a moment before releaseDropped: the release bus is already dead until the enable relay closes and each channel also needs its MOSFET on. Two conditions remain; the third is gone, on both nodes (the v9.4 addition to Release Node B is reversed)
Opto input board (central node only, one board)Reads the two Water Witch pump states (24 V present = pump running) without connecting 24 V to the computer. Confirmation switches, the resistance test and the relay readbacks are DELETED at v9.5Long field leads see surges; light-only coupling keeps them out of the Nucleo. Release Node B has no opto board at v9.5
Nucleo on the CAN busDoes the sequence, keeps the timer, reports every stepPuts the logic next to the loads and away from the Pi; on bus silence it does nothing, which is safe

4. Steering: the FSESC box, and no node at all for the primary

[DELETED at v9.4 - single-actuator steering; retained as Boat 2 reference] The FSESC box, encoder B and the backup rudder motor described below are deleted at v9.4 (2026-08-27, Boat 1), and the aux rudder is Boat 2 only. The one actuator on Boat 1 is the Ewellix CAHB-22 (v9.6, confirmed): a 24 V DC actuator with a self-locking screw and its own position feedback, driven by a reversing DC drive in the central node (the 30 A relay modules on hand as a pair, or an H-bridge) with current sensing for jam detection, behind the same de-energized-closed power-cut relay. It is not a bus device. The Thomson Electrak sentences below are Boat 2 reference.

The backup rudder motor is a small brushless motor (a NEMA-23). Brushless motors need an electronic driver; the FSESC is that driver, a little brother of the propulsion VESC, and it speaks CAN and does position control on its own - so there is no Nucleo in this box: Pi A sends it a rudder-angle command over the house bus and it drives the motor to it, reading the AS5048A angle sensor (encoder B) on its own encoder port. The phase-short relay's coil rides the box feed, wired so that with no power it connects the motor's three wires together; a shorted brushless motor resists turning, so the backup rudder is gently braked whenever the box is dead. On Boat 2 the primary rudder needs no box at all: the Thomson Electrak is a J1939 device that takes position commands from Pi A on the control bus, holds on its internal brake, and reports position and overload; the only thing between it and the bus is a power-cut relay in the central node, the Pi's way to drop a jammed or runaway unit. That relay is de-energized-closed: with the central node dead, the actuator stays fed. Cutting actuator power takes a live node and a command, so losing the node cannot take the primary rudder with it. On Boat 1 the same relay sits in the Ewellix feed, ahead of the reversing drive, with the same logic. Encoder A, the second angle sensor on the same magnet, lands in the aft junction and rides the sensor trunk to the central node.

Pi Arudder-angle command CAN FSESCdriver + position loop 3 phase wires BLDC motorbackup rudder phase-short relayno power = wires joined = brake AS5048A encodertrue rudder angle encoder B on the FSESC's own port own 24 V feed, own fuse
Figure 6. The FSESC box. Rudder-angle commands go over CAN from Pi A to the FSESC, which drives the motor and reads its own encoder; the relay's resting position shorts the motor so a dead box still damps the rudder.

5. Monitoring in the central node: volts, amps, temps, and the switched loads

An INA226 is a $6 chip that measures voltage and current on one wire. It measures current by watching the tiny voltage across a shunt, a precise low-value resistor the current flows through. At v9.5 (Mike, 2026-09-05) the branch current meters are DELETED: the bilge pump and Starlink/PoE INA226 modules and their I2C chain out of the central node are gone (pump running is known from the Water Witch 24 V output), and the only INA226 left on the boat is the feed monitor inside the Pi A box. The central node now reads: the two Water Witch pump states through its one opto board; the battery (six probes) and compartment DS18B20 chains; the humidity breakout and the BME280 barometer on the I2C chain; rudder encoder A on its PWM output; and the post wind sensor (Calypso CMI1018) on a UART. Deleted with the meters at v9.5: the high-water sensor (for good), the shaft seal probe, the shaft rpm sensor, the motor jacket and bearing probes, the nav light current sense, and the surge-device status contacts (the MOV ladder and PV surge devices are checked with a meter at each refit and after a strike, not en route). The five MPPT VE.Direct ports carry the SBMS0 charge-pause cables (section 1), so no solar data reaches this box; the VE.Direct-to-USB idea of the GPIO review is superseded by the pause cable on the same port; no per-string data at all: Bluetooth is OFF on the MPPTs (Mike, 2026-09-05: too much watt-hour draw) and the port carries the pause cable. Its one relay module carries the enable relay plus the convenience outputs: four switched loads (Starlink power, the AIS transponder, the science group, the motoring whites coil), the bilge pump manual-on on channel 6 (primary pump only; the backup pump stays on its Water Witch alone) and the charge-continue bypass on channel 8. The PoE switch channel is gone at v9.6: the one TSW202 switch is always on, never on a relay (Compute Bay Plan v9.6 sec 11 owns the map). Two channels are spare. The coils are driven from the MCP23017 expander (section 2). Relay direction is part of the design here. All the load channels but one fail to OFF: they drop out if the node or the expander dies, which is why nothing survival-critical runs through them and the night lights are on a plain photocell relay in the aft junction. The AIS transponder channel is the one exception: it rides a normally closed contact and fails to ON, so a dead node leaves the transponder powered and the boat stays visible to shipping.

24 V branch, e.g. Starlink shunt to the load INA226branch meters DELETED v9.5 I2C Nucleovolts + amps → CAN to Pi A
Figure 7. One branch measured, kept for reference. The branch meters on the central node are DELETED at v9.5 (Mike, 2026-09-05); the pattern survives only as the feed monitor in the Pi A box, which reports to the Pi, not to this Nucleo.

6. Why this arrangement

Moved to the central changelog with the v9.1 release.

7. Options considered

Moved to the central changelog with the v9.1 release.

8. Numbers you will see on lids and in the docs

ThingNumber means
Node address (e.g. 40)Which box a CAN message is for or from (40 = the central node; the purchased devices keep their own)
Message ID (e.g. 40-02)What the message is (enable, release, status, temperature report)
Release channel (1 to 6 live; 7 to 9 reserved for Boat 2, 10 to 16 retired)Which solenoid or burn wire, printed at both ends of its cable
Probe serial (28-xx…)Which DS18B20 a temperature came from; read once at the bench, written into the config
I2C addressWhich device on the central node's I2C chain: humidity breakout, BME280 barometer, MCP23017 expander (set by its address jumpers). The INA226 branch meters and their 0x40 to 0x4F range are DELETED at v9.5
Opto board input 1 to 8 (central node only)Which field contact; at v9.5 only the two Water Witch states are wired. Label the DIN block the same

Companion explainer to the Electronics and Wiring Plan; kept with the v9.6 set but not a numbered member. Version history and decision records (why this arrangement, options considered) live in the central changelog.