آموزش کامل ماژول بلوتوث HC-05 و آردوینو
در این آموزش راه اندازی ماژول بلوتوث با آردوینو را یاد میگیریم که چگونه از ماژول HC-05 برای کنترل آردینو از طریق ارتباط بلوتوث استفاده کنیم.
مرور کلی راه اندازی ماژول بلوتوث با آردوینو
برای این آموزش من دو مثال زدم، آردینو را با استفاده از یک گوشی هوشمند و یک لپتاپ یا کامپیوتر شخصی کنترل کردم. برای اینکه این برنامه آموزشی بیش از حد بار نشود، در برنامه آموزشی بعدی من یاد خواهیم گرفت که چگونه میتوانیم ماژول بلوتوث HC-05 را پیکره بندی کرده و یک ارتباط بلوتوث بین دو برد آردینو جداگانه را به عنوان دستگاههای master و slave ایجاد کنیم.
قبل از شروع راه اندازی ماژول بلوتوث با آردوینو با اولین مثال یعنی کنترل یک آردوینو با استفاده از یک گوشی هوشمند، بیایید نگاهی دقیقتر به ماژول بلوتوث Hc-05 بیندازیم. با مقایسه آن با ماژول HC-06، که تنها میتواند به عنوان یک slave در نظر گرفته شود، HC-05میتواند به عنوان master نیز در نظر گرفته شود که ایجاد ارتباط بین دو آردوینو برد جداگانه را ممکن میسازد. چندین نسخه مختلف از این ماژول وجود دارد، اما من آن یکی را توصیه میکنم که بر روی یک برد breakout میآید، چون به این ترتیب اتصال آن بسیار آسانتر است. ماژول Hc-05 یک ماژول بلوتوث SPP (پروتکل پرت سریال) است، که به این معنی است که از طریق ارتباط سریال با آردینو ارتباط برقرار میکند. در آموزش رباتیک در پست های آینده برای ساخت ربات با کنترل بلوتوثی از این آموزش استفاده خواهیم کرد.
طرح کلی مدار راه اندازی ماژول بلوتوث با آردوینو
این روشی است که ما باید ماژول را به برد آردینو متصل کنیم.
ماژول خاصی که من دارم چون روی برد breakout قرار دارد که شامل یک تنظیمکننده ولتاژ است، را می توان از ۳.۶ تا ۶ ولت تغذیه کرد. با این حال، سطح ولتاژ منطقی پینهای داده ۳.۳ ولت است. بنابراین، خط بین TX (پین انتقال، که خروجی ۵ ولت دارد)آردوینو و RX (پین دریافت، که تنها ۳.۳ ولت را پشتیبانی میکند) ماژول بلوتوث، برای اینکه ماژول نسوزد باید از طریق یک تقسیم کننده ولتاژ متصل شود. از سوی دیگر، خط بین پین TX ماژول بلوتوث و پین RX آردوینو میتواند مستقیماً متصل شود زیرا سیگنال ۳.۳ ولت از ماژول بلوتوث برای پذیرفته شدن به عنوان منطق بالا در برد آردینو کافی است.
کد منبع نمونه ارتباطی بلوتوث آردوینو
بنابراین، در حال حاضر ما آماده ایم تا کد آردینو را برای برقراری راه اندازی ماژول بلوتوث با آردوینو و ارتباط بین برد آردینو و گوشی هوشمند تهیه کنیم. ما یک نمونه ساده میسازیم، فقط یک LED را روشن و خاموش میکنیم اما به اندازه کافی برای درک ارتباط خوب خواهد بود.
#define ledPin 7 int state = 0; void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); Serial.begin(38400); // Default communication rate of the Bluetooth module } void loop() { if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.read(); // Reads the data from the serial port } if (state == '0') { digitalWrite(ledPin, LOW); // Turn LED OFF Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON" state = 0; } else if (state == '1') { digitalWrite(ledPin, HIGH); Serial.println("LED: ON");; state = 0; } }
شرح: ابتدا باید پینی که LED ما به آن متصل خواهد شد و متغیری که در آن دادههای حاصل از گوشی هوشمند را ذخیره خواهیم کرد را تعریف کنیم. در بخش راهاندازی، ما باید پین LED را به عنوان خروجی تعریف کرده و آن را در همان لحظه کم تنظیم کنیم. همانطور که قبلاً اشاره شد، ما از ارتباط سریال استفاده خواهیم کرد بنابراین نیاز به شروع ارتباط سریال در نسبت baud(بیت بر ثانیه)۳۸۴۰۰ داریم، که نسبت baud پیشفرض ماژول بلوتوث است. در بخش حلقه با تابع ()Serial.avai lable ما بررسی خواهیم کرد که آیا دادههای در دسترس در پورت سریال برای خواندن وجود دارند. این بدان معنی است که وقتی ما دادهها را به ماژول بلوتوث ارسال میکنیم این عبارت درست خواهد بود. بنابراین با استفاده از تابع ()Serial.read آن دادهها را خواهیم خواند و آن را در متغیر “state” قرار خواهیم داد. بنابراین اگر آردوینو کاراکتر “0” را دریافت کند، LED را خاموش کرده و با استفاده از تابع ()Serial.prin tln آن را از طریق پورت سریال به گوشی هوشمند ارسال خواهد کرد. علاوه بر این ما متغیر “state” را به صفر تنظیم خواهیم کرد به طوری که دو خط بالا تنها یک بار اجرا خواهند شد. توجه داشته باشید که متغیر “state” عدد صحیح است، بنابراین زمانی که ما کاراکتر “0” را که از تلفن هوشمند میآید دریافت میکنیم، مقدار واقعی متغیر “state” عدد صحیح ۴۸ می باشد ، که مطابق با کاراکتر “0” است. به همین دلیل است که در عبارت “if” ما متغیر “state” را با یک کاراکتر “0” مقایسه میکنیم. از طرف دیگر، اگر کاراکتر دریافتی “1” باشد، LED روشن خواهد شد و رشته “LED: ON” بازگردانده خواهد شد.
اکنون این کد آماده آپلود است اما برای انجام این کار باید خطوط TX و RX را باز کنیم زیرا هنگام آپلود کردن، آردوینو از ارتباط سریال استفاده میکند. بنابراین پینهای RX (پین دیجیتال 0) و TX (پین دیجیتال 1) مشغول هستند. اگر از دیگر پینهای TX و RX برد آردینو استفاده کنیم، میتوانیم از این مرحله اجتناب کنیم، اما در این صورت باید از کتابخانه SoftwarSerial h برای ارتباط سریال استفاده کنیم.
اتصال گوشی هوشمند به ماژول بلوتوث HC-05 و آردینو
حالا ما آماده ایم تا گوشی هوشمند را به ماژول بلوتوث و آردینو متصل کنیم. کاری که ما در اینجا باید انجام دهیم این است که بلوتوث را فعال کنیم و گوشی هوشمند ماژول بلوتوث HC-05 را پیدا خواهد کرد.
سپس ما نیاز به جفت کردن دستگاهها داریم و رمز عبور پیشفرض ماژول HC-05 برابر با ۱۲۳۴ است. بعد از اینکه ما دستگاهها را با هم جفت کردیم، به یک برنامه برای کنترل آردینو نیاز داریم.کاربردهای زیادی در فروشگاه پلی استور برای این منظور وجود دارد که با کد آردینو که نوشتهایم کار خواهد کرد.
با دکمه اتصال، گوشی هوشمند را به ماژول بلوتوث متصل خواهیم کرد و متن وضعیت زیر دکمه به ما خواهد گفت که آیا ما با موفقیت متصل شدهایم. با استفاده از دکمههای “روشن کنید” و “خاموش کنید” میتوانیم LED را روشن و خاموش کنیم. متن بالای دکمهها متنی است که آردینو زمانی که یک دکمه خاص فشار داده میشود، آن را به گوشی هوشمند ارسال میکند.
کنترل آردینو با استفاده از یک لپتاپ یا کامپیوتر از طریق ارتباط بلوتوث
بیایید ببینیم چگونه میتوانیم آردینو را از طریق بلوتوث با استفاده از یک لپتاپ یا کامپیوتر کنترل کنیم. بنابراین، ابتدا باید لپتاپ خود را به ماژول بلوتوث HC-05 وصل کنیم و میتوانیم این کار را از تنظیمات بلوتوث لپتاپ انجام دهیم. لپتاپ ماژول HC-05 را می یابد و با استفاده از کلمه عبور “۱۲۳۴” ما دستگاهها را جفت میکنیم.
هنگامی که ما دستگاهها را در Device Manager لپ تاپ، تحت پورت ها( COM و LPT) جفت میکنیم، دو موجودیت جدید به نام “سریال استاندارد در لینک بلوتوث” ظاهر خواهند شد. از اینجا میتوانیم شماره COM Port پورت سریال را ببینیم که دستگاهها از طریق آن ارتباط برقرار خواهند کرد.
ما همان نمونه قبلی را ادامه میدهیم، یک LED را روشن و خاموش میکنیم و یک رشته را به لپتاپ میفرستیم، بنابراین همان کد آردینو را که قبلا توضیح داده شد استفاده خواهیم کرد.
کد منبع پردازش IDE
اکنون با استفاده از پردازش IDE برنامهای برای کنترل آردوینو خواهیم ساخت. این کد منبع است.
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); } }
شرح: ما باید کتابخانه سریال را در نظر بگیریم و یک شی سریال را به منظور فعال کردن ارتباط سریال ایجاد کنیم، همچنین، یک متغیر رشته را برای وضعیت رهبری شده تعریف کنیم. در بخش راهاندازی، ما باید اندازه پنجره برنامه را تنظیم کنیم و ارتباط سریال را آغاز کنیم. همانطور که برای شماره COM Port در اینجا لازم است یکی از دو شماره COM Port که قبلاً در device manager مشاهده کردیم را امتحان کنیم. خط بعدی بافردهی پورت سریال را تعریف میکند و در مورد ما تا زمانی که یک خط جدید وجود داشته باشد و در واقع هر بار که یک خط جدید وجود دارد، آردوینو رشته “LED:OFF ” یا “LED ON” را به خاطر تابع ()println ارسال میکند. سپس، با استفاده از تابع ()serialEvent بررسی میکنیم که آیا دادههای موجود در پورت سریال برای خواندن وجود دارند یا خیر. اگر چنین است، با استفاده از تابع ()readStringUntil ما آن دادهها را از پورت سریال که از آردینو فرستاده شده است و در مورد انجام شده ما که “LED:OFF ” یا “LED: ON” است، خواهیم خواند.
در تابع ()main draw، که به طور مداوم تکرار میشود، ما همه گرافیکها و توابع برنامه را میسازیم. بنابراین ابتدا باید رنگ پسزمینه، رنگ پر کننده، اندازه و رنگ ضربه را تنظیم کنیم و با استفاده از تابع ()rect دو دکمه را رسم کنیم. با استفاده از تابع ()text تمام متن را چاپ میکنیم، از جمله رشته ledStatus که از آردوینو میآید. چیزی که در حال حاضر باقی مانده این است که دکمهها را کاربردی کنید. بنابراین با استفاده از عبارت “if” اول، منطقه دکمه “روشن کردن” را محدود میکنیم، بنابراین زمانی که دکمه فشار داده میشود، کاراکتر “1” از طریق پورت سریال به آردینو فرستاده و آن کاراکتر به LED تبدیل خواهد شد. مورد بعدی مربوط به خطوط برای برجسته کردن دکمه در هنگام فشار دادن استفاده میشود. همین روند برای دکمه “خاموش کردن” انجام میشود.
حالا برنامه آماده است، بنابراین وقتی روی دکمه Run کلیک میکنیم، برنامه به طور خودکار ارتباط بلوتوث بین لپتاپ و آردینو را فعال میکند. ماژول بلوتوث HC-05 هر دو ثانیه یکبار شروع به فلاش زدن میکند، که نشان میدهد که ماژول متصل است و ما قادر به کنترل LED با استفاده از لپتاپ خود خواهیم بود.
در بخش نظرات زیر هر سوالی بپرسید و فراموش نکنید که مجموعه پروژههای آردینو را بررسی کنید.