آردوینو آردوینو Arduino Uno بلوتوث Bluetooth

کنترل سرو موتور Servo با استفاده از ماژول بلوتوث HC05 و برد آردوینو

control-servo-motor-with-arduino-and-hc-05-bluetooth-module--digispark
نوشته شده توسط Arman.H.R

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

 


ماژول HC05 بلوتوث


پروتکل ارتباط سخت افزاری ماژول بلوتوث UART می‌باشد. در دو مود Master و Slave قرار گرفته و آماده برقراری ارتباط با سایر دستگاه‌ها می‌شود. ولتاژ کاری این ماژول ۳٫۳v است، اما چون داخل این ماژول از رگولاتور استفاده شده، می‌توانید آن را به ۵v  متصل کنید. در اینجا منظور از (V) همان ولت می‌باشد. فرکانس کاری ماژول بلوتوث HC05 عدد ۲٫۴گیگا هرتز است. برد آن در حدود ۳۳ متر است. سرعت انتقال داده ۲٫۱ مگابایت هست.

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

ارتباط دو ماژول بلوتوث HC-05


اتصالات

  • پایه TX ماژول بلوتوث را به پایه TX آردوینو اتصال دهید.
  • پایه RX ماژول بلوتوث را به پایه RX اتصال دهید.
  • پایه GND ماژول بلوتوث را به پایه GND اتصال دهید.
  • پایه ۵ ولت ماژول بلوتوث را به پایه ۵ ولت اتصال دهید.

 

نکته اول: قبل از  اینکه  +۵V  یا Gnd ماژول را به آردوینو متصل کنید، دکمه Switch را نگه دارید و در همین هنگام نگه داشتن VCC  یا GND  را متصل کنید.

نکته دوم : چون از خود TX  و RX  آردوینو استفاده شده است, هیچ کدی نوشته نمی‌شود. اصل کار  با دستورات AT کامند می‌باشد.

ماژول بلوتوث HC05

 


تنظیم ماژول در حالت master و Slave


نرم افزار آردوینو Arduino را باز کرده و سپس یک برنامه پیش‌فرض آپلود کنید. البته توجه داشته باشید که در هنگام آپلود کردن کدها، هیچ پایه ای به TX  وRX آردوینو متصل نباشد. بعد از آپلود برنامه  پایه‌های TX و RX ماژول بلوتوث HC05 را به آردوینو متصل کنید. روش اتصلات چند خط بالاتر توضیح داده شده است. سپس در نرم افزار آردوینو، سریال مانیتور را باز کنید. برای این کار می‌بایست دکمه‌های control+shift+M را نگه دارید و سریال پرینت را باز کنید. حالت را روی Both Nl & CR بگذارید. از طریق سریال مانیتور، کلیه تنظیمات مربوط به ماژول بلوتوث را انجام می‌دهیم.

 

تنظیم ماژول بلوتوث HC-05 در مود Slave

  • AT: این دستور برای این است که  شما متوجه شوید ارتباط بین کامپیوترتان و ماژول برقرار شده است.
  • AT + ORGL : این برای اینکه کامل اطلاعات ماژول به حالت کارخانه برگردد.
  • AT + VERSION: این دستور برای دانستن ورژن ماژول می‌باشد.
  • AT+NAME: با این دستور شما می‌توانید نام ماژول را تغییر دهید و برای راحت تر شدن می‌توانید، اسم را SLAVE  کنید یعنی میتوان نوشت:  AT+NAME=SLAVE.
  • AT+ROLE=0: این دستور برای حالت گیرنده ماژول است که مطابق نوشته آن را ۰ قرار میدهیم.
  • AT+ADDDR: با دادن این دستور ماژول IP  (شناسنامه خود) خودش به شما میدهد, مثال :  ۱۸:BD19:192H , حال شما IP داده شده را کپی کنید یا در جایی بنویسید.

 

تنظیم ماژول بلوتوث HC-05 در مود Master

  • AT : این دستور برای اینکه شما متوجه شوید ارتباط بین کامپیوترتان و ماژول برقرار شده است.
  • AT+ORGL : این برای اینکه کامل اطلاعات ماژول به حالت کارخانه برگردد.
  • AT+VERSION : این دستور برای دانستن ورژن ماژول است.
  • AT+ROLE=1 : این دستور برای حالت فرستنده ماژول است که مطابق نوشته آن را ۱ قرار میدهیم.
  • AT+CMODE=0 : این دستور هم برای فرستنده است که حنما باید مورد استفاده قرار گرفته باشد.
  • AT+BIND=ADDR(SLVE) : به عبارتی با این دستور IP ماژول Slave  را به ماژول Master میدهیم.

نکته: زمانی که می‌خواهیم ADDR را به BIND  بدهیم باید به جای” : ” از ” , ”  استفاده کنیم. برای اتصال دو ماژول ورژن دو ماژول باید یکسان باشد. به همین خاطر سعی کنید دو ماژول را از یک جا و از یک مکان تهیه کنید.


بخش دوم: کنترل سرو موتور با بلوتوث


همانطور که در ابتدای آموزش اشاره کردم. هدف کنترل یک ربات توسط بلوتوث است. برای این منظور در این آموزش از سرو موتور استفاده کرده‌ام. سروو موتورها دارای ۳ سیم هستند. سیم تیره تر یا سیاه همان Gnd است. سیم قرمز Vcc است و سیم دیگری که نارنجی است، جهت کنترل سرو Servo می‌باشد. این مدار را به آردوینویی متصل کنید که ماژول بلوتوث Slave را متصل کرده‌اید.

  • سیم  Gnd  سروو موتور را به Gnd متصل کنید.
  • سیم Vcc سروو را به +۵v  آردوینو متصل کنید.
  • سیم کنترل سروو را به هر پایه خروجی اردوینو میتوان متصل کرد, که ما در این پروژه به پایه ۹ آردوینو متصل می‌کنیم.
  • TX  ماژول به RX  اردوینو اتصال دهید.
  • RX   ماژول به TX  اردوینو اتصال دهید.
  • GND   ماژول به GND اتصال دهید.
  • +۵v  ماژول به +۵v اتصال دهید.

 

اتصالات مدار کنترل سرو موتور با بلوتوث Bluetooth - دیجی اسپارک

 

مدار پتانسیومتر

این مدار را به همان آردوینویی متصل کنید که ماژول بلوتوث master متصل شده است، یکی از سه پایه پتانسومتر را به مقاومت ۱K متصل کنید، سپس آن سر مقاومت را به +۵v متصل نمایید. حال پایه بعدی پتانسیومتر را به پایه بعدی اون پایه ای که انتخاب کردید به Gnd متصل کنید. سپس پایه ای که بین پتانسیومتر و مقاومت اتصال برقرار کرده (همان پایه پتانسیومتر که به مقاومت متصل شده) را خروجی بگیرید. و سیمی که از آن خروجی گرفتید را به پایه A0 آردوینو متصل کنید.

اتصالات مدار کنترل سرو موتور با بلوتوث Bluetooth - دیجی اسپارک

 


کد ماژول بلوتوث آردوینو Master


توجه داشته باشید در هنگام اپلود برنامه سیمی پایه های TX  و RX آردوینو را اشغال نکرده باشد. سپس بعد از آپلود متصل نمایید. چنانچه روش آپلود کدها روی آردوینو را نمی‌دانید به آموزش کار با برد آردوینو Arduino  مراجعه کنید.

int potpin (0);  //متغیر برای پتانسومتر و تعریف پایه آن

int Read;  // متغیر برای خواندن داده ها

void setup () {

Serial.begin (38400);  //             مربوط به اطلاعات ماژول برای گرفتن و دادن اطلاعات







}




void loop() {

potpin = analogRead(0);  //  تعریف پایه پتانسومتر

Read = map(potpin,0,980,0,180);  // با این دستور مقدار  ۰_ ۹۸۰ را تبدیل ۰ _ ۱۸۰ کرده ایم

Serial.println (Read);  //  خواندن داده های پتانسومتر

Delay (200);  //  فاصله زمانی

Serial.println (Read);  //  خواندن داده های پتانسومتر

If (Serial.available())  {//  اگر اتصال به ماژل ها برقرار شد :

Serial.write (Read);  // داده پتانسومتر که متغیر Read تعریف شده , به ماژول  Slave  میفرستد.

}




{

حال این برنامه را در آردوینو آپلود کنید که ماژول Master به آن متصل شده است.

 


کد ماژول بلوتوث آردوینو  Slave


 

 

#include <Servo.h>;  //   کتابخانه سرو موتور را فراخانی کرده ایم

Servo myservo;  //  متغیری از کلاس سروو تعریف کرده ایم

int servo = 9;

//************************

int Read;

void setup () {

Serial.begin (38400);  //  بازدهی برای ماژول بلوتوس

myservo.attach (servo);  //   متغیر مای سروو را به پایه ۹ اتصال دادیم







}




void loop() {

if (Serial.available ()) {   // اگر بین ماژول اتصالی بر قرار شد

Read = Serial.read ();  //  هرچیزی که از سریال دریافت میکند بخوند

if(Read == 0 && Read == 180){  //  اگر بازده بین ۰ تا ۱۸۰ بود

myservo.write (Read);  //  موقیت سروو را به عددی که دریافت میکند ببرد.

}

}




}

 


وسایل مورد نیاز


دو عدد ماژول بلوتوث HC05
یک بسته سیم برد بردی
برد برد
دو عدد آردوینو Arduino UNO
مقاومت (۱۰K)
سرو موتور
سیم نری به مادگی

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

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

Arman.H.R

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۳ دیدگاه

  • سلام
    ببخشید شما در اول نوشتید که پایه RX ماژول به RX آردوینو و در آخر نوشتید که RX ماژول به TX آردوینو متصل بشه

    • سلام و خسته نباشید
      بله جناب درسته در قسمت اول پایه TX به RX , ،TX به RX , در قسمت اول این کار را انجام میدهیم برای انجام دادن دستورات AT کامنت تا اینکه دو ماژول به هم متصل شود.
      اما در قسمت اخر, پایه ها را جابه جا میکنیم زیرا میخواهیم ماژول ها دستوراتی که دادیم را دریافت کنند و ارسال کنند .( کار عادی خود را انجام دهند)
      به عبارتی در قسمت اول برای انجام دادن دستورات AT کامنت باید آن کارارا انجام داد.
      اگر باز اطلاعات کافی نبود حتما بگید جناب با کمال میل پاسخگو هستم.

    • سلام جناب
      بنده متاسفانه، تا به حال با این ماژولی که معرفی کردید فعالیتی نداشتم
      اما به ظاهر جزو خانواده های ، hc باید باشد
      و به همین منظور هم پس احتمالش هست با این روش گفته شده بتوان ارتباط بین دو ماژول را برقرار کرد .
      و در ضمن اموزش گفته مربوط به hc_05 هستش، خوشحال میشم اگر شما تونستید با ماژول که معرفی کردید با این روش خروجی بگیرید، با بنده به اشتراک بگذارید!

  • سلام ممنون از پروژه خوبتون،
    میشه تعداد سروو ها و پتانسیومترها رو بیشتر کرد؟ برنامه چه تغییری میکنه؟

  • سلام عرض ادب امیدوارم حالتون خوب باشه .
    بله میتوان زیاد کرد فقط باید تعداد متغیر رو هارو افزایش داد که داخل برنامه نویس آموزش توضیح دادم که هر خط برای چه کاری هستش و شما میتونید مثلا یک پتانسیومتر دیگر اضافه کنید و پایه ورودی آنالوگش رو متصل کنید و ددخل برنامه هم تعریف کنید (p2=analogread(A2
    همچنین برای سروو موتور هم میتوانید اضافه کنید و فقط باید پایه رو تعریف کنید از همون. دستور attach که کاملش رو داخل برنامه نوشتم و داخل برنامه پرانتز شما شماره پایه ای که پایه کنترل کننده سرووتون متصل هستش رو تایپ میکنید . البته میتونید همون شماره رو متغیر کنید و ازش متعیر استفاده کنید مثلا:
    Servo servo2=8 الان پایه کنترل کننده شما پایه هشت هست و متونید داخل پرانتز به جای عدد ۸ از servo2 استفاده کنید

  • سلام خسته نباشید. سوال اول برای کنترل با گوشی باید چه کار کنم ؟ و برای اینکه به غیر از ماژول بخام کنارش یه کلید بزارم باید چکار کنم.
    خیلی ممنون از سایت خوبتون.

    • سلام و عرض ادب
      برای کنترل با گوشی شما میتوانید از برنامه arduino rc استفاده کنید . البته برنامه‌ی دیگه هم هست که میتونید آن را داخل گوگل سرچ کنید.
      برای کلیدی که میخواهید بزارید بستگی به نوع کلیدی که انتخاب میکنید دارد. دقیق متوجه سوال دومتون نشدم. اگر واصح تر بگید ممنون میشم

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

    • سلام جناب وقتتون بخیر باشه.
      شما میتوانید از یک از کلید ها یک خروجی بگیرید و به پاهای دیجیتال آردویینو که از ۰ تا ۱۳ هست متصل کنید . وقتی چهارتاکلید رو به اردویینو متصل کردید. حال باید اون هارو داخل برنامه فراخوان کنید و از دستور if استفاده کنید .
      بنده مثالی برای یکی از کلید هارو برای شما میزنم.
      Int key1=5
      Voide setup(){
      (Pinmode(key1,INPUT
      }
      Voide loop(){
      (۵)Key1=digitalread
      }(If(key1==1
      (Digitalwrite(motor,high
      }
      به یک همچین حالتی میتونید به زدن دکله موتور خودتون رو روشن کنید البته من از متغیر موتور استفاده کردم برای مثال بود . شما اول لاید نوع درواور خودتون رو انتخاب کنید و بر اساس آن برنامه نویسی کنید

  • با سلام خداقوت به شما.با این ماژول بلوتوث چند تا میتوان سروو موتور و موتور دی سی و موتور براشلس را کنترل کرد؟

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

      • با سلام
        کاربر گرامی از اینکه تجربه و دانش خود را با دیگر کاربران به اشتراک می‌گذارید، صمیمانه سپاسگزارم.