الأربعاء، 12 مارس، 2014

روبوت التحكم عن بعد بواسطة المرسل الراديوي 315MHz

Robot Remote control Using RF315/433MHz 




من الجميل بناء روبوتات و التحكم فيها عن بعد , و قد عرضنا في سلسلة الروبوت طريقة التحكم عن بعد بالروبوت بواسطة البلوتوث


لكن ماذا لو أردنا بناء روبوت و التحكم به عن بعد بواسطة مرسل راديوي بسيط ؟ سيكون من الجميل عمل روبوت مشابه لسيارات التحكم عن البعد التي تباع في الأسواق .



كل ما سنفعله هو بناء روبوت يتم التحكم به عن بعد بواسطة اردوينو مربوط معها عصا تحكم
Joystick و ارسال الأوامر لاسلكياً للروبوت .



أذن سنكون دارتين , احداها كمرسل , و الآخر مستقبل و سنثبت دارة الأستقبال على الروبوت .

القطع التي ستحتاجها لبناء هذا الروبوت :

1) بطاقة أردوينو عدد 2



2)دارة قيادة المحرك L298 Module



3)المرسل والمستقبل الراديوي RF 315MHz .



4)هيكل الروبوت Robot chassis



5)عصا التحكم Joystick



6)بطاريات لتغذية المحرك "استخدمت بطاريات ليثيوم3.7v عدد2"



7)اسلاك توصيل jumpers

التوصيل :
دارة الأرسال :

توصيل دارة الأرسال كما في المخطط ادناه



دارة الأستقبال : قد يكون توصيل دارة القيادة غير واضح , للتوضيح أكثر توصيل دارة القيادة مع الأردوينو كالآتي :


IN1>>>D5

IN2>>>D4

IN3>>>D6

IN4>>>D7










نقوم في البداية بتثبيت القطع على هيكل الروبوت , و نبدأ بتوصيل الأردوينو لدارة قيادة المحرك , كما في المخطط .

ثم نقوم بتثبيت المستقبل
RF RX  إلى الأردوينو كما في المخطط .



يجب ان يكون مخطط التوصيل كاملاً لدارة الأستقبال كالآتي :

ثم بعد ان تقوم بتوصيل البطاريات إلى المداخل المخصصة في دارة قيادة المحرك , و الحصول على التغذية للاردوينو من نفس دارة قيادة المحرك "يوجد بها مخرج 5 فولت "

البرمجة :

في البداية ستحتاج لتحميل هاتين المكتبتين من هنا و من هنا و وضعهما في مسار المكتبات داخل الاردوينو 


البرنامج بالنسبة للمرسل .

يجب ان تفتح شاشة السيريال في الأردوينو و ان تحرك عصا التحكم , يجب ان تتظهر الكلمات الصحيحة عند تحريك العصا بالأتجاه المطلوب "
FORWARD,BACKWARD,LEFT,RIGHT " و هكذا ...
/*
Arduino Remote Control Robot Using RF Module
Control Robot using Joystick and Wirelessly using
RF 315MHz Tx,Rx 
Code For Transmitter side
Written By : Mohannad Rawashdeh
Modified By: Tala Younes
http://www.genotronex.com

*/
const int xpin=14;
const int ypin=15;
int X_axis_read=0;
int Y_axis_read=0;
float X_axis_volt=0.00;
float Y_axis_volt=0.00;
int Min_threshold=400;
int Max_threshold=700;
//..................................
#include <VirtualWire.h>


char *controller;
void Get_x_axis(){
  X_axis_read=analogRead(xpin);
  delay(10);
  X_axis_volt=X_axis_read*4.88E-3;
  /*
  Serial.print("X_axis_read : ");
  Serial.println(X_axis_read);
  Serial.print("X_axis_volt : ");
  Serial.println(X_axis_volt);
  */
}
void Get_y_axis(){
  Y_axis_read=analogRead(ypin);
  delay(10);
  Y_axis_volt=Y_axis_read*4.88E-3;
  /*
  Serial.print("Y_axis_read : ");
  Serial.println(Y_axis_read);
  Serial.print("Y_axis_volt : ");
  Serial.println(Y_axis_volt);
  */
}

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  pinMode(xpin,INPUT);
  pinMode(ypin,INPUT);
 
  vw_set_ptt_inverted(true); // 
  vw_set_tx_pin(12);
  vw_setup(4000);// speed of data transfer Kbps
}

void Get_action(){
Get_x_axis();
Get_y_axis();
if(Y_axis_read> Max_threshold && X_axis_read<1022 ){
  //Forward
  controller="F";
  Serial.println("Forward");

}
if(Y_axis_read<Min_threshold &&X_axis_read<1022){
  //Backward
   controller="B";
  Serial.println("Backward");
   

}
if(X_axis_read==0 ){
  //Right
   controller="R";
  
   Serial.println("Right");

}
if(X_axis_read>=1010 ){
  //Left
   controller="L";
  
   Serial.println("Left");

}
if(X_axis_read<500 &&X_axis_read>20&&Y_axis_read<530 &&Y_axis_read>500 ){
  //Stop
   controller="S";
  
   Serial.println("Stop");

}
}

void Send_RF(){
vw_send((uint8_t *)controller, strlen(controller));
 vw_wait_tx(); // Wait until the whole message is gone
 digitalWrite(13,1);
 delay(50); 
 digitalWrite(13,0);
 
}
void loop(){
Get_action();
Send_RF();
//delay(1000);
}


البرنامج للمستقبل "الروبوت "
/*
Arduino Remote Control Robot Using RF Module
Control Robot using Joystick and Wirelessly using
RF 315MHz Tx,Rx 
Code For Transmitter side
Written By : Mohannad Rawashdeh
Modified By: Tala Younes
http://www.genotronex.com

*/


//......................
#include <VirtualWire.h>

#include "L298_MOTOR.h"

L298_MOTOR L298(5,4,6,7);

void setup()
{
    Serial.begin(9600);
     L298.ENABLE_ACTIVE(11,10);
  L298.ENABLE_A('ON'); 
  L298.STOP();
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_set_rx_pin(12);
    vw_setup(4000);  // Bits per sec
    pinMode(13, OUTPUT);

    vw_rx_start();       // Start the receiver PLL running
}
    void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
      if(buf[0]=='F'){
        //FORWARD
           L298.BACKWARD(150);
  //       Serial.println("Forward");
   digitalWrite(13,1);
      }   
        if(buf[0]=='B'){
        //BACKWARD
        L298.FORWARD(150);
    //    Serial.println("Backward");
        

   digitalWrite(13,1);
      }   
        if(buf[0]=='R'){
          //Right
           L298.TurnLEFT(140);
      //     Serial.println("Right");

  digitalWrite(13,0);
    }
     if(buf[0]=='L'){
          //Left
           L298.TurnRIGHT(140);
        //   Serial.println("Left");

  digitalWrite(13,0);
    }
   if(buf[0]=='S'){
          //Stop'
           L298.STOP();
          //  Serial.println("Stop");

  digitalWrite(13,0);
    }
}
}


و هذا الفيديو يوضح كيفية عمل هذا النظام بالكامل .


7 التعليقات :

  1. السلام عليكم ... شكرا على هذا العمل الجميل والرائع ...
    واتمنى ان تساعدوني في مشكلتي مع ربط الاردوينو مع ريموت كونترول لسيارة لعبة وخبرتي في الالكترونيات قليلة جدا ... حيث اني احاول ربط ريموت كونترول لسيارة الالعاب المشهورة ب crazy car والتي تزود ببطارية 9 فولت بينما السيارة تعمل ببطارية 6 فولت ولكن مشكلتي ليس مع السيارة حيث اني احاول التحكم بالسيارة من خلال الاردوينو وذلك بربط اتجاهات الحركة لريموت السيارة مع الاردوينو وربطت كذلك الgnd لريموت السيارة مع ال gnd للاردوينو ولكن بمجرد ان يلمس الواير الخارج من الديجيتال pin في الاردوينو احد اتجاهات السيارة تبدا بالحركة قبل ان ارسل ايعاز الحركة من الاردوينو لها ولا اعرف اين المكان الصحيح لربط الواير بين الريموت والاردوينو لكي تتحرك فقط عندما ارسل لها ايعاز high فارجو المساعدة لحل المشكلة رجاءا وخصوصا ان الوقت ضيق جدا والخبرة قليلة ايضا...

    ردحذف
  2. بارك الله فيكم, مشروع جميل وشيق . لو المشروع سيتم تنفيذه على حجم اكبر كيف سيكون؟ نحتاج لتغير البطاريه فقط ام ما هى التغيرات التى ستحدث؟

    ردحذف
  3. شكرا لكم ااود مساعدتكم عن مشروعنا
    بمشروع التحكم بسيارة صغيرة بالروبوت وذلك عن طرق الهاتف بتطبيق أندرويد مع كاميرا آي بي واي فاي
    تحياتي لكم

    ردحذف
  4. هو ال INT MIN_THRESHOLD=400;
    INT MAX_THRESHOLD=700; بحدد القيم دى على اساس ايه ؟؟

    ردحذف
  5. أزال المؤلف هذا التعليق.

    ردحذف
  6. احسنتم استمروا بالابداع

    ردحذف

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