This project demonstrates how to build an underwater audio beacon, designed to help swimmers with visual impairments navigate through a pool.
The beacon is anchored underwater within a pool lane at a known distance from the pool's edge and emits audio cues at regular intervals that can be heard nearby in the water.
Swimmers with no or poor vision can listen for the beacon's sounds as they swim to help gauge their position in the pool to help them swim straight and safely approach the end of the pool.
Build2gether ChallengeThe idea behind this project stems from the Build2gether Inclusive Innovation Challenge, which calls for participants to build "innovative solutions to help individuals with disabilities overcome their daily struggles".
Three solution themes are outlined in the challenge, including swimming for people with visual impairments. This theme was interesting to me because I enjoy swimming as exercise and have previously designed waterproof hardware for other projects.
Participating in the challenge provided the opportunity to engage with Contest Masters, individuals who experience visual impairment firsthand, to help identify the unique needs of swimmers with disabilities.
Through conversations on Discord with the Contest Masters, I gained a better understanding of the problems faced by this group of swimmers. With this knowledge, I designed and built a hardware solution to address these issues and received direct feedback during the development process.
Problem IdentificationThe Contest Masters discussed how their own conditions, such as Retinitis Pigmentosa, affect their ability to swim, particularly when swimming in designated lanes within a lap pool.
What were the needs or pain points that you attended to and identified when you were solving problems faced by the Contest Masters?
These discussions helped identify two major pain points faced by visually impaired swimmers attempting to navigate and stay safe in a pool:
1) Gauging distance to the edge of the pool: Swimmers struggle to determine how far they are from the end of their lane at any given moment.
This issue presents both safety and performance concerns. Swimmers unknowingly approaching the pool edge risk injury by colliding with it. Additionally, swimmers executing kick turns must initiate the move at the right distance for maximum effectiveness.
2) Maintain a straight course within the swim lane: Swimmers find it challenging to swim in a straight line throughout the length of the pool.
Those who cannot stay centered in their lane risk scraping against the lane dividers, leading to potential injuries and a slowdown in their pace. Markings along the pool's bottom typically used to aid straight-line swimming are unusable for swimmers with no or poor vision.
Developing a SolutionTo address these issues, a solution needs to provide information to the swimmer about their current position within the swim lane, using one of their other senses instead of vision.
Using my background in hardware and electronics, I designed and built an underwater sound beacon that guides swimmers across the pool lane using audio cues, enabling swimmers to navigate using their sense of hearing.
These beacons are submerged along the length of the pool and periodically emit sounds that can be heard by the swimmer. By listening to the direction, strength, and content of the beacon sounds, swimmers can determine their distance from the wall and their centeredness in the lane.
Key features of the beacons include:
1. Directional Audio: Beacons are designed to project their audio directly upwards when placed underwater, allowing swimmers to hear the sound as they swim above them and assess their proximity to the beacons.
2. Easy Deployment: Beacons are easily positioned in the pool using anchor weights and can be easily removed, offering a solution that does not require any permanent changes to the pool facility.
3. Customized Cues: Each beacon can be individually configured to emit a unique audio cue, such as a voice distance notification (i.e. "3 meters"), providing swimmers with direct information about the beacon's position.
This combination of features results in an innovative hardware device that can solve the navigation and safety issues faced by swimmers with limited vision.
How It WorksThe beacon consists of electronics enclosed within a watertight 3D-printed body, which can be deployed to any pool to help guide swimmers.
An Adafruit Feather RP2040 serves as the central processor for the device, responsible for storing sound files and controlling the device's audio playback.
Connected to the Feather is an Adafruit MAX98357 amplifier. This component converts digital audio input from the board and then amplifies it for output.
A mini transducer plugs into the amplifier's terminals. Electrical signals from the amplifier are converted into mechanical vibrations by the transducer in order to produce sound waves.
Power is delivered to the board by a LiPo battery that plugs into the board's JST socket through a toggle button switch.
The Feather, amplifier, and battery attach to a mounting plate and fit within the beacon's body, while the transducer mounts inside the beacon's top cap.
An O-ring placed around the opening of the beacon body ensures a watertight seal to protect the electronics when both the body and cap are screwed together to form the device enclosure.
The beacon is held submerged underwater in a fixed position on the bottom of a pool lane by a cord and weight that act as an anchor. One end of the cord is tied to the beacon body's underside bracket, while the opposite end is attached to the weight.
When ready to be used by the swimmer, the cap can be screwed off to access and turn on the battery switch. The cap is screwed back onto the body and the powered-on beacon is ready to be deployed.
Once powered on, the board automatically begins to execute its audio playback script, which plays a selected audio cue at five-second intervals.
The audio cue played by the beacon is configured within the software running on the device and includes options for spoken distances (i.e. "Ten meters", "Five meters", "Three meters") and multiple beeping sound effects.
Swimmers, or someone assisting them, can deploy the beacon by dropping its weight at a desired position along the bottom of a pool lane. The device will float upwards but remain in place tethered to the weight.
Beacons that emit a distance audio cue (i.e. "3 meters") should be placed at that distance from the pool's edge, while beacons that emit a beep can be placed at any point along the pool length according to the swimmer's needs. Each beacon should be centered along the width of the lane.
The length of the cord can be adjusted to hold the beacon at a desired depth below the water surface. Appropriate beacon depth is 2-3 feet below the surface, which leaves clearance for the swimmer to swim above the beacon but still in range of the beacon's audio output.
Audio cues are played through the device's transducer, which is pressed against the inside of the top cap, and aimed towards the surface of the water.
The sound vibrations created by the transducer reverberate through the hollow body of the beacon, amplifying the volume of the audio cue. The transducer's position and the flat surface of the cap work to primarily emit the sound waves upwards from the top of the beacon.
With one or more beacons placed, swimmers can begin their swim back and forth within their pool lane, listening for beacons as they pass above them.
Each time the swimmer hears an audio cue emitted from a beacon, it provides them with multiple data points to help position them within the lane:
1. Audio Strength: The strength of an audio cue tells the swimmer how close they are to the beacon, as the volume will grow louder as they approach it. Swimmers will know they're directly above a beacon when they hear the audio the loudest.
2. Audio Direction: The direction of a cue informs the swimmer if they're moving off from the center of the lane. Audio cues will be heard directly below the swimmer when they are centered, and swimmers must adjust their course if they are heard to either side.
3. Audio Content: Swimmers can listen for distance notification sounds played by beacons. If a beacon is configured as a three-meter distance marker (i.e. "Three meters"), the swimmer knows they are three meters from the wall when passing over the beacon.
Each of these sound aspects can be used by the swimmer to enhance their spatial awareness within the pool. By listening to the beacons as they repeatedly emit audio signals, the swimmer can better understand their distance to the pool's edge and their centeredness in the lane.
Build InstructionsBelow are instructions on how to prototype, assemble, and deploy the underwater sound beacon. These instructions assume you are familiar with the Adafruit Feather RP2040 and working with CircuitPython.
Complete project code and 3D print files are found within this project's attachments and on GitHub.
Prototype CircuitTo help troubleshoot component connections and programming issues before final assembly, a prototype of the beacon is first built on a breadboard.
1. Place the device components on a breadboard and use jumper wires to make the connections seen in this circuit diagram:
The prototype layout should resemble the following circuit:
2. Connect the Feather RP2040 to the computer via a USB cable.
This connection powers the board and opens file access to the board's onboard storage drive, listed as CIRCUITPYTHON
on the connected computer.
The beacon requires a combination of sound files (.wav) and a Python script for its audio output capabilities to function.
1. Download and unzip the project bundle from the following link on GitHub: underwater-sound-beacon-main.zip.
The unzipped directory underwater-sound-beacon-main
contains all of the project files needed for the beacon.
2. Copy the sounds
directory and code.py
file from the project bundle onto the CIRCUITPYTHON
drive.
Once the copying is complete, the Feather will restart and begin playing the default audio cue from the prototype's connected transducer.
Code.pyThe Feather board is configured to automatically execute the code.py
file each time it is powered on, which is responsible for loading a selected sound file and playing it through the transducer at repeating intervals.
The script begins by importing its required CircruitPython libraries:
import time
import board
import audiobusio
import audiocore
These libraries provide additional code for interfacing with the board and its connected audio components.
Next, an audio output object is initialized:
# Audio output object
audio = audiobusio.I2SOut(board.D24, board.D25, board.A3)
This object is used to interface with the amplifier using the I2S digital sound protocol and is initiated by passing in the board pin numbers that the amplifier is connected to.
The name of the audio sound to be played is defined:
# Define sound to play
sound = '3_meters'
This value can be changed based on which audio cue the swimmer wants the device to play. Options for sounds include spoken distances (3_meters
, 5_meters
, 10_meters,1_meter
) or two beeps (beep_1
, beep_2
).
The corresponding wave file for the sound is then loaded:
# Open sound wave file
wave_file = open('sounds/' + sound + '.wav', 'rb')
wave = audiocore.WaveFile(wave_file)
Wave files (.wav) are stored for each of the available sounds within the sounds
directory that was copied onto the Feather.
The script then enters a continuously repeating loop:
# Main loop
while True:
# Play selected sound
print("Playing:", sound)
audio.play(wave)
# Delay
time.sleep(5)
On each loop iteration, the loaded wave file is played using the audio object. This sends the file's digital audio signals from the board to the amplifier, which in turn sends signals to the transducer that converts them to sound vibrations.
The loop includes a five-second delay between each iteration. This delay can adjusted by the swimmer to control how often the beacon repeats its audio cue when deployed in the water.
Prototype TestingWith the above steps completed, the beacon prototype is ready for testing to ensure that the components, connections, and Python script are functioning as expected.
Power on the board to initiate the Python script, then press the transducer against any flat surface or cavity to turn it into a speaker. Sound vibrations produced by the transducer will propagate through the object, amplifying the sound so it can be heard.
The prototype works properly if the selected audio cue is heard clearly every five seconds from the transducer speaker.
Beacon AssemblyAfter the prototype has been tested, its components can be assembled into the finished beacon design.
1. 3D print the underwater beacon's enclosure parts.
Parts include a top cap, mounting plate, and body. 3D model files (.stl) are provided in this project's Custom Parts and Enclosures section.
The beacon shown in this project is printed from high-visibility PLA, making it easier to find underwater for those placing and removing it from the pool. Other materials and colors can be used.
2. Attach the Feather board and amplifier to the mounting plate, and solder the circuit connections between them.
After removing the header pins from the board and amplifier, align the mounting holes of each component with their corresponding mounts on the plate and attach them using M2.5x5 screws.
Following the circuit diagram, solder the required connections between the board and amplifier using jumper wires. 30AWG wires are recommended due to their thinness and flexibility.
3. Plug the LiPo battery into the board through the JST switch.
The LiPo battery plugs into the toggle switch, which then plugs into the Feather board's JST socket. Once the battery is connected, slide it between the board and the mounting plate to secure it.
4. Connect the transducer to the amplifier, then mount it to the beacon cap.
The transducer's ground and power wires screw into their corresponding terminals on the amplifier.
Slide the transducer into the mount located on the top cap, making sure that its vibrating plate is held firmly against the inner surface of the cap to maximize sound transmission.
5. Place the O-ring around the mouth of the beacon body.
The O-ring sits below the screw threads on the body and works as a gasket to create a watertight seal between the body and cap when screwed together.
6. Slide the mounting plate and switch into the body, then screw on the cap.
Two guide rails along the inner sides of the body accept the sides of the plate and secure it upright within the body. The toggle switch fits in the body on the plate side opposite of the components.
Ensure that the top cap is screwed on tight enough to compress the O-ring.
7. Attach the anchor weight to the beacon body.
Using a length of cord, tie one end around the bracket on the bottom of the body, and the other end around the handle or body of the anchor weight.
The cord length should allow the beacon to float approximately 2-3ft below the surface of the water when the weight is resting on the bottom of the pool. Use a slip knot around the anchor weight to allow for length adjustments.
With these steps complete, the fully assembled device is ready to be deployed in any pool to assist visually impaired swimmers.
Using the BeaconTo begin using the beacon, first power it on. Unscrew the cap and body, press the battery switch to activate the board, then screw the halves back together.
Once powered on, the device's playback script will automatically start, and the selected sound cue will play at repeating intervals.
For visually impaired swimmers, it's recommended to get assistance from a sighted person to position the device within the pool lane.
If the beacon is configured for a specific distance cue (e.g., 'Three meters'), position the anchor that far from the pool's wall. Otherwise set it at a distance known by the swimmer.
Center the anchor between the lane dividers, and adjust the cord length until the top of the floating beacon is approximately two feet from the water's surface to complete the setup.
Swimmers can use the deployed beacon to navigate their way through the lane. As they swim over the beacon they can listen to the strength and direction of its audio cues to help determine their current position in the pool.
Future DevelopmentThis project has demonstrated the practicality and usefulness of an underwater audio beacon for swimmers with visual impairments. Future upgrades to the beacon may include:
- BeaconSynchronization: Multiple beacons could be deployed and synchronized to broadcast their audio cues in a progressive order along the length of the pool, providing more spatial awareness to the swimmer. This could be accomplished by adding Bluetooth communication capabilities to the beacons in order to organize and control the synchronization.
- Custom Audio Cues: Swimmers may have personal preferences for the types of audio cues used to help guide them in the pool. For example, spoken voice cues with distance information or simple sound effects.A toggle control could be added to the beacon's outer face that allows users to easily switch between a list of preset audio cues.
- Improved Deployment: Currently, the user must manually plug in the battery and screw the beacon's body together prior to deploying it underwater. Future versions of the device can include a charging port and power button that eliminates the need to open the beacon's body.
Comments