# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > آردوئینو (Arduino) >  "پروژه ماشین RC بلوتوث با برد Arduino"

## kolibri

بسم الله الرحمن الرحیمسلام؛
میخوام اولین پروژه ام با Arduino رو شروع کنم. چون اولین پروژه ام هست و برنامه نویسیم هم در حد مبتدی است، مطمئنا نیازمند کمک شما خواهم بود تا بتونم به بهترین شکل ممکن به هدفم برسم.
البته هدف اول ساخت یک ماشین رادیو کنترل بلوتوثی است که بتونم با سیستم عامل ویندوز 10 کنترلش کنم. به عبارتی نرم افزار کنترلر به صورت یونیورسال خواهد بود.
اما مواد لازم که تا حالا تهیه شده است (قیمت مربوط به آبان 94):
1. برد آردوینو UNO CH340G | قیمت 36 هزار تومان |دانلود درایور ویندوز
2. شیلد موتور درایور L298P آردوینو به همراه بازر | قیمت: 18300 تومان
3. ماژول بلوتوث سریال HC-05 همراه با برد کمکی | قیمت: 21000 تومان 
4. یک عدد ماشین کنترلی ارزان قیمت | بنده یک عدد از دوستان گرفتم که بردش مشکل داشت. ولی فکر کنم با 40 تومن بتونید یکی بخرید!
5. تگ NFC برای اتصال سریع | قیمت 1400 تومان.
6. اراده | قیمتش دست خودتونه!
(در صورت خرید لوازم جدید لیست بروز می شود)
از آقای کرامتی عزیز نیز برای کمک به انتخاب قطعات تشکر می کنم.


..................



موقع خرید شیلد موتور درایو، کمی هم در موردش تحقیق کردم و یک نمونه کد پیدا کردم که در زیر می بینید:
void setup() {
  pinMode(8,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);  
}
 
