آموزش های کاربردیاینترنت اشیاء (IOT)بایگانی مطالبخانه هوشمند

کنترل روشنایی خانه با تلفن همراه

روشنایی هوشمند عنصر مورد علاقه ما برای ساخت یک خانه هوشمند است. تصور کنید تنها با در دست داشتن گوشی همراه خود قادر به روشن کردن یا حتی تنظیم سطح روشنایی قسمت های مختلف خانه خود باشید. روشنایی هوشمند فرصتی عالی هستند تا زندگی شما را کمی آسان تر کنند.

در واقع بزرگترین مزیت روشنایی هوشمند، قابلیت خودکارسازی کارهای ساده است. بطور مثال :

  • 10 دقیقه قبل از اینکه زنگ ساعت شما به صدا درآید، چراغ های خاصی را در صبح روشن کنید.
  • تمام چراغ های خانه را در یک ساعت مشخص یا با یک فرمان ساده در شب خاموش کنید.
  • هنگام ورود به خانه یا خروج از خانه، چراغ ها را روشن یا خاموش کنید.

مقدمه 

امروزه با وجود ماژول های هوشمند و قابل برنامه ریزی هر کسی به سادگی می تونه از این تکنولوژی بهره مند بشه. در این آموزش شما با صرف هزینه بسیار کم و با استفاده از ماژول ESP32 که قبل تر بصورت مفصل به معرفی امکانات و قابلیت های آن پرداخته ایم، چراغ هوشمندی که بتوان با شبکه وای فای آن را کنترل کرد خواهید ساخت. تا انتهای این آموزش همراه ما باشید.

استفاده از روشنایی هوشمند در خانه

قطعات مورد نیاز برای شروع

  • ESP32 NodeMCU


  • USB Type C cable (کابل یو اس بی تایپ C)


  • 20W 12V DC LED همراه با (heat-sink) گرماگیر آلومینیومی


  • NPN BD-139 transistor (ترانزیستور BD139) جهت کنترل روشنایی یا از نظر فنی کنترل ولتاژ LED


  • مقاومت 70 اهم برای پایه BD-139 و دیود IN4007 برای محافظت از مدار در برابر هر گونه ولتاژ معکوس از منبع تغذیه 12 ولت.


  • شارژر 12 ولت 1 آمپری


  • برد بورد


  • سیم

قطعات مورد نیاز

در این پروژه کاربردی قصد داریم یک لامپ هوشمند و قابل کنترل از طریق وای فای داخلی رو راه اندازی کنیم. برای شبکه داخلی نیازی به اتصال اینترنت نیست، درواقع همه چیز با همون اتصال وای فای قابل کنترل هست. از اونجایی که قدرت LED زیاد هست نمی تونیم مستقیماً توسط ESP32 اونو کنترل کنیم، پس به یک مدار اضافی نیاز داریم.


نصب کتابخانه مربوط به کنترل هوشمند LED

برای کدنویسی ESP32 به یک محیط توسعه یکپارچه (IDE) نیاز داریم. ما از نرم افزار Arduino IDE استفاده می کنیم. Arduino IDE یک برنامه چند پلتفرمی است که به زبان جاوا نوشته شده و به زبان C/C++ با قوانین خاصی کدگذاری شده است.

آموزش نصب کتابخانه در Arduino IDE

برای اضافه کردن کتابخانه بورد ESP32 به نرم افزار Arduino، لینک زیر رو داخل قسمت FilePreferences  وارد می کنیم.

بعد از انجام اینکار به قسمت Tools > Board > Boards Manager مراجعه و اسم ESP32 را سرچ کنید. پس از پیدا شدن کتابخانه آنرا نصب می کنیم.

حالا از منوی tools بورد را روی ESP32 wrover module قرار میدیم و بقیه مشخصات را مطابق تصویر زیر تنظیم می کنیم.

حالا می تونیم متصل شویم و کد هارو آپلود کنیم

درصورتی که قبلا ماژول ESP در Arduino IDE نصب کردید از این مرحله رد شید.

سیم کشی و اتصالات

با توجه به تصویر زیر اتصالات مدار رو انجام دهید.

سیم کشی مدار برای پیاده سازی پروژه روشنایی هوشمند

