همه چیز در مورد راه‌اندازی بلوتوث با آردوینو

 

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

همه شما با بلوتوث آشنایی دارید آن هم به‌دلیل استفاده از بلوتوث گوشی خود که به دستگاه‌هایی مانند لپ‌تاپ، اسپیکرهای بلوتوثی، پخش‌ا‌تومبیل، انواع هدفون‌های بی‌سیم و‌... متصل ‌می‌شود. در‌ این آموزش ما قصد داریم به شما آموزش دهیم که  چگونه دستگاه یا ربات خود را به صورت بی‌سیم (wireless) به وسیله آردوینو کنترل کنید.

برخی از امکانات ماژول بلوتوث عبارت‌اند از:

·         امکان کنترل قطعات با گوشی هوشمند به‌ وسیله ماژول بلوتوث

·         قابلیت کنترل قطعات با دو ماژول بلوتوث بدون دخالت گوشی هوشمند

با آموزش‌های ما در مورد ماژول بلوتوث همراه باشید تا مهارت پیاده‌سازی موارد زیر را کسب کنید:

o       کنترل ال‌ای‌دی از راه دور

o       کنترل نور ال‌ای‌دی

o       خواندن مقدار سنسور‌ها از راه دور به وسیله گوشی هوشمند

o       کنترل سرعت موتور‌ها به وسیله گوشی هوشمند

o       یادگیری راه‌اندازی انواع سنسور‌ها با ارتباط سریال

o       کنترل ربات با گوشی هوشمند وبلوتوث

o       کنترل ربات بدون گوشی هوشمند و از راه دور

hc05 & hc06

 

 

 

در تصویر بالا دوماژول بلوتوث hc05 و  hc06 را مشاهده می‌کنید که ما در‌این بخش با ماژول hc05 کار ‌می‌کنیم‌. در ابتدا ما باید با پایه‌های بلوتوث آشنا شویم:

 

 

hc05 pins

 

به پایه‌های HC 05 با دقت توجه کنید. می‌بینید که دو پایه با نام‌های TX و RX دارد. آردوینو هم دو پایه به همین نام‌ها دارد. پایه‌های 0 و 1 در آردوینوUNO  و NANO به‌ترتیب پایه‌های RX و TX هستند‌.

uart pin arduino uno

 

 

درآموزش‌های آردوینو تذکر داده شده بود که به‌این دو پایه هیچ قطعه‌ای وصل نکنید. حال وقت آن رسیده که به توضیح ‌این دو پایه بپردازیم‌. دو پایه rx , tx پایه‌های ارتباط سریال هستند. اما سوالی که مطرح می‌شود این است که ارتباط سریال چیست؟ ما در آردوینو مکرراً از ‌این نوع ارتباط استفاده ‌می‌کنیم. حتی خود شما نیز از‌ این ارتباط بسیار استفاده کرده‌اید اما به‌دلیل ندانستن ‌این نوع ارتباط آن را کامل درک نکرده‌اید‌.

این ارتباط را ما هنگام پروگرام (آپلود) کردن برد آردوینو و همچنین نمایش داده‌ها در سریال مانیتور استفاده کرده‌ایم. اگر دقت کرده باشید برد آردوینو به وسیله یک کابل به کامپیوتر متصل می‌شود این کابل از درون سخت‌افزار به پایه‌های tx,rx آردوینو متصل می‌شود و زمانی که ما برنامه را پروگرام ‌می‌کنیم، اطلاعات از طریق ‌این دو پایه به آردوینو ارسال ‌می‌‌شوند و هنگامی که نمایشگر سریال (serial monitor) خود را فعال ‌می‌کنیم و مقدار یک متغیر را در سریال مانیتور نشان ‌می‌دهیم داده‌ها از طریق همین دو پایه به رایانه منتقل می‌شوند و به همین دلیل ‌می‌توانیم مقدار داده‌ها را در سریال مانیتور رایانه خود مشاهده کنیم.

