Six months ago I won a contest for presenting a unique idea to wirelessly communicate between devices. My idea was Ultrasonic UART. Basically using the UART already available on a standard microcontroller and modulating an ultrasonic carrier wave to send the data to another device where it would be decoded.
The block diagram was simple, the transmit signal would be modulated using On-Off Keying to create presence and absence of the 40kHz carrier which would bidirectionally drive an ultrasonic transducer. That in turn would be received, filtered and amplified, and demodulated using an envelope detector and comparator to retrieve the signal back.
I did win the contest, but that was just the beginning. I ended up designing a board in KiCAD and hand-building prototypes. I had a few missteps with incorrect footprint pinouts and missing a pullup resistor but I bodged that to make a prototype.
Currently I'm concentrating on sending and receiving a signal from the reflection. Using my Keysight scope I can easily decode the serial signals. The transmit side was working well out of the gate, the receive side not so much. In the end I had to decrease my baud rate from 2400 down to 1200 to receive consistent signals. Going even lower to 600 yielded better results. Once I knew the serial was okay I had the Arduino decode it and put it on the screen.
In my test I'm sending "Hello To Me! :-)" CR LF a distance of approximately 180mm and it's bouncing off a box and returning. If I get the angle right I can get pretty consistent results. Further development would be tuning the amplifier and comparator and adding error determination to the data sent.
This started as just a neat idea for a contest but I was surprised how well it works. I could use a new power supply to test multiple excitation voltages and the arbitrary waveform generator to tune my receive and decode circuitry. Right now it's trial and error. I'm looking forward to trying it in other applications, like higher frequency for communication in liquid.