در مدار، ولتاژ بیس ترانزیستور BD139 با استفاده از پین 21 ESP32 تامین می شود. ولتاژ بیس، جریان بین کلکتور و امیتر BD139 را کنترل می کند. این یک کاربرد ترانزیستور در یک ناحیه تقویت کننده (خطی) است. اکنون می‌توانیم ولتاژ و در نتیجه روشنایی یک LED را کنترل کنیم.

توجه داشته باشید که در ESP32 شماره پین های ورودی-خروجی عمومی (GPIO) در پشت آن ذکر شده است. همچنین می توانید برای اطلاعات دقیق تر کاربرد و معرفی پین های ESP32 را مطالعه کنید.

ESP32 را با استفاده از منبع تغذیه 5 ولت (حداکثر تا 500 میلی آمپر)، یا مستقیماً با کمک USB یا پاوربانک وصل کنید. LED بسته به نیاز آن تغذیه می شود – برخی از آنها 12 ولت هستند، در حالی که برخی دیگر 5 ولت هستند.

تمام کابل های زمین باید یکی باشند.


کد‌ نویسی

کد زیر را در کتابخانه Arduino IDE کپی کنید. قبل از اپلود کد یکسری تغییرات باید در کد ایجاد کنید که باهم مرورشون می کنیم.

#include <WiFi.h> // This library contains the Wifi function to run on ESP-32

#define LEDC_CHANNEL_0 0 // In these 4 lines we have defined the PWM details for LED
#define LEDC_TIMER_13_BIT 13
#define LEDC_BASE_FREQ 5000
#define LED_PIN 21

#define min(a,b) ((a)<(b)?(a):(b)); // Defining Min Function

const char* ssid = "electronicsforu";
const char* password = "efygroup";

WiFiServer server(80);

#include "soc/soc.h" // Use this line only if your ESP-32 has Brownout Error
#include "soc/rtc_cntl_reg.h" // Use this line only if your ESP-32 has Brownout Error

int brightness = 0;

void ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) // function for analogWrite in Arduino 
{
uint32_t duty = (8191 / valueMax) * min(value, valueMax);
ledcWrite(channel, duty);
}

void setup()
{
Serial.begin(115200); //Baud Rate of ESP-32
delay(10);
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Use this line only if your ESP-32 has Brownout Errorc
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) 
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin(); // Start the server
ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); // PWM setup
ledcAttachPin(LED_PIN, LEDC_CHANNEL_0);
}
int value = 0;
void loop(){
WiFiClient client = server.available(); // listen for any incoming client

if (client) { // if you get any client,
Serial.println("New Client."); // print a message on the serial monitor
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) // loop while the client's connected
{ 
if (client.available()) // if there's bytes to read from the client
{ 
char c = client.read(); // read a byte, then
Serial.write(c); // print it out on the serial monitor
if (c == '\n') // if the byte is a newline character
{ 
if (currentLine.length() == 0) // if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
{ 
client.println("HTTP/1.1 200 OK"); // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
client.println("Content-type:text/html"); // and a content-type so the client knows what's coming,
client.println(); // then a blank line:
// the content of the HTTP response follows the header:
client.print("<a href=\"/A\">OFF</a><br>");
client.print("<a href=\"/B\">Level 1</a><br>");
client.print("<a href=\"/C\">Level 2</a><br>");
client.print("<a href=\"/D\">Level 3</a><br>");
client.print("<a href=\"/E\">Level 4</a><br>");
client.print("<a href=\"/F\">Level 5 Full</a><br>");
client.println(); // The HTTP response ends with another blank line:
break; // break out of the while loop: 
} 
else 
{ 
currentLine = ""; // if you got a newline, then clear currentLine:
}
} 
else if (c != '\r') // if you got anything else but a carriage return character,
{ 
currentLine += c; // add it to the end of the currentLine
}
if (currentLine.endsWith("GET /A")) // Check to see if the client request was "GET /A" or "GET /B" and so on...:
{
brightness = 0;
}
if (currentLine.endsWith("GET /B")) 
{
brightness = 50;
}
if (currentLine.endsWith("GET /C")) 
{
brightness = 100;
}
if (currentLine.endsWith("GET /D")) 
{
brightness = 150;
}
if (currentLine.endsWith("GET /E")) 
{
brightness = 200;
}
if (currentLine.endsWith("GET /F")) 
{
brightness = 255;
}
ledcAnalogWrite(LEDC_CHANNEL_0, brightness); // the analog value of brightness is written on the pin
}
}
client.stop(); // close the connection:
Serial.println("Client Disconnected.");
}
}

