Build Your FM Transmission Station With Arduino

Hi every body .

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

Build Your FM Transmission Station With Arduino
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

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 .

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

LCD_Nokia_5110
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

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

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.

C:\Users\Wise T\Documents\Arduino_Code.png
/*
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

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


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top