الثلاثاء، 2 يوليو، 2013

اصنع جهاز ارسال راديو بسيط باستخدام الأردوينو

اصنع جهاز ارسال راديوي بسيط باستخدام الأردوينو 

FM Transmitter Station Build on Arduino







اذا كنت تود بناء جهاز بسيط يقوم بارسال الأمواج الصوتية كالملفات الصوتية و ان يتم التقاطها عبر اي موجة راديو ! هل هذا الموضوع جديد أو غريب عليك نسبياً ؟ هل فكرت يوماً في بناء هذا الجهاز و لكن الدوائر الكهربائية الموجودة على الأنترنت معقدة أو المكونات المطلوبة غير متوافرة ؟ في هذه المقال سأشرح كيفية بناء هذا الجهاز الرائع بقطع قليلة و سهلة التركيب و برمجتها عبر لغة الأردوينو .

في البداية سأوضح ما الذي سنقوم بفعله للذين لم يدركوا الفكرة , سأقوم من خلال هذا الجهاز بوصله مع مدخل صوت Audio Jack 3.5mm لجهاز حاسوب او هاتف او حتى مسجل ستيريو  و ما سيقوم به جهازنا هو ارسال هذا الصوت على موجة راديو FM بحيث يمكننا ان نسمع هذا الصوت على اي جهاز راديو من خلال ضبط موجه الراديو على نفس موجه جهازنا المُرسل .

لتسهيل استخدام هذا الجهاز , اضفت شاشة رسومية هي LCD Nokia 5110 PCD8544 الذي تحدثت عنها في وقت سابق في هذه المدونة , بالأضافة إلى مقاومة متغيرة لتعديل تردد الأرسال بسهولة .

المعدات :

ما سنحتاجه لتصميم هذا الجهاز :



1) بطاقة أردوينو 
2)شاشة رسومية Nokia5110 PCD8544 .
3)موديول FM transmitter elechouse
4)اسلاك توصيل 
5) مقاومتين متغيرتين (500 اوم , 10كيلواوم )
6) BreadBoard .
7) بطارية 9 فولت

ستحتاج لتحميل المكتبة الخاصة بالشاشة U8G و مكتبة المرسل FM Tx من خلال هذا الرابط "هذا الرابط ايضاً يحتوي الكودات للمشروع "

القطعة المهمة في هذا المشروع هو المرسل FM transmission V1.0 من شركة elechouse و هي التي تقوم بعمل التعديل modulation للاشارة و ارسالها بتردد معين , وهو يعمل على البروتوكول التسلسلي I2C .



طريقة التوصيل :

طريقة التوصيل للشاشة كما هو مبين في الصورة :
                         
توصيل المرسل FM Transmitter

التوصيلة كاملة :


البرنامج :


بعد توصيلك للشاشة يمكنك التأكد من التوصيل عن طريق تحميل هذا البرنامج .
//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 using a GLCD 12864 ST7920 Controller
// Using arduino pin #D11,D12,D13 , using serial interface spi protocol
// Programmed for http://www.genotronex.com/
                
//****************************************************************

#include "U8glib.h"
float M=66;
// 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
 
// SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 12
void setup(void){
u8g.setRot180();
u8g.setColorIndex(1); // pixel on !
//draw full pixel 

 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);
  u8g.firstPage();  
  do{
    number();
  }
  while(u8g.nextPage() );
  delay(2500);
  
}

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");
}
void number(void){
  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.drawStr( 10, 45, "94");
  //u8g .setFont(u8g_font_04b_03);
  u8g.setPrintPos(10,45);
  u8g.println(M,DEC);
 

}



void loop(){}



و هذا الكود النهائي للمشروع 
//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,90,100);
  mapping_reading=constrain(mapping_reading,90,100);
  if( mapping_reading!= Current_reading){
  Clear();
  Analog_pin_read();
u8g.firstPage();  
  do{
  number(channel);
  }
  while(u8g.nextPage() );
  delay(100);
  }
}


و هذا الفيديو يعرض العملية من البداية و طريقة عمل المشروع .

تحياتي 

23 التعليقات :

  1. موضوع جميل...مشكور صديقي ^_^

    ردحذف
  2. اود أن أسئل عن مدى الارسال ؟

    ردحذف
    الردود
    1. مدى الأرسال بدون antenna لغاية 1 متر , و مع antenna ممكن ان يصل لغاية 10 امتار .

      يجب الأنتباه الى ان لوائح القانون المنظمة للراديو في كل بلد تمنع استخدام اي مرسلات لل FM ذات مدى عالي بدون رخصة .

      حذف
  3. عند برمجه الأردوينو
    توجد مشكله
    تستطيع ان تبعث لي الكود لبرمجه الأردوينو

    ردحذف
  4. عمل رائع اشكرك على مجهودك جزاك الله خير
    لي استفسار هل يمكننى زيادة مدى الارسال عبر البرمجه او اضافة اى شىء ليصل المدي الى اطول على سبيل المثال 1 كيلو او اكثر

    ردحذف
    الردود
    1. شكراً لك .
      دائماً ننوه غلى أن القوانين الدولية و المحلية تلزمك استخدام هذه الأنواع من المرسلات الراديوية لمسافات لا تتعدى بضع أمتار , لانه هكذا نحتاج لشراء ترددات من هيئة تنظيم الاتصالات او الراديو المحلية كما يحصل مع القنوات الأذاعية , التنظيم القانوني يمنع مثل هذه المسافات البعيدة .

      حذف
  5. مساعدة فى انهاء مشروع تحكم فى الاتجاهات وجهد الموتوز أو المحرك من خلال المستشعر او السنسور عند التقاطه الاشعه فوق الحمراء او تحرك الاجسام.

    ردحذف
    الردود
    1. ماهي المشكلة اخي انشاء الله نفيدك

      حذف
    2. راسلني علي :
      https://www.facebook.com/Swedan.Libya

      حذف
  6. الكود لا يعمل معي
    Arduino : 1.6.0 (Windows 7), Carte : "Arduino Uno"

    In file included from FM_LCD.ino:13:0:
    C:\Users\Black Hacker\Documents\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 (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
    from C:\Users\Black Hacker\Documents\Arduino\libraries\FMTX/FMTX.h:21,
    from FM_LCD.ino:13:
    C:\Program Files (x86)\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;
    ^
    Erreur lors de la compilation.

    Ce rapport contiendrait plus d'informations si l'option
    "Montrer les informations de sortie pendant la compilation"
    était activée dans Fichier > Préférences.

    ردحذف
  7. هل يصل التردد لمدى 10000 متر؟؟ وكيف؟

    ردحذف
    الردود
    1. على الأغلب لا , المدى الأقصى للهواة بشكل فانوني باغلب الدولا لا يتعدى 1.5 كيلومتر فقط

      حذف
  8. باستاد لو سمحت كانت عوز اعرف ايه هى الكود وايه أزمتها ؟؟؟☺

    ردحذف
    الردود
    1. الكود يضبط التردد الخاص بارسال الصوت عبره

      حذف
    2. الكود لا يشتغل عندي ...مكن نعرف السبب
      وياريت لو تبعتلي الكود علي التعليق

      حذف
  9. من اين نحصل علي القطع اللازمة للتنفيذ ؟

    ردحذف
  10. هل يمكن ربطها بلاقط صوت والتكلم .. ومن ثم يتم ارساله عبر الراديوا

    ردحذف
  11. هل يمكن ربطها بلاقط صوت والتكلم .. ومن ثم يتم ارساله عبر الراديوا

    ردحذف
  12. الكود ماشتغلش عندي ... ممكن الرد عليا

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.