Coastal Profiling Float — Software User Manual¶
The Coastal Profiling Float (CPF) is an autonomous underwater single degree-of-freedom vehicle developed at MBARI for coastal ocean profiling, designed as a deployment platform for chemical sensors and oceanographic instruments. This manual covers the embedded firmware that runs on the CPF's onboard microcontroller.
CPF Project 901206, software managed by Gene Massion & Eric Martin.
Hardware Overview¶
The CPFp3 (3rd generation design) is built around a GHI G400-S System on Module (SOM) running the .NET Micro Framework. The hardware stack consists of:
- MBARI Motherboard — the core carrier board with integral pump power switching, onboard power electronics with energy monitors, and daughtercard slots
- Power Switch Boards (ISB) — MBARI-designed daughtercards that expand UART count via Exar I²C UART bridges and provide switched power outputs with energy monitors
- Digital I/O Cards — for valve control and other discrete outputs
Firmware Architecture¶
The firmware is organized into four projects:
| Project | Description |
|---|---|
CPF |
Main application — entry point, mission state machine, and state implementations |
libSWModules |
Platform-independent software modules: mission configuration, engineering logging, message queuing, watchdog |
libHWModules |
Hardware abstraction layer: motherboard, LHE board, energy monitors, storage, UART drivers |
libSensorModules |
Instrument drivers: SBE41 CTD, Iridium modem, GPS, Aanderaa optode, Wetlabs FLBB, OCR504, buoyancy engine, factory console |
Mission State Machine¶
The CPF operates as a state machine. On every power-up, SystemConfigManager checks whether the float woke from a scheduled sleep (by inspecting LastState in the config file) and either resumes the mission or begins fresh.
The full set of states is:
| State | Description |
|---|---|
SMNotRunning |
Default power-on state — no mission active |
preMissionDelay |
Waits a configurable delay before beginning the first profile |
initMission |
Initializes mission-wide variables and data directories |
initProfile |
Prepares for a new profile: increments profile counter, opens data files |
ABDecBuoyFast |
Rapidly retracts the air bladder to begin descent |
ABDecBuoySlow |
Slows retraction as the float approaches negative buoyancy |
descend |
Float descends to park depth |
anchor |
Float sits at bottom; waits for deanchor criteria |
deAnchor |
Float detects departure from bottom and begins ascent |
startCP |
Initializes CTD continuous profile (CP) mode before ascending |
ascend |
Float ascends to the surface, sampling with the CTD |
dumpCPData |
Uploads CP data collected during ascent |
surfaceOpsSetBellows |
Adjusts bellows to surface ops target position |
surfaceOps |
Surface operations: communicates via Iridium, receives commands, acquires GPS |
recovery |
Emergency recovery mode: drives bellows to recovery position and transmits |
exit |
Halts the state machine |
Key Instruments¶
| Instrument | Interface | Description |
|---|---|---|
| SBE41 CTD | COM1, 9600 baud | Seabird SBE41 conductivity/temperature/depth sensor |
| Elmo motor controller | COM2, 115200 baud | Controls the hydraulic pump for buoyancy adjustment |
| Iridium modem | COM3, 19200 baud | Satellite two-way data and command link |
| Bluetooth console | COM4, 115200 baud | Factory mode serial interface |
| MBARI MSC | COM5, 9600 baud | Multi-sensor controller (pH, NO₃, etc.) |
| Aanderaa 4330 Optode | COM6, 9600 baud | Dissolved oxygen sensor |
| OCR504 Radiometer | COM8, 9600 baud | Hyperspectral radiometer (I²C-bridged UART) |
| Wetlabs FLBB2K | COM9, 19200 baud | Fluorescence/backscatter sensor (I²C-bridged UART) |
| u-blox GPS | I²C, addr 0x42 | Surface GPS fix for position and time sync |
Further Reading¶
- Configuration — full reference for
config.xmlparameters - Factory Mode — interactive serial console command reference
- Runtime Console Commands — always-on
$commandinterpreter reachable via Bluetooth or Iridium MT-SBD - Iridium Communications — satellite link and SBD message format
- Comm Port Reference — COM port to instrument mapping and power channels
- Elmo Motor Controller — buoyancy pump command sequences