ماژول بلوتوث HC-05 یا HC-06
شاید تا به حال در برقی از منازل و یا مکان های صنعتی دیده باشید که کاربر، یک یا چند وسیله برقی را با موبایل خود روشن و یا خاموش می کند. امروزه این موضوع یکی از موارد اصلی در هوشمند سازی منازل و یا ساخت خانه های هوشمند به حساب می آید. چراکه کاربر می تواند در هر نقطه از منزل با گوشی موبایل خود وسایل و دستگاه های برقی اطراف خود را کنترل کند، و این امکان یک نیاز اولیه در خانه های هوشمند به شمار می آید.
یکی از راه هایی ارتباط رادیویی با گوشی های موبایل هوشمند و تبادل داده با آن ها، بلوتوث می باشد. توسط پروتکل بلوتوث می توان یک ارتباط رادیویی (بیسیم) در محدوده مفید 10 الی 35 متر برقرار نمود. هدفون بی سیم، موس بیسیم، برخی دسته های بازی بیسیم و… برخی از تجهیزاتی هستند که از پروتکل بلوتوث برای تبادل داده با گوشی موبایل و یا کامپیوتر استفاده می کنند.
در این پروژه از مبحث آموزش آردوینو ما قصد داریم به کمک برد آردوینو Arduino مداری بسازیم تا به واسطه آن بتوانیم توسط یک گوشی موبایل هوشمند وسایل برقی منزل را کنترل کنیم. طبق توضیحات قبل، ما نیز برای برقراری ارتباط بین گوشی موبایل و برد آردوینو از پروتکل محبوب بلوتوث استفاده کرده ایم. از آنجا که برد آردوینو خود به تنهایی به بلوتوث مجهز نیست، در این پروژه آردوینو برای تجهیز آن به پروتکل بلوتوث از ماژول بلوتوث HC-05 و یا HC-06 استفاده کرده ایم. ماژول بلوتوث HC-05 می تواند با هر دستگاهی از طیق پروتکل بلوتوث ارتباط برقرار کند و داده های دریافتی را از طریق پروتکل سریال (Uart) به کاربر نمایش دهد، و یا بلعکس داده ها را از طریق پروتکل سریال از کاربر دریافت کند و بر پایه پروتکل بلوتوث برای دیگر دستگاها ارسال کند.
راه اندازی ماژول بلوتوث HC-05 یا HC-06
ماژول بلوتوث HC-06 یا HC-05 را می توان توسط پروتکل سریال (Uart) راه اندازی نمود این به این معنا است که می توانیم همانند دیگر ماژول ها این ماژول را نیز توسط دو پایه RXD و TXD برد آردوینو راه اندازی کنیم. به صورت کلی ماژول بلوتوث HC-06 یا HC-05 به دو صورت در بازار ارائه می شود:
1- ماژول بلوتوث HC-05 یا HC-06 بدون برد راه انداز:
در این مدل، ماژول بدون برد راه انداز ارائه می شود و ولتاژ تغذیه راه اندازی ماژول 3/3 ولت می باشد همچنین ترتیب پایه های آن به شکل زیر است.
:: پایه شماره یک در این ماژول همان پایه TXD در پروتکل سریال می باشد، که داده های ارسالی از سمت فرستنده که ماژول دریافت می کند بر روی این پایه قرار می گیرد و باید این پایه را به پایه RX بر روی برد آردوینو متصل نمود.
:: پایه شماره دو در این ماژول همان پایه RXD در پروتکل سریال می باشد، که داده های ارسالی از سمت برد آردوینو جهت ارسال از طریق بلوتوث بر روی این پایه قرار می گیرد و باید این پایه را به پایه TX بر روی برد آردوینو متصل نمود.
:: پایه شماره 12 در این ماژول، پایه تغذیه آن است. همانطور که از نام این پایه پیداست، این پین باید به یک ولتاژ 3/3 ولتی متصل شود. به همین دلیل آنرا باید به پایه 3.3V بر روی برد آردوینو متصل نمود.
:: پایه شماره 13 در این ماژول، پایه تغذیه آن است. همانطور که از نام این پایه پیداست، این پین باید به منفی منبع تغذیه متصل شود. به همین دلیل آنرا باید به پایه GND بر روی برد آردوینو متصل نمود.
:: پایه LED در این ماژول، وظیفه نمایش وضعیت ماژول را به عهده دارد. با اتصال این پایه به یک لامپ LED می توان به وضعیت ماژول پی برد، به عنوان مثال اگر LED به صورت سریع چشمک بزند به این معنا است که ماژول به هیچ دستگاهی از طریق بلوتوث متصل نشده است، اما اگر در هر ثانیه 2 بار به صورت آهسته چشمک بزند به این معنا است که ماژول از طریق بلوتوث به یک دستگاه متصل شده است و آماده ارسال و دریافت اطلاعات است.
:: پایه KEY در این ماژول، جهت اعمال تنظیمات اولیه به ماژول توسط دستورات AT Command استفاده می شود. منظور از اعمال تنظیمات اولیه، تغییر نام بلوتوث، تغییر رمز اتصال به بلوتوث، تغییر میزان باود ریت (baud rate) و… است. لازم به ذکر است در این پروژه ما از این پایه استفاده نکرده ایم، پس آنرا به جایی متصل نمی کنیم.
2- ماژول بلوتوث HC-05 یا HC-06 با برد راه انداز:
در این مدل، ماژول با برد راه انداز به صورت آماده ارائه می شود و همچنین ولتاژ تغذیه راه اندازی ماژول 3/6 ولت الی حداکثر 6 ولت می باشد همچنین ترتیب پایه های آن به شکل زیر است.
لیست قطعات مورد نیاز
برد آردوینو NANO با میکروکنترلر Atmega328 | 1 عدد |
ماژول بلوتوث HC-05 با خروجی سریال و هدر بوردی | 1 عدد |
رگولاتور ولتاژ 5 ولت L7805 | 1 عدد |
آی سی ULN2804A مدل DIP اورجینال | 1 عدد |
سوکت آی سی 18 پایه مدل معمولی | 1 عدد |
دیود 1N4007 | 6 عدد |
مقاومت 1 کیلو اهم با توان 0.25 وات و تلرانس 5 درصد | 4 عدد |
مقاومت 330 اهم با توان 0.25 وات و تلرانس 1 درصد | 1 عدد |
لامپ LED زرد سایز 5mm میلی متر مدل مات | 5 عدد |
خازن الکترولیتی 1000uf میکروفاراد 16 ولت | 2 عدد |
خازن عدسی 100nF نانوفاراد | 1 عدد |
رله 12V ولت معمولی تک کنتاکت با جریان 10 آمپر | 4 عدد |
ترمینال پیچی 2 پین مدل KF300 رنگ آبی | 1 عدد |
ترمینال پیچی 3 پین مدل KF300 رنگ آبی | 4 عدد |
پین هدر نری صاف 1x40 با ارتفاع 11 میلیمتر - مشکی | 1 عدد |
پین هدر مادگی صاف 1x40 با فاصله پایه 2.54 میلیمتر - مشکی | 1 عدد |
آداپتور 12V ولت 2A آمپر مدل بین راهی ساخت ایران | 1 عدد |
لیست ابزار آلات و تجهیزات مورد نیاز
هویه | 1 عدد |
سیم لحیم | 1 عدد |
کف چین | 1 عدد |
قلع کش | 1 عدد |
نقشه شماتیک مدار راه انداز ماژول بلوتوث HC-05 یا HC-06
نقشه مدار چاپی (PCB) مدار راه انداز ماژول بلوتوث HC-05 یا HC-06
برنامه برد آردوینو در نرم افزار آردوینو
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
#include <EEPROM.h> int PIN_RLY1 = 5; int PIN_RLY2 = 4; int PIN_RLY3 = 3; int PIN_RLY4 = 2; int PIN_LED = 13; int serIn; String rxd; String code; String Run; boolean stat[4]; unsigned long currentMillis; unsigned long previousMillis; void setup() { Serial.begin (9600); Serial.setTimeout (3); pinMode(PIN_RLY1, OUTPUT); pinMode(PIN_RLY2, OUTPUT); pinMode(PIN_RLY3, OUTPUT); pinMode(PIN_RLY4, OUTPUT); pinMode(PIN_LED, OUTPUT); if (EEP_Read_String(5).length() > 4) { EEP_Write_String(5, "1234"); } } void loop() { if (Serial.available()) { start_read_rxd(); } else if (rxd != "") { end_read_rxd(); } } void start_read_rxd() { while (Serial.available() > 0) { serIn = Serial.read(); if (serIn != 0 && serIn != 10 && serIn != 13) { rxd = rxd + char(serIn); } } previousMillis = millis(); } void end_read_rxd() { currentMillis = millis() - previousMillis; if (currentMillis > 100) { digitalWrite(PIN_LED, HIGH); check_password(); rxd = ""; serIn = 0; digitalWrite(PIN_LED, LOW); } } void check_password() { code = ""; Run = ""; if (rxd.length() == 8) { code = rxd.substring(4, 8); } else if (rxd.length() == 12) { code = rxd.substring(4, 8); } else { Serial.println("USSD is not valid!"); } if (code == EEP_Read_String(5)) { Run = rxd.substring(0, 4); Run_command(); } else if (rxd.length() == 8 || rxd.length() == 12 || rxd.length() == 19) { Serial.println("Password is not correct!"); } } void Run_command() { code = ""; if (Run == "Rel1" || Run == "rel1" || Run == "REL1") { if (stat[0] == 0) { stat[0] = 1; digitalWrite(PIN_RLY1, HIGH); Serial.println("Relay 1 ON"); } else { stat[0] = 0; digitalWrite(PIN_RLY1, LOW); Serial.println("Relay 1 OFF"); } } else if (Run == "Rel2" || Run == "rel2" || Run == "REL2") { if (stat[1] == 0) { stat[1] = 1; digitalWrite(PIN_RLY2, HIGH); Serial.println("Relay 2 ON"); } else { stat[1] = 0; digitalWrite(PIN_RLY2, LOW); Serial.println("Relay 2 OFF"); } } else if (Run == "Rel3" || Run == "rel3" || Run == "REL3") { if (stat[2] == 0) { stat[2] = 1; digitalWrite(PIN_RLY3, HIGH); Serial.println("Relay 3 ON"); } else { stat[2] = 0; digitalWrite(PIN_RLY3, LOW); Serial.println("Relay 3 OFF"); } } else if (Run == "Rel4" || Run == "rel4" || Run == "REL4") { if (stat[3] == 0) { stat[3] = 1; digitalWrite(PIN_RLY4, HIGH); Serial.println("Relay 4 ON"); } else { stat[3] = 0; digitalWrite(PIN_RLY4, LOW); Serial.println("Relay 4 OFF"); } } else if (Run == "rlon" || Run == "Rlon" || Run == "RLON") { stat[0] = 1; stat[1] = 1; stat[2] = 1; stat[3] = 1; digitalWrite(PIN_RLY1, HIGH); digitalWrite(PIN_RLY2, HIGH); digitalWrite(PIN_RLY3, HIGH); digitalWrite(PIN_RLY4, HIGH); Serial.println("Relay 1 ON"); Serial.println("Relay 2 ON"); Serial.println("Relay 3 ON"); Serial.println("Relay 4 ON"); } else if (Run == "rlof" || Run == "Rlof" || Run == "RLOF") { stat[0] = 0; stat[1] = 0; stat[2] = 0; stat[3] = 0; digitalWrite(PIN_RLY1, LOW); digitalWrite(PIN_RLY2, LOW); digitalWrite(PIN_RLY3, LOW); digitalWrite(PIN_RLY4, LOW); Serial.println("Relay 1 OFF"); Serial.println("Relay 2 OFF"); Serial.println("Relay 3 OFF"); Serial.println("Relay 4 OFF"); } else if (Run == "pass" || Run == "PASS" || Run == "Pass" && rxd.length() == 12) { code = rxd.substring(8, 12); EEP_Write_String(5, code); Serial.println("Password changed successfully"); } else { Serial.println("USSD is not valid!"); } Run = ""; code = ""; } void EEP_Write_String(byte part, String val) { int start_addw = part * 32; int w_len = val.length(); EEPROM.write(start_addw, w_len + 1); int end_w = start_addw + w_len; byte len = 0; for (int i = start_addw + 1; i < end_w + 1; i++) { EEPROM.write(i, int(val[len])); len++; } len = 0; } String EEP_Read_String(byte part) { int start_addr = part * 32; String str; int ch; int r_len = EEPROM.read(start_addr); int end_r = start_addr + r_len; for (int i = start_addr + 1; i < end_r; i++) { ch = EEPROM.read(i); str += char(ch); } return str; } |
مراحل ساخت و مونتاژ مدار راه انداز ماژول بلوتوث HC-05 یا HC-06
1- قطعات مورد نیاز برای ساخت پروژه را که کمی بالاتر ذکر شده بود را تهیه کنید.
2- فایل این پروژه که لینک دانلود آن در انتهای همین پست قرار گرفته است را دانلود کنید.
3- پس از دانلود فایل پروژه به پوشه PCB بروید و فایل مدار چاپی (PCB) پروژه را که توسط نرم افزار Proteus ورژن 8.1 طراحی شده است را چاپ کنید. نرم افزار Proteus را می توانید از اینجا دانلود کنید.
4- مطابق نقشه شماتیک پروژه که درون پوشه SCH فایل پروژه قرار داد، قطعات را بر روی برد مونتاژ کنید.
5- پس از اتمام عملیات مونتاژ برد آردوینو را به کامپیوتر متصل کنید و نرم افزار Arduino را اجرا کنید. نرم افزار Arduino را می توانید از اینجا دانلود کنید.
6- پس از اجرای نرم افزار آردوینو از طریق گزینه File > Open موجود در نرم افزار به محل ذخیره فایل پروژه بروید و سپس از شاخه Code فایل برنامه پروژه را باز کنید.
7- برنامه را بر روی برد آردوینو خود پروگرام کنید.
8- وارد فایل پروژه شوید و اپلیکیشن موجود در پوشه apk را بر روی گوشی موبایل اندرویدی خود نصب کنید.
9- مدار را توسط یک منبع تغذیه 12 ولت DC با حداقل جریان 1 آمپر راه اندازی کنید.
10- نرم افزار را بر روی موبایل خود اجرا کنید و به ماژول بلوتوث متصل شوید.
11- حال می توانید با ارسال کدهای مندرج در جدول زیر از طریق نرم افزار رله های متصل به برد آردوینو را کنترل کنید.
سلام میشه هر 4تا رله را لحظه ای خاموش کرد یعنی روشن کنی خودکار خاموش بشه میشه راهنماییم کنین ممنون میشم
با سلام و احترام
برای این موضوع می توانید بعد از دستور روشن شدن هر رله یک delay به مدت زمان دلخواه ایجاد کنید و سپس همان رله را خاموش کنید. به عنوان مثال در خط 78 برنامه که رله اول روشن می شود می توانید به شکل زیر آنرا تغییر دهید:
سلام میشه هر چهار تا رله رو با نگه داشتن دکمه روشن نگه داشت وبا رها کردن آن خاموش بشه البته جدا جدا ممنون میشم از راهنمایی تون
با سلام و احترام
بله اینکار با ویرایش و توسعه کدهای پروژه امکان پذیر است و انجام آن نیازمند تسلط کافی شما به برنامه نویسی آردوینو دارد، در صورتیکه تا به حال با بردهای آردوینو کار نکرده اید و به برنامه نویسی آن آشنایی ندارید می توانید برای شروع از آموزش های منتشر شده در الکترونیک98 از اینجا شروع کنید.
همچنین لازم به ذکر است به دلیل حجم بالای سوالاتی که همه روزه توسط کاربران مطرح می شود امکان توسعه و شخصی سازی پروژه ها برایمان وجود ندارد و هرگونه توسعه کدها به عهده خود کاربر می باشد.
ممنون
با سلام وخسته نباشید اگر امکانش هست لطفا توضیح بخش های مختلف برنامه نویسی نوشته شده رو برام بفرستید برای پروژه کاردانی میخواستم . باتشکر🙏🏻
با سلام خدمت شما آیا میشه از تعداد ذله های بیشتر استفاده کرد
با سلام و احترام
بله می توانید، اما باید توجه داشته باشید که برای اضافه کردن رله ها، برنامه آردوینو باید کمی توسعه پیدا کنید.
سلام خسته نباشید خیلی اموزش خوبی بود فقط یه سوال من اگه بخوام به غیر از این کار ها دما هم برای گوشی بفرسته میشه
با سلام و احترام
بله می توانید این قابلیت را نیز به پروژه خود اضافه کنید، البته انجام این موضوع نیاز به تسلط کافی به برنامه نویسی آردوینو و درک کدهای ارائه شده دارد.