Hardware Documentation ====================== Bill of Materials ----------------- .. list-table:: :header-rows: 1 :widths: 25 25 10 15 25 * - Component - Model - Qty - Interface - Notes * - MCU - ESP32-WROOM-32UE DevKit-C v4 - 1 - USB Serial - 38-pin, dual-core * - Sonar - Kogger Side-Scan - 2 - UART 921600 - A (Starboard), B (Port) * - IMU - HWT905 (WitMotion) - 1 - SoftSerial 9600 - 9-axis accel/gyro/mag * - Depth - MS5837-30BA (Bar30) - 1 - I2C 0x76 - 0-30 bar pressure * - Temp - TSYS01 (Celsius) - 1 - I2C 0x77 - ±0.015°C precision * - Conductivity - Atlas Scientific EZO EC - 1 - SoftSerial 9600 - µS/cm + salinity * - GPS - u-blox GPS module - 1 - SoftSerial 9600 - NMEA output * - Computer - Raspberry Pi 4 (BlueOS) - 1 - USB host - Docker services GPIO Pinout — ESP32 ------------------- Pin Assignment ^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 :widths: 10 20 20 20 15 15 * - GPIO - Function - Device - Protocol - Baud/Freq - Direction * - **16** - UART1 RX - Kogger A - BB55 binary - 921600 - IN * - **17** - UART1 TX - Kogger A - BB55 binary - 921600 - OUT * - **25** - UART2 RX - Kogger B - BB55 binary - 921600 - IN * - **26** - UART2 TX - Kogger B - BB55 binary - 921600 - OUT * - **27** - SoftSerial RX - GPS u-blox - NMEA - 9600 - IN * - **14** - SoftSerial TX - GPS u-blox - NMEA - 9600 - OUT * - **19** - SoftSerial RX - EZO EC - ASCII - 9600 - IN * - **18** - SoftSerial TX - EZO EC - ASCII - 9600 - OUT * - **13** - SoftSerial RX - IMU HWT905 - Binary - 9600 - IN * - **15** - SoftSerial TX - IMU HWT905 - Binary - 9600 - OUT * - **21** - I2C SDA - MS5837 + TSYS01 - I2C - 100kHz - BIDIR * - **22** - I2C SCL - MS5837 + TSYS01 - I2C - 100kHz - BIDIR .. warning:: **K1 EZO pins SWAPPED:** GPIO 19=RX, 18=TX (documented in ESP32 code comments) Critical Notes ^^^^^^^^^^^^^^ - **Hardware UART priority:** Kogger sonar uses UART1/2 (high baud 921600) — cannot use SoftSerial - **I2C bus shared:** MS5837 (0x76) and TSYS01 (0x77) on same bus — no address conflict - **SoftSerial limitations:** Max 3 active instances due to interrupt conflicts — GPS, K1, IMU Wiring Diagrams --------------- Kogger Sonar ^^^^^^^^^^^^ .. code-block:: text Kogger A (Starboard): ┌──────────────┐ │ Kogger SSS A │ │ │ │ TX ──────────┼───→ ESP32 GPIO 16 (UART1 RX) │ RX ──────────┼───← ESP32 GPIO 17 (UART1 TX) │ GND ─────────┼───→ GND │ 12V ─────────┼───→ BlueROV Power Bus (+12V) └──────────────┘ Kogger B (Port): Same wiring, GPIO 25/26 (UART2) IMU HWT905 ^^^^^^^^^^ .. code-block:: text ┌──────────────┐ │ HWT905 IMU │ │ │ │ TX ──────────┼───→ ESP32 GPIO 13 (SoftSerial RX) │ RX ──────────┼───← ESP32 GPIO 15 (SoftSerial TX) │ GND ─────────┼───→ GND │ VCC ─────────┼───→ 3.3V or 5V └──────────────┘ I2C Sensors ^^^^^^^^^^^ .. code-block:: text ┌──────────────┐ ┌──────────────┐ │ MS5837-30BA │ │ TSYS01 │ │ (Depth) │ │ (Temp) │ │ │ │ │ │ SDA ─────────┼────┬────┼──── SDA ─────┼───→ ESP32 GPIO 21 │ SCL ─────────┼────┼────┼──── SCL ─────┼───→ ESP32 GPIO 22 │ GND ─────────┼────┼────┼──── GND ─────┼───→ GND │ 3.3V ────────┼────┼────┼──── 3.3V ────┼───→ 3.3V └──────────────┘ │ └──────────────┘ │ 4.7kΩ pull-up resistors (SDA + SCL → 3.3V) I2C Addresses: - MS5837: 0x76 - TSYS01: 0x77 Clock: 100kHz Power Requirements ------------------ .. list-table:: :header-rows: 1 * - Device - Voltage - Current - Power - Notes * - ESP32 - 3.3V - 160mA - ~0.5W - Via USB 5V → 3.3V regulator * - Kogger A - 12V - 200mA - 2.4W - BlueROV power bus * - Kogger B - 12V - 200mA - 2.4W - BlueROV power bus * - MS5837 - 3.3V - 0.6µA - <1mW - Standby mode * - TSYS01 - 3.3V - 5µA - <1mW - Standby mode * - IMU HWT905 - 3.3-5V - 20mA - ~0.1W - Check datasheet * - GPS - 3.3-5V - 30mA - ~0.15W - Active antenna * - EZO EC - 5V - 10mA - 50mW - Idle **Total:** ~6W (excluding Pi) Sensor Specifications --------------------- Kogger Side-Scan Sonar ^^^^^^^^^^^^^^^^^^^^^^ - **Frequency:** 700 kHz - **Range:** 0-100m - **Resolution:** ~1cm - **Ping rate:** 10-50 Hz - **Protocol:** BB55 binary - **Data rate:** ~50-100 KB/s per channel HWT905 IMU ^^^^^^^^^^ - **Axes:** 9 (3 accel, 3 gyro, 3 mag) - **Range:** ±16g, ±2000°/s - **Resolution:** 0.01° (angle), 0.001g (accel) - **Output rate:** 10 Hz MS5837-30BA (Bar30) ^^^^^^^^^^^^^^^^^^^ - **Range:** 0-30 bar (0-300m depth) - **Resolution:** 0.2 mbar (2mm water) - **Accuracy:** ±20 mbar (±20cm) - **I2C Address:** 0x76 TSYS01 (Celsius) ^^^^^^^^^^^^^^^^ - **Range:** -40°C to +125°C - **Accuracy:** ±0.1°C (0-50°C) - **Resolution:** 0.0001°C (24-bit ADC) - **I2C Address:** 0x77 Atlas Scientific EZO EC ^^^^^^^^^^^^^^^^^^^^^^^ - **Range:** 0.07 - 500,000+ µS/cm - **Accuracy:** ±2% - **Protocol:** ASCII UART @ 9600 u-blox GPS ^^^^^^^^^^ - **Accuracy:** 2.5m CEP - **Update rate:** 1-10 Hz - **Protocol:** NMEA 0183 Installation — BlueROV2 ----------------------- Physical Mounting ^^^^^^^^^^^^^^^^^ .. code-block:: text BlueROV2 Frame (Top View) ┌───────────────────────────────────────────┐ │ [Kogger A]◄─── Starboard │ │ ┌───────────────┐ │ │ │ ESP32 Hub │◄─── USB to Pi (Tether) │ │ └───────────────┘ │ │ [Kogger B]◄─── Port │ │ [MS5837] [TSYS01] [IMU] [GPS] [EZO] │ └───────────────────────────────────────────┘ Enclosure ^^^^^^^^^ - BlueROV electronics tube (4" acrylic) - Contents: ESP32, MS5837, TSYS01, IMU, EZO EC - Penetrators: USB (SubConn), Kogger cables (×2) - External: Kogger A/B, GPS (surface antenna) Troubleshooting — Hardware --------------------------- See :doc:`troubleshooting` for detailed hardware debugging. **Common Issues:** - Kogger not detected → Check TX/RX, baud rate, power - IMU no data → Check SoftSerial pins, power voltage - I2C fail → Check pull-ups, address conflicts - GPS no fix → Needs outdoor sky view, 30-60s acquisition Safety ------ - **Pressure test** enclosure to 2× max dive depth - **Check penetrators** for O-ring integrity - **Monitor temperature** inside enclosure - **Fuse 12V lines** to Kogger - **Disconnect power** before wiring changes