پس چون ‌این دو پایه دائماً درگیر بودند، قطعه‌ای به ‌این دوپایه وصل نمی‌کردیم، زیرا با وصل کردن یک قطعه به ‌این دو پایه ‌این پورت مشغول ‌می‌شد و دیگر نمی‌توانستیم اطلاعاتی روی برد آردوینو خود پروگرام کنیم.  

درآموزش‌های آردوینو تذکر داده شده بود که به‌این دو پایه هیچ قطعه‌ای وصل نکنید. حال وقت آن رسیده که به توضیح ‌این دو پایه بپردازیم‌. دو پایه rx , tx پایه‌های ارتباط سریال هستند. اما سوالی که مطرح می‌شود این است که ارتباط سریال چیست؟ ما در آردوینو مکرراً از ‌این نوع ارتباط استفاده ‌می‌کنیم. حتی خود شما نیز از‌ این ارتباط بسیار استفاده کرده‌اید اما به‌دلیل ندانستن ‌این نوع ارتباط آن را کامل درک نکرده‌اید‌.

این ارتباط را ما هنگام پروگرام (آپلود) کردن برد آردوینو و همچنین نمایش داده‌ها در سریال مانیتور استفاده کرده‌ایم. اگر دقت کرده باشید برد آردوینو به وسیله یک کابل به کامپیوتر متصل می‌شود این کابل از درون سخت‌افزار به پایه‌های tx,rx آردوینو متصل می‌شود و زمانی که ما برنامه را پروگرام ‌می‌کنیم، اطلاعات از طریق ‌این دو پایه به آردوینو ارسال ‌می‌‌شوند و هنگامی که نمایشگر سریال (serial monitor) خود را فعال ‌می‌کنیم و مقدار یک متغیر را در سریال مانیتور نشان ‌می‌دهیم داده‌ها از طریق همین دو پایه به رایانه منتقل می‌شوند و به همین دلیل ‌می‌توانیم مقدار داده‌ها را در سریال مانیتور رایانه خود مشاهده کنیم.

پس چون ‌این دو پایه دائماً درگیر بودند، قطعه‌ای به ‌این دوپایه وصل نمی‌کردیم، زیرا با وصل کردن یک قطعه به ‌این دو پایه ‌این پورت مشغول ‌می‌شد و دیگر نمی‌توانستیم اطلاعاتی روی برد آردوینو خود پروگرام کنیم.  

Serial rx tx

 

Tx: فرستنده

Rx: گیرنده

دقت کنید که در شکل بالا فرستنده یک دستگاه به گیرنده دستگاه دیگر وصل می‌شود و بالعکس‌. به ارتباط بالا ارتباط سریال از نوع UART ( Universal Asynchronous Reseiver Transmitter ) گفته ‌می‌شود‌.

در ماژول بلوتوث خود از ‌این نوع ارتباط استفاده ‌می‌کنیم. یکی از دو دستگاهی که با ‌این ارتباط به یکدیگر متصل ‌می‌شوند معمولا به عنوان master (فرمانده) و دیگری به عنوان slave (فرمانبر) استفاده ‌می‌شوند.

MASTER: می‌تواند دستگاه‌های بلوتوث اطراف را جست‌وجو کرده و با دستگاهی خاص‌ ارتباط برقرار کند.

SLAVE: فقط مورد جست‌وجو قرار گرفته و به درخواست‌های ارتباط پاسخ مثبت یا منفی می‌دهد.

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

این داده‌ها با یک سرعت مشخص منتقل ‌می‌شوند. که در آردوینو ‌این سرعت را به صورت زیر تعریف می‌کنیم:

Serial.begin(baudrate); ‌این کد که در void setup آردوینو نوشته می‌شد سرعت تبادل اطلاعات را به ما نشان می‌دهد که معمولا از سرعت 9600 استفاده می‌کنیم.

در آردوینو UNO  تنها دو پایه برای tx، rx وجود دارد، ممکن است این سوال  برای‌تان مطرح شود که اگر ‌این دو پایه برای ارتباط سریال کامپیوتر و پروگرام کردن استفاده می‌شوند پس بلوتوث خود را به کدام پایه‌ها متصل کنیم؟

