Solea™ Operation Manual SOTIRIA Technology · Version 260220

1. Manufacturer Instructions and Safety Notes

  • The device is intended for underwater operation.
  • After each deployment, clean the device and its cable with fresh water and mild dish soap. During long deployments, retrieve and repeat cleaning at least once a month.
  • Store in a dry environment at room temperature, away from children and flammable materials.
  • Do not place the device near strong magnetic fields.
  • For optimal operation, do not place near ferromagnetic objects (e.g. steel frames, anchor chains).
  • Recommended submersion depth: up to 50 m. Do not submerge beyond 300 m or in corrosive liquids.
  • Do not expose to fire or temperatures higher than recommended.
  • Do not open the device or modify its hardware or software.
  • Do not impact, puncture, or heat the device.
  • Do not bend, press or scratch the hydrophone.
  • The hydrophone includes an exposed wire connected to device Ground. Do not apply any voltage to this wire.
  • For best hydrophone sensitivity, use it when fully submerged.
  • Do not connect wires to voltages different from those specified in this manual.
  • Do not power outside the range of 7–30 VDC.
  • Do not extend the cable or use cable with different specifications.
  • Do not pull the device from its cable. Avoid bending or twisting.
  • Keep the device as stationary as possible during operation. Use a non-ferromagnetic mounting frame.
  • To prevent galvanic corrosion, avoid direct contact of the aluminum enclosure with other metals.
⚠ CAUTION: The device includes a pressure relief valve. Tighten it clockwise by hand before deployment. Otherwise, the device will be flooded and permanently destroyed.
ℹ NOTE: The device includes a resettable (PPTC) fuse. After a short circuit, wait up to 10 minutes before retrying.

2. Device Description

The device includes a magnetic sensor, an acoustic sensor, an Inertial Measurement Unit (IMU) and an environmental sensor (temperature/humidity/pressure), as well as the necessary electronics for edge processing. It can be powered by a 7–30 VDC, ≥1 A power supply and communicates via RS-485 using Modbus RTU registers. Alternatively, a power and communication device (sold separately) can retrieve data via Wi-Fi, 4G, Ethernet, or USB.

2.1 Magnetic Sensor

  • 3-axis open-loop fluxgate sensor for detecting slow (DC – 10 Hz) magnetic field variations
  • Measures magnetic field in each axis (X, Y, Z) in nT
  • Outputs Total magnetic field magnitude (√(X² + Y² + Z²)) and variation
  • The variation output highlights sudden magnetic field anomalies, unaffected by slow geomagnetic drift

2.2 Acoustic Sensor

  • PZT-based hydrophone
  • Captures and processes audio data
  • Outputs top 10 dominant frequencies (FFT) with Sound Pressure Levels (SPL) in dB re 1 μPa

2.3 IMU (Inertial Measurement Unit)

  • Accelerometer/gyroscope/magnetometer combination
  • Captures device orientation in 3D space
  • Outputs yaw, pitch, and roll in degrees

2.4 Environmental Sensor

  • Temperature, humidity, and pressure sensors
  • Monitors conditions inside the enclosure for device health
  • Outputs: °C, %RH, hPa

3. Operation

3.1 Before Deployment

Wire Connections:

Wire Color Function
Silver GND (Cable shielding)
Black GND
Red V+ (7–30 VDC)
White RS485 A+
Green RS485 B-
Device front panel showing wire connections, pressure relief valve, rope holder, power switch, and communication cable
Figure 1. Device's Front Panel.

Steps:

  1. Secure the device to a rigid non-ferromagnetic mounting frame. Do not mechanically stress the cable. Without a frame, secure a rope through both the rope holder and the included cable tether.
  2. Connect the A and B RS485 wires to the A and B terminals of your RS485 communication device.
  3. Connect +V and the two GND wires to a DC power supply (7–30 VDC, ≥1 A). A 12 VDC supply with minimal noise is recommended.
  4. Check that the pressure relief valve is fully tightened clockwise.
  5. Power on the supply and verify output is 7–30 VDC.
  6. Power on the device by rotating the ON/OFF switch clockwise.
  7. Verify the data stream is consistent at your terminal device.
  8. Deploy to a depth of up to 50 m. Ensure data keeps updating and IMU values indicate no device motion.
⚠ WARNING: Although the device includes reverse polarity protection, do not connect power terminals in reverse.
⚠ CAUTION: If the pressure relief valve is not tightened, the device will be flooded and permanently damaged.

3.2 Upon Retrieval

  1. Turn the ON/OFF switch counterclockwise to power off.
  2. Disconnect wires from the power supply and RS485 device.
  3. Clean the device and cable with fresh water and mild dish soap.

3.3 Transportation and Storage

⚠ CAUTION: When transported by air, both the device’s and the case’s pressure relief valves must be loosened.
  • Avoid shocks, impacts, or intense vibrations during transportation.
  • Store in a dry environment at room temperature, away from flammable materials and strong magnetic fields.

4. RS-485 Communication

4.1 Connecting to the Device

The device uses Modbus RTU over RS-485. Connection settings:

Setting Value
Baud rate 115200 bps
Data bits 8
Parity None
Stop bits 1

4.2 Reading Acoustic Sensor Data (Slave ID = 1)

Setting Value
Modbus Slave ID 1
Modbus Function 0x03 (Read Holding Registers)
Starting Address 0
Ending Address 39
Registers Content Unit Type
0–1 Frequency #1 Hz Float (IEEE 754)
2–3 SPL #1 dB re 1μPa Float (IEEE 754)
4–5 Frequency #2 Hz Float (IEEE 754)
6–7 SPL #2 dB re 1μPa Float (IEEE 754)
... pattern repeats for #3 through #9 ...
36–37 Frequency #10 Hz Float (IEEE 754)
38–39 SPL #10 dB re 1μPa Float (IEEE 754)

4.3 Reading Magnetic Sensor Data (Slave ID = 2)

Setting Value
Modbus Slave ID 2
Modbus Function 0x03 (Read Holding Registers)
Starting Address 0
Ending Address 9
Registers Content Unit Type
0–1 X-axis magnetic field nT Float (IEEE 754)
2–3 Y-axis magnetic field nT Float (IEEE 754)
4–5 Z-axis magnetic field nT Float (IEEE 754)
6–7 Total magnitude nT Float (IEEE 754)
8–9 Variation nT Float (IEEE 754)

4.4 Reading Environmental Sensor Data (Slave ID = 2)

Setting Value
Modbus Slave ID 2
Modbus Function 0x03 (Read Holding Registers)
Starting Address 11
Ending Address 16
Registers Content Unit Type
11–12 Temperature °C Float (IEEE 754)
13–14 Humidity %RH Float (IEEE 754)
15–16 Pressure hPa Float (IEEE 754)

4.5 Reading IMU Data (Slave ID = 2)

Setting Value
Modbus Slave ID 2
Modbus Function 0x03 (Read Holding Registers)
Starting Address 17
Ending Address 22
Registers Content Unit Type
17–18 Yaw degrees Float (IEEE 754)
19–20 Pitch degrees Float (IEEE 754)
21–22 Roll degrees Float (IEEE 754)

4.6 Data Decoding

All sensor data are encoded as 32-bit IEEE 754 floating-point numbers, split across two consecutive 16-bit holding registers.

Register layout:

  • First register (lower address): bits 0–15 of the 32-bit float (low word)
  • Second register (higher address): bits 16–31 of the 32-bit float (high word)

Example: Reading registers 0–1 of Slave ID = 1, with values 0x0000 and 0x447A:

uint32 = (0x447A << 16) | 0x0000 = 0x447A0000
# IEEE 754 → 1000.0 (Hz)

Python snippet:

import struct
raw = (0x447A << 16) | 0x0000
value = struct.unpack('f', struct.pack('I', raw))[0]

Full example codedownload rs485_example.py

# pip install pymodbus pyserial

import struct
import time
import sys
from pymodbus.client import ModbusSerialClient

CURSOR_HOME = "\033[H"
CLEAR_SCREEN = "\033[2J"
CLEAR_TO_END = "\033[J"

COM_PORT = "COM16"  # Change to your port (e.g. /dev/ttyUSB0 on Linux)
BAUD_RATE = 115200
POLL_INTERVAL = 0.2  # seconds

