Data over sound

I am looking to build a handheld device that can receive a message using data-over-sound via a live stream video. when I began researching this idea I found the Chirp app but they got bought up by Sonos so that is a no-go. here is the catch, I just bought my first Nano and I know next to nothing about arduino and IDE (and programming for that matter). I would need make about 3-5 and keep them cheap as possible because I'd like to give them away. The device would need to be something like this.

  1. Battery powered
  2. have an LCD to display the message/ secret code.
  3. ready to use by simply turning it on.

I've found a few projects that people have made but they are mainly using the ultrasonic sensor mics and I don't think that would work because the audio would be streamed on a video. I attempted to build one but I had no idea how to load and modify the code for my needs. So I guess my real question is does anyone know of a simple plug and play type code/library that I could just upload to something like an Arduino Nano 33 IoT, or an esp32 with a microphone expansion board. Also it'd be great if I didn't need to add any additional ADC chips

Thank you for any input on this project

1 Like

It's possible but highly unlikely that such a library exists. You're better off telling us more details of the requirements, and soliciting advice about how you can program it. Please post a link to any of the related projects that have any relevant information, such as the ultrasound one you mentioned.

You do realize, the tones would be audible, right?

Why do you need internet connectivity?

I'd like the tones to be audible that way if anyone figures out how message is getting sent they could find an app like WAVER or make a device of their own. Here are the main two that I have been researching. GitHub - weckbach/AstroMech: Protocol for exchanging small amounts of data over audio.
and
http://www.zolalab.com.br/eletronica_projetos/ultrasonic_talk.php

just as a footnote was able to send a message via a recording using the chirp app before it went away.

I don't need them to be internet capable. Someone had suggested I look into those models if I didn't want to add the extra comparators
,

We're supposed to just know what "the extra comparators" are? :slight_smile:

Okay, you've got some research there. What have you tried with it? Did you reach any conclusions about its suitability for your application?

Details? Like, did you use an Arduino, or?...

apologies. I think the compactors are some type of secondary ADCs. They are The LM386 to amplify the received signal and The LM393 for comparing the signal once amplified. I had used the Arduino Uno and the Zola Lab ultrasonic method but I couldn't figure out how to alter the code so I didn't have to use ultrasonic frequencies.

You forgot to post links. Nobody in their right mind is going to Google all that stuff to help you.
Edit - oh it's the ones you already posted. But those circuits are for the ultrasonics.

as for sending the chirp message I just used the Chirp IOS app when it was still available. More recently I tested it with the ios WAVER app.

Yes, and with or without Arduino? Were you able to look at the source code and/or engineering information?

Thanks for being patient I'm still trying to figure out how to even communicate this stuff.

Looks like I'm gonna have to do some more research so I can figure out how to ask the right Questions. LOL.
Looking into this I found that arduino-nano-33-ble-sense would have been able to do this just based on the test videos for the nano-sense at the bottom of this page.(Chirp on Arduino // Machine-Machine Communication - YouTube)

Well, the AstroMech Github site looked promising. Why not try that?

I haven't be able to load all of the code onto My UNO

If you want help with that, you have to provide details of what happened that shouldn't have, or what didn't happen that should. Otherwise all people can really provide is sympathy.

Computer data have been sent using audio tones for decades, and it is pretty simple to do. The earliest home computers, like Commodore, Atari, etc. stored programs on cassette tape, usually using two tones like 1200 and 2400 Hz to represent the 1's and 0's. Telephone modems transmit data over the phone lines using many frequencies. There is also ham radio APRS (text), and various government agency tone modulated signals that you can hear on shortwave radio today.

If you look around on the web you can find plenty of information on how to do all those things. Takes just a few lines of code on each end.

Here is how to make a 300 Baud telephone modem using Arduino: GitHub - cstroie/Arabell300: Old school Arduino modem, Bell 103 compatible, at 300 baud

Are you proposing to modulate the sound frequency or amplitude to transmit the data? Consider you need at least two cycles of sound to identify that frequency. Tell us the lowest sound frequency you need to use and from that you can determine the maximum rate at which you can send bits. Pretty slow! That is why the project you mentioned used ultrasonic frequencies.

Google, "Kansas City Standard". Another unmentioned standard that works out of the box, is DTMF.

Hi, I have been developing a data-over-sound library and I recently ported it for micro controllers. I have implemented a few examples that can get you started immediately:

Here is a short video demonstration of Arduino, ESP32 and Android phone communicating through sound:

The library currently supports mono-tone and dual-tone protocols. It has built-in forward error correction using Reed-Solomon codes. You can optionally enable Direct Sequence Spread mode which seems to improve the robustness of the transmission. I think the reception is pretty good within 50-100 cm distance. With default protocols you will get between 5-10 B/s data rate.

You can use the Waver v1.5.0 app to do quick tests as demonstrated in the video.

I think the Arduino RP2040 example should work also with Arduino Nano 33 BLE Sense, but I don't have one to perform the test. The benefit of using these microcontrollers is that they have a built-in mic, which seems to be with very good quality.

The ESP32 example uses external analog microphone modules. I have tried using MAX9814, KY-037, KY-038 and WS Sound sensor and they all work. I just connect them to the 12-bit ADC and setup I2C DMA to process the data in real-time.

Hope this helps!

1 Like

FYI i recently discovered the QuietJS library for doing this in a browser