Blog Home

Low-quality wireless audio transmission with Arduino

Arduino TeamJuly 25th, 2019

After considering the price of helmet-mounted headsets for motorcycle or moped use, YouTuber GreatScott! decided to try making his own. His walkie-talkie prototype consisted of two Arduino Nano boards, using nRF24L01+ transceivers and a small speaker for PWM audio output.

After a test demonstrating wireless transmission, the design was transferred to custom PCBs, programming their ATmega328P with an Uno acting as an ISP. The audio results are, at this point, barely intelligible. Nevertheless, it’s an interesting experiment, showing that this type of communication is possible using the RF24Audio library with an Arduino-based system. 

If you think you could do things better, or that he’s missed something obvious, the PCB design is available here, so be sure to chime in on the video’s comments if you have an idea!


3 Responses to “Low-quality wireless audio transmission with Arduino”

  1. ArduinoKoen Says:

    I like your try.and appreciate that you did publish your trial even though you consider it a failure.
    Please be aware of all the successes you reached: You did achieve some communication!

    Kind regards,


  2. ArduinoKoen Says:

    I might have some hints to improve the audio quality of your setup.
    According to Shannon’s theorem, you can fully reconstruct an audio signal if the audio signal is sampled at a rate of 2 times the maximum frequency present in the audio signal.
    Your sampling rate is 16 kHz. So the signal that you are sampling should not have frequencies over 8 kHz.
    What you need is a filter to remove all frequencies above 8 kHz before sampling. I guess a double RC filter with a cut off of 4 kHz would do a good job. You may also integrate the filter in your amplifier (better solution as you will simply amplify only the frequencies you need, instead of filtering them out after amplifying all frequencies). If you remove frequencies above 4 kHz from speech it should still be very well understandable.
    Then: on the output side you may also need such a filter. You have put your PWM signal directly on the speaker. But the PWM is a block wave, and not a sine wave. A RC filter may remove the sharp edges and improve the signal quality.
    Maybe it is better to use an analog output to connect to the speaker? Then your signal would make small steps instead of the block wave from the PWM. You would need less filtering and can simply use a resistor (in series) and a small capacitor (to ground) to smooth the signal,
    I am really curious if you could get the thing working with this.
    By the way: I admire your soldering skills in SMD components!

    Kind regards, Arduino Koen.

  3. eliasrm Says:

    Andreas Spiess published a very good video debugging Great Scott’s design. I strongly recommend you to take a look.

Leave a Reply

You must be logged in with your Arduino account to post a comment.