An Arduino based device to map the depths of water bodies. Using cheap and simple hardware like a GPS module, an SD card, and a standard NMEA-capable echo sounder. The data is then transformed into a depth map with depth contours and interpolation using python and matplotlib.

Hackaday article: https://hackaday.com/2021/09/06/homebrew-sounder-maps-the-depths-in-depth/

GitHub: https://github.com/Neumi/3D_water_depth_logger

Map result
Result of the processed data. Processing happens in a python script.

The lake or river section is zick-zack scanned by a boat. The GPS and depth data is recorded by the Arduino on an SD card. After the scan, the data is processed in a Python script and converted into an interpolated map. Tidal data can also be fed into the algorithm to compensate for tidal changes over the measurement period. An overlay can also be created using the Open Street Map API.

The setup:

The mapping boat is just a small rubber boat equipped with the echolot/Arduino/GPS device connected to a wooden/PVC pipe contraption. The scanning took approx. 1h for a 40000sqm harbor area. Another scan was done in a river section with higher currents. As the sensor flexes, at higher speeds, it is advisable to drive slowly.

The Arduino, SD card, GPS module and battery are stored in a waterproof container. The GPS antenna and echo sounder are mounted on a piece of wood and the piezo transducer inside a PVC tube under water. The NMEA output from the Standard Horizon echo sounder had a flipped signal (I don't know if this is normal). I had to flip the signal using a transistor. (Not sure if this can be done in code though).

Waterproof box with display.
 Mounted on the cute yellow rubber boat.
 Inside the box.
Before closing the box.

More scans:

River section scanned.
The black dots are the data points.
The scanned area in the river. On an OSM map.