Build Your FM Transmission Station With Arduino

Introduction: Build Your FM Transmission Station With Arduino

About: Maker, PCB designer , electronics instructor from Jordan just one word ! I Adore electronics follow me on FB

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

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

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

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.

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

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



  • Metalworking Contest

    Metalworking Contest
  • Fix It! Contest

    Fix It! Contest
  • Creative Misuse Contest

    Creative Misuse Contest

32 Discussions

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.

2 replies

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 ?

my code is stucked near fm_init function in FM_LCD.ino

with out that function the project doesn't work

please help me

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


1 reply

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 .

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

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

would be nice to have working videos :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...


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!

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 .

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?

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 “”

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

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

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

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?

1 reply

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