ساخت ماشین کنترلی بلوتوثی با قابلیت جا به جایی اجسام

blog-title copy2
نوشته شده توسط
دانلود فایل PDF

در این آموزش قصد داریم مراحل ساخت یک ربات با قابلیت جا به جایی اجسام را با استفاده از برد آردوینو و ماژول بلوتوث HC-05 مورد بررسی قرار دهیم. پس با ما همراه باشید.

قبل از شروع بحث، ابتدا اجازه بدید که از دو تن از دوستان و هم تیمی های خودم تقدیر و تشکر کنم که باعث ساخت این سازه بصورت تیمی شدند.

آقایان: مسعود اطلس باف و محمد مهدی اویسی.

خب دیگه نوبتی هم باشه نوبت شروع آموزش هستش، پس بزن بریم…

این اموزش شامل سه مرحله است:

  • 1) ساخت سازه و مکانیک
  • 2) سخت افزار و آردوینو
  • 3) برنامه نویسی

جنس بدنه مورد استفاده شده در این سازه فوم برد است. و شما میتوانید با دیدن ویدیویی که توسط اقای اویسی تهیه شده قطعات استفاده شده و اتصالات آن را مشاهده کنید. اندازه ها کاملا دلخواه هست و شما میتوانید سازه مورد نظر را کوچک یا بزرگ بسازید.

برای اطلاع از اتصالات بدنه و شبه قطعات استفاده شده در ربات، ویدیو زیر رو مشاهده کنید.


قطعات مهم مورد استفاده و اطلاعات مربوط به آنها:

راه اندازی موتور DC:

برای راه اندازی موتور های جریان مستقیم (DC) میتوانید از درایور های گوناگونی استفاده کنید. درایور ها برای ما راه اندازی این موتور ها آسان تر میکنند. طوری که شما میتوانید جهت و سرعت این نوع موتورها را مطابق با نیاز خود تغییر دهید. درایوری که ما در این آموزش استفاده میکنیم، ماژول L298 می باشد.

ولتاژ کاری این ماژول برای عملگر ها میتوان تا 46 ولت و مقدار جریانی که میتوانیم از این ماژول به دست آوریم 0.6 آمپر هستش و این اعداد برای راه اندازی موتور های DC  کافی هست. البته بستگی به نوع موتوری که شما استفاده می کنید دارد.

موتور های جریان مستقیم مختلفی برای حرکت کردن  این ربات وجود دارد، مانند :

500rpm, 100rpm, 250rpm و… . که شما میتوانید با توجه به نیازی که دارید (موتور سرعتی یا قدرتی) موتور خود را تهیه کنید.

اطلاعات ماژول L298:

Inputs: این پایه ها که از 1 تا 4 می باشد برای تغییر جهت چرخش موتور است. این پایه ها به گونی است که ورودی های 1 و 2 مربوط به یک موتور یا موتور های یک سمت می باشد.

ورودی های 3 و 4 هم به این حالت هست. در این پروژه از ورودی های 1 و 2 برای تغییر جهت موتور های سمت چپ و از ورودی های 3 و 4 برای تغییر جهت دو موتور سمت راست سازه استفاده شده است.

2,Enable1: این دو پایه برای کنترل سرعت ربات هستند که به صورت آنالوگ از 0 تا 255، درجه بندی میشه و سرعت موتور شما را تعیین میکنه.

به طوری که هر کدام از پایه های enable مربوط به یک موتور یا موتور های یک سمت هستش.

VS: این پایه مربوط به ولتاژ کاری موتور ها هستش، که بستگی به موتوری که شما استفاده میکنید دارد. به عنوان مثال موتوری که بنده استفاده کردم 12 ولتی بوده و درنتیجه به این پایه 12 ولت میدهیم.

اتصالات ماژول L298:

در این قسمت enable همان EN و input همان IN نوشته شده بر روی ماژول است.

  • پایه enable1 به پایه شماره 3 آردوینو متصل میشود.
  • پایه enable2 به پایه شماره 5 آردوینو متصل میشود.
  • پایه input1 به پایه شماره 2 آردوینو متصل میشود.
  • پایه input2 به پایه شماره 4 آردوینو متصل میشود.
  • پایه input3 به پایه شماره 6 آردوینو متصل میشود.
  • پایه input4 به پایه شماره 7 آردوینو متصل میشود.
  • پایه GND به پایه GND آردوینو متصل میشود.
  • پایه 12+ به قطب مثبت باطری 12ولتی مورد نظر.

اطلاعات ماژول بلوتوث HC-05:

پروتکل این ماژول uart هست. ولتاژ کاری این ماژول 3.3 ولت هست اما با وجود رگولاتور به کار رفته داخل ماژول شما میتوانید به 5 ولت آردوینو هم متصل کنید.

  • پایه RX: دریافت کننده اطلاعات
  • پایه TX: فرستنده اطلاعات

اگر قصد تغییر نام ماژول و یا رمز آن را دارید، میتوانید در این مقاله آموزش آن را مطالعه کرده و از آن استفاده کنید.


اتصالات ماژول بلوتوث:

  • پایه TX به پایه شماره 8 اردوینو متصل میشود.
  • پایه RX به پایه شماره 13 اردوینو متصل میشود.
  • پایه GND به پایه GND اردوینو متصل میشود.
  • پایه 5v+ به پایه شماره 5v+ اردوینو متصل میشود.

توجه داشته باشید در این پروژه ما از TX  و RX سریال مجازی استفاده کردیم.

همچنین پایه RX ماژول بلوتوث را میتوانید به هیچ پایه ای از اردویینو متصل نکنید. زیرا این پایه مربوط به فرستنده این ماژول هست و اگر هم متصل نباشه مشکلی پیش نمیاد.


اطلاعات سروو موتور:

یکی از خصوصیات سروو موتورها که خود را از بقیه موتور ها متمایز کرده این است که این خانواده از موتور ها درجه بندی شده اند. به طوری که شما میتوانید این موتور را از 0 تا 180 درجه بچرخانید. البته در بعضی از انواع آن از 0 تا 360 درجه هم درجه بندی شده. در این پروژه با توجه به نیاز ربات، نوع سروو تا 180 درجه هست.


اتصالات سروو موتور:

سروو موتورها دارای 3 سیم هستند که عبارتند از:

تیره ترین سیم مربوط به GND

سرخ ترین سیم مربوط به VCC

و سیم اخر که اغلب زرد یا سبز هست مربوط به کنترل موتور هست که این سیم را به پایه دیجیتال میکرو مورد نظر یعنی آردوینو میدهیم.

ما در این برنامه سه سروو برای گیریپر مورد نظر داریم. سروو موتوری هایی که به پایه های 11 و 9 آردوینو متصل شده اند مربوط به گیریپر ربات می باشد که به صورت افقی باز و بسته میشوند.

و سروو موتوری که به پایه 10 آردوینو متصل شده است، مربوط به جا به جایی عمودی گریپر می باشد. به طوری که جسم مورد نظر را به بالا یا پایین جا به جا میکنید.


 برنامه نویسی پروژه مورد نظر:

#include<SoftwareSerial.h>;

SoftwareSerial bluetooth(8, 13); //TX,RX

//***********************SERVO

#include<Servo.h>;

Servo myservo;

Servo servoH;

Servo servoh;

int degree;

int degry;

int degryy;

//************************Motor Left

int enable1 = 3;

int input1 = 2;

int input2 = 4;

//************************Motor Right

int enable2 = 5;

int input3 = 6;

int input4 = 7;

void setup() {

  //********************************Motor Left

  pinMode(enable1, OUTPUT);

  pinMode(input1, OUTPUT);

  pinMode(input2, OUTPUT);

  //*****************************Motor Right

  pinMode(enable2, OUTPUT);

  pinMode(input3, OUTPUT);

  pinMode(input4, OUTPUT);

  //***********************************SERVO

  myservo.attach(10);

  servoH.attach(11);

  servoh.attach(9);

  Serial.begin(9600);

  bluetooth.begin(38400);

  //******************************** setup servo

  myservo.write(100);

  delay(500);

  myservo.write(30);

  delay(200);

  servoH.write(180);

  delay(300);

  servoH.write(50);

  servoh.write(180);

  delay(300);

  servoh.write(50);

}

void loop() {

 // Print();

//  motor();

Bluetooth();

  degree = myservo.read();

  degry = servoH.read();

  degryy = servoh.read();

}

void Print() {

  if (bluetooth.available()) {

    char shazam = (char)bluetooth.read();

    Serial.println(shazam);

  }

}

void motor() {

  motorl(100);

  motorr(-100);

}

void Bluetooth() {

  if (bluetooth.available()) {

    char shazam = (char)bluetooth.read();

    if (shazam == 'a') {

      motorl(100);

      motorr(100);

      delay(85);

      motorl(0);

      motorr(0);

    }

    if (shazam == 'b') {

      motorl(-100);

      motorr(100);

      delay(85);

      motorl(0);

      motorr(0);

    }

    if (shazam == 'c') {

      motorl(-100);

      motorr(-100);

      delay(85);

      motorl(0);

      motorr(0);

    }

    if (shazam == 'd') {

      motorl(100);

      motorr(-100);

      delay(85);

      motorl(0);

      motorr(0);

    }

    if (shazam == 'e') {

      degree = degree - 10;

      myservo.write(degree);

    }

    if (shazam == 'f') {

      degree = degree + 10;

      myservo.write(degree);

    }

    if (shazam == 'g') {

      degry = degry - 10;

      servoH.write(degry);

      degryy = degryy - 10;

      servoh.write(degryy);

    }

    if (shazam == 'h') {

      degry = degry + 10;

      servoH.write(degry);

      degryy = degryy + 10;

      servoh.write(degryy);

    }

  }

}

void motorl(int Speed) {

  if (Speed >= 0) {

    Speed = map(Speed, 0, 100, 0, 200);

    analogWrite(enable1, Speed);

    digitalWrite(input1, LOW);

    digitalWrite(input2, HIGH);

  }

  else if (Speed < 0) {

    Speed *= -1;

    Speed = map(Speed, 0, 100, 0, 200);

    analogWrite(enable1, Speed);

    digitalWrite(input1, HIGH);

    digitalWrite(input2, LOW);

  }

}

void motorr(int Speed) {

  if (Speed >= 0) {

    Speed = map(Speed, 0, 100, 0, 200);

    analogWrite(enable2, Speed);

    digitalWrite(input3, LOW);

    digitalWrite(input4, HIGH);

  }

  else if (Speed < 0) {

    Speed *= -1;

    Speed = map(Speed, 0, 100, 0, 200);

    analogWrite(enable2, Speed);

    digitalWrite(input3, HIGH);

    digitalWrite(input4, LOW);

  }

}

 

نکاتی در مورد کدهای  پروژه :

همان طور که مشاهده میکنید این برنامه از سه تابع مختلف تشکیل شده که عبارتند از:

voide Print:

با فعال کردن این تابع شما میتوانید متوجه شوید که ارتباط گوشی با ماژول بلوتوث برقرار است یا خیر. همچنین پیام هایی که شما به این ماژول میدهید بر روی پنجره سریال مانیتور آردوینو به شما نمایش میدهد.

برای فعال کردن پنجره سریال مانیتور از کلید های ترکیبی control+shift+m استفاده کنید.

نکته قابل توجه: در پنجره سریال مانیتور باودریت را بر روی عدد 9600 قرار دهید.

 voide motor:

با فعال کردن این تابع شما میتوانید از درستی کارکرد موتور های خود تست بگیرید. به طوری که از سرعت و درستی جهت چرخش موتورها با خبر شوید.

این تابع به گونه ای است که حداکثر سرعت حرکت عقب و جلو ربات، بین بازه 0 تا 100 هستش. به طوری که با قرار دادن عدد 100 داخل پرانتز، ربات با حداکثر سرعت مشخص شده به جلو حرکت میکند. و با قرار دادن عدد 100- داخل پرانتز، ربات با تمام سرعت مشخص شده به عقب حرکت میکند.

منظور از سرعت مشخص شده در جملات بالا چیست؟

همان طور که مستحضر هستید در توابع motorl و motorr طوری کدها نوشته شده است که شما بتوانید در دستور مپ محدودیتی برای سرعت موتور مشخص کنید. که بنده در این برنامه به صورت پیش فرض حداکثر سرعت را تا عدد 200 قرار دادم که شما میتوانید این عدد را از 0 تا 255 نیز تغییر دهید.

voide Bluetooth:

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

  • تازمانی که حرف ‘a’ را به ماژول میفرستید، ربات به جلو حرکت میکند و به محض این که دستتان را از روی دکمه بردارید ربات متوقف میشود.
  • تازمانی که حرف ‘b’ را به ماژول میفرستید، ربات به سمت راست حرکت میکند و به محض این که دستتان را از روی دکمه بردارید ربات متوقف میشود.
  • تازمانی که حرف ‘c’ را به ماژول میفرستید، ربات به عقب حرکت میکند و به محض این که دستتان را از روی دکمه بردارید ربات متوقف میشود.
  • تازمانی که حرف ‘d’ را به ماژول میفرستید، ربات به سمت چپ حرکت میکند و به محض این که دستتان را از روی دکمه بردارید ربات متوقف میشود.

در ادامه برنامه کنترل سه سروو موتور را کدنویسی کردیم  ولتاژ کاری ربات، به طوری که:

  • هربار با فرستادن حرف ‘e’ بازو ربات را به صورت عمودی به سمت پایین حرکت میدهید.
  • هربار با فرستادن حرف ‘f’ بازو ربات به صورت عمودی به سمت بالا حرکت میدهید.

البته این بالا و پایین رفتن بستگی به چگونگی قرار گیری سروو موتور دارد. شاید جوری شما سروو موتور قرار دهید که با حرف e به سمت بالا حرکت کند یا بلعکس!

  • علاوه بر این شما هربار با فرستادن حرف ‘g’ بازو ربات را به صورت افقی میبندید.
  • هربار با فرستادن حرف ‘h’ بازو ربات را به صورت افقی باز میکنید.

نکته بسیار بسیار مهم : اگر در این پروژه مواجه شدید که ولتاژ کاری ربات کافی نیست و خرجی لازم رو از ربات مورد نظر نمیگیرید، در تغذیه آردویینو علاوه بر اینکه باطری 9 ولت به جک متصل هست پاور بانک یا منبع تغذیه هم به قسمت کابل آردویینو متصل کنید.

در صورت ارتباط بین گوشی و ماژول بلوتوث میتوانید از اپلیکیشن Arduini RC استفاده کنید.

در ادامه ویدیو آموزش اتصال ماژول بلوتوث به دستگاه شما را نیز قرار داده ایم.

نکته: در ابتدا انجام این کار به قسمت تنظیمات بلوتوث گوشی مورد نظرتون برید و نام ماژول بلوتوث مورد خود را پیدا کنید و به آن متصل شوید. سپس ویدیو آموزشی که در قسمت پایین هستش رو مشاهده کنید و مراحل رو مطابق اون انجام بدید.

منتظر ویدیو هاتون از این آموزش در اینستاگرام هستیم. لطفا اون ها رو با هشتگ microelecom# در پیج خودتون منتشر کنید تا ما هم بتونیم اون ها را ببینیم.

arman.h.r

microelecom@

۷ دیدگاه برای “ساخت ماشین کنترلی بلوتوثی با قابلیت جا به جایی اجسام

  1. سلام، من میخوام یه ماشین کنترلی بسازم و از سروو هم در اون استفاده کنم، میشه راهنماییم کنید

    1. برای کد ها باید کتابخانه سروو موتور رو فراخوانی کنید یک ابجکت با دستور servo بسازید
      مثلا servo akbar
      سپس باید بگید که کدوم پایه برای کنترل سروو هست مثلا پایه کنترل کننده را متصل کردین به پایه ۹ در این جا از دستور (akbar.attach(9 استفاده میکنید در void setup باشد
      سپس با دستور ()akbar.write در وید لوپ هر عددی بگذارید سروو به آن موقعیت میره.
      و همچنین توضیحات مربوط به سروو موتور و پایه ها در همین اموزش اطلاع رسانی شده

  2. با سلام خدمت شما من یه رباتی دارم که برای حرکتش از موتور بالابر شیشه ماشین استفاده کردم . میخوام این رو به وسیله ی بلوتوث کنترل کنم و نیاز به کمک . میشه یه شماره ای به من بدین که بتونم با شما در ارتباط باشم و این رو راه بندازم.

    1. سلام و عرض ادب؛
      شما میتونید موضوع خودتون را توی بخش کامنت ها مطرح کنید و در صورتی که کسی موضوع رو بلد باشه حتما بهتون کمک خواهد کرد. هدف وبلاگ تنها بحث آموزش هست و قبول یا انجام پروژه نیست. اما میتونید توی کامنت ها طرح موضوع کنید و دوستان بهتون کمک کنند که بقیه هم با خوندن اونها، مطلبی رو یاد بگیرند. 😀

    2. بله حتما . شما میتونید با استفاده از ماژول hc05 این کار را انجام بدید .
      باید با استفاده از رله این کار را انجام بدید, و بگید وقتی از طرف تلفن ما مثلا عدد ۱ ارسال شد پایه رله روشن بشه پایه ای که به اردوینو متصل شده از طرف رله روشن بشه , و بعد اون رله موتور شما رو به راحتی حرکت میدهد .

  3. عالی
    چه اموزش کاملی
    من که عاشق برنامه نویسیش شدم.
    هوش شما تو این زمینه واقعا قابله ستایشه
    ایشالا به موفقیتای بیشتری برسید.

    1. خیلی مچکرم جناب لطف دارین شما.
      اگر سوالی درباره آموزش داشتید حتما بپرسید. خوشحال میشم بتونم کمکی کنم.
      خیلی ممنونم از حسن توجه شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *