Open Echo - Open-Source SONAR
An ongoing open-source project is about building an open-source sonar for bathymetry and research.
Everything (code, schematics, board layout) is open source: https://github.com/Neumi/open_echo
I run a discord server, where we discuss progress: https://discord.com/invite/rerCyqAcrw
And I share progress on my YouTube channel: https://www.youtube.com/neumi
How the ECHO?!
An echo sounder is a device used to measure water depth by sending out a short burst of sound (usually in the ultrasonic range) and waiting for the echo to return. By measuring the time it takes for the echo to come back, the device calculates the depth of the water beneath the ultrasonic transducer.
Almost all boats use echo sounders for navigation and safety. Researchers rely on them for bathymetry, mapping, and archaeological studies. Search and rescue (SAR) teams use them for localization and recovery, while fishermen use them to locate fish-rich areas.
I needed an Arduino-compatible echo sounder for another project -a bathymetry GPS logging device. Arduino-readable echo sounders are hard to get, so I thought, why not build it myself? The basic working principle is simple, but the underlying electronics and physics are not always straightforward.
So, I took on the challenge and dove right in…
A running Arduino shield is public. Currently, I'm working on an all-in-one board with internal sampling, a microcontroller, a power supply, and the TUSS4470. Also a more advanced board for more exotic applications. Stay tuned!
Current state
- a running TUSS4470 Arduino shield
- a working python backend for real-time echo visualization in a waterfall chart
- reverse-engineered "LUCKY Fish Finder"
- read raw data from "LUCKY" receiver/amplifier to Arduino
- DIY transducer built and running
The custom Arduino shield uses a TUSS4470 ultrasonics driver from TI. It can be used to drive different transducer frequencies and is software-configurable. The Arduino ADC is used to sample the echo signal. The Python backend visualizes the return signal:

The TUSS4470 manages the driving and amplification part. It is configured by the Arduino via SPI and the drive frequency is generated on an Arduino pin. For 200kHz, signal generation is no problem. Higher frequencies and sampling sizes require a larger microcontroller in the future (solved in the all-in-one board with the STM32F103).
The TUSS4470 Arduino shield drives an external transformer to increase transducer voltage. The transducer is a cheap <10€ 200kHz 19mm PZT transducer from Aliexpress that is glued into a pipe cap with hot glue. The Arduino is connected via USB to the computer's backend. The TUSS4470 board is powered by three 9V block batteries in series to provide the TUSS4470 with a higher primary voltage. The transformer boosts this to about 250V p-p.
Usually, a high drive voltage and large transducer diameter is desirable to increase sound energy and receiver surface. But with large transducer sizes, capacitance, and ringdown time increase. The Aliexpress 200kHz is a good and cheap starting point.
Testing the transducer assembly in the 2.8°C coooold baltic sea in Kiel, Germany :D

The 200kHz 19mm transducer penetrates a 20mm thick layer of ice and still gives OK results. It's important to have a layer of liquid water between the transducer's surface and the ice. The echoes are weaker than without ice between the transducer and water, but still, the ground is clearly visible, and even a second reflection.


The waterfall chart gives you a better image of the past and allows better differentiation between a real echo and noise. Piezo transducers oscillate pretty long after the sound pulse has been sent. This is the lower yellow part in the plots (about 50cm). In this blind zone, you won't see echoes or reflections.
The range of the echo sounder not only...
Read more »