loading
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

the schematic for this project is as following 


 LCD installation video


FM Transmitter module installation video


potentiometer of the LCD Baclight  installation video

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 

at the end , the video for the whole system

<p>my code is stucked near fm_init function in FM_LCD.ino</p><p>with out that function the project doesn't work</p><p>please help me</p>
<p>HEY! I love this!<br><br>I have this setup on a nano, elechouse fm 2.0, ssd1306 OLED, and a 5k pot. I have the pot/tuner and display working, but I haven't tested it with my radio reciever.<br><br>Is there any way to get decimals in the frequency? Like &quot;95.1 MHz&quot; rather than &quot;95 MHz&quot;?<br>Why did you limit the tuning from 90-100? (I want to change it to 88-108)<br>Also, I plan on using two buttons for setting <br><br>Thanks!</p>
<p>Yes you can , for floating point you can get any frequency you want.<br>but from my experience , don't use potentiometer to read the frequency with floating point , sometimes the frequency is +-0.2MHz , use push button to set the frequency .</p>
<p>It do some problem: </p><p>/******************************************************/</p><p>In file included from fm_tx.ino:13:0:</p><p>C:\Program Files\Arduino\libraries\FMTX/FMTX.h:32:18: error: conflicting declaration 'typedef uint16_t u16'</p><p> typedef uint16_t u16;</p><p> ^</p><p>In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:225:0,</p><p> from C:\Program Files\Arduino\libraries\FMTX/FMTX.h:21,</p><p> from fm_tx.ino:13:</p><p>C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/USBAPI.h:30:24: error: 'u16' has a previous declaration as 'typedef short unsigned int u16'</p><p> typedef unsigned short u16;</p><p> ^</p><p>Error compiling.<br>/**********************************************************************/</p><p>when I try to upload it then it show like that</p>
<p>You can just comment out that line in the include file.<br>The new IDE handles that, already.<br><br>I don't %100 understand it, I just know it works!</p>
<p>Hi,</p><p>I had the same problem and resolved it by using the Arduino compiler version 1.5 AVRISP mkII programmer.</p>
<p>Same problem here. Did you find a solution?</p>
<p>hello, I have a doubt? Is it specified for these countries USA</p><p>EUROPE<br>JAPAN<br>AUSTRALIA<br>CHINA</p><p>I want for INDIA, I changed the country name but its not coming. can u help me please</p>
<p>Hey !!!</p><p>First off,thanks for the video....Its very descriptive and clear. As a slight modification to what you've done, I am trying to connect a mic to the 3.5mm port so that I can transmit voice. But connecting it directly doesn't give any results. Is there any separate hardware required to interface the mic with module? Or is there any separate mic that it specifically works with? Please reply at the earliest!!!</p><p>Thank you !!!</p>
<p>would be nice to have working videos :P </p>
<p>Hi, Where can I get the code for the radio, I have downloaded the RAW file but can only find the files to test the LED display which works fine. Or is it me been THICK...</p>
<p>HAY CAN I GET THE CODE</p>
<p>hello</p><p>do I need to connect all the part together first in order for code to work right?</p><p>because the code shows an error when I try to compile it!</p>
<p>hello how are you? I'm doing this project and I've had a few problems. The LCD does not turn on just blinks and the module works well for a moment and then turns off . WANT TO PINES tell me EXACTLY ARE CONNECTED TO THE LCD MODULE FM ARDUINO AND THE ARDUINO .</p>
<p>Hi mate, a couple of your videos are classified as private and I cannot play them!! I just got all the stuf. Could you change that please?</p>
<p>I&rsquo;m working on a project which is about making a rescue <br>robot . I have struggling with it for 4 months and now all the mechanical works <br>had been done . but I&rsquo;m facing difficulty in make the robot to work with rf <br>module can u plzz help me&hellip;</p><p>I want make transmitter and receiver that can control the <br>motion&hellip;I mean that receiver should have control 8 dc gear motor and each dc <br>motor should have a forward and backward botton to control the motion &hellip;&hellip;can u <br>kindly help me with this project &hellip;.if u can make the circuit board diagram for <br>the PCB &hellip;.or any other suggestion plz reply&hellip;&hellip;mail me at &ldquo;sunny1995gagan@gmail.com&rdquo;</p>
<p>Could you tell me how to bypass the lcd, cause i don't think i need it/can afford it.</p>
<p>In case I do NOT want use the NOKIA LCD, I should just connect the 5V and GND jumpers to the breadboard, SCL and SDA to pin A5 and A4 of Arduino with VCC and GND connected to the breadboard, right? Also the Potentiometer(50K) should be connected to + and -, just like in the video you posted on youtube but without the jumper connected to &quot;LIGHT&quot; on the LCD...</p><p>I would really appreciate if you could answer my question, thanks!!</p>
<p>I did it but on the LCD only dots appear and I noticed that this happens because of the method fmtx_init (). when I remove the method the screen works, otherwise not. I think there is a conflict between libraries, you've already encountered this problem? I've tried other graphics libraries, but the problem remains, you know the possible solutions? thanks</p>
After putting everything together and uploading the full code, all I see is dots on the LCD? <br> <br>note: I tried the LCD_test.ino and it was working but no radio functionality. I think there's something missing in the full code, am I wrong?
OK , check your code , check the potentiometer of LCD brightness <br>if not working , put this value as 0 in <br> <br>u8g.setColorIndex(0); <br> <br>I connected it again and it has worked perfectly
still, only dots appear <br> <br>Do you mean all of u8g.setColorIndex(1); in the code or just the ones with //pixel on , or what?
Also is there a typo in the comment for this line: <br>U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8. <br>A0 for the fm module not 9 pin.
Thank you it worked, it turns out I had a problem with my circuit. The FM module should be on GND and + ( I had it plugged on the potentiometer before, my mistake!) <br>Nothing wrong with the code.
Nice to hear that , enjoy it :)
very nice project!! but please add english language to your blog.
I will , thank you
U said two potentiometers are required but here I can see just one in ur video. which is controlling the LCD contrast and which is tuning the frequency of the transmitter?
No i used two potentiometers , See the full demo in the last of the video
Let's say that I live on a deserted island in the middle of the ocean and would like to cover the whole area which is 40 km in both directions. What would i need to amplify the signal?
mmm , It wouldn't be good solution for this distance
Nice Project go ahead &gt;&gt;&gt;&gt;&gt;&gt;
thanks
You might want to put somewhere in your article that in some regions (like all of the US) it's illegal to broadcast FM transmissions without approval from the FCC.
Thank you , you are right . <br> <br>It's like Jordan too , But the range of this transmitter without antenna is 0.4 m , and with it it will reach to 8m , is that illegal too in USA ?

About This Instructable

122,233views

157favorites

License:

Bio: Maker, PCB designer , electronics instructor from Jordan just one word ! I Adore electronics follow me on FB https://www.facebook.com/Mohannad-Rawashdeh-Raw-774983565988641/
More by Mohannad Rawashdeh:TTP224 Digital Touch Sensor Applications Using Arduino RF 315MHz/433MHz Wireless and Arduino...again! Motor Driver BTS7960 43A 
Add instructable to: