Build Your FM Transmission Station With Arduino

by Mohannad Rawashdeh in Circuits > Arduino

184104 Views, 182 Favorites, 0 Comments

Build Your FM Transmission Station With Arduino

123 003.JPG
Project FM 080.JPG
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 :

Material

Project FM 065.JPG
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 .



First Part : LCD Nokia 5110

images (1).jpg
images.jpg
nokia_5110_graphic_lcd_84_48_4-500x500.jpg
nokia5110_MED.jpg
sparkfun.jpg
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 .



FM Transmitter Module

FM modulator-1.jpg
FM modulator-2.jpg
first.png
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 .

Potentiometer

225px-Potentiometer.jpg
images (2).jpg
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 

Schematic

che.png
fm.png
LCD.png
the schematic for this project is as following 


 LCD installation video


FM Transmitter module installation video


potentiometer of the LCD Baclight  installation video

Arduino Code

Project FM 048.JPG
Project FM 080.JPG
Project FM 050.JPG
Project FM 021.JPG
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);
  }
}

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

Final Video

Project FM 048.JPG
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 

at the end , the video for the whole system