يتم التشغيل بواسطة Blogger.

الأحد، 20 مارس 2016

روبوت الأردوينو و التحكم به بواسطة الأندرويد bluetooth robot control

روبوت الأردوينو و التحكم به بواسطة الأندرويد


قد ترغب في بناء روبوت تستطيع التحكم به عن بُعد , سيكون هذا مسلياً جداً خصوصاً إذا استطعت أن تتحكم فيه بواسطة جهازك الذكي العامل على نظام الأندرويد Android .

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



القطع التي سنحتاجها :

1) بطاقة أردوينو  Uno " ميجا ستحتاج لتعديل في البرنامج "




2)غطاء قيادة المحركات L293 Motor driver 

او دارة قيادة المحرك  L298




3) هيكل روبوت Magician Chassis من شركة spark fun  او الهيكل 4Wheel Robot او هيكل روبوت Zumo من Pololu





4) قطعة البلوتوث HC-05 او HC-06 او احياناً تسمى Linvor .






5)بطاريتان , واحدة لتغذية المحرك "يجب ان تكون أكبر من 5 فولت " و الثانية  بطارية 9 فولت مع الحاضنة  لتغذية الأردوينو .



6) جهاز ذكي او لوح مزود لنظام التشغيل أندرويد 4.0

7) قطع اخرى , مثل  اسلاك توصيل , ستحتاج لأسلاك توصيل female-female عدد 4 , و ايضاً ستحتاج ل dc jack male+female لتسهيل توصيل البطارية مع غطاء الأردوينو الخاص بالمحرك  , و اخيراً pin header male عدد 1 .




التوصيل :

لأنني سأستخدم الغطاء L293 Motor driver فسأربط البلوتوث مع الأرجل A0,A1 على التوالي , و الجيد في هذا الغطاء هو امكانية توصيل المداخل التناظرية بسهولة .

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







وفي حال استخدام دارة القيادة L298 يكون التوصيل كالآتي :

ستحتاج لتحميل هذا التطبيق من متجر الأندرويد 






هذا التطبيق متوافق مع هذا البرنامج 

البرنامج للروبوت سواءاً كانت ب 4 عجلات ام بعجلين .

الكود مع دارة القيادة L298


// Robot 2wheel , 4 wheel controlled via Bluetooth
// Written By :Mohannad Rawashdeh
//http://www.genotronex.com/
#include "SoftwareSerial.h"// import the serial library\

const int IN1=3;
const int IN2=5;
const int IN3=6;
const int IN4=9;
 int BluetoothData;
 SoftwareSerial HC05(10, 11); // RX, TX
 int  SPEED_Control=200;
void setup() {
  // fIRST , define the Motor's pin as an OUTPUT
  
pinMode( IN1 ,OUTPUT);// Right Motor 1st wire
pinMode( IN2 ,OUTPUT);// Right Motor 2nd wire
pinMode( IN3 ,OUTPUT);// left Motor 1st wire
pinMode( IN4 ,OUTPUT);// left Motor 2nd wire
 HC05.begin(9600);
}
void FORWARD(int Speed){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
 
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}
void BACKWARD(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}
void LEFT(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}
void RIGHT(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}

void Stop(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,0);
}

void loop() {
 //Rise Up

  if (HC05.available()){
 BluetoothData=HC05.read();
 Serial.println(BluetoothData);
   
  if(BluetoothData=='F'){   // if number 1 pressed .... 
   FORWARD(SPEED_Control);
   }
  if(BluetoothData=='B'){   // if number 1 pressed .... 
  BACKWARD(SPEED_Control);
   }
  if(BluetoothData=='L'){   // if number 1 pressed .... 
  RIGHT(SPEED_Control);
 
   }
  if(BluetoothData=='R'){   // if number 1 pressed ....
   LEFT(SPEED_Control);
   }
    if(BluetoothData=='S'){   // if number 1 pressed ....
  Stop();
   }
   if(BluetoothData=='0'){  SPEED_Control=0 ;}//Speed 
   if(BluetoothData=='1'){  SPEED_Control=50; }//Speed 
   if(BluetoothData=='2'){  SPEED_Control=100; }//Speed 
   if(BluetoothData=='3'){  SPEED_Control=120; }//Speed 
   if(BluetoothData=='4'){  SPEED_Control=140; }//Speed 
   if(BluetoothData=='5'){  SPEED_Control=160; }//Speed 
   if(BluetoothData=='6'){  SPEED_Control=180; }//Speed 
   if(BluetoothData=='7'){  SPEED_Control=200; }//Speed 
   if(BluetoothData=='8'){  SPEED_Control=220; }//Speed 
   if(BluetoothData=='9'){  SPEED_Control=240; }//Speed 
   if(BluetoothData=='q'){  SPEED_Control=255; }//Speed   
  }
}



الكود مع دارة غطاء قيادة المحرك L293


#include <AFMotor.h>
#include <SoftwareSerial.h>// import the serial library
SoftwareSerial Genotronex(14, 15); // RX, TX

char BluetoothData; // the data given from Computer
int t=10;
    AF_DCMotor right_motor(1, MOTOR12_1KHZ); // create motor #2, 1KHz pwm
    AF_DCMotor left_motor (2, MOTOR12_1KHZ); // create motor #3, 1KHz pwm
 
void setup() {
  // put your setup code here, to run once:
  Genotronex.begin(9600);
  left_motor.setSpeed(200);     // set the speed to 200/255
  right_motor.setSpeed(180);     // set the speed to 200/25
}

void loop() {
  // put your main code here, to run repeatedly: 
  if (Genotronex.available()){
 BluetoothData=Genotronex.read();
 delay(t);
 switch(BluetoothData){
 case 'F':
  left_motor.run(FORWARD);
  right_motor.run(FORWARD);
  delay(t);
  break;
  case 'L':// right
  left_motor.run(BACKWARD);
  right_motor.run(FORWARD);      // turn it on going forward 
  delay(t);
  break;
  case'R'://left
  left_motor.run(FORWARD);
  right_motor.run(BACKWARD); 
  delay(t);
  break;
  case'B':
  left_motor.run(BACKWARD);
  right_motor.run(BACKWARD); 
  delay(t);
  break;
  case'S':
  left_motor.run(RELEASE);
  right_motor.run(RELEASE);
  delay(t);
  break;
  case '2':
 left_motor.setSpeed(100);     // set the speed to 200/255
 right_motor.setSpeed(80);     // set the speed to 200/25
  break;
  case '4':
  left_motor.setSpeed(150);     // set the speed to 200/255
  right_motor.setSpeed(130);     // set the speed to 200/25
  break;
  case'7':
  left_motor.setSpeed(200);     // set the speed to 200/255
  right_motor.setSpeed(180);     // set the speed to 200/25
  break;
  case'q':
  left_motor.setSpeed(250);     // set the speed to 200/255
  right_motor.setSpeed(230);     // set the speed to 200/25

  }
 
}
}

ليست هناك تعليقات :

إرسال تعليق

تطوير : مدونة حكمات