Skip to content
pimbongaertsPublic

About

Underwater sonar/USBL interface for photogrammetry surveys.

Resources

Stars

13 stars

Watchers

1 watching

Forks

FireFish

Real-time feedback & synchronized sensor logging for underwater photogrammetry

An open-source microcontroller board that supports a wide range of sensors, and gives divers real-time depth/altitude feedback, drives a dual-channel camera intervalometer, and logs time-stamped sensor data — small enough to fit inside the smallest BlueRobotics 2″ underwater housing.

Hardware: CERN-OHL-S v2 Software: MIT Docs: CC BY 4.0 MCU: ATSAMD51 Design: KiCad 8 DOI

The FireFish board (front and back), its system-integration diagram, and an example integration into a diver-propulsion-vehicle photogrammetry rig showing the live on-screen readout


Overview

FireFish is a compact board that can provide scientific divers with (1) real-time feedback on depth, altitude, and other positional data to guide image acquisition; (2) a programmable dual-channel intervalometer for one or two cameras; and (3) time-stamped logging of sensor data that can be used for downstream photogrammetry model orientation. Its open design adapts well beyond photogrammetry — e.g. synchronized irradiance measurements or for underwater navigation – and provides an easy platform to make sensors designed for underwater vehicles accessible to divers.

Diver conducting a coral-reef photogrammetry survey with FireFish
Photogrammetry. The FireFish allows divers to maintain a fixed altitude from the live readout of a BlueRobotics Ping sonar, while simultaneously triggering a camera and logging depth/altitude for 3D-model orientation.
Diver logging underwater irradiance with FireFish
Irradiance measurements (alternative implementation). The Reefscape Genomics Lab uses multiple FireFish units connected to LICOR irradiance sensors to conduct short-term irradiances measures across the reef, relative to time-synchronized measurements of the water column.

✨ Features

  • 🎯 Live sensor readout on a 2.4″ TFT — allowig divers to maintain a consistent altitude
  • 📷 Dual-channel intervalometer — focus + shutter for one camera, or alternate-trigger two cameras
  • ⏱️ Synchronized logging to onboard flash with a temperature-compensated RTC — easy model orientation
  • 🔌 Flexible I/O — I²C (Qwiic / STEMMA QT), 2× UART, RS-232, and 2x analog inputs
  • 🔋 Onboard LiPo charging — charge, download, and update firmware through the housing, no opening required
  • 🤿 Dive-ready — fits standard 2″ (Ø50 mm) housings with 3D printed carrier; depth rating to 225 m
  • 🛠️ Fully open — KiCad design, firmware, enclosure STLs, and an Arduino board-support package

🔧 Specifications

Microcontroller ATSAMD51J19A — 32-bit Arm Cortex-M4F, 120 MHz, hardware FPU
Display 2.4″ TFT, 320 × 240 (ST7789)
Storage 16 MB onboard SPI flash (MX25L12833F)
Timekeeping DS3231MZ temperature-compensated RTC (battery-backed)
Power MCP73831 single-cell LiPo charger; 3.3 V & 5 V rails
Sensing / I/O ADS1115 16-bit ADC; I²C, UART, RS-232 (MAX3232); tap gesture control
Camera control Dual-channel optically-isolated intervalometer (TCMT1100)
Board size 72 × 43 mm (two-layer PCB)
Housing Standard 2″ (Ø50 mm) BlueRobotics enclosure; depth rating to 225 m

📦 Repository contents

Folder Contents
hardware/ KiCad 8 project — schematic, PCB layout, Gerbers, BOM, and pick-and-place files
firmware/ Arduino board-support package (firefish_m4_v4b), an example sketch, and the bootloader
enclosure/ 3D-printable PETG carrier STLs (short / short-simple / long-simple) + clamp
docs/ Figures and documentation

Schematic

FireFish schematic

The full editable schematic is hardware/firefish.kicad_sch (KiCad 8).

🛠️ Assembling a FireFish

The full step-by-step build and operation instructions are in the HardwareX article (see Citation); this repository holds the files those instructions refer to:

  • hardware/ — fabricate and populate the board (Gerbers + BOM + placement files)
  • firmware/ — flash the bootloader (J-Link) and upload the example sketch over USB
  • enclosure/ — slide the board into 3D printed carrier and place into a 2″ housing

Citation

If you use FireFish, please cite the article:

Bongaerts, P. (2026). FireFish: an open-source microcontroller for real-time sensor feedback and data logging in underwater photogrammetry. HardwareX (under review).

@article{Bongaerts2026FireFish,
  author  = {Bongaerts, Pim},
  title   = {FireFish: an open-source microcontroller for real-time sensor
             feedback and data logging in underwater photogrammetry},
  journal = {HardwareX},
  year    = {2026},
  note    = {Under review; DOI to be added}
}

📌 The archival version of record (design files + firmware) is deposited on Zenodo: https://doi.org/10.5281/zenodo.23073946. This GitHub repository is the development mirror.

⚖️ License

Open-source hardware, licensed by part (full details in LICENSE.md):

Part License
Hardware — KiCad, Gerbers, STLs, BOM CERN-OHL-S v2
Software / firmware — original code MIT
Documentation & figures CC BY 4.0

Third-party firmware keeps its upstream license (Adafruit SAMD core → LGPL-2.1; uf2-samdx1 → MIT; ChaN FatFs → BSD-style). Copyright © 2024–2026 Pim Bongaerts.

Figures © Pim Bongaerts, reproduced from the FireFish HardwareX article under CC BY 4.0.

🙏 Acknowledgments

Built by learning from the open-source hardware community — in particular Adafruit and SparkFun — with generous input from John Atkins and Joey Castillo. Field testing and deployment were supported by the Hope for Reefs Initiative at the California Academy of Sciences and Inkfish.

About

Underwater sonar/USBL interface for photogrammetry surveys.

Resources

Stars

13 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages