Arduino TEA5767 FM Radio Receiver




Introduction: Arduino TEA5767 FM Radio Receiver

About: I am Nick Koumaris from Sparta, Greece. I'm extremely passionate about electronics, making things and design. I love teaching what I know and sharing my experiences with you. I put out new YouTube videos every…

Dear friends welcome back! In this tutorial, we are going to build a simple FM Radio receiver on a breadboard.

Please watch the attached video to listen to it for a few seconds … As you can see the radio is working fine and we can hear some music coming out of it. I am transmitting some YouTube safe tracks using this inexpensive FM transmitter at this frequency. I am using the Nokia 5110 LCD display, to display the selected frequency, the signal strength, and a stereo icon if we are receiving stereo sound. The brains of the project are the small and inexpensive Arduino Nano. We can control the volume of the speaker using this potentiometer, and we can change the Radio frequency using this potentiometer.

It is a fascinating project and relatively easy to build. Let’s see how to build it.

Step 1: Get All the Parts

The parts needed to build this project are the following:

The total cost of the project is around 15$.

Step 2: Nokia 5110 LCD

The Nokia 5110 is my favorite display for my Arduino Projects.

The Nokia 5110 is a basic graphic LCD screen which was originally intended for as a cell phone screen. It uses the PCD8544 controller which is a low power CMOS LCD controller/driver. Because of this, the display has an impressive power consumption.

It uses only 0.4mA when it is on, but the backlight is disabled. It uses less than 0.06mA when in sleep mode! That's one of the reasons that make this display my favorite. The PCD8544 interfaces to microcontrollers through a serial bus interface. That makes the screen very easy to use with Arduino. You only need to connect 8 wires. I have prepared a detailed tutorial on how to use the Nokia 5110 LCD with Arduino.

I have attached that video in this Instructable, it will provide useful information about the display, so I encourage you to watch it carefully. The cost of the display is around $4.

You can get it here ▶

Step 3: TEA5767 FM Radio Module

The project is built around this FM radio module.

The module uses the TEA5767 radio chip, this one here. The chip uses the I2C interface, so it is straightforward to use with Arduino. On the module, we can also find an audio amplifier. Unfortunately, this is a headphone amplifier so we cannot connect a speaker to the output of the module directly since the audio signal is very weak. We need to amplify it first. Also, there is no way to control the volume that comes out of the module with software, so we are going to use a potentiometer later on. On the module there are two headphone jacks, one is for the antenna, and the other one is the standard headphone output. The module comes with a small antenna, but you can easily build your own if you wish.

You can get it here ▶

Step 4: Connecting the Parts

Let’s now build the circuit according to this schematic diagram.

First of all, let’s place all parts on the breadboard. We connect the ground pin of every part to the breadboard’s ground rail and the Vcc pin of every part to the breadboard’s positive rail except the Potentiometer which will control the volume. Now, let’s connect the radio module. The SLC pin goes to analog pin 5 of the Arduino Nano, and the SDA pin goes to analog pin 4. Now we connect the middle pin of the potentiometer to analog pin 0. With this potentiometer, we are going to select the frequency.

Now we need to connect the Volume potentiometer to able to control the volume. I used an audio cable. I plugged in one end of the cable to the audio output of the module. Next, I cut the other end to find 4 wires inside the cable. The module outputs stereo sound, but we are going to use only one audio channel this time. So, I connect only two of the wires. One of them is GND, and the other one is the audio signal which needs to be amplified. The audio signal wire goes to the input pin of the volume potentiometer. The middle pin of the potentiometer is the audio signal that comes out.

To amplify the audio signal, I use this module which uses the LM386 amplifier chip. The audio signal goes to this pin, the ground pin from the audio cable goes to this pin. Now, all we have to do is to provide power to the module. So we connect this pin the positive rail of the breadboard and this pin to the negative rail of the breadboard. The only thing that we have to do now is to connect a small speaker to the output of the module like this. With this small potentiometer, we can control the amplification of the signal. Now, all we have to do is connect the Nokia 5110 display. Please watch my detailed video on how to use the Nokia 5110 display to see how to connect it, or follow the schematic.

Connecting the Nokia 5110 LCD Display
RST goes to Digital Pin 12 of the Arduino

CE goes to Digital Pin 11 of the Arduino

DC goes to Digital Pin 10 of the Arduino

DIN goes to Digital Pin 9 of the Arduino

CLK goes to Digital Pin 8 of the Arduino

VCC goes to Arduino 3.3V

LIGHT goes to Arduino GND (backlight on)

GND goes to Arduino GND

The last step, which is optional is to connect a 330μF capacitor to the breadboard like this to reduce the noise on the audio signal.

If we now power up the project, we can see that a splash screen is displayed for 3 seconds that and after that, we can hear sound from the speaker. The sound quality is not the best with this speaker and this audio amplifier. If I use another commercial speaker with an embedded amplifier, the sound quality is perfect. Check it out. So, the output signal from the module is perfect, but the amplifier and the speaker I used reduce the sound quality, so I need to search for better quality ones. Now that we have built the hardware let’s take a look at the software side of the project.

Step 5: Code of the Project

In this project, we use two libraries. I am using the Nokia5110 graph library and a library for the TEA5767 FM chip.

The code works like this. At first, we initialize the radio module and the display, and we display a splash screen for three seconds. I designed this splash screen in Photoshop. Watch the video tutorial I have attached if you want to know how to upload your graphics to a Nokia 5110 display.

<p>void setup() <br>{

Next, in the loop function, we read the value from the potentiometer that controls the frequency every few milliseconds. We get the analog value from the potentiometer, and we map it to a frequency value. Since we read an analog value this value is not constant; it goes up or down slightly even if we do not turn the potentiometer.

<p>frequencyInt = map(val, 2, 1014, 8700, 10700); //Analog value to frequency from 87.0 MHz to 107.00 MHz 
float frequency = frequencyInt/100.0f;</p>

So to achieve a stable frequency, we only tune the radio to a different frequency if the frequency has changed considerably. So, if there is a significant shift in the frequency, we tune the radio module to that frequency, we get the signal strength, and we print it on the screen, we print the stereo icon if needed and lastly, we print the selected frequency.

<p>if(frequency - previousFrequency >= 0.1f || previousFrequency - frequency >= 0.1f)<br>  {
    previousFrequency = frequency;    

That is how the code works, it is simple but works ok. As always you can find the code of the project attached to this step.

Since this is a project in development, you can find the latest version of the code on the project's web page here:

Step 6: Final Thoughts

As you can see in about half an hour, we can build an FM Radio on a breadboard. How cool is that!

The sound quality that we get out of this project is not great, yet. I am going to work more on this project to improve it in every field. I want to turn this project into complete radio with a retro 3D printed enclosure. First of all, I am going to try different audio amplifiers and speakers to get good audio quality out of this project. I will also move it away from the breadboard and make a permanent version of it on a prototyping board. I will also design an enclosure for this project to make it look like a radio. Of course, the code of the project needs a lot of improvements and tweaks as well. One feature I would like to add is a fine-tune functionality which will improve the sound quality even more.

The project requires around 50mA of current when the backlight of the display is disabled. We can further reduce the current some software and hardware tricks so this project can be battery powered. I think, the result will be impressive, I cannot wait to see this project completed on my desk. This video was just the beginning.

I would love to hear your opinion about this project. Do you find this project interesting? Also, what kind of improvements do you suggest? Do you have any tricks from your experience that can improve this project?

Please post your comments in the comments section below and don’t forget to like the video and share it with your friends if you find it interesting! Thank you very much!

Be the First to Share


    • Stick It Challenge

      Stick It Challenge
    • Home and Garden Contest

      Home and Garden Contest
    • Trash to Treasure Contest

      Trash to Treasure Contest



    1 year ago

    the code is missing initialization of i. in line 42. It shoud be :
    for(int i=0;i<30;i++


    2 years ago

    I'm trying to construct this FM Radio and i'm not able to get it working.
    The trick seems to be in the reading of the frequency pot.
    I've added this few lines :

    between the line "val = val/30;" and the line "frequencyInt = map(val, 2, 1014, 8700, 10700); //Analog value to frequency from 87.0 MHz to 107.00 MHz "

    to see what is happening. It seems the the reading of the analog pin is good (I obtain on the serial monitor lines as "analogPin=904" with values between 0 and 999 according to the position of the pot.
    The value of "val" is always zero.

    What is happening ....
    Thank you for any help.


    3 years ago

    Great. But My question is does the TEA5767 can act as transmitter. Can you make a tutorial on making Fm transmitter using this below module?

    ARDUINO M446 TEA5767 Programmable Low-power FM Stereo Radio Module FM Transmitter

    Simon Pierre
    Simon Pierre

    3 years ago

    Very nice project sir! I have a question: do I have to use the FM transmitter? Can I pick up signals from the local radio at that frequency or does this radio have a short range?


    4 years ago

    Please clar two doubts,

    1) What's the use of software code? Is it also necessary for radio's function? Will not it work without that code?
    2) If it's necessary, can I write the code in some other languages like VB?
    Also can we write the code in any other languages


    4 years ago

    the screen isn't in parts list


    Reply 4 years ago

    Hello, friend! Good catch! It is now fixed!


    4 years ago

    Great Instructable. Couple questions. What is the name of the device you used to calculate the amperage pull. The one in the final photo that attaches between the power bank and the Arduino? Secondly how did you figure out the required capacitor value (330uf) for reducing noise? Thanks!


    Reply 4 years ago

    This device is called a USB Doctor and it provides valuable data. It is very handy for quick measurements.

    I tried many capacitors, I used a 330μF one over smaller ones because it provided the best sound. There was no need to try a bigger one because the sound quality was free of noise.