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 :
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 .
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 .
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 .
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
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);
}
}
/*******************************
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
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
at the end , the video for the whole system