def decode_float(low, high):
    raw = (high << 16) | low
    return struct.unpack('f', struct.pack('I', raw))[0]

def read_acoustic(client, lines):
    try:
        result = client.read_holding_registers(0, count=40, device_id=1)
        if result.isError():
            lines.append(f"  Acoustic read error ({result})")
            return
        regs = result.registers
    except Exception as e:
        lines.append(f"  Acoustic offline ({e})")
        return

    lines.append("  Acoustic — Top Frequencies:")
    for i in range(10):
        base = i * 4
        freq = decode_float(regs[base], regs[base + 1])
        spl = decode_float(regs[base + 2], regs[base + 3])
        lines.append(f"    #{i+1:2d}  {freq:10.2f} Hz  {spl:8.2f} dB")

def read_magnetic(client, lines):
    try:
        result = client.read_holding_registers(0, count=37, device_id=2)
        if result.isError():
            lines.append(f"  Magnetic read error ({result})")
            return
        regs = result.registers
    except Exception as e:
        lines.append(f"  Magnetic offline ({e})")
        return

    lines.append("  Magnetic Field:")
    lines.append(f"    X: {decode_float(regs[0], regs[1]):.2f} nT")
    lines.append(f"    Y: {decode_float(regs[2], regs[3]):.2f} nT")
    lines.append(f"    Z: {decode_float(regs[4], regs[5]):.2f} nT")
    lines.append(f"    Total: {decode_float(regs[6], regs[7]):.2f} nT")
    lines.append(f"    Deviation: {decode_float(regs[8], regs[9]):.2f}")

    lines.append("  Environment:")
    lines.append(f"    Temperature: {decode_float(regs[11], regs[12]):.2f} °C")
    lines.append(f"    Humidity: {decode_float(regs[13], regs[14]):.2f} %RH")
    lines.append(f"    Pressure: {decode_float(regs[15], regs[16]):.2f} hPa")

    lines.append("  Orientation:")
    lines.append(f"    Yaw: {decode_float(regs[17], regs[18]):.2f}°")
    lines.append(f"    Pitch: {decode_float(regs[19], regs[20]):.2f}°")
    lines.append(f"    Roll: {decode_float(regs[21], regs[22]):.2f}°")

def main():
    client = ModbusSerialClient(
        port=COM_PORT, baudrate=BAUD_RATE,
        bytesize=8, parity='N', stopbits=1, timeout=1,
    )
    if not client.connect():
        print("Could not connect. Check COM port.")
        sys.exit(1)

    sys.stdout.write(CLEAR_SCREEN)
    print(f"Reading from {COM_PORT}. Press Ctrl+C to stop.\n")
    try:
        while True:
            lines = []
            now = time.time()
            ms = int((now % 1) * 1000)
            lines.append(time.strftime("[%H:%M:%S", time.localtime(now)) + f".{ms:03d}]")
            read_acoustic(client, lines)
            read_magnetic(client, lines)
            sys.stdout.write(CURSOR_HOME + "\n".join(lines) + "\n" + CLEAR_TO_END)
            sys.stdout.flush()
            time.sleep(POLL_INTERVAL)
    except KeyboardInterrupt:
        print("\nStopped.")
    finally:
        client.close()

if __name__ == "__main__":
    main()

5. Acquired Data Examples

5.1 Magnetic Detection

In the following figures, the magnetic data retrieved during the detection of a ship are depicted. The magnetic field variation is easily observed at all 3 magnetometer axes, as well as at the total magnetic field plot. To distinguish it even better, the device uses a model to calculate the magnetic field deviation of recent readings from a rolling average baseline.

X-axis magnetic field during ship detection
Figure 2. Example of the magnetic field variation at the X axis during a ship detection.
Y-axis magnetic field during ship detection
Figure 3. Example of the magnetic field variation at the Y axis during a ship detection.
Z-axis magnetic field during ship detection
Figure 4. Example of the magnetic field variation at the Z axis during a ship detection.
Total magnetic field during ship detection
Figure 5. Example of the total magnetic field variation during a ship detection.
Magnetic field deviation during ship detection
Figure 6. Example of the total magnetic field variation during a ship detection.

