Hello all!
I am getting ready to have a PCB I have been working on assembled, and I was just hoping to run it by some other people (no other EEs here with me).
WHAT I AM MAKING:A spearfishing walkie talkie to help freedivers, snorkelers, and spearfishers track and communicate with their diver partners.
The device does the following:
- Guides you to your partner in the event of a shallow water blackout: https://en.wikipedia.org/wiki/Shallow-water_blackout
- Notifies you if your partner has been underwater longer than a preset amount of time
- Notifies you if you and your partner have drifted farther apart than a preset distance
- Notifies you when your partner submerges or emerges (actually diving below the surface of the water)
- Basic "walkie talkie" function so you can communicate if and when you are seperated
An early rendering of the device:HOW IT WORKS- A GPS receiver tracks your location and an IMU tracks your orientation
- A LoRa module transmits your location to your dive partner
- When you dive, the radio link between you and your partner is broken (as water blocks anything except ELF)
- When the link breaks, a speaker sounds on your partners unit indicating that you have submerged
- When the link breaks, a timer starts counting your "elapsed down time."
- If you do not surface in a given amount of time, your buddies device enters "emergency mode" guiding them to your last known surface location to help recover your body and resuscitate you
- If you do surface as expected, the speaker sounds another notification indicating you are back on the surface
There are a few other features, but these are the
most critical.
EARLY DEMONSTRATIONSWe've actually done some preliminary testing in the water and the water did not interfere in a significant way while on the surface.
Software Demo:Location DemoThose first few demos were put together with some TTGO TBEAM boards + a BNO055 imu + piezo buzzer.
HARDWARE OVERVIEW:The board makes us of the following hardware:
- An ESP32-WROOMU for main the main MCU and mobile configuration
- A generic LoRa module for transmitting location and audio
- A BNO055 for an IMU and AHRS
- A Quectel L89 GNSS receiver
- An ICS-43434 MEMs microphone for audio capture
- A MAX98357AETE for speaker amplification (a la Adafruit)
- A MCP4725 DAC to provide 12bit output to the speaker
- A MCP73831 single cell lipo charger
- A XC6220B331MR LDO linear regulator
The project makes use of 3 PCBs.
The main "back" PCB which hosts all main components except the GNSS receiver.
A "front" PCB which hosts the GNSS receiver and a larger ground plane (hopefully to help with receiver accuracy).
A "bottom" PCB which contains two concentric, capacitive touch pads to provide contactless button functionality. There must be two to provide a reference between a real button press and submerging underwater.
A 3D assembly of an older PCB layout:My current PCB layout as of this morning:MY CURRENT CHALLENGES:- Bearing accuracy - The BNO055 can provide a bearing accuracy of +/- a few degrees. However, if both GPS devices are off by 2 meters (very common in with GPS) there's a scenario where the bearing accuracy will be off by as much as 40 degrees while 5m away from your partner. Here's a graph of the bearing error, distance, and gps error (expressed as "r"): https://www.desmos.com/calculator/wyhzkjrkmo
For this reason, I'm hoping that a Kalman filter will help significantly. But I have never implemented my own GPS + IMU kalman filter, does anyone have an idea of what kind of results I can expect? - Capacitive touch button in wet environment- I don't want any physical button for the device as the pressure and wet environment really makes it quite a mechanical hassle. So a capacitive touch will be used. In order to remove false positives created while submerged (the water will activate the touch sensor) there are two touch pads and the difference is compared
- Voice Activity Detection- This is a new feature that I recently wanted to add. Because the device really only has one button (long press for on/off, and short press to emergency locate your partner) I would like the device to auto-detect when you are speaking, clean the signal, compress, and transmit over LoRa. I have never done VAD before, but it seems that the new ESP32 libraries from espressif support some level of offline voice recognition/VAD. Maybe there is tflite network that can work? Does anyone have experience with this?
Since the microphone and speaker will be in a water tight enclosure, far away from the user's mouth, I'm worried that something "special" will have to be implemented to amplify and denoise the signal. - Waterproofing/Potting- prototyping a watertight enclosure presents a lot of challenges. If possible, I would prefer to pot the whole assembly in epoxy (or some such thing) and tack on a universal qi wireless charging receiver. However, I don't have good ideas regarding how to ensure that the microphone and speaker retain functionality if the whole circuit is potted in resin.
- Charging Circuit- This should be relatively straightforward, but I'd like the device to be powered on and charge while plugged into USB/Qi. Currently I'm basically just using two schottky diodes to switch between USB and battery power. Is a circuit similar to what I have here functional? Is it a common implementation?:
ALL FEEDBACK WELCOME! This is a passion project for myself and a couple spearfishing communities I am part of, and as a result, the feature creep (and the project complexity) is getting out of hand.
Any input at any level to help bring this project to life would be a huge help! I have been working on this alone in my apartment for too long, and an extra set of eyes on this would be a huge help.
SCHEMATIC ATTACHED BELOW