2 روش برای این کار وجود دارد:

·         روش اول به‌این صورت است که شما ابتدا کد مورد نظر را بر روی برد آردوینو آپلود کنید سپس بلوتوث را به همان پایه‌های 0 و 1 آردوینو متصل کنید، دقت داشته باشید اگر ابتدا بلوتوث را به آردوینو متصل کنید چون پایه‌های tx, rx اشغال هستند کد آپلود نمی‌شود‌.

مشکل روش اول ‌این است که هر بار برای آپلود کد ما باید ابتدا بلوتوث را جدا کرده سپس کد را آپلود کنیم. این مشکل در روش دوم حل می‌شود.

·         روش دوم استفاده از سریال مجازی است. در‌این روش ما با استفاده از کتابخانه SoftwareSerial دو پایه دیگر ( به عنوان مثال پایه‌های 2 و 3) آردوینو را تبدیل به rx، tx می‌کنیم و بلوتوث خود را به ‌این دوپایه متصل می‌کنیم.

 

در ابتدا ما باید به کتابخانه SoftwareSerial مراجعه کنیم‌.

SoftwareSerial

 

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

که در ‌اینجا به توضیح مختصر آن می‌پردازیم:

 

در ابتدا برای اضافه کردن فایل کتابخانه باید آن کتابخانه را از سایت دانلود کنیم‌. با دانلود کردن آن یک فایل زیپ(zip) به ما داده می‌شود. در آردوینو خود بر روی گزینه scketch/include library/add zip library کلیک کرده و پس‌از آن فایلی که دانلود کرده بودیم را انتخاب می‌کنیم و تایید را می‌زنیم.

add zip library

و اما راه‌اندازی ماژول بلوتوث به وسیله ارتباط سریال مجازی(SoftwareSerial):

در ‌این جلسه یاد ‌می‌آموزید که تنظیمات ماژول بلوتوث را چگونه انجام دهید. ماژول بلوتوث دو حالت کاری دارد:

1.     حالت تنظیمات (AT COMMAND)

2.     حالت اجرای دستورات

 

در این مرحله باید حالت AT command فعال کنیم و تنظیمات آن را انجام دهیم. در ابتدا پایه‌های Bluetooth و آردوینو را مطابق زیر به یکدیگر متصل خواهیم کرد:

arduino bluetooth pins

همین که ماژول بلوتوث را به آردوینو متصل کنیم ماژول بلوتوث HC05 روشن می‌شود و ال‌ای‌دی روی ماژول با سرعت بالا شروع به چشمک زدن می‌کند. ‌این ال‌ای‌دی نشان‌دهنده حالت کاری ماژول است به‌این صورت که اگر ال‌ای‌دی با سرعت بالا چشمک بزند به معنی قرار گرفتن در حالت ارسال و دریافت داده است و منتظر است یک دستگاه به آن متصل شود‌.

برای‌اینکه حالت کاری ماژول را به حالت تنظیمات یا AT COMMAND تبدیل کنیم باید تغذیه ماژول(VCC یا GND ) را از آردوینو جدا کرده و دکمه‌ای که روی ماژول قرار دارد را فشار داده و دوباره تغذیه ماژول را هم زمان با‌ اینکه دکمه را فشار داده‌ایم به آردوینو متصل کنیم‌.

پس‌از انجام مراحل بالا به ال‌ای‌دی توجه کنید‌، ‌می‌بینید که سرعت چشمک زدن ال‌ای‌دی کم شده. این موضوع نشان‌دهنده‌ آن است که وارد حالت AT COMMAND شده‌ایم. ( یا ‌اینکه می‌توانیم به جای در آوردن منبع تغذیه کابلی که به رایانه وصل شده را جدا کنیم و دست خود ار روی دکمه ماژول قرار داده و دوباره کابل را به رایانه متصل کنیم. )

 

حال که وارد حالت AT COMMAND شده‌ایم باید تنظیمات را روی برد اعمال کنیم. اما چگونه؟ به سادگی، ابتدا باید برای انتقال اطلاعات و تنظیمات AT COMMAND پایه EN ماژول را به 3.3 ولت آردوینو متصل کنیم. در شکل زیر سیم‌بندی حالت AT COMMAND  را مشاهده می‌کنید.

