Skip to main content

Build Your FM Transmission Station With Arduino


Hi every body .

Before  A  3 months Ago , one of my friend ask me to build  a Simple FM transmitter , he Would to transmit An Audio File from computer and PLAY it on any radio channel , By adjust the frequency of receiver  as same as transmitter  frequency

I searched on the internet on for this circuit , But I don't find my target .

There  were some circuits with many component , or with miss component , so I search more and i Found one of the amazing method, effective and easy to use , with few component  .

and for easy interface with , I added  A graphical  LCD  Nokia 5110 PCD8544 , and  added a Potentiometer to tune the transmitter Frequency .

let's see what we need :

Step 1: Material

At first , I connect all part's on BreadBoard , and i design will PCB For it soon .

The component we need for this device :

1)Arduino Board  , Uno for example.

http://www.ebay.com/itm/Original-Genuine-Arduino-Uno-R3-Board-New-in-box-from-Italy-/271207670126?pt=LH_DefaultDomain_2&hash=item3f253ca16e

2) LCD Nokia 5110 PCD8544 

http://www.ebay.com/itm/1pcs-84-48-LCD-Module-White-backlight-adapter-pcb-for-Nokia-5110-/400347868649?pt=LH_DefaultDomain_0&hash=item5d3697ade9

3)FM Transmitter module V1.0 ElecHouse 

http://www.ebay.com/itm/140878623449?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

4)Solderless Jumper Male-Male

5) BreadBoard

6)potentiometer (50K , 500 Ohm)

7)Battery 9V With Holder .


Step 2: First Part : LCD Nokia 5110

This LCD was an Official LCD For Nokia 5110 Phone , It has a dimensions of 84*48 and can be interface on SPI Protocol .

I wrote An artical about it in arabic language on My Blog 

http://www.genotronex.com/2013/03/nokia-5110-lcd.html

And the best way to program this series of LCD Is U8g library , It's support many LCD Controller , You can read More About it in this link

https://code.google.com/p/u8glib/wiki/userreference

this LCD comes with different modules , like adafruit  , sparkFun ,  chines stores  , No matter what you are using , Just pay attention to Pinout and it's connection To arduino Board  .

For sparkFun LCD you must read this quick start Guide . and for adafruit LCD you well need CD4050 TTL Converter

I used LCD 5110 which is compatible with 5V Logic input ", you can buy one like this from Ebay store .


Step 3: FM Transmitter Module

The FM Transmitter module is the Heart of this project , it comes form ElecHouse and Works on I2C Interface .

the range of this module without antenna around 40cm , you can connect an external antenna to increase the range of transmitter .

This module based on KT0803K Monolithic Digital Stereo FM Transmitter Radio-Station-on-a-Chip ,  designed to operate from 76-108 MHZ

the Full Data sheet for  KT0803K here

http://www.elechouse.com/elechouse/images/product/FM%20Transmitter%20Module/KT0803K.pdf


the library for this Module will found in the "Arduino Code "step .

Step 4: Potentiometer

There are 2 Potentiometer in this project , One of it "50K ohm" connecting to Analoge Pin A0 to change the frequency of the Transmitter , and the other connecting to pin 7 On the LCD To adjust the Screen  Backlight 

Step 5: Schematic

Step 6: Arduino Code

The  full code , library, and schematic for this project you can find it on attachment 


Note that you can change the FM Frequency band depend on your country , in this Line :

fmtx_init(fm_freq, USA); // you can change it for your countery.
/*
USA
EUROPE
JAPAN
AUSTRALIA
CHINA
  */

For My Country ,Jordan , I use USA "Works from 88-107MHz "

Code ://
/********************************************************************

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/
//Name :Mohannad Rawashdeh .
//Date "13/5/2013 3:00pm
// Description: This  Code for  A FM transmission station
// for more info  http://www.genotronex.com/
// written by :Mohannad Rawashdeh , Genotronex@gmail.com
#include "U8glib.h"
#include <FMTX.h>
// draw Circle
//www.Genotronex.com
//Mohannad Rawashdeh
//U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
int channel=0;
float fm_freq = 90;  // Here set the default FM frequency
int reading=0;
int last_reading=0;
int Current_reading=0;
int mapping_reading=000;

void setup(void){

pinMode(A0,INPUT);
Serial.begin(9600);
fmtx_init(fm_freq, USA); // you can change it for your countery.
/*

USA
EUROPE
JAPAN
AUSTRALIA
CHINA
  */
  // Jordan works as USA Frequency range 87.5-110MHz
u8g.setRot180();
u8g.setColorIndex(1); // pixel on !
//..........................................
u8g.firstPage();
  do{
    set_screen(1);
  }
  while(u8g.nextPage() );
  delay(1000);
//....................
  u8g.firstPage();
  do{
    set_screen(0);
  }
  while(u8g.nextPage() );
  delay(1000);
   Clear();
   //..........

    u8g.firstPage();
  do{
    intro();
  }
  while(u8g.nextPage() );
  delay(2500);
   u8g.firstPage();
  do{
    intro2();
  }
  while(u8g.nextPage() );
  delay(2500);
  Clear();

//..........................................
}
// Reading Any Tunning change here.
void Analog_pin_read(){
   channel=mapping_reading;
   Current_reading=channel;
   fmtx_set_freq(channel);

}

void set_screen(int i){
u8g.setColorIndex(i); // pixel on !
for (int x_axis=0;x_axis<84;x_axis++){
for (int y_axis=0;y_axis<44;y_axis++){
u8g.drawPixel(x_axis,y_axis);
}
}
}

void Clear(void){
  u8g .setFont(u8g_font_04b_03);
  u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor();
  u8g.setFontPosTop();
}
void intro(void){
  u8g.setColorIndex(1);
  u8g.drawFrame(0,0,83,47);
  u8g .setFont(u8g_font_osr18);
  u8g.drawStr( 5, 25, "FM Tx ");
  u8g .setFont(u8g_font_tpss);
  u8g.drawStr( 5, 40, " System");
}
void intro2(void){
  u8g.setColorIndex(1);
  u8g.drawFrame(0,0,83,47);
  u8g .setFont(u8g_font_04b_03);
  u8g.drawStr( 2, 7, "Build Your FM station! ");
  u8g.drawStr( 2, 15, "Change the Freq");
  u8g.drawStr( 2, 26, "From Poten");
  u8g.drawStr( 2, 38, "www.genotronex.com");
}
//change frequency value On lcd here
void number(int value){
  u8g.setColorIndex(1);
  u8g.drawFrame(0,0,83,47);
  u8g .setFont(u8g_font_unifont);
  u8g.drawStr( 5, 15, "Frequency ");
  u8g .setFont(u8g_font_osr18);
  u8g.setPrintPos(10,45);
  u8g.println(value,DEC);
  u8g .setFont(u8g_font_unifont);
  u8g.drawStr( 45, 38, "MHz ");
}

void loop(){
  reading=analogRead(A0);
  mapping_reading=map(reading,0,1023,87,108);
  mapping_reading=constrain(mapping_reading,87,108);
  if( mapping_reading!= Current_reading){
  Clear();
  Analog_pin_read();
u8g.firstPage();
  do{
  number(channel);
  }
  while(u8g.nextPage() );
  delay(100);
  }
}

/*******************************

Step 7: Final Video

connect your system to computer for example and bring a Phone with build-in radio and adjust the frequency to listen to your computer music on the radio  channel 

Comments

Popular posts from this blog

Automatic Call answering Machine using Arduino and GSM Module

Automatic Call answering Machine using Arduino and GSM module In today’s modern world we all depend on mobile phones as our primary means of wireless communication. But, we all have faced situations during which we might not be able to answer to our calls, these calls might be an important personal call or a life changing business call and you could have just missed that opportunity since you were not able to answer that call at that particular time. This project aims to solve this problem by creating an  Automatic Call answering Machine by using Arduino and GSM module . Next time when you are changing to a new phone number or out for a long pilgrimage trip or enjoying a well deserved vacation just use this machine to record your voice stating the reason for absence and all your calls will be automatically answered by this machine and your recorded voice will be played to them. This can also be used for your business numbers to answer to your customer’s calls duri...

Smart Blind Stick using Arduino

Smart Blind Stick Project using Arduino and Sensors Ever heard of Hugh Herr? He is a famous American rock climber who has shattered the limitations of his disabilities; he is a strong believer that technology could help disabled persons to live a normal life. In one of his TED talk Herr said  “ Humans are not disabled. A person can never be broken. Our built environment, our technologies, is broken and disabled. We the people need not accept our limitations, but can transfer disability through technological Innovation ” . These were not just words but he lived his life to them, today he uses Prosthetic legs and claims to live to normal life. So yes, technology can indeed neutralize human disability; with this in mind let us use the power of  Arduino and simple sensors to build a Blind man’s stick  that could perform more than just a stick for visually impaired persons. This Smart stick will have an  Ultrasonic sensor to sense distance from any obstacle, ...

AC Voltmeter using Arduino

AC Voltmeter using Arduino In this project, we are going to make an  AC Voltage Measuring Device using Arduino,  which will measure the voltage of Alternating Current Supply at our home.  We are going to print that voltage on serial monitor of Arduino IDE as well as show on the multimeter. Making a Digital Voltmeter is a lot easy than making an analog one because in case of analog voltmeter you must have good knowledge of physical parameters like torque, friction losses etc. whereas in case of digital voltmeter you can just use a LCD or LED matrix or even your laptop (as in this case) to print the voltage values for you. Here are some  Digital Voltmeter Projects : Simple Digital Voltmeter Circuit with PCB using ICL7107 LM3914 Voltmeter Circuit 0-25V Digital Voltmeter using AVR Microcontroller Required Components: One 12-0-12 transformer    1N4007 diode    1uf capacitor    Resistors 10k; 4.7k.    ...