Make an Arduino FM Radio! (using TEA5767)

34,530

160

24

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

About: I am very athletic and enjoy sports. I often participate in many different activities and love to be busy all day. I enjoy to wake up and greet every morning with a smile.

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

Arduino Contest 2016

Participated in the
Arduino Contest 2016

1 Person Made This Project!

Recommendations

  • Puzzles Speed Challenge

    Puzzles Speed Challenge
  • "Can't Touch This" Family Contest

    "Can't Touch This" Family Contest
  • CNC Contest 2020

    CNC Contest 2020

24 Discussions

0
Upstander123
Upstander123

1 year ago on Step 3

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!

0
Mardav111
Mardav111

Reply 4 months ago

I don't know but you might need to unzip it.

0
RichieC10
RichieC10

Question 5 months ago

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.

0
dodoykusgan
dodoykusgan

7 months ago

Hello Sir, Thank you for your guide and sir question, where is the volume control?

0
DjawaD
DjawaD

Reply 6 months ago

From input modul amfli

0
nima_v
nima_v

10 months ago

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.

0
Max _777
Max _777

Question 1 year ago

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?

0
MuaazH
MuaazH

1 year ago

// 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);
}

fm-stereo-radio-rda5807m-module-roboromania-pinout_CFyabpEr0p.jpg
3
MatthewH321
MatthewH321

1 year ago

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

9AA1E386-3E7C-44E6-A1E8-96E35AA060CD.jpeg
1
erik_montesdeoca
erik_montesdeoca

Reply 1 year ago

for to adjust the potentiometer resistance,

0
tclayton
tclayton

3 years ago

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?

0
erik_montesdeoca
erik_montesdeoca

Reply 2 years ago

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

0
erik_montesdeoca
erik_montesdeoca

Reply 3 years ago

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

0
tclayton
tclayton

Reply 3 years ago

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 !

1
tanoha
tanoha

2 years ago

What's the code to add for fm automatic search?
Thks

0
alai5
alai5

3 years ago

What is the language of the code? Thanks

0
erik_montesdeoca
erik_montesdeoca

Reply 3 years ago

#C modified for the arduino enviroment development

0
erik_montesdeoca
erik_montesdeoca

Reply 3 years ago

it's modified #C arduino languaje :)