Introduction: 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
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);
}
}
/*******************************
Attachments
Step 7: Final Video
at the end , the video for the whole system

Participated in the
Arduino Contest
40 Comments
2 years ago
Does anyone know if this would work at 144MHz?
Reply 12 days ago
Pode operar em multiplos da frequencia fundamental por exemplo: se colocar estagio amplificador sintonizado no segundo harmonico e tiver na entrafa 72Mhz vai sair 144Mhz, 88Mhz vai sair 176Mhz, assim por diante.
Reply 1 year ago
no, it will not. It operates in a range from 70MHz to 108MHz
Question 4 years ago
plz help i upload code in ardunio but it give error.
tell its only for few countries or all over the world
Answer 2 years ago
Same here did u make it correct
6 years ago
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
Thanks!
Reply 2 years ago
Can u help me I am getting error for uploaded to Arduino Uno
Reply 6 years ago
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 .
6 years ago
my code is stucked near fm_init function in FM_LCD.ino
with out that function the project doesn't work
please help me
Reply 4 years ago
bro did you find the solution for that
10 years ago on Introduction
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.
Reply 10 years ago on Introduction
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 ?
Reply 5 years ago
If you are referring to 8 meters (about 25 feet) Technically it is okay according to FCC regulations Part 15. It says that the transmission range cannot be greater than 200 feet.
https://www.fcc.gov/media/radio/low-power-radio-ge...
This transmission equates to the dongles that you can use to transmit your phone or mp3 player to your car radio.
I'm no expert, just looked it up. All technical info here
https://transition.fcc.gov/bureaus/oet/info/documents/bulletins/oet63/oet63rev.pdf
Reply 5 years ago
Hey did you mean 8 miles?
7 years ago
hello, I have a doubt? Is it specified for these countries USA
EUROPE
JAPAN
AUSTRALIA
CHINA
I want for INDIA, I changed the country name but its not coming. can u help me please
8 years ago on Introduction
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 !!!
8 years ago on Step 5
would be nice to have working videos :P
8 years ago on Introduction
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...
8 years ago on Introduction
HAY CAN I GET THE CODE
8 years ago on Introduction
hello
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!