void forWard(){
digitalWrite(12,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
}
 
void reVerse(){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
digitalWrite(8,LOW);
}
 
void right_F(){
digitalWrite(12,HIGH);
digitalWrite(8,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
}
 
void left_F(){
digitalWrite(12,LOW);

digitalWrite(8,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
}
void loop() {
forWard();
delay(2000);
reVerse();
delay(2000);
right_F();
delay(2000);
left_F();
delay(2000);
}





و باز هم تشکر می کنم از آقای عطایی بابت توضیحات ایشان در مورد این کد:




> سلام
> این شیلد میتونه 2 تا موتور رو کنترل کنه
> پین های 10 و 11 مربوط به سرعت موتور ها میباشند که با pwm کنترل میشند (اینجا HIGH به معنی حد اکثر قدرت شده) 
> پین های 8 و 12 هم جهت چرخش موتور ها رو مشخص میکنه
> در صورت High بودن به جلو و Low بودن موتور به عقب میچرخه


با توجه به توضیحات آقای عطایی، این کد مربوط به خودرویی تک محوره است و هر کدوم از چرخ های محور یک موتور دارند. ماشین در این روش مثل تانک حرکت می کند یا می پیچد. برای مثال برای حرکت رو به جلو هر دو موتور به صورت High رو به جلو می چرخند و برای پیچش به طرفین، یک از موتورها در جهت عکس حرکت می کند(امیدوارم منظورم رو رسونده باشم!).
اما در سیستم من، یکی از موتور ها وظیفه تامین نیروی پیشران رو دارد و دیگری وظیفه تنظیم زاویه چرخ های جلو! البته چون فعلا موتورها معمولی هستند، زاویه ها به ماکزیمم ممکن تنظیم شده اند.
بنابراین باید کد را تعییر بدهم که در پست بعدی کد جدید را قرار خواهم داد.


..................



اما چند سوال:
من باتری تهیه نکرده ام. آیا می تونم برای تامین نیرو از یک پاور بانک 4000 میلی آمپری با خروجی 5V و 2.1 آمپری استفاده کنم؟!شیلد و برد نیاز به تامین برق جدا دارند؟! اگر پاسخ خیر هست، به کدام یک وصل کنم؟! 



اگر پیشنهاد و انتقادی دارید بفرمایید.
با احترام.

----------


## kolibri

سلام مجدد!
اول باید بگم که برنامه نویس باید سحر خیز باشه!! اول صبح کد زدن و یاد گرفتن خیلی حال میده همراه با یک صبحانه عالی!

... 
اما از اونجا که هنوز پاسخی نگرفتم، مجددا سوالات رو مطرح می کنم:



> اما چند سوال:
> 
> من باتری تهیه نکرده ام. آیا می تونم برای تامین نیرو از یک پاور بانک 4000 میلی آمپری با خروجی 5V و 2.1 آمپری استفاده کنم؟!شیلد و برد نیاز به تامین برق جدا دارند؟! اگر پاسخ خیر هست، به کدام یک وصل کنم؟!


امیدوارم پاسخ بگیرم.

....

اما کد جدید که با کمی تغییرات برای نحوه چینش موتوری من حاصل شده:

void setup() {
  pinMode(8, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
}

void forWard() {
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);

}

void reVerse() {
digitalWrite (8, LOW);
digitalWrite (10, HIGH);
}

void right_F() {
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
}

void left_F() {
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
}
void loop() {
  forWard();
  delay(2000);
  reVerse();
  delay(2000);
  right_F();
  delay(2000);
  left_F();
  delay(2000);
}

البته شاید بعدا سرعت چرخش و همینطور سرعت عقب گرد رو بذارم روی LOW. حالا تا نتیجه چی بشه!

...

حرکت بعدی نوشتن برنامه برای ویندوز 10 هست. این برنامه هم با سنسور شتاب سنج کنترل می کنه و هم با دکمه های مجازی و سخت افزاری.
البته هنوز قطعات رو سر هم نکردم چون نمی دونم چه ولتاژی بدم و اینکه به کجا!!

با احترام

----------


## kolibri

سلام؛
از اونجا که انگار کسی میلی به این پروژه نداره و فکر نمی کنم برای کسی به جز خودم جذابیت داشته باشه، احتمالا تاپیک رو ادامه ندم!!
فقط آخرین چیزهایی که فهمیدم:
دوستانم بهم پیشنهاد دادن اول با یک منبع برق 9 ولتی، اردوئینو رو راه بندازم. و ببینم جوابگوی دو تا برد و موتورها هست یا نه!
اگر جوابگو نبود از دو تا منبع متفاوت استفاده کنم... که باید با آزمون و خطا برم جلو!
...
خب یه چیزی هم برای پروگرام کردن برد آردوینو UNO CH340G، اگر به درایورش نیاز دارید می تونید آخرین نسخه رو از اینجا دانلود کنید.

با احترام.

----------


## kolibri

سلام!
برای پروگرام کردن برد آردوئینو از نمونه استاندارد Firmata موجود در نرم افزار آردوئینو استفاده کردم.
برنامه یونیورسال هم تغییرات لازم رو دادم.
اما مشکلی که هست بلوتوث کانک نمی مونه و زود از حالت کانکت خارج میشه. در حالی که اسپیکر بلوتوثم می تونه مداوم کانکت بمونه!:

مشکل چیه؟!

----------


## kolibri

سلام؛
فکر کنم این تاپیک طلسم شده باشد!
بگذریم...
مشکل اتصال بلوتوث از درایور هست و در صورت فعال نبودن دستگاه، ارتباط رو قطع می کنه!
متاسفانه بلوتوث hc-05 توسط سیستم من غیرفعال می شه!
راه حل خاموش کردن این قابلیت بود که توی ویندوز 10 (حداقل در مورد من) این قابلیت وجود نداره!
راه حل دوم خرید یک ماژول بلوتوث اکسترنال هست که نمی دونم جواب بده یا خیر!!

...
در مورد باتری هم من از یک باتری 9 ولتی برای شیلد و 5 ولنی برای تغذیه برد آردوینو استفاده کردم.

----------


## kolibri

دوستان این کد برای شیلد من درسته؟!
/*
Arduino driver for Android app remote control.
This sketch listens to instructions on the Serial port
then activates motors as required
Then sends back confirmation to the app


Motor shield DFRduino 1A based on L239B
Pin          Function
Digital 4  Motor 2 Direction control
Digital 5  Motor 2 PWM control
Digital 6  Motor 1 PWM control
Digital 7  Motor 1 Direction control 
 */


int const PWMA = 6; 
int const PWMB = 5; 
int const dirA = 7; 
int const dirB = 4; 



void setup() {
  pinMode(PWMA, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(dirA, OUTPUT);  
  pinMode(dirB, OUTPUT);
  
  //initial set up straight forward, no speed
  digitalWrite(dirA, HIGH);
  digitalWrite(dirB, HIGH);
  analogWrite(PWMA, 0);
  analogWrite(PWMB, 0);
  
  Serial.begin(9600); 
}


void loop() {
  
  // see if there's incoming serial data:
  if (Serial.available() > 0) {
    // read the oldest byte in the serial buffer:
    int incomingByte = Serial.read();
    
    // action depending on the instruction
    // as well as sending a confirmation back to the app
    switch (incomingByte) {
      case 'F':
        moveForward(255, true);
        Serial.println("Going forward");
        break;
      case 'R':
        turn(255, true);
        Serial.println("Turning right");
        break;
      case 'L':
        turn(255, false);
        Serial.println("Turning left");
        break;
      case 'B':
        moveForward(255, false);
        Serial.println("Going backwards");
        break;
      case 'S':
        moveForward(0, true);
        Serial.println("Stopping");
        break;
      default: 
        // if nothing matches, do nothing
        break;
    }
  }
}


void moveForward(int speedBot, boolean forward){
//boolean forward controls motor direction
  if (forward){
      digitalWrite(dirA, HIGH);
    }
    else{
      digitalWrite(dirA, LOW);
    }
    analogWrite(PWMA, speedBot);


}


void turn(int speedBot, boolean right){
  //boolean right controls motor direction
    if (right){
      digitalWrite(dirB, LOW);
    }
    else{
      digitalWrite(dirB, HIGH);
    }
    analogWrite(PWMB, speedBot);
}

----------


## quantomquery

سلام
بنده تازه کارم و یه سوال برام پیش اومده
شما میخای با موبایل این ماشین رو کنترل کنی - یعنی بلوتوث موبایل؟

----------


## kolibri

> سلام
> بنده تازه کارم و یه سوال برام پیش اومده
> شما میخای با موبایل این ماشین رو کنترل کنی - یعنی بلوتوث موبایل؟


سلام...
بله و موفق هم شدم با رایانه و ویندوز موبایل 10 ماشین رو کنترل کنم.
کارهای اضافه مثل کنترل چراغ ها و یا راهنما زدن و... هم میشه طبق حوصله انجام داد.

----------

