ارتباط بیسیم دو برد آردوینو از طریق بلوتوث HC-05

داشتن دو یا چند برد آردوینو که بتوانند بهصورت بیسیم با یکدیگر ارتباط برقرار کنند، دنیایی از امکانات را در اختیار شما قرار میدهد؛ از جمله نظارت از راه دور بر دادههای حسگرها، کنترل رباتها، اجرای سیستمهای هوشمند خانگی و موارد مشابه دیگر.
در این آموزش، مرحلهبهمرحله یاد میگیرید چگونه دو برد آردوینو را با استفاده از ماژولهای بلوتوث HC-05 بهصورت بیسیم به هم متصل کنید و بین آنها تبادل داده انجام دهید.
مروری بر پروژه
برای برقراری ارتباط بیسیم بین دو برد آردوینو، باید یکی از ماژول های HC-05 را به عنوان Master (اصلی) و دیگری را به عنوان Slave (تابع) پیکربندی کنیم و سپس آنها را با یکدیگر جفت کنیم. این روش بهعنوان پیکربندی Master-Slave شناخته میشود و سادهترین روش برای ایجاد ارتباط بیسیم میان دو دستگاه است. در این حالت، دستگاه Master وظیفه آغاز ارتباط و جستوجوی دستگاههای دیگر را بر عهده دارد، در حالیکه دستگاه Slave منتظر دریافت درخواست اتصال از سمت Master میماند. پس از برقراری اتصال، هر دو دستگاه میتوانند بهصورت دوطرفه دادهها را ارسال و دریافت کنند.
برای پیکربندی ماژولهای HC-05، لازم است آنها را به رایانه متصل کرده و از یک نرمافزار ترمینال سریال (مانند Serial Monitor در Arduino IDE یا PuTTY) برای ارسال دستورات AT استفاده کنیم.
گام اول: اتصال ماژول HC-05 به کامپیوتر
در ابتدا باید ماژول HC-05 را به رایانه متصل کنیم. برای این کار میتوانید از یکی از دو روش زیر استفاده کنید:
- استفاده از مبدل USB به TTL
- یا استفاده از برد آردوینو بهعنوان واسطه بین رایانه و ماژول HC-05
اتصال ماژول HC-05 به آردوینو بسیار ساده است. کافی است برق را وصل کرده و پایههای سریال Rx و Tx را به هم متصل کنید.
- پایه TXD ماژول HC-05 به پایه D1 آردوینو
- پایه RXD ماژول HC-05 به پایه D0 آردوینو
- پایه GND به GND
- پایه VCC به 5V
نکته مهم این است که پایه Rx در ماژول HC-05 تحمل ولتاژ 5 ولت را ندارد. بنابراین اگر از میکروکنترلر 5 ولتی مانند Arduino UNO استفاده میکنید، باید سیگنال Tx خروجی از آردوینو را به 3.3 ولت کاهش دهید. برای این کار میتوانید از یک تقسیم ولتاژ مقاومتی استفاده کنید؛ به این صورت که:
- یک مقاومت 1KΩ بین پایه Rx ماژول HC-05 و پایه D0 آردوینو قرار دهید.
- یک مقاومت 2KΩ بین پایه Rx ماژول HC-05 و زمین (GND) وصل کنید.
بهطور خلاصه اتصالات به شکل زیر است:
ماژول HC-05 | آردوینو | توضیحات |
---|---|---|
VCC | 5V | – |
GND | GND | – |
TX | D1 | – |
RX | D0 | در صورت استفاده از MCU با ولتاژ 5V، از مبدل سطح ولتاژ استفاده شود |
در تصویر زیر نحوه اتصال ماژول HC-05 به آردوینو Uno را مشاهده میکنید.
اگر از این روش استفاده میکنید، مطمئن شوید که هیچ برنامهای روی آردوینو آپلود نشده باشد (یا یک اسکچ خالی آپلود شده باشد).
گام دوم: پیکربندی ماژولهای HC-05
اکنون باید یکی از ماژولها را به عنوان Master و دیگری را به عنوان Slave تنظیم کنیم.
تنظیم ماژول Slave
دکمه روی ماژول HC-05 اول را نگه دارید و در همان حال برق ماژول را وصل کنید. با این کار ماژول وارد حالت AT Mode میشود، یعنی آماده دریافت دستورات AT است. در این حالت LED روی ماژول با سرعت آهسته و منظم چشمک میزند.
وقتی ماژول را به رایانه وصل کنید، به عنوان یک پورت COM شناسایی میشود. از طریق Device Manager در بخش Ports (COM & LPT) میتوانید شماره پورت را ببینید. سپس در Arduino IDE از مسیر Tools > Port همان پورت را انتخاب کنید.
اکنون از مسیر Tools > Serial Monitor وارد ترمینال سریال شوید و تنظیمات زیر را انجام دهید:
- نرخ ارتباط (baud rate) را روی 38400 قرار دهید.
- گزینه Both NL & CR را فعال کنید تا در انتهای هر دستور، خط جدید و بازگشت carriage اضافه شود.
در قسمت بالای Serial Monitor بنویسید:
AT
و روی دکمه Send کلیک کنید. اگر پاسخ OK دریافت کردید، یعنی ارتباط با موفقیت برقرار شده است.
سپس دستور زیر را بنویسید تا نام ماژول تغییر کند:
AT+NAME=Slave
پاسخ OK نشان میدهد که نام ماژول با موفقیت به “Slave” تغییر کرده است.
اکنون دستور زیر را وارد کنید تا نقش ماژول مشخص شود:
AT+ROLE=0
با این دستور ماژول به حالت Slave تنظیم میشود. ممکن است پس از اجرای این دستور، ماژول راهاندازی مجدد شود و از حالت AT خارج گردد؛ در این صورت باید مجدداً آن را به حالت AT ببرید.
در نهایت دستور زیر را ارسال کنید تا آدرس ماژول نمایش داده شود:
AT+ADDR?
پاسخ بهصورت هگزادسیمال خواهد بود، مانند:
1234:56:abcdef
این آدرس را یادداشت کنید، زیرا هنگام تنظیم ماژول Master به آن نیاز دارید.
در پایان، اتصال ماژول HC-05 را قطع کنید.
تنظیم ماژول Master
دکمه روی ماژول دوم HC-05 را نگه دارید و همزمان برق آن را وصل کنید تا ماژول وارد حالت AT Mode شود. در این حالت، LED روی ماژول با سرعت آهسته و منظم چشمک میزند که نشان میدهد ماژول آماده دریافت دستورات AT است.
زمانی که ماژول را به رایانه متصل کنید، بهصورت خودکار به عنوان یک پورت COM شناسایی میشود. با باز کردن Device Manager و مراجعه به بخش Ports (COM & LPT)، پورت جدید را مشاهده خواهید کرد. در نرمافزار Arduino IDE به مسیر Tools > Port بروید و همان پورت را انتخاب کنید.
اکنون از مسیر Tools > Serial Monitor پنجره Serial Monitor را باز کنید و تنظیمات زیر را انجام دهید:
- نرخ ارتباط (Baud Rate) را روی 38400 قرار دهید.
- گزینه Both NL & CR را فعال کنید تا در انتهای هر دستور، کاراکترهای خط جدید و بازگشت carriage ارسال شوند.
در قسمت بالای Serial Monitor بنویسید:
AT
و روی Send کلیک کنید. اگر پاسخ OK دریافت کردید، یعنی ارتباط برقرار شده است.
سپس دستور زیر را وارد کنید تا نام ماژول تغییر کند:
AT+NAME=Master
در پاسخ باید عبارت OK دریافت کنید که نشان میدهد نام ماژول با موفقیت به Master تغییر یافته است.
اکنون با دستور زیر نقش ماژول را مشخص کنید:
AT+ROLE=1
این دستور ماژول را به حالت Master تنظیم میکند. ممکن است پس از اجرای این دستور، ماژول بهصورت خودکار ریست شده و از حالت AT خارج شود؛ در این صورت مجدداً آن را به حالت AT برگردانید.
سپس دستور زیر را ارسال کنید:
AT+CMODE=0
این دستور باعث میشود ماژول فقط به دستگاهی با آدرس مشخص متصل شود. پاسخ OK به معنی اجرای موفق دستور است.
در ادامه، برای جفت کردن ماژول Master با ماژول Slave، دستور زیر را بنویسید (بهجای آدرس نمونه، آدرسی را که در مرحله قبل از ماژول Slave یادداشت کردید وارد کنید):
AT+BIND=1234,56,abcdef
توجه کنید که در این دستور باید از کاما (,) استفاده کنید، نه دونقطه (:). در صورت موفقیت، ماژول پاسخ OK را برمیگرداند. سپس میتوانید ماژول را از رایانه جدا کنید.
در این مرحله، ماژولهای HC-05 شما با موفقیت بهعنوان Master و Slave پیکربندی شدهاند. پس از روشن کردن مجدد هر دو ماژول، تنها چند ثانیه طول میکشد تا اتصال بین آنها برقرار شود. با برقراری ارتباط، الگوی چشمک زدن LED هر دو ماژول تغییر میکند و بهصورت دو چشمک سریع و یک مکث کوتاه در میآید که نشاندهنده اتصال موفق است.
گام سوم: اتصال سختافزاری
اکنون آماده هستیم تا یک نمونه عملی برای این آموزش پیادهسازی کنیم.
در این پروژه ساده، هدف این است که مقدار پتانسیومتر در سمت Master برای کنترل سروو موتور در سمت Slave استفاده شود. همچنین، یک دکمه فشاری در سمت Slave قرار دارد که روشن و خاموش شدن LED در سمت Master را کنترل میکند.
اتصالات آردوینوی Master
- پایه VCC ماژول HC-05 را به 5V آردوینو متصل کنید.
- پایه GND ماژول را به GND آردوینو وصل کنید.
- پایه TXD ماژول را به پایه RX (Digital Pin 0) آردوینو وصل کنید.
- پایه RXD ماژول را از طریق تقسیم ولتاژ مقاومتی به پایه TX (Digital Pin 1) آردوینو متصل کنید.
- برای پتانسیومتر، یک پایه کناری را به 5V، پایه دیگر را به GND و پایه وسط (wiper) را به A0 متصل کنید.
- برای LED، پایه مثبت (پای بلندتر) را از طریق مقاومت 220Ω به پایه D9 آردوینو و پایه منفی را به GND متصل کنید.
اتصالات آردوینوی Slave
- پایه VCC ماژول HC-05 را به 5V آردوینو وصل کنید.
- پایه GND را به GND متصل کنید.
- پایه TXD ماژول را به پایه RX (Digital Pin 0) آردوینو وصل کنید.
- پایه RXD را از طریق تقسیم ولتاژ مقاومتی به پایه TX (Digital Pin 1) متصل کنید.
- برای سروو موتور، سیم قرمز (Power) را به 5V، سیم قهوهای یا مشکی (Ground) را به GND و سیم زرد یا نارنجی (Signal) را به پایه PWM D9 متصل کنید.
- برای دکمه فشاری (Push Button)، یک پایه را به پایه دیجیتال D8 وصل کنید. همان پایه را از طریق مقاومت 10KΩ Pull-down به GND متصل کنید و پایه دیگر دکمه را به 5V وصل نمایید.
به این ترتیب، ارتباط سختافزاری کامل شده و بستر لازم برای تبادل داده بین دو برد آردوینو از طریق بلوتوث فراهم میشود.
گام چهارم: آپلود کدها
در این مرحله باید دو کد مجزا را روی بردهای آردوینوی Master و Slave آپلود کنید. هر برد برنامه مخصوص به خودش را دارد تا بتوانند از طریق بلوتوث با یکدیگر ارتباط برقرار کنند.
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را توضیح میدهیم.
توضیح کدها
در کد آردوینوی Master، پایه دیجیتال D9 برای کنترل LED تعریف شده و پتانسیومتر به پایه A0 متصل است. پس از راهاندازی، برنامه وضعیت دریافتی از سریال (که همان وضعیت دکمه در برد Slave است) را بررسی میکند. اگر مقدار دریافتی ‘1’ باشد، LED روشن میشود و اگر ‘0’ باشد، خاموش میگردد. همزمان مقدار پتانسیومتر خوانده شده، از بازهی 0 تا 1023 به بازهی 0 تا 255 نگاشت میشود و از طریق بلوتوث به برد Slave ارسال میشود تا زاویهی سروو موتور را تنظیم کند.
در کد آردوینوی Slave، کتابخانه Servo فراخوانی شده و پایه دیجیتال D8 برای ورودی دکمه تعریف میشود. سروو موتور به پایه D9 متصل است. در حلقه اصلی برنامه، ابتدا بررسی میشود که آیا دادهای از طریق سریال دریافت شده یا نه. داده دریافتی مستقیماً زاویه سروو موتور را تعیین میکند. سپس وضعیت دکمه بررسی میشود؛ اگر فشرده شده باشد، مقدار ‘1’ برای روشن شدن LED به برد Master ارسال میشود و در غیر این صورت ‘0’ ارسال خواهد شد.
گام پنجم: آزمایش عملکرد
اکنون نوبت تست پروژه است.
- پتانسیومتر را در آردوینوی Master بچرخانید. با تغییر موقعیت آن، مشاهده میکنید که سروو موتور در آردوینوی Slave متناسب با چرخش پتانسیومتر حرکت میکند. مقدار چرخش پتانسیومتر مستقیماً زاویهی سروو را تعیین میکند.
- دکمه را در آردوینوی Slave فشار دهید. با فشردن دکمه، LED روی آردوینوی Master روشن میشود و با رها کردن آن، LED خاموش خواهد شد.
به این ترتیب، ارتباط دوطرفه بین دو برد آردوینو از طریق بلوتوث برقرار شده و دادهها با موفقیت بین آنها تبادل میشود.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود