Make an Arduino FM Radio! (using TEA5767)

49K18844

Intro: Make an Arduino FM Radio! (using TEA5767)

Hi guys from Instructables, In this tutorial i'll show you how to make a FM digital Radio easily using arduino uno (or any other arduino board), and the TEA5667 Fm Radio module, and audio amplifier and a LCD 16X2.

Let´s start !

STEP 1: Block Diagram & Connections.

First, the part list of needed electronic components:

-Arduino UNO, or any other similar board friendly with the arduino enviroment.

-TEA5767 FM Radio module

-16X2 LCD

-2 Buttons Normally open (NA) or push buttons

-330 ohms resistor

-2x 10 k ohms reisistor

-Jumper wires

-Switch for to power on the radio

-Led(as a power on indicator).

-A free weekend or day :)

STEP 2: Arduino Program & Libraries

*First you'll need to install the librarys on the arduino IDE and later compile and upload the program*

The code in text is here:

/*+-10--9--8--7--6-+
|  +------+  ++  |
|  | TEA  |  ||  |
|  | 5767 |  ||  |
|  +------+  ++  |
+--1--2--3--4--5-+

1 ----> Arduino SDA (pin A5 arduino uno)
2 ----> Arduino SCL (pin A4 arduino uno)
3 ----> GND
5 ----> +3.3 V
6 ----> GND
7 ----> Audio out (right channel)
8 ----> Audio out (left channel)
10 ---> Antenna 
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * ends to +5V and ground
 * UP SEARCH (A0)
 * DOWN SEARCH (A1)
 * ALL RESISTOR ARE 10K AND PUSH BUTTON IN PULL DOWN MODE
 */

#include<Wire.h>

#include <TEA5767Radio.h> 

#include <LiquidCrystal.h>

TEA5767Radio radio = TEA5767Radio();            
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);              
float frequency = 0;                            
int fUP = A0;                                   
int fDOWN = A1;                                
int count = 0;                                   
void setup()
{
  delay(1000);
  Wire.begin();
  frequency = 91.1;                       //starting frequency
  radio.setFrequency(frequency);
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("FM: ");
  lcd.setCursor(0, 1);
  lcd.print(frequency);
}void loop()
{
  
  if(digitalRead(fUP))                      
  {
    count=0;
    while (digitalRead(fUP))
    {
      count++;
      if(count > 0 && count <= 6)          
      {
        frequency += 0.1;
        frequencyUpdate();
        delay(200);
      }
      else if (count > 6 && count <= 2)   
      {
        frequency += 0.1;
        frequencyUpdate();
        delay(80);
      }
      else                                
      {
        frequency += 0.1;
        frequencyUpdate();
        delay(5);
      }
    }}
  
  
  
   if(digitalRead(fDOWN))                   
   {
     count = 0;
    while (digitalRead(fDOWN))            
    {
      count--;
      if(count < 0 && count >= -6)
      {
        frequency -= 0.1;
        frequencyUpdate();
        delay(200);
      }
      else if (count < -6 && count >= -12)
      {
        frequency -= 0.1;
        frequencyUpdate();
        delay(80);
      }
      else                                 
      {
        frequency -= 0.1;
        frequencyUpdate();
        delay(5);
      }
    }
   }  
  
}
void frequencyUpdate()                    //this function changes the frequency of the station, is called by preset and frequency up/down conditions.
{
  frequency = constrain(frequency, 88.0, 108.0);
  lcd.setCursor(0,0);
  lcd.print("ESTACION DE FM:");
  lcd.setCursor(0,1);
  lcd.print(frequency);
  radio.setFrequency(frequency);
}

STEP 3: Final Pictures!

Here some nice pictures and teh radio with the shield totally functional!

ESPECIAL NOTES:

*Remember to use an a good audio amplifier for the output of the TEA5767 FM Radio Module

*Vcc= 3.3 TO 5 Volts maximun for the power of the TEA5767 Radio Module

*To use a good onmidirectional antenna

*The radio doesn't have an automatic searh for the FM stations but it's modifficable by the program

28 Comments

Where can I get such an adapter for the TEA5767 board or what is it called?

Thank you Erik...!!!
I am successful with a Nano.
Cheers...!!!
Had a few questions, I'm a beginner. On the far right with the black and red leads petruding, is this a speaker, if so what version did you use? I am unsure how wire junctions work, what I mean for example the red lead out of the left potentiometer/button, one path goes upwards and one path downwards towards the uno board, how do I make these junctions? Where is the switched you used, its in the final picture but not on the diagram, I cannot see it? And finally what is the device you used connected to the pink wire?

Thank you
What did you use to power the radio?
This is the best idea ever!!!! But the library.zip doesn't work. Hope you fix that!! In the meantime, I used a bunch of random libraries!

I don't know but you might need to unzip it.
Hi, cool project, i downloaded the code and it will not compile in the arduino software, i have all the libraries needed but still wont compile, anyone else have this problem.
Hello Sir, Thank you for your guide and sir question, where is the volume control?

From input modul amfli
Dear Erik. Nice project. I am newbie in Arduino and have some questions: 1- where is the 330 ohms resistor in the diagram? 2- there is a potensiometer in the diagram, what is the resistance of it? It should be change the frequency, right? but I do not see it in the final picture. Many thanks.
I need to add Stereo indicator to the lcd to identify Mono & Stereo radio stations. Im new to programming. Can someone help me with this?
// update code for RDA5807M
#include <radio.h>
#include <Wire.h>
#include <RDA5807M.h>
#include <LiquidCrystal.h>
#define FIX_VOLUME 10
RDA5807M radio = RDA5807M();
//RDA5807M radio;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
float frequency = 0;
int fUP = A0;
int fDOWN = A1;
int count = 0;
void setup() {
delay(1000);
Wire.begin();
frequency = 87.0; //starting frequency
radio.setFrequency(frequency);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FM: ");
lcd.setCursor(0, 1);
lcd.print(frequency); lcd.print("Mhz");
}
void loop() {
if (digitalRead(fUP))
{
count = 0;
while (digitalRead(fUP))
{
count++;
if (count > 0 && count <= 6)
{
frequency += 0.1;
frequencyUpdate();
delay(200);
}
else if (count > 6 && count <= 2)
{
frequency += 0.1;
frequencyUpdate();
delay(80);
}
else
{
frequency += 0.1;
frequencyUpdate();
delay(5);
}
}
}
if (digitalRead(fDOWN))
{
count = 0;
while (digitalRead(fDOWN))
{
count--;
if (count < 0 && count >= -6)
{
frequency -= 0.1;
frequencyUpdate();
delay(200);
}
else if (count < -6 && count >= -12) {
frequency -= 0.1;
frequencyUpdate();
delay(80);
}
else {
frequency -= 0.1;
frequencyUpdate();
delay(5);
}
}
}
}
//this function changes the frequency of the station, is called by preset and frequency up/down conditions.
void frequencyUpdate()
{
frequency = constrain(frequency, 87.0, 108.0);
lcd.setCursor(0, 0);
lcd.print("Radio Search:");
lcd.setCursor(0, 1);
lcd.print(frequency); lcd.print("Mhz");
radio.setFrequency(frequency);
}

Question : What is the pink wire from the lcd board connected to. Thanks

for to adjust the potentiometer resistance,
Question: say youre putting left and right audio to an amp, would you run one of the ground pins to the audio input on the amp?

you can make a mono amp with stereo output, only yopu have to do is solder a 10 ohm resistor to each output of the TEA5767 and solber both terminals to a single audio mixed output in a mono amp

If the amp is stereo you can connect each wire to each channel, but if you amp is mono put a 10 ohms resistor on the output of thr two channels and solder it together
I ended up figuring it out it was a silly question i should have known since ive built many amps from scratch.

Origionally i could not get this sketch to work but its because i was not using the right pins for sda and scl (i had an ardruino mega). I tried 4 other sketches before i found that out then got other ones to work but ultimately went back to your design and it is by far the best and cleanest signal with your code ! Im working on making an fm radio with aux and bluetooth and also display time and temp/humidity on the lcd (although im not sure how to code in all the screen changes). Thanks for this tutorial !
What's the code to add for fm automatic search?
Thks

What is the language of the code? Thanks

More Comments