5.2 Acoustic Detection

In the following figures, the acoustic data captured during the detection of different ships are presented as spectrograms that include the 10 most dominant frequencies, calculated by the device implementing a Fast Fourier Transform (FFT).

Acoustic spectrogram of ship detection - example 1
Figure 7. Example of ship detection by the acoustic sensor.
Acoustic spectrogram of ship detection - example 2
Figure 8. Example of ship detection by the acoustic sensor.
Acoustic spectrogram of ship detection - example 3
Figure 9. Example of ship detection by the acoustic sensor.

6. Device Dimensions

Device side view with dimensions - 440 mm length, 145.5 mm diameter
Figure 10. Device's Side view and Magnetometer orientation.
Device top view with dimensions - 115.6 mm width
Figure 11. Device's Top view.

7. Technical Specifications

Parameter Value
Power
Supply voltage 7–30 VDC
Supply current ~200 mA at 12 VDC
Power consumption 2.5 W
Communication
Output Digital
Interface RS485
Protocol Modbus RTU
Baud rate 115200 bps
Typical polling rate 1–10 Hz
Enclosure
Material Anodized aluminum
Diameter 145.5 mm
Length 440 mm
Operating temperature -10°C to +80°C
Recommended depth 50 m
Maximum depth 300 m
Weight (in air) 1900 g
Cable
Length 3 m
Outer diameter 5.3 mm
Weight (in air) ~138 g
Structure 2 shielded twisted pairs
Wire size 22 AWG
Jacket LSZH (Low Smoke Zero Halogen)
Operating temperature -20°C to 80°C
Magnetic Sensor
Noise level <15 pT/√Hz
Sensitivity 97 mV/μT
Absolute range 65 μT
Frequency response DC to 10 Hz
Acoustic Sensor
Sensitivity -190 dB re 1 V/μPa
Bandwidth 10 Hz to 50 kHz
Sensing element PZT (Lead Zirconate Titanate)
Encapsulation Polyurethane resin
IMU
Pitch accuracy ~1°
Roll accuracy ~1°
Yaw accuracy ~2–5°
Temperature Sensor
Range -40°C to +85°C
Accuracy ±1°C
Resolution ~0.01°C
Humidity Sensor
Range 0–100% RH
Accuracy ±3% RH
Resolution ~0.008% RH
Pressure Sensor
Range 300–1100 hPa
Accuracy ±1 hPa
Resolution ~0.18 Pa

8. Troubleshooting

Symptom Possible Cause Solution
No response from both nodes Device not powered Check power supply wiring; ensure power switch is turned clockwise
No response from both nodes A/B wires swapped Swap A and B connections on the adapter
No response from both nodes Wrong COM port Check Device Manager (Windows) or ls /dev/ttyUSB* (Linux)
No response from both nodes Baud rate mismatch Set baud rate to 115200
No response from both nodes GND not connected Ensure adapter and device share the same GND
No response from one node Wrong slave ID Acoustic = 1, Magnetic/IMU/Env = 2
Intermittent timeouts Electrical noise Relocate cable away from noise sources
Data lag or corrupted Polling too fast/slow Try polling at 1 Hz
Data reads 0 or NaN Sensor hardware fault Power cycle the device (OFF then ON)
Magnetic saturated / not changing Strong magnetic field Relocate device; check for nearby magnets
Magnetic fluctuates a lot Motion artifacts Stabilize the device
Acoustic not changing Hydrophone obstructed Ensure hydrophone is unobstructed and fully submerged

9. Compliance & Disposal

EMC Notes: The device is intended for underwater use only and does not emit RF. Under 50 Hz magnetic field exposure, magnetic measurements may deviate up to 5%. Under 150–300 MHz RF exposure, deviation may reach 100%.

Export Control: Does not meet dual-use criteria. No export license required.

CE Compliance: Complies with applicable EU directives. Declaration of Conformity available on request.

RoHS Compliance: Complies with RoHS Directive 2011/65/EU and amendments. PZT hydrophone contains lead under applicable exemption.

Disposal: Contains electronic components. Do not dispose with household waste. Contact your local waste authority for recycling options.