Introduction: Build Your FM Transmission Station With Arduino

Picture of 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

Picture of 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.
2) LCD Nokia 5110 PCD8544

3)FM Transmitter module V1.0 ElecHouse

4)Solderless Jumper Male-Male

5) BreadBoard 

6)potentiometer (50K , 500 Ohm)

7)Battery 9V With Holder .

Step 2: First Part : LCD Nokia 5110

Picture of 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

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

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

Picture of 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

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

Step 4: Potentiometer

Picture of 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

Picture of 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

Picture of 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.

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
// 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
//Name :Mohannad Rawashdeh .
//Date "13/5/2013 3:00pm
// Description: This  Code for  A FM transmission station
// for more info
// written by :Mohannad Rawashdeh ,
#include "U8glib.h"
#include <FMTX.h>
// draw Circle
//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){
fmtx_init(fm_freq, USA); // you can change it for your countery.

  // Jordan works as USA Frequency range 87.5-110MHz
u8g.setColorIndex(1); // pixel on !
  while(u8g.nextPage() );
  while(u8g.nextPage() );
  while(u8g.nextPage() );
  while(u8g.nextPage() );

// Reading Any Tunning change here.
void Analog_pin_read(){

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++){

void Clear(void){
  u8g .setFont(u8g_font_04b_03);
void intro(void){
  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 .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, "");
//change frequency value On lcd here
void number(int value){
  u8g .setFont(u8g_font_unifont);
  u8g.drawStr( 5, 15, "Frequency ");
  u8g .setFont(u8g_font_osr18);
  u8g .setFont(u8g_font_unifont);
  u8g.drawStr( 45, 38, "MHz ");

void loop(){ 
  if( mapping_reading!= Current_reading){
  while(u8g.nextPage() );


Step 7: Final Video

Picture of 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


dekyos (author)2013-06-13

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 .

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 ?

Hey did you mean 8 miles?

nagasai007 (author)2017-03-30

my code is stucked near fm_init function in FM_LCD.ino

with out that function the project doesn't work

please help me

interestingfellow (author)2017-03-21

HEY! I love this!

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.

Is there any way to get decimals in the frequency? Like "95.1 MHz" rather than "95 MHz"?
Why did you limit the tuning from 90-100? (I want to change it to 88-108)
Also, I plan on using two buttons for setting


Yes you can , for floating point you can get any frequency you want.
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 .

asifuz made it! (author)2015-09-02

It do some problem:


In file included from fm_tx.ino:13:0:

C:\Program Files\Arduino\libraries\FMTX/FMTX.h:32:18: error: conflicting declaration 'typedef uint16_t u16'

typedef uint16_t u16;


In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:225:0,

from C:\Program Files\Arduino\libraries\FMTX/FMTX.h:21,

from fm_tx.ino:13:

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'

typedef unsigned short u16;


Error compiling.

when I try to upload it then it show like that

interestingfellow (author)asifuz2017-03-21

You can just comment out that line in the include file.
The new IDE handles that, already.

I don't %100 understand it, I just know it works!

jradiamondruff (author)asifuz2017-03-11


I had the same problem and resolved it by using the Arduino compiler version 1.5 AVRISP mkII programmer.

minipercha (author)asifuz2016-03-19

Same problem here. Did you find a solution?

CrissA2 (author)2016-04-07

hello, I have a doubt? Is it specified for these countries USA


I want for INDIA, I changed the country name but its not coming. can u help me please

KaushikK1 (author)2015-04-03

Hey !!!

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!!!

Thank you !!!

MattM16 (author)2015-03-19

would be nice to have working videos :P

Dave Moreland (author)2015-01-10

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...

amzar.ahamed (author)2015-01-08


MFawzi89 (author)2014-12-14


do I need to connect all the part together first in order for code to work right?

because the code shows an error when I try to compile it!

anya1792 (author)2014-10-27

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 .

Matienzo (author)2014-08-21

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?

gsandhu2 (author)2014-06-25

I’m working on a project which is about making a rescue
robot . I have struggling with it for 4 months and now all the mechanical works
had been done . but I’m facing difficulty in make the robot to work with rf
module can u plzz help me…

I want make transmitter and receiver that can control the
motion…I mean that receiver should have control 8 dc gear motor and each dc
motor should have a forward and backward botton to control the motion ……can u
kindly help me with this project ….if u can make the circuit board diagram for
the PCB ….or any other suggestion plz reply……mail me at “”

triple5timer (author)2014-05-18

Could you tell me how to bypass the lcd, cause i don't think i need it/can afford it.

androide10 (author)2014-04-30

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 "LIGHT" on the LCD...

I would really appreciate if you could answer my question, thanks!!

ade gaetano (author)2014-02-15

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

ahmadsudo (author)2013-11-19

After putting everything together and uploading the full code, all I see is dots on the LCD?

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
if not working , put this value as 0 in


I connected it again and it has worked perfectly

still, only dots appear

Do you mean all of u8g.setColorIndex(1); in the code or just the ones with //pixel on , or what?

ahmadsudo (author)ahmadsudo2013-11-20

Also is there a typo in the comment for this line:
U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8.
A0 for the fm module not 9 pin.

ahmadsudo (author)ahmadsudo2013-11-22

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!)
Nothing wrong with the code.

Nice to hear that , enjoy it :)

power000 (author)2013-11-13

very nice project!! but please add english language to your blog.

I will , thank you

sundayaliu (author)2013-10-21

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

dwernedal (author)2013-09-16

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

smartyouth92 (author)2013-08-31

Nice Project go ahead >>>>>>

Mr Omar Alterawi (author)2013-08-28


About This Instructable




Bio: Maker, PCB designer , electronics instructor from Jordan just one word ! I Adore electronics follow me on FB
More by Mohannad Rawashdeh:Convert Your Pringles Cans to RTTTL Audio PlayerTTP224 Digital Touch Sensor Applications Using ArduinoRF 315MHz/433MHz Wireless and Arduino...again!
Add instructable to: