FishTrack is an autonomous marine monitoring system that integrates underwater acoustics (sonar), artificial intelligence (YOLO-based fish detection), satellite navigation (GPS), and low-power long-range communication (LoRa) to dynamically map marine environments. Designed for coastal fishing communities, it aims to reduce manual search time, lower fuel costs, and encourage sustainable fisheries management.
Below is the physical and component design of the completed FishTrack buoy, demonstrating its waterproof structural assembly, floatation components, and electronic chassis.
| Final Product (Chassis & Flotation) | Component Layout (Auxiliary Assembly) |
|---|---|
![]() |
![]() |
Traditional coastal fishing is heavily reliant on manual searches, leading to time-consuming and fuel-intensive trips. This guesswork causes:
- Financial strain due to unnecessary fuel consumption.
- Ecological imbalance, leaving some areas overfished while others remain untouched.
- Safety hazards in rough seas when locating hotspots manually.
FishTrack addresses these issues by providing a network of solar-powered buoys that detect fish underwater and broadcast hotspots directly to a base station and cloud dashboard without requiring local internet connectivity.
graph TD
%% Buoy Subsystem
subgraph Buoy Node [Buoy Node - Poseidon]
RPi5[Raspberry Pi 5 Core]
CamDay&Night[16MP NoIR Camera]
IR[IR LED Spotlight]
GPS[GPS NEO-M8M Module]
Uno[Uno R3 + TUSS4470 Shield]
Transducer((Sonar Transducer))
RFM95[Adafruit RFM95W LoRa]
PA[RF Power Amplifier]
Solar[6W Solar Panel]
LiPo[Li-Po Battery Tray]
%% Connections inside buoy
RPi5 -->|CSI| CamDay&Night
RPi5 -->|GPIO| IR
RPi5 -->|UART| GPS
RPi5 -->|USB/Serial| Uno
Uno -->|Analog Feeder| Transducer
RPi5 -->|SPI| RFM95
RFM95 -->|RF Signal| PA
Solar -->|Charging| LiPo
LiPo -->|Power| RPi5
end
%% Base Station Subsystem
subgraph Base Station [Base Station Node]
BasePico[Raspberry Pi Pico / Teensy LoRa]
LinuxBase[Linux Host / Dashboard]
Cloud[Cloud Server / Web UI]
BasePico -->|USB Serial| LinuxBase
LinuxBase -->|HTTP/MQTT| Cloud
end
%% Wireless Link
PA -.->|LoRa Wireless Link<br/>SF7 125kHz Multi-Hop| BasePico
A full comparative cost breakdown between the Completed Buoy Build (as deployed) and a Cheap Alternative Build evaluated during prototype testing. All prices are listed in Philippine Pesos (PHP).
| Material / Component | Predicted Build Price (PHP) | Complete Build Price (PHP) | Role & System Fit |
|---|---|---|---|
| Raspberry Pi 5 8GB | 5,955.00 | 5,955.00 | Main computer; runs AI models & manages logging/queues. |
| TUSS4470 Arduino Shield Board | 4,841.47 | 4,841.47 | Sonar analog interface for depth/density. |
| Adafruit RFM95W Transceiver | 2,744.00 | 2,744.00 | LoRa transceiver module (2x in Completed; 4x in Cheap Alt). |
| Arducam for Raspberry Pi Camera | 2,432.46 | 2,432.46 | Captures high-res day footage for fish detection. |
| UPS 6th GEN POWER MODULE | 2,320.00 | 2,320.00 | Battery management, charging circuits, and power delivery. |
| (2) 915Mhz 4W RF POWER Amplifier | 2,154.00 | 2,154.00 | Amplifies LoRa RF output signals for multi-mile range. |
| SMA CONNECTOR + 915MHz Antenna | 1,738.00 | 1,738.00 | RF antenna connections for LoRa communication. |
| 200KHz Transducer | 1,555.19 | 1,555.19 | Transmits and receives ultrasonic sonar pulses. |
| EPOXY Resin CLEAR | 1,470.00 | 1,470.00 | Waterproof sealant for electronics housing. |
| TELESIN Underwater Dome Case | 1,232.00 | 1,232.00 | Underwater enclosure dome for camera optics. |
| Acrylic Disk 16" 10.5" 10" | 1,131.00 | 1,131.00 | Structural disk inserts for waterproof sealing. |
| AMC2170 + PCB MANUFACTURING | 1,199.00 | 1,199.00 | Custom PCB layout for signal routing and connectors. |
| GPS - NEO-M8N + 30AWG WIRE | 1,169.00 | 1,169.00 | GNSS coordinates, speed, and time. |
| SOLAR PANEL 15W | 870.00 | 870.00 | Continuous solar charging in marine environments. |
| 10pcs LED Lens w/ Holder | 956.00 | 956.00 | Focuses wayfinding and IR spotlight illumination. |
| XL6019 Set-UP 5A Current Dc-DC | 482.00 | 482.00 | Voltage boosting for high-power modules. |
| 5V RELAY + SOLDER WICK + PCB | 242.00 | 242.00 | Switching control for auxiliary lights/sensors. |
| 5A DC-DC MPPT Solar Constant V | 313.00 | 313.00 | MPPT solar battery charging controller. |
| Cooling Radiator RP 5 | 197.00 | 197.00 | Thermal radiator/fan for Raspberry Pi 5. |
| Aluminium Water Block Radiator | 170.00 | 170.00 | Passive liquid/water block for outer cooling. |
| DRUM 40L (BUOY BODY) | 621.00 | ~ | Main outer flotation body of the buoy. |
| 120Ah 3.2v Battery LiFePO4 | ~ | 1,700.00 | Larger alternative storage bank. |
| (4) 21700 5550mAh Battery | ~ | 900.00 | Lithium battery cells (used in cheap alternative power module). |
| Arducam Pi Camera (Secondary) | ~ | 248.00 | Extra secondary night/IR camera. |
| Arduino Nano V3 | ~ | ~ | Auxiliary microcontroller (CH340G). |
| HMC349 RF SPDT SWITCH 100Mhz~4Ghz | ~ | ~ | RF SPDT switch for antenna/signal routing. |
| Arduino Uno R3 (CH340G) | ~ | ~ | Sonar echo timing controller. |
| Raspberry Pi Pico YD-RP2040 | ~ | ~ | Mesh node processing controller. |
| 3W LED Light w/ Heatsink | ~ | ~ | Wayfinder lighting system. |
| 10pcs 3W Infrared IR 940nm LED | ~ | ~ | Underwater infrared illumination array. |
| TOTAL PROJECT COST | 33,792.12 PHP | 36,019.12 PHP | Completed Build is ~6.2% more cost-effective. |
The system runs a modular daemon loop coordinating five files:
config.py: Core configurations, directory paths, and global stats.hardware.py: Encapsulates serial hardware interfaces for LoRa, LEDs, and Battery (I2C).mesh.py: Operates packet deduplication, multi-hop routing, and chunk reassembly.executor.py: Spawns and monitors camera and sonar subprocesses with resource safety.main.py: The entry orchestrator driving the main timer loop.
- Startup Phase: Verifies hardware connections. If the Teensy/Pico responds to a
STATUSquery, a green LED blinks on startup for 30s. If it fails, a red LED blinks and the system exits. - LoRa Telemetry: Features explicit half-duplex TX/RX mode switching. The Pico does not queue; the Pi manages packet buffering and waits for transmission confirmation (
OK:SENT). - Packet Chunking: Larger payloads are compressed (zlib + CBOR2), divided into chunks, base64-encoded, and sent via fire-and-forget loops, reassembling at the receiver using MD5 hashes.
- Thermal Safety (LEDs): High-power LEDs are cycled with thermal timeouts (e.g., 3s active, 12s cooldown) to protect un-heatsinked emitters.
Coordinates were recorded over a 72-hour period in Marinduque, Philippines, to verify positioning reliability.
| Hour Interval | Recorded UTC Timestamp | Measured Latitude | Measured Longitude | Altitude (m) | Satellites | Status |
|---|---|---|---|---|---|---|
| 12 hrs | 2026-02-17T08:45:59 |
13.482113 | 122.053277 | 10.98 | 9 | Acquired |
| 24 hrs | 2026-02-18T08:45:59 |
13.482112 | 122.053278 | 10.98 | 9 | Acquired |
| 36 hrs | 2026-02-18T20:45:59 |
13.482121 | 122.053279 | 10.98 | 9 | Acquired |
| 48 hrs | 2026-02-19T08:45:59 |
13.482117 | 122.053288 | 9.23 | 10 | Acquired |
| 60 hrs | 2026-02-19T20:45:59 |
13.482124 | 122.053268 | 10.98 | 9 | Acquired |
| 72 hrs | 2026-02-20T08:45:59 |
13.482121 | 122.053278 | 9.23 | 10 | Acquired |
Depth error is analyzed across discrete increments (50m, 100m, 150m, 200m) to check transducer calibration:
Arducam for Raspberry Pi Camera footage served as the visual ground-truth reference for validating the YOLO detection accuracy.
Sample detection targets including: Bagre marinus, Tylosurus crocodilus, Caranx hippos, and Anguilla rostrata.
| Target Image Name | Timestamp | Fish Detected | Top Predicted Species | Confidence | Direct Score | Retrieval Score |
|---|---|---|---|---|---|---|
19_02_2026_19_55_48.png |
19:55 | 1 | Bagre marinus | 71.53% | 0.6382 | 0.7924 |
19_02_2026_08_35_16.png |
08:35 | 2 | Tylosurus crocodilus | 70.70% | 0.6121 | 0.8018 |
18_02_2026_08_29_08.png |
08:29 | 1 | Caranx hippos | 64.59% | 0.5496 | 0.7422 |
17_02_2026_18_18_28.png |
18:18 | 2 | Anguilla rostrata | 65.05% | 0.5944 | 0.7066 |
20_02_2026_07_58_52.png |
07:58 | 1 | Salmo salar | 67.23% | 0.5926 | 0.7519 |
Before running the daemon, ensure libraries are installed (preferably on a Raspberry Pi OS running Python 3.10+):
pip install pyserial cbor2 smbusStart the main controller loop, specifying the serial port of the LoRa Teensy/Pico and the buoy identifier:
python main.py --port /dev/ttyACM0 --codename BUOY-POSEIDONFor testing or development environments where hardware serial devices are not connected, you can mock imports and call the verification script:
python scratch/validate_refactoring.py- SONAR Driver Hardware Interface: Utilizes principles and configurations from the Open Echo TUSS4470 Driver (cloned locally at open_echo) to coordinate ultrasonic pulse-echo calculations.
- AI Fish Species Database: Incorporates taxonomy classifications and neural network insights from the Fishial Fish Identification Project (cloned locally at fish-identification) to validate target predictions.
If you find this project useful and would like to support the deployment of FishTrack buoys for coastal fishing communities, donations are greatly appreciated!
Bitcoin Address: 13zWnp2ty3NPzAXX9QxwEeoPSKhN5tPzic






