Inspiration
At the beach, dangerous conditions such as rip currents can develop quickly, but warnings do not always reach swimmers once they are already in the water. Phones, speakers, and visual signs all become much less effective offshore. We wanted to explore a different question: what if the water itself could become the communication channel?
Our project is a prototype coastal safety network that sends a physical warning signal through the water and allows a wearable device on a swimmer to recognize that signal locally. Instead of relying on Wi-Fi, cellular service, or a phone, the system uses low-frequency mechanical waves, onboard signal processing, and motion sensing to create a simple warning link between the shore and the swimmer.
What it does
The system has two main parts: a shore-side transmitter and a swimmer-side wearable receiver.
When a coastal hazard is detected, the shore unit drives a motor at a predefined RPM to generate a mechanical vibration with a corresponding target frequency in the water.
The swimmer's wearable contains a piezoelectric contact microphone that continuously measures the vibration signal. An Arduino Nano ESP32 processes the sampled waveform using an FFT and checks the frequency-domain energy around the expected warning frequency.
When the predefined signal is detected, a high-brightness red LED on the wearable begins flashing to warn the swimmer. The warning remains active while the signal continues to be detected and turns off when the signal disappears.
At the same time, an onboard MPU6050 records the swimmer's motion. This gives us a second sensing channel that can be used to study abnormal motion patterns and eventually support swimmer-distress detection.
In short, the workflow is:
Hazard detected → mechanical warning generated on shore → signal propagates through water → wearable senses vibration → FFT identifies target frequency → LED warns swimmer
How we built it
For the shore-side prototype, we used a reComputer J4012 running Ubuntu 22.04 as the main controller. It communicates over CAN with a RoboMaster C620 motor controller, which drives a RoboMaster M2508 motor. By controlling the motor RPM, we can generate repeatable mechanical vibration patterns at selected frequencies.
The main station also includes a Yahboom CMP10A 10-axis IMU, which allows us to monitor the motion of the transmitting structure during testing.
For the swimmer-side device, we used an Arduino Nano ESP32. A piezoelectric contact microphone is connected to an analog preprocessing and amplification circuit before entering the Arduino's analog input. The ESP32 samples the time-domain waveform and performs an FFT locally rather than sending the raw data elsewhere for processing.
We then calculate the spectral energy around a predefined frequency band. If that energy passes our detection criteria, the device treats the signal as a valid warning and activates the LED.
An MPU6050 connected through I²C provides acceleration and angular-motion data, while the entire receiver is designed around the idea of a compact wearable mounted on the swimmer's upper arm.
Challenges we ran into
One of our biggest challenges was distinguishing a real transmitted warning signal from background vibration and noise. Water, swimmer movement, mechanical mounting, and the motor itself can all introduce additional frequency components. Simply checking whether one FFT bin has a large value is not enough, so we had to think carefully about sampling rate, FFT window size, frequency tolerance, signal thresholds, and how long a signal should persist before being considered valid.
Another challenge was connecting several very different engineering domains into one working demo. The project combines motor control, CAN communication, analog signal conditioning, embedded programming, digital signal processing, IMU sensing, and mechanical design. A problem in any one part of the chain could prevent the complete system from working.
We also had to design around the constraints of a wearable device. The piezo sensor needs good mechanical contact with the environment, while the electronics and battery need protection. At the same time, the device has to remain small enough to realistically be worn on a swimmer's arm.
Accomplishments that we're proud of
What we learned
This project taught us that communication does not always have to be electromagnetic. By treating mechanical vibration as an information carrier, we were able to build a basic physical-layer communication system using a motor as the transmitter and a piezoelectric sensor as the receiver.
We also gained practical experience with FFT-based signal detection, analog sensor preprocessing, CAN motor control, real-time embedded systems, and integrating hardware and software under hackathon time constraints.
Most importantly, we learned how much engineering sits between an idea and a working end-to-end system. Generating a signal is relatively simple; generating one that can be reliably detected after passing through a noisy physical environment is a much more interesting problem.
Our current prototype demonstrates the core concept: send a recognizable mechanical warning through water, detect it locally on a wearable, and immediately alert the swimmer. From here, the system could be expanded with more sophisticated distress detection, multiple encoded warning frequencies, better waterproof packaging, and larger-scale testing in realistic aquatic environments.
Log in or sign up for Devpost to join the conversation.