کنترل وسایل برقی با WIFI
اینترنت اشیا IOT امروزه یکی از مباحث بسیار داغ و پرطرفدار در بین طراحان و برنامه نویسان حوزه الکترونیک می باشد. البته این محبوبیت بی دلیل نیست. با پیشرفت روز افزون تکنولوژی در دنیا، تمایل انسان ها نیز به استفاده از فناوری های تازه بالاتر رفته، به عنوان مثال در زمان حاضر علاقه مردم به ساخت یا خرید خانه های هوشمند بسیار بیشتر شده و هر روز به جمع افرادی که سعی در هوشمند سازی خانه های خود دارند افزوده می شود. همین موضوع سبب شده تا اینترنت اشیا IOT که یکی از مهمترین نیازهای اولیه مباحث هوشمند سازی است، به یک تجارت پر سود برای کار آفرینان تبدیل شود.
در این پروژه آردوینو از مبحث آموزش آردوینو قصد داریم تا 4 رله را که به یک برد آردوینو Arduino متصل شده اند، را توسط یک موبایل به واسطه امواج WIFI از راه دور کنترل نمائیم. همچنین در این پروژه برای اینکه بتوانیم برد آردوینو را به پروتکل WIFI (وای.فای) مجهز کنیم از ماژول ESP8266 کمک گرفته ایم.
ماژول WIFI ESP8266
در مطلب قبلی (معرفی ماژول ESP8266 و دستورات AT Command) با ماژول ESP8266 به صورت کامل آشنا شدیم. ماژول WIFI مدل ESP8266 را می توانیم به دو صورت سرور (SERVER) و کلاینت (client) در پروژه های خود استفاده کنیم. در این پروژه تصمیم داریم تا ماژول ESP8266 را به صورت سرور (SERVER) راه اندازی کنیم. در این حالت موبایل کاربر جهت ارسال درخواست های کنترل وسایل برقی در وضعیت کلاینت (client) قرار می گیرد.
نقشه شماتیک پروژه کنترل وسایل برقی با موبایل از طریق WIFI
لیست قطعات مورد نیاز
برد آردوینو NANO با میکروکنترلر Atmega328 | 1 عدد |
ماژول Wifi با خروجی سریال ESP8266-03 | 1 عدد |
آی سی ULN2804A مدل DIP اورجینال | 1 عدد |
رگولاتور ولتاژ 5 ولت L7805 | 1 عدد |
رگولاتور ولتاژ 3 ولت LF33CV | 1 عدد |
دیود 1N4007 | 6 عدد |
مقاومت 1 کیلو اهم با توان 0.25 وات و تلرانس 5 درصد | 4 عدد |
مقاومت 330 اهم با توان 0.25 وات و تلرانس 1 درصد | 1 عدد |
رله 12V ولت معمولی تک کنتاکت با جریان 10 آمپر | 4 عدد |
خازن الکترولیتی 1000uf میکروفاراد 16 ولت | 2 عدد |
خازن عدسی 100nF نانوفاراد | 1 عدد |
لامپ LED قرمز سایز 5mm میلی متر مدل مات | 2 عدد |
لامپ LED سبز سایز 5mm میلی متر مدل مات | 1 عدد |
لامپ LED زرد سایز 5mm میلی متر مدل مات | 2 عدد |
ترمینال پیچی 2 پین مدل KF300 رنگ آبی | 1 عدد |
ترمینال پیچی 3 پین مدل KF300 رنگ آبی | 4 عدد |
آداپتور 12V ولت 2A آمپر مدل بین راهی ساخت ایران | 1 عدد |
نقشه PCB پروژه
شرح عملکرد پروژه
در این پروژه برای اینکه کاربر بتواند 4 عدد رله را توسط موبایل کنترل کند، باید ابتدا از طریق منوی WIFI گوشی موبایل خود به WIFI ماژول ESP8266 متصل شود. لازم به ذکر است برای اتصال به ماژول WIFI باید از نام و پسوردی که در برنامه آردوینو از قبل برای ماژول WIFI تعریف شده است، استفاده کند. این نام و پسورد WIFI در برنامه نوشته شده در نرم افزار آردوینو به صورت پیش فرض به صورت زیر است، که شما می توانید آنرا به راحتی در برنامه آردوینو که در ادامه آمده است به مقادیر دلخواه خود تغییر دهید.
نام WIFI ماژول = electronics98_ESP
پسورد WIFI ماژول = electronics98
پس از اتصال گوشی موبایل خود به ماژول WIFI لازم است اپلیکیشنی با نام WIFI Controller را بر روی تلفن هوشمند خود نصب کنید. ما از این برنامه برای ارسال فرامین کنترلی از طریق پروتکل WIFI برای برد آردوینو استفاده می کنیم. این App را می توانید از گوگل پلی دانلود کنید البته فایل نصبی آن در پیوست فایل پروژه آمده است که می توانید از انتهای همین مطلب به صورت مستقیم دانلود کنید. پس از نصب اپلیکیشن و اجرای آن با محیطی همانند تصویر زیر روبرو می شوید.
پس از اینکه برنامه را اجرا کردید، همانند تصویر بالا مقادیر زیر را در کادرهای مربوطه وارد کنید و سپس کلید Add را بزنید و به ماژول ESP8266 که در حالت سرور قرار گرفته است متصل شوید. لازم به ذکر است این مقادیر را می توانید به راحتی در برنامه آردوینو که در ادامه آمده است به مقادیر دلخواه خود تغییر دهید.
آدرس IP (آی.پی) سرور = 192.168.4.1
شماره پورت (PORT) سرور = 8888
حال جهت کنترل وسایل برقی متصل به رله ها تنها کافی است دستورات مندرج در جدولی که در ادامه آمده است را همانند تصویر زیر در کادر مربوطه وارد کنید و سپس گزینه SendHEX را لمس کنید. در صورتیکه دستور شما به درستی وارد شده باشد و توسط برد آردوینو اجرا شود، نتیجه عملکرد دستورات ارسالی در قسمت Received Data نرم افزار WIFI Controller چاپ می شود.
دستورات مورد نیاز جهت کنترل رله ها در برنامه WIFI Controller موبایل
کد دستوری روشن کردن رله اول
1 |
R1ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی اول را فعال کرد.
1 |
Relay 1 ON |
کد دستوری خاموش کردن رله اول
1 |
R1OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی اول را غیر فعال کرد.
1 |
Relay 1 OFF |
کد دستوری روشن کردن رله دوم
1 |
R2ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی دوم را فعال کرد.
1 |
Relay 2 ON |
کد دستوری خاموش کردن رله دوم
1 |
R2OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی دوم را غیر فعال کرد.
1 |
Relay 2 OFF |
کد دستوری روشن کردن رله سوم
1 |
R3ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی سوم را فعال کرد.
1 |
Relay 3 ON |
کد دستوری خاموش کردن رله سوم
1 |
R3OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی سوم را غیر فعال کرد.
1 |
Relay 3 OFF |
کد دستوری روشن کردن رله چهارم
1 |
R4ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی چهارم را فعال کرد.
1 |
Relay 4 ON |
کد دستوری خاموش کردن رله چهارم
1 |
R4OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی چهارم را غیر فعال کرد.
1 |
Relay 4 OFF |
کد دستوری روشن کردن تمامی رله ها
1 |
ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو تمامی وسایل برقی را فعال کرد.
1 |
All relays are turned ON |
کد دستوری خاموش کردن تمامی رله ها
1 |
OFF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو تمامی وسایل برقی را غیر فعال کرد.
1 |
All relays are turned OFF |
برنامه نویسی برد Arduino در نرم افزار آردوینو
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 |
#include <SoftwareSerial.h> //*********************************************Config Uart_PIN const int PIN_RXD = 3; const int PIN_TXT = 2; SoftwareSerial WIFI(PIN_RXD, PIN_TXT); // RX, TX //*********************************************Config PIN_RLY const int PIN_RLY1 = 4; const int PIN_RLY2 = 5; const int PIN_RLY3 = 6; const int PIN_RLY4 = 7; const int PIN_LED = 13; //*********************************************Config WIFI const String IP_SERVER = "192.168.4.1"; const String wifi_name = "electronics98_ESP"; const String wifi_pass = "electronics98"; const long interval = 500; //*********************************************Create Value unsigned long previousMillis = 0; int start_search = 0; int ledState = HIGH; String input_data; String Message; //*********************************************Subprogram setup() void setup() { pinMode(PIN_RLY1, OUTPUT); pinMode(PIN_RLY2, OUTPUT); pinMode(PIN_RLY3, OUTPUT); pinMode(PIN_RLY4, OUTPUT); pinMode(PIN_LED, OUTPUT); digitalWrite(PIN_RLY1, LOW); digitalWrite(PIN_RLY2, LOW); digitalWrite(PIN_RLY3, LOW); digitalWrite(PIN_RLY4, LOW); digitalWrite(PIN_LED, HIGH); WIFI.begin(115200); set_ESP8266_server(); set_ip_wifi(); set_pass_wifi(); } //*********************************************Subprogram loop() void loop() { if (WIFI.available()) { digitalWrite(PIN_LED, HIGH); read_input_data(); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(PIN_LED, ledState); } } //*********************************************Subprogram read_input_data() void read_input_data() { input_data = WIFI.readString(); input_data.trim(); start_search = input_data.indexOf(":"); start_search++; input_data = input_data.substring(start_search); Run_command(); } //*********************************************Subprogram Run_command() void Run_command() { Message = ""; if (input_data == "R1on" || input_data == "r1on" || input_data == "R1ON" || input_data == "r1On" || input_data == "r1ON" || input_data == "r1oN") { digitalWrite(PIN_RLY1, HIGH); Message = "Relay 1 ON"; } else if (input_data == "R1of" || input_data == "r1of" || input_data == "R1OF" || input_data == "r1Of" || input_data == "r1OF" || input_data == "r1oF") { digitalWrite(PIN_RLY1, LOW); Message = "Relay 1 OFF"; } else if (input_data == "R2on" || input_data == "r2on" || input_data == "R2ON" || input_data == "r2On" || input_data == "r2ON" || input_data == "r2oN") { digitalWrite(PIN_RLY2, HIGH); Message = "Relay 2 ON"; } else if (input_data == "R2of" || input_data == "r2of" || input_data == "R2OF" || input_data == "r2Of" || input_data == "r2OF" || input_data == "r2oF") { digitalWrite(PIN_RLY2, LOW); Message = "Relay 2 OFF"; } else if (input_data == "R3on" || input_data == "r3on" || input_data == "R3ON" || input_data == "r3On" || input_data == "r3ON" || input_data == "r3oN") { digitalWrite(PIN_RLY3, HIGH); Message = "Relay 3 ON"; } else if (input_data == "R3of" || input_data == "r3of" || input_data == "R3OF" || input_data == "r3Of" || input_data == "r3OF" || input_data == "r3oF") { digitalWrite(PIN_RLY3, LOW); Message = "Relay 3 OFF"; } else if (input_data == "R4on" || input_data == "r4on" || input_data == "R4ON" || input_data == "r4On" || input_data == "r4ON" || input_data == "r4oN") { digitalWrite(PIN_RLY4, HIGH); Message = "Relay 4 ON"; } else if (input_data == "R4of" || input_data == "r4of" || input_data == "R4OF" || input_data == "r4Of" || input_data == "r4OF" || input_data == "r4oF") { digitalWrite(PIN_RLY4, LOW); Message = "Relay 4 OFF"; } else if (input_data == "on" || input_data == "ON" || input_data == "On") { digitalWrite(PIN_RLY1, HIGH); digitalWrite(PIN_RLY2, HIGH); digitalWrite(PIN_RLY3, HIGH); digitalWrite(PIN_RLY4, HIGH); Message = "All relays are turned ON"; } else if (input_data == "off" || input_data == "OFF" || input_data == "Off") { digitalWrite(PIN_RLY1, LOW); digitalWrite(PIN_RLY2, LOW); digitalWrite(PIN_RLY3, LOW); digitalWrite(PIN_RLY4, LOW); Message = "All relays are turned OFF"; } if (Message != "") { Message = Message + " | "; WIFI.print("AT+CIPSEND=0,"); WIFI.println(Message.length()); delay (1000); WIFI.println(Message); } } //*********************************************Subprogram set_ESP8266_server() void set_ESP8266_server() { WIFI.println("AT"); delay (1000); WIFI.println("AT+RST"); delay (3000); WIFI.println("AT+CIPMUX=1"); delay (2000); WIFI.println("AT+CIPSERVER=1,8888"); delay (3000); } //*********************************************Subprogram set_ip_wifi() void set_ip_wifi() { WIFI.print("AT+CIPAP=\""); WIFI.print(IP_SERVER); WIFI.println("\""); delay (2000); } //*********************************************Subprogram set_pass_wifi() void set_pass_wifi() { WIFI.print("AT+CWSAP=\""); WIFI.print(wifi_name); WIFI.print("\",\""); WIFI.print(wifi_pass); WIFI.println("\",1,3"); delay (3000); } |
سلام
اگر امکانش هست فایل پروتیوس طراحی شده را در سایت قرار بدید یا بفرستید برای ایمیلم ، چون میخام پی سی بی این مدار و بیرون برام بزنن بدون فایل نمیشه .
خیلی خیلی ممنون .
با سلام و احترام
فایل به ایمیل شما ارسال گردید.
سلام خسته نباشید خداقوت
جناب یه سوال داشتم من برد آردینو UNO ch340دارم این کد رو میشه رو این مدل آپلود کرد و اجرا کرد؟
بعد اگه نمیشه باید کجای کد رو عوض کرد و اجرا کرد؟
با سلام و احترام
بله می توانید آپلود کنید و نیازی به ویرایش و یا توسعه کد نیست.
سلام من طبق قطعاتی که شما معرفی حردین تهیه کردم اما ماژول وای فای اصلا با نقشه همخونی نداره و اصلا مشابه چیزی که در نقشه و تصویر و ویدو یی که گذاشتین نیست .کلی هزینه کردم .
من همون ماژولی که قسمت قطعات بود تهیه کردم و خودتون پیشنهاد داده بود تز همون سایت هم خریداری کردم لطفا راهنمایی کنید
با سلام و احترام
ماژول WIFI که در این پروژه استفاده شده است ماژول ESP8266 است که دارای مدل های متفاوتی است، در خود پروژه ما از ورژن ESP8266-12F استفاده کرده ایم و در لیست قطعات ورژن ESP8266-03 معرفی شده است که شما از آن هم می توانید استفاده کنید، برای اینکار تنها لازم است مطابق تصویر زیر، که ترتیب پایه های ماژول را نشان می دهد، ابتدا پایه های VCC و CH_PD را به ولتاژ 3.3V و پایه های GND و GPIO15 را به منفی تغذیه و همچنین پایه های TXD و RXD ماژول را به پایه های D2 و D3 برد آردوینو نانو متصل کنید.
همچنین اگر از ماژول خریداری شده استفاده نکردید و پایه های آنرا لحیم کاری نکرده اید می توانید با واحد فروش فروشگاه صحبت کنید و ماژول را با مدل ESP8266-12F تعویض کنید.
مهندس اکبری خیلی ممنونم
هنوز وارد عمل نشدم اما از پی سی بی و کد هایی که زحمتش رو کشیدید معلومه که کار میکنه.
خیلی خیلی ممنونم از شما و سایت خوب الکترونیک۹۸
با سلام و احترام
از لطف و محبت شما کمال تشکر را داریم، بله مدار به صورت 100 درصد عملی و آزمایش شده می باشد.
مهندس اکبری با این رله ها 220 رو میشه قطع و وصل کرد؟(با همین مدار)یعنی این مدار مال قطع و وصل جریان 220ولته یا خیر؟
و اینکه آردوینو ولتاژ پایه هاش 5 ولته و نمیتونه 12 بده،چطوری به پایه های رله 12 دادید؟
طبق شماتیک مدار
شما می توانید توسط رله های مذکور، مصرف کننده هایی با ولتاژ 220 ولت را تا حداکثر جریان 5 آمپر کنترل نمایید. همچنین در این مدار برای راه اندازی رله ها از تراشه درایور ULN2804 استفاده شده است.
سلام
بابت آموزش مفیدی که ارایه کردید متشکرم
من موفق شدم برنامه رو در بار اول آپلود کنم و همه چیز خوب پیش رقت- اما نام وای فای همون پیش فرضی شد در بار اول آپلود شد و دیگه تغییر نکرد . موضوع جالب اینکه آدرس آی پی و پسورد تغییر میکنه اما اسم الکترونیک۹۸ تعییر نمیکنه. آبا روش خاصی برای انجام این کار هست ؟
با سلام و احترام
خیلی ممنون از لطف و محبت شما
در صورت اینکه نام WIFI در زمان راه اندازی مدار تغییر کرده است و همچنین پسورد و آدرس آی پی نیز تغییر می کند، پس می توان نتیجه گرفت عدم تغییر نام WIFI در گوشی موبایل شما می تواند به دلیل کش شدن تنظیمات و اتصالات باشد، برای بررسی بیشتر این موضوع پیشنهاد می کنیم با یک گوشی موبایل دیگر که تا کنون توسط آن به ماژول متصل نشده اید این موضوع را آزمایش کنید.
سلام
وقتتون بخیر
من پی سی بی مدار رو زدم همه ی قطعات هم همون مدلی که گفتید خریدم و لحیم کردم و برنامش آپلود کردم ( منتاها اسم و رمز وایفای رو تغییر دادم ) وقتی آداپتور رو به برد وصل کردم با همون اسم جدید پیداش کرد ولی وصل نمیشد و در ضمن بعضی اوقات وای فای گوشی هم پیداش نمیکرد اصلا و اگر پیدا هم میکرد وصل نمیشد ، برد آردوینوش و عوض کردم و برنامه رو دوباره آپلود کردم روش و دوباره تست گرفتم وصل شد بهش ولی با این که اسم و رمز پیش فرض (برنامه خودتون) بود باز به اسم قبلی شناسایی شد و وصل شد ولی داخل نرم افزار گوشی میزد آی پی متصل نیست و چند بار رفرش دادم و باز یک دفعه قطع شد و دوباره مشکل قبلی شد ( وای فای گوشی پیدا نمیکرد و اگر پیدا هم میکرد وصل نمیشد ) .
از طریق سریال مانیتور برنامه آردوینو هم امتحان کردم کد های دستوری ( مثل رله 1 روشن و خاموش ) ولی هیچ پاسخی نداد .
مشکل از چیه ؟ از ماژول وای فای هست ؟؟ یا چیز دیگه ؟؟
الآن باید چه کار کنم ؟؟
ممنون میشم راهنمایی کنید .
تشکر
با سلام و احترام
من دقیقا متوجه مشکل شما نشدم
اما اگر نام WIFI که در برنامه آردوینو “electronics98” درج شده است بر روی ماژول WIFI شما تنظیم می شود این به آن معناست که ارتباط بین ماژول WIFI و برد آردوینو برقرار است. همچنین برای آزمایش اول به هیچ عنوان دست به برنامه نزنید و چیزی را تغییر ندهید چراکه ممکن است با تغییر در کدهای برنامه عملکرد آن دچار اشکال شود.
همچنین با یک مولتی متر مطمئن شوید ولتاژ تغذیه اعمال شده بر روی ماژول WIFI مقدار 3.3 ولت باشد، لطفا توجه داشته باشید اعمال ولتاژ بیشتر از 3.3 ولت باعث تداخل در عملکرد و یا صدمه دیدن ماژول می شود.
در پایان لازم به ذکر است شما نمی توانید از طریق محیط سریال آردوینو دستوراتی مثل روشن کردن رلهها را برای آردوینو ارسال کنید، چراکه در این پروژه، پایه های دیجیتال 2 و 3 آردوینو برای تبادل داده با ماژول WIFI تنظیم شده اند.