shematic bluetooth arduino at command

 

سپس کد زیر را روی آن آپلود کنید:

arduino bluetooth code

 

پس‌از ‌اینکه کد آپلود شد وارد سریال مانیتور شده و طبق  مراحل زیر عمل می‌کنیم:

AT COMMAND

 

۱) baudrate تعریف شده برای حالت AT COMMAND ماژول بلوتوث HC 05 برابر است با 38400

۲)در حالت تنظیمات AT COMMAND باید ‌این گزینه را انتخاب کنید‌.

۳)برای ‌اینکه بدانید همه مراحل را درست انجام داده‌اید با حروف بزرگ AT را در‌اینجا نوشته و منتظر تایید باشید‌.

۴)اگر بلافاصله پس از نوشتن AT روی صفحه کلید خود ENTER را بزنید به شما OK می‌دهد که به معنی درست بودن عملیات است و اکنون شما می‌توانید دستورات خود را در قسمت مشخص شده در بالا (3) وارد کنید و ENTER یا SEND را بزنید تا  دستورات اجرا شوند.

خب حالا که تنظیمات مربوط به حالت AT COMMAND انجام دادید نوبت به آن رسیده که تنظیمات را تغییر دهیم تا  به‌طور کامل برای ما قابل درک شود که ‌این تنظیمات چه‌مواردی هستند و چگونه باید آن‌ها را تغییر داد.

عملکرد دستور

مقدار برگردانده شده

AT COMMAND

چک کردن ارتباط

ok

AT

نشان‌دادن اسم ماژول

+NAME:HC-05

AT+NAME?

تغییر اسم ماژول به SAJJAD

ok

AT+NAME=SAJJAD

نشان‌دادن BAUD RATE

+UART:9600,0,0

AT+UART?

تغییرBAUD RATE به 38400

ok

AT+UART=38400,0,0

حالت SLAVE

حالت MASTER

حالتSLAVE LOOP

+ROLE:0

+ROLE:1

+ROLE:2

AT+ROLE?

انتخاب حالت SLAVE

ok

AT+ROLE=0

نشان‌دادن آدرس ماژول

ADDR:21:13:2C026

+

AT+ADDR?

نشان‌دهنده ورژن ماژول

VERSION:3.0-20170601

AT+VERSION?

نشان‌دهنده رمز ماژول

+PIN:"1234"

AT+PSWD?

بازیابی تنظیمات کارخانه

ok

AT+ORGL

تغییر رمز به 123456

ok

AT+PSWD=”123456”

خروج از حالت AT COMMAND

 

AT+RESET

0:حالت دریافت و ارسال از یک ادرس مشخص

1:حالت ارسال و دریافت از هر ادرسی

2:حالت SLAVE LOOP

 

+CMODE:0

 

+CMODE:1

 

 

 

+CMODE:2

AT+CMODE?

زمانی از‌ این گزینه استفاده می‌کنیم  که بخواهیم آدرس بلوتوث SLAVE را بر روی بلوتوث MASTER ثابت کنیم تا فقط به همان SLAVE متصل شود‌. (آدرس SLAVE در‌این MASTER نوشته می‌شود.)

برای MASTER نوشته می‌شود که حالت آن هم (CMODE=0) باشد

+BIND:0:0:0

AT+BIND?

 

 

AT COMMAND‌های بسیاری برای HC 05 وجود دارد که هر کدام کار خاصی را انجام می‌دهند ما در‌اینجا تنها به معرفی چند مورد اکتفا کردیم. برای آشنایی بیشتر با سایر AT COMMAND‌ها کافی است که درگوگل سرچ کنیم و آن‌ها را مطالعه کنیم‌.

 

 

در بالا آموختید که چگونه دستورات AT COMMAND را برای ماژول بلوتوث  hc05 خود فعال کنید و با نوشتن دستورات مختلف ‌توانستید حالات ماژول خود را تغییر دهید. برای مثال با نوشتن دستور   AT+NAME=SAJJAD    اسم ماژول به SAJJAD تغییر می‌کند. با نوشتن دستور     AT+UART    می‌توانیم مقدار BAUDRATE برای ماژول بلوتوث را مشاهده کنیم.

نکته: دقت کنید که برای نوشتن AT COMMAND حتما ما باید در کد خود BAUDRATE را 38400 قرار دهیم و مقدار BAUDRATE ی که در AT+UART دریافت می‌کنیم برای ارسال و دریافت اطلاعات از طریق گوشی هوشمند شماست. در ادامه بیشتر با این موضوع آشنا خواهید شد.

 

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

گام اول: همیشه اول بار این چند مورد را بررسی کنید :    

·         ابتدا بررسی کنید که ماژول باید MASTER باشد یا SLAVE؟

·         نام ماژول و رمزش چیست؟

·         BAUDRATE این ماژول چقدر است؟

·         می‌خواهیم این ماژول تنها به یک دستگاه مشخص متصل شود یا به هر دستگاهی؟

همه موارد بالا در قسمت AT COMMAND باید انجام شوند.

گام دوم : انجام تنظیمات روی گوشی هوشمند خود

گام سوم: سیم‌بندی و اجرای پروژه

 

به عنوان مثال من قصد دارم با استفاده از یک کلید در گوشی موبایل خود یک ال‌ای‌دی را خاموش و روشن کنم.

در ابتدا با توجه به مطالب گفته شده در بالا تنظیمات AT COMMAND را فعال خواهم کرد. سپس در بخش نوشتن تنظیمات عبارات زیر را برای دستورات خود اعمال خواهم کرد:

·         چک کردن اتصال:        AT

·         تغییر اسم ماژول به HC05:      AT+NAME=HC05

·         مشاهده BAUDRATE ماژول :   AT+UART

·         تغییر BAUDRATE به 38400:        AT+UART=38400,0,0

·         مشاهده رمز ماژول:       AT+PSWD

·         چون می‌خواهیم دستگاه دیگری به ماژول وصل شود (گوشی هوشمند به بلوتوث وصل شود) باید حالت آن را SLAVE  قرار دهیم که مورد جست‌وجو قرار بگیرد:      AT+ROLE=0

·         دقت کنید که تنظیمات اولیه ماژول بلوتوث به گونه‌ای است که به صورت خودکار در حالت SLAVE قراردارد.

پس‌از آن که تنظیمات بالا را اعمال کردیم ماژول را از حالت AT COMMAND درآورده و در حالت آماده برای اتصال به گوشی هوشمند قرار می‌دهیم.

SHEMATIC arduino hc05

می‌خواهیم با استفاده از گوشی هوشمند ال‌ای‌دی شماره 13 که بر روی برد آردوینو تعبیه شده‌است را کنترل کنیم. کد زیر را نوشته و روی برد آردوینو آپلود می‌کنیم:

code

 

دلیل نوشتن تمام خط های کد رو باید بفهمیم. با استفاده از این کد ما به ماژول بلوتوث دستور داده‌ایم که اگر به تلفن هوشمند متصل شد و مشاهده کرد که کاراکتری برای ماژول ارسال شد آن کاراکتر را بخواند و اگر آن کاراکتر 1 بود ال‌ای‌دی 13 را روشن و اگر 0 بود ال‌ای‌دی 13  را خاموش کند.

با استفاده از گوشی هوشمند خود نرم‌افزار ARDUINO BLUETOOTH CONTROLLER را از گوگل پلی دانلود کنید:

arduino bluetooth controller

arduino bluetooth controller

arduino bluetooth controller 3

طبق روند بالا می‌توانید با استفاده از گوشی خود به بلوتوث HC05 متصل شوید و ال‌ای‌دی را روشن و خاموش کنید.

امیدوارم مطالب گفته‌شده برای شما مفید باشد.

کپی شد!

ارتباط با ما

اصفهان ، میدان استقلال ، خیابان آزادگان ، دانشگاه صنعتی اصفهان
info@mehsa.ir