hc05 یک ماژول بلوتوث با امکانات فراوان است که میتواند در دو مد Master و Slave ، پورت سریال را بهصورت بیسیم در اختیار شما بگذارد. ازاینرو میتوانید از این ماژول در طراحی خانههای هوشمند، هدستهای بیسیم و … استفاده کنید. با استفاده از ماژول HC05 میتوان دیتا را در فواصل معین (10 الی 33 متر) با استفاده از پروتکل بلوتوث دریافت و ارسال کرد. مزیتی که ماژول بلوتوث دارد این است که میتواند دیتا را از آردوینو، میکروکنترلر، تلفن همراه و…… بهصورت سریال به ماژول انتقال داد و سپس خود ماژول دیتا را از طریق پروتکل بلوتوث ارسال خواهد کرد. همچنین میتواند دیتا را از طریق پروتکل بلوتوث دریافت کند و سپس آنها را به سریال تبدیل کرده و به کاربر تحویل دهد. ماژولهای سری HC به دو صورت با پسوند اعداد زوج و فرد وارد بازار میشوند. ماژولها با پسوند اعداد زوج فقط میتوانند در مد Master یا Slave باشند. در این مقاله از جم ترونیک با نحوه اتصال این ماژول بلوتوث به برد آردوینو و استفاده از آن میپردازیم.
قطعههای موردنیاز
- میکروکنترلر Arduino UNO
- ماژول بلوتوث hc05
- سیم جامپر نری به مادگی
آموزش نحوه اتصال ماژول hc05 و برد آردوینو
نحوه اتصال برای دریافت اطلاعات از ماژول و مشاهده بر روی سریال مانیتور
همانطور که گفته شد ماژول HC05 از طریق ارتباط سریال با آردوینو ارتباط برقرار میکند و Arduino Uno دارای یک پورت سریال است که پین شماره 0 و 1 به ترتیب پینهای Rx و Tx آن هستند. در واقع این پورت سریال سختافزاری است. به این دلیل که میخواهیم از پورت سریال سختافزاری بهعنوان رابط دیتا میان آردوینو و کامپیوتر استفاده کنیم، دیگر نمیتوانیم ماژول بلوتوث را به پین شماره 0 و 1 متصل کنیم، برای این منظور از باید روی دو پین از پینهای آردوینو، پورت سریال نرمافزاری اضافه کنیم (به این معنی که از دو پین دیجیتال بهعنوان پورت سریال استفاده کنیم). برای ایجاد پورت سریال نرمافزاری از کتابخانه softwareSerial استفاده میشود. پس ما در برنامهنویسی دو پین شماره 2 و 3 را با استفاده از کتابخانه softwareSerial به پورت سریال نرمافزاری تبدیل میکنیم.
همانطور که در شکل بعد مشاهده میکنید ماژول بلوتوث HC05 دارای 6 پایه به شرح زیر است:
- VCC : تغذیه ماژول در محدوده 6-3.6 ولت است. با این که سطح منطقی پایههای ارتباط سریال 3.3v است. اما به دلیل وجود رگولاتور در ماژول، آن را به 5v آردوینو وصل میکنیم.
- GND : زمین
- STATE: تعیین وضعیت اتصال
- EN : تنظیم جهت ورود به تنظیمات AT Command
- RX : دریافت اطلاعات از طریق پروتکل سریال
- TX : ارسال اطلاعات از طریق پروتکل سریال
در شکل بعد نحوه اتصال ماژول را به آردوینو مشاهده میکنید که پین TXD به پین 2، پین RXD به پین 3، پین VCC به 5v و پین GND ماژول به GND آردوینو متصل میشود. در این پروژه از پینهای EN و State استفاده نمیکنیم.
۲. آموزش نحوه اتصال برای روشن خاموشکردن یک LED
در این حالت چون با پورت سریال سختافزاری کاری نداریم، مطابق شکل زیر بهجای پینهای 2 و 3، آن پین TXD ماژول را به RXD آردوینو و پین RXD ماژول را به TXD آردوینو (به ترتیب پینهای 0 و 1) متصل میکنیم.
۳. آموزش اتصال آردوینو به کامپیوتر
ابتدا آردوینو را بهوسیله پورت USB به کامپیوتر متصل کنید .اگر مراحل کار را بهدرستی انجام داده باشید باید LED موجود بر روی برد ماژول بلوتوث HC05 بهصورت سریع چشمک بزند و به این معنی است که ماژول آماده برقراری با یک دیوایس است.
۴. برنامه روشن و خاموشکردن یک LED با استفاده از ماژول بلوتوث
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import processing.serial.*; Serial myPort; String ledStatus="LED: OFF"; void setup(){ size(450, 500); myPort = new Serial(this, "COM5", 38400); // Starts the serial communication myPort.bufferUntil('\n'); // Defines up to which character the data from the serial port will be read. The character '\n' or 'New Line' } void serialEvent (Serial myPort){ // Checks for available data in the Serial Port ledStatus = myPort.readStringUntil('\n'); //Reads the data sent from the Arduino (the String "LED: OFF/ON) and it puts into the "ledStatus" variable } void draw(){ background(237, 240, 241); fill(20, 160, 133); // Green Color stroke(33); strokeWeight(1); rect(50, 100, 150, 50, 10); // Turn ON Button rect(250, 100, 150, 50, 10); // Turn OFF Button fill(255); textSize(32); text("Turn ON",60, 135); text("Turn OFF", 255, 135); textSize(24); fill(33); text("Status:", 180, 200); textSize(30); textSize(16); text("Program made by Dejan Nedelkovski,\n www.HowToMechatronics.com", 80, 320); text(ledStatus, 155, 240); // Prints the string comming from the Arduino // If the button "Turn ON" is pressed if(mousePressed && mouseX>50 && mouseX<200 && mouseY>100 && mouseY<150){ myPort.write('1'); // Sends the character '1' and that will turn on the LED // Highlighs the buttons in red color when pressed stroke(255,0,0); strokeWeight(2); noFill(); rect(50, 100, 150, 50, 10); } // If the button "Turn OFF" is pressed if(mousePressed && mouseX>250 && mouseX<400 && mouseY>100 && mouseY<150){ myPort.write('0'); // Sends the character '0' and that will turn on the LED stroke(255,0,0); strokeWeight(2); noFill(); rect(250, 100, 150, 50, 10); } } |
توضیح روند کد: ابتدا باید پینی را که LED ما به آن وصل میشود (پین 13) و متغیری که در آن دادههای حاصل از تلفن هوشمند را ذخیره خواهیم کرد، تعیین کنیم. در بخش راهاندازی باید پین LED را بهعنوان خروجی تعریف کنیم و آن را در low تنظیم کنید. همانطور که قبلاً نیز اشاره شد، از ارتباط سریال استفاده خواهیم کرد؛ بنابراین، باید ارتباط سریال را با نرخ 38400 baud شروع کنیم که نرخ پیشفرض baud ماژول بلوتوث است. در بخش حلقه با تابع Serial.available() بررسی خواهیم کرد که آیا اطلاعات در دسترس پورت سریال وجود دارد که باید خوانده شود. این بدان معنی است که وقتی دادهها را به ماژول بلوتوث میفرستیم، این عبارات صحیح خواهند بود؛ بنابراین، با استفاده از تابع Serial.read() آن دادهها را میخوانیم و آن را در متغیر state قرار میدهیم؛ بنابراین، اگر آردوینو کاراکتر ‘0’ را دریافت کند، LED را خاموش میکند و با استفاده از تابع Serial.println()، عبارت “LED:OFF” را به تلفن هوشمند، از طریق پورت سریال ارسال میکند. علاوه بر این، متغیر state را به 0 ریست میکنیم تا دو خط فوق، فقط یکبار اجرا شوند. در اینجا توجه داشته باشید که متغیر state عدد صحیح است؛ بنابراین، وقتی کاراکتر ‘0’ را از یک لپتاپ یا تلفن هوشمند دریافت میکنیم، مقدار واقعی متغیر state عدد صحیح 48 است که مطابق با کاراکتر ‘0’ باتوجهبه جدول ASCII است. به همین دلیل، در عبارت “if”متغیر state را با کاراکتر ‘0’ مقایسه میکنیم. از طرف دیگر، اگر کاراکتر دریافتی ‘1’ باشد، LED روشن میشود و عبارت “LED:ON” ارسال میکند.
۵. کنترل آردوینو با استفاده از لپتاپ یا رایانه شخصی از طریق ارتباط بلوتوث
ابتدا باید لپتاپ خود را به ماژول بلوتوث HC-05 جفت کنیم و میتوانیم آن را از طریق تنظیمات بلوتوث لپتاپ انجام دهیم. لپتاپ، ماژول HC-05 را پیدا میکند و با استفاده از رمز عبور 1234، دیوایسها را جفت میکنیم.
هنگامی که دیوایسها را در دیوایس منیجر لپتاپ جفت میکنیم، در زیرشاخه Ports (COM & LPT)، دو ورودی جدید با نام”Standard Serial over Bluetooth link” ظاهر میشوند. از اینجا، میتوانیم شماره پورت سری COM را که از طریق آن دیوایسها ارتباط برقرار میکنند، مشاهده کنیم.
LED را روشن و خاموش میکنیم و عبارتی را به لپتاپ ارسال میکنیم.
۶. طراحی یک محیط کنترل آردوینو با استفاده از ماژول بلوتوث
ابتدا کد زیر را برای ایجاد یک محیط کنترل وضعیت LED در Arduino IDE اجرا میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import processing.serial.*; Serial myPort; String ledStatus="LED: OFF"; void setup(){ size(450, 500); myPort = new Serial(this, "COM5", 38400); // Starts the serial communication myPort.bufferUntil('\n'); // Defines up to which character the data from the serial port will be read. The character '\n' or 'New Line' } void serialEvent (Serial myPort){ // Checks for available data in the Serial Port ledStatus = myPort.readStringUntil('\n'); //Reads the data sent from the Arduino (the String "LED: OFF/ON) and it puts into the "ledStatus" variable } void draw(){ background(237, 240, 241); fill(20, 160, 133); // Green Color stroke(33); strokeWeight(1); rect(50, 100, 150, 50, 10); // Turn ON Button rect(250, 100, 150, 50, 10); // Turn OFF Button fill(255); textSize(32); text("Turn ON",60, 135); text("Turn OFF", 255, 135); textSize(24); fill(33); text("Status:", 180, 200); textSize(30); textSize(16); text("Program made by Dejan Nedelkovski,\n www.HowToMechatronics.com", 80, 320); text(ledStatus, 155, 240); // Prints the string comming from the Arduino // If the button "Turn ON" is pressed if(mousePressed && mouseX>50 && mouseX<200 && mouseY>100 && mouseY<150){ myPort.write('1'); // Sends the character '1' and that will turn on the LED // Highlighs the buttons in red color when pressed stroke(255,0,0); strokeWeight(2); noFill(); rect(50, 100, 150, 50, 10); } // If the button "Turn OFF" is pressed if(mousePressed && mouseX>250 && mouseX<400 && mouseY>100 && mouseY<150){ myPort.write('0'); // Sends the character '0' and that will turn on the LED stroke(255,0,0); strokeWeight(2); noFill(); rect(250, 100, 150, 50, 10); } } |
برای فعالکردن ارتباط سریال، باید کتابخانه سریال را وارد کنیم و یک مورد سریالی ایجاد کنیم. همچنین یک متغیر String را برای وضعیت led تعریف کنیم. در قسمت setup باید اندازه پنجره برنامه را تنظیم کرده و ارتباط سریال را شروع کنیم. در مورد شماره درگاه COM، در اینجا باید یکی از دو پورت COM را که قبلاً در دیوایس منیجر مشاهده کرده بودیم، امتحان کنیم. خط بعدی، بافر بودن پورت سریال را تعیین میکند و در مورد ما، آن را تا زمانی که یک خط جدید وجود ندارد تعریف میکند. در واقع خط جدید زمانی موجود است که آردوینو هر بار به دلیل تابع println() عبارت”LED: OFF” یا”LED:ON” را ارسال میکند. در مرحله بعد، با استفاده از تابع serialEvent() بررسی میکنیم که آیا دادههای موجود که باید خوانده شود، در پورت سریال وجود دارد. در این صورت، با استفاده از تابع readStringUntil()، دادهای را که از درگاه سریال آردوینو ارسال شده است، میخوانیم. در این مورد عبارت”LED: OFF” یا “LED: ON” است.
در تابع main() که به طور مداوم تکرار میشود (اسم تابع آن در IDE مشخص نیست، هر کدی که داخل یک تابع خاص نباشد فقط داخل تابع main() است.)، تمام گرافیکها و تابعهای برنامه را تهیه میکنیم؛ بنابراین، ابتدا به تنظیم رنگ پسزمینه، رنگ کامل، اندازه و رنگ قلم نیاز داریم و با استفاده از تابع ()rect دو دکمه را ترسیم میکنیم. با استفاده از تابع ()text، تمام متن را چاپ میکنیم؛ از جمله عبارت ledStatus که از آردوینو آمده است. چیزی که اکنون باقیمانده است، عملکرد دکمهها است؛ بنابراین، با استفاده از اولین عبارت “if” ناحیه دکمه “Turn ON” را محدود میکنیم. بنابراین، وقتی دکمه را فشار دهید، کاراکتر “1” از طریق پورت سریال به آردوینو ارسال میشود و LED را روشن میکند. از خطوط بعدی برای برجستهکردن دکمه هنگام فشار استفاده میشود. همین روش برای دکمه “Turn OFF” انجام میشود.
اکنون برنامه آماده است؛ بنابراین وقتی روی دکمه run کلیک میکنیم، این برنامه به طور خودکار ارتباط بلوتوث بین لپتاپ و آردوینو را فعال میکند. ماژول بلوتوث HC-05 هر دو ثانیه شروع به چشمک زدن میکند. این نشان میدهد ماژول متصل است و قادر خواهیم بود با استفاده از لپتاپ خود، LED را کنترل کنیم.
آموزش اتصال آردوینو به اندروید
۱. ارسال یک عبارت توسط آردوینو به گوشی
ابتدا بلوتوث گوشی هوشمند اندروید خود را روشن کنید تا دستگاههای موجود را جستوجو کند.
پس از یافتن دستگاهی به نام HC05 بر روی آن کلیک کنید:
اکنون عدد 1234 را بهعنوان پسورد برای آن وارد کنید و به ماژول کانکت شوید:
بعد از کانکت شدن، LED موجود بر روی ماژول هر دو ثانیه یکبار چشمک میزند. به برنامهای جهت کنترل آردوینو نیاز داریم. برای این منظور اپلیکیشنهای زیادی در Play Store وجود دارد که با کد آردوینویی که نوشتیم، کار خواهد کرد. بااینحال، برنامه ای از سایت melec.ir برای این آموزش با استفاده از برنامه آنلاین MIT App Inventor تهیه کردیم. این برنامه، یک برنامه کاربردی عالی و آسان برای ساختن برنامه اندرویدی است.
. با استفاده از دکمه اتصال، تلفن هوشمند را به ماژول بلوتوث وصل خواهیم کرد و متن وضعیت موجود در زیر این دکمه، به ما میگوید که آیا با موفقیت به هم وصل شدهایم یا خیر. با استفاده از دکمههای “روشن” و “خاموش”، میتوانیم LED را روشن یا خاموش کنیم. متن بالای دکمهها، مطلبی است که آردوینو هنگام فشار دادن یک دکمه خاص، به تلفن هوشمند ارسال میکند.
۲. دریافت اطلاعات از آردوینو
ابتدا همانند کتابخانه softwareSerial را از لینکی قرار دادیم، دانلود و نصب کنید. (برای نصب آن به مسیر Sketch-> Include Library -> Add .ZIP Library بروید و فایل زیپ دانلود شده را انتخاب کنید.)
۳. ارسال داده به آردوینو از طریق ماژول بلوتوث
مطابق کد زیر، ابتدا کتابخانه را include میکنیم، سپس در تابع setup()، مقدار baud rate هر دو پورت سریال سختافزاری و نرمافزاری را تعیین میکنیم. یک while میگذاریم که صبر کند تا پورت سریال وصل شود و در آخر در تابع loop() کدی مینویسیم که اگر دادهای از پورت نرمافزاری دریافت کرد، آن را در سریال مانیتور نمایش دهد.
1 |
#include SoftwareSerial |
جمعبندی
در این پروژه نحوه اتصال ماژول بلوتوث به گوشی هوشمند یا لپتاپ را آموختیم. دیدیم که میتوان با استفاده از یک برنامه اندروید، میتوان به میکروکنترلر آردوینو فرمان داد، حال این فرمان میتواند روشنکردن یک LED باشد، فعالکردن یک رله باشد. از این ماژول میتوان برای باز کردن یک درب استفاده کرد. ماژول بلوتوث در بعضی از کاربردهای اینترنت اشیا قابلاستفاده است؛ بنابراین بهطورکلی برای انتقال اطلاعات با درنظرگرفتن محدودیتهایش قابلاستفاده است. از مثال LED میتوانید نحوه کارکرد کلی کار با ماژول را بیاموزید و برای پروژههای دیگر خود از ابن ماژول استفاده کنید.
شما می توانید برای خرید قطعات الکترونیکی با بهترین کیفیت و قیمت به سایت جم ترونیک مراجعه کنید.