در قسمت Wi-Fi باید اسم شبکه و همچنین پسورد را بر اساس شبکه خودتون ست کنید.

کدنویسی در محیط Arduino IDE

در صورتی که برد ESP خطای Brownout نداشته باشد، این سه خط قابل حذف هستند.


توضیحات کد نوشته شده

در کد نوشته شده دستور include# به Arduino IDE کمک می کند تا عملکردهای ESP32 را اجرا کند. این کتابخانه شامل تمام توابع Wi-fi.xxxx استفاده شده در کد می باشد.

متأسفانه، ESP ها تابع analogWrite ندارند. بنابراین، خودمون باید این تابع را ایجاد کنیم. در اینجا، ledcAnalogWrite را ساختیم و مقادیری را که در آن تابع استفاده خواهند شد، تعریف کردیم.

کدنویسی در محیط Arduino IDE


دستور (){}void setup، تمام تنظیمات مورد نیاز برای اجرای برنامه اصلی مانند باود ریت (baud rate) در ()Serial.begin، مقداردهی اولیه Wi-Fi، تنظیم حالت پین، تنظیم تابع روشنایی و راه اندازی سرور از ()Server.begin را انجام می دهد.

کدنویسی در محیط Arduino IDE


در قسمت ()void loop برنامه اصلی وجود دارد.

کدنویسی در محیط Arduino IDE


هدف ما ایجاد یک صفحه وب بر روی سرور می باشد که بتوانیم با ایجاد دکمه های مختلف اون ها رو متصل کنیم. برای ایجاد این امکان باید از کد HTML در دستورات آردوینو مانند تصویر زیر استفاده کنیم.

کدنویسی در محیط Arduino IDE


اینکار باعث بوجود آمدن دکمه هایی در صفحه وب خواهد شد که با استفاده از آن ها می توان روشنایی LED را کنترل کرد.

کدنویسی در محیط Arduino IDE


بعد از تنظیم مقادیر حالا می توانیم مقادیر زیر را که در analogWrite برای ESP32 نوشته بودیم، اضافه کنیم.

client.stop();
Serial.println("Client Disconnected.");
}

در نهایت کد را ذخیره کنید.

سپس به آدرس Tools>Boards Manager>ESP32 Dev Module مراجعه کنید. سپس به مسیر Tools>Upload Speed>115200 رفته و در آنجا پورت COM را انتخاب کنید.

کدنویسی در محیط Arduino IDE

بعد از انجام مراحل بالا کد را آپلود کنید.


اتصال به وب سرور

بعد از آپلود کد به مسیر Tools>Serial Monitor مراجعه کنید. در اینجا ESP32 با اتصال به Wi-Fi، آدرس IP خودشو در Arduino serial monitor نمایش میده.

اتصال به وب سرور

پس از اطمینان از روشن بودن و اتصال به مودم وای فای مشترک، آدرس IP نمایش داده شده در Arduino serial monitor قسمت جستجو مرورگر خود وارد کنید. صفحه ای مانند عکس زیر برای شما به نمایش در میاد که حالا قادر هستید با استفاده از دکمه های موجود در صفحه وب، روشنایی LED را کنترل کنید.

نمایش تنظیمات کنترل چراغ


جمع بندی

در این آموزش ابتدا با طراحی یک مدار امکان اتصال آن به ماژول ESP32 را فراهم می کنیم. مرحله بعد در محیط نرم افزار Arduino IDE کد های مربوطه و همچنین مشخصات شبکه داخلی را وارد می کنیم. در نهایت با اتصال ESP32 به شبکه وای فای قادر به کنترل LED از طریق مرورگر خود هستیم. شما می توانید روشنایی هوشمند را به همین سادگی در خانه خود در مقیاس های بزرگتر پیاده سازی کنید و از آن لذت ببرید.

کنترل ESP32 با فرامین صوتی


این مقاله چطور بود ؟
+1
3
+1
30
+1
1
مشاهده بیشتر

محمد حسنی

علاقمند به حوزه IoT و الکترونیک. در حال حاضر به مدت یکسال است که در تیم سخت افزار سازان نام آور به تولید محتوا مشغول هستم.

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا