Hệ thống bật/tắt thiết bị bằng nút nhấn

Một phần của tài liệu ĐỒ án tốt NGHIỆP thiết kế hệ thống điều khiển nhà thông minh (Trang 33)

Hình 3.9 Sơ đồ hệ thống bật/tắt thiết bị bằng nút nhấn

Nguyên lý hoạt động: Khi chưa nhấn Button thì chân D8 nhận tín hiệu mức thấp, khi ta nhấn nút Button thì chân D8 sẽ nhận tín hiệu mức cao. Nếu Arduino nhận được tín hiệu mức cao ở chân D8 thì sẽ chuyển trạng thái chân D11 từ mức thấp thành mức cao, do đĩ thiết bị được bật, trạng thái thiết bị sẽ được thiết lập là mức cao. Nếu ta nhấn Button lần nữa, trạng thái thiết bị sẽ đảo ngược và tín hiệu chân D11 cũng sẽ chuyển từ cao thành thấp, thiết bị sẽ tắt.

Code hoạt động: const int Thietbi = 11; const int Button_thietbi = 8; int state_thietbi=0; void setup(){ Serial.begin(9600); pinMode(Thietbi,OUTPUT); pinMode(Button_thietbi,INPUT); } void loop() { if(digitalRead(Button_thietbi)==HIGH) { while(digitalRead(Button_thietbi)==HIGH); state_thietbi=!state_thietbi; digitalWrite(Thietbi,state_thietbi); } }

26

CHƯƠNG 4. HỆ THỐNG GIÁM SÁT, ĐIỀU KHIỂN NHÀ THƠNG MINH

BẰNG WEB SERVER THƠNG QUA INTERNET 4.1 Mạng Internet

Internet hay Mạng: là một hệ thống thơng tin tồn cầu cĩ thể được truy nhập cơng cộng gồm các mạng máy tính được liên kết với nhau. Hệ thống này truyền thơng tin theo kiểu nối chuyển gĩi dữ liệu (packet switching) dựa trên một giao thức liên mạng đã được chuẩn hĩa (giao thức IP). Hệ thống này bao gồm hàng ngàn mạng máy tính nhỏ hơn của các doanh nghiệp, của các viện nghiên cứu và các trường đại học, của người dùng cá nhân và các chính phủ trên tồn cầu, được liên kết bởi một loạt các cơng nghệ mạng điện tử, khơng dây và mạng quang. Internet mang theo một loạt các tài nguyên và dịch vụ thơng tin, chẳng hạn như các tài liệu và ứng dụng siêu văn bản được liên kết với nhau của World Wide Web (WWW), thư điện tử, điện thoại và chia sẻ file.

Internet là kiểu mạng cục bộ (LAN) được sử dụng rộng rãi nhất hiện nay. Thực chất, internet chỉ là mạng cấp dưới (lớp vật lý và một phần lớp liên kết dữ liệu), vì vậy cĩ thể sử dụng các giao thức khác nhau ở phía trên, trong đĩ TCP/IP là tập giao thức được sử dụng phổ biến nhất. Tuy vậy, mỗi nhà cung cấp sản phẩm cĩ thể thực hiện giao thức riêng hoặc theo một chuẩn quốc tế cho giải pháp của mình trên cơ sở internet. High Speed Ethernet (HSE) của Fieldbus Foundation chính là một trong tám hệ bus trường được chuẩn hĩa quốc tế theo IEC 61158. Mạng Internet mang lại rất nhiều tiện ích hữu dụng cho người sử dụng, một trong các tiện ích phổ thơng của Internet là hệ thống thư điện tử (email), trị chuyện trực tuyến (chat), máy truy tìm dữ liệu (search engine), các dịch vụ thương mãi và chuyển ngân, và các dịch vụ về y tế giáo dục như là chữa bệnh từ xa hoặc tổ chức các lớp học ảo. Chúng cung cấp một khối lượng thơng tin và dịch vụ khổng lồ trên internet.

Nguồn thơng tin khổng lồ kèm theo các dịch vụ tương ứng chính là hệ thống các trang Web liên kết với nhau và các tài liệu khác trong WWW (World Wide Web). Trái với một số cách sử dụng thường ngày, Internet và WWW khơng đồng nghĩa. Internet là một tập hợp các mạng máy tính kết nối với nhau bằng dây đồng, cáp quang,.. cịn WWW, hay Web, là một tập hợp các tài liệu liên kết với nhau bằng các siêu liên kết (hyperlink) và các địa chỉ URL, và nĩ cĩ thể được truy nhập bằng cách sử dụng Internet.

Một số trình duyệt web phổ biến hiện nay:

- Internet Explorer cĩ sẵn trong Microsoft Windows, của Microsoft.

- Mozilla và Mozilla Firefox của Tập đồn Mozilla.

- Netscape Navigator của Netscape.

- Opera của Opera Software.

- Safari trong Mac OS X, của Apple Computer.

- Maxthon của MySoft Technology.

- Avant Browser của Avant Force (Ý).

27

Từ khi ra đời đến nay, internet đã chứng minh được vai trị khơng thể thay thế khơng những đối với cơng nghệ mà cịn ngay cả đời sống hằng ngày của con người trên tồn thế giới. Internet kết nối tồn cầu và kết nối cả những giá trị cơng nghệ, đưa khoa học gần hơn vào ứng dụng cuộc sống, đưa cơng nghệ lên những tầm cao mới.

4.2 Địa chỉ IP

IP là một địa chỉ của một máy tính khi tham gia vào mạng nhằm giúp cho các máy tính cĩ thể chuyển thơng tin cho nhau một cách chính xác, tránh thất lạc. Cĩ thể coi địa chỉ IP trong mạng máy tính giống như địa chỉ nhà của bạn để nhân viên bưu điện cĩ thể đưa thư đúng cho bạn chứ khơng phải một người nào khác. Mỗi địa chỉ IP gồm cĩ 2 thành phần:

- NET ID: dùng đề nhận dạng hệ thống trong cùng một mơi trường vật lí cịn

được gọi là Phân Đoạn (Segment). Mọi hệ thống trong cùng một phân đoạn phải cĩ cùng Địa Chỉ Mảng. Địa chỉ này phải là duy nhất trong số các mạng hiện cĩ.

- HOST ID: dùng để nhận dạng một trạm làm việc, một máy chủ, một Router

hoặc một trạm TCP/IP trong cùng một Phân Đoạn. Địa chỉ trạm cũng phải là duy nhất trong một mạng.

IP sử dụng trong mơ dùng là IP tĩnh: IP này là địa chỉ được cấu hình thủ cơng cho các thiết bị kết nối mạng. Nĩ được gọi là IP tĩnh do tính chất cố định và khơng thể thay đổi. Các thiết bị phải được cấu hình đúng với router để chúng cĩ thể giao tiếp.

4.3 Thiết kế hệ thống giám sát và điều khiển bằng webserver qua internet

Hình 4.1 Sơ đồ khối hệ thống giám sát và điều khiển

28

- Hiển thị giá trị nhiệt độ, độ ẩm, khí gas, ánh sáng và cảnh báo khi cĩ sự cố như rị rì khí gas, nhiệt độ hoặc độ ẩm vượt quá mức cho phép.

- Điều khiển bật/tắt các thiết bị bằng webserver thơng qua internet và hiển thị trạng thái thiết bị lên webserver.

Vai trị của các thành phần trong hệ thống giám sát và điều khiển:

- Khối cảm biến: thu thập dữ liệu từ mơi trường để gửi về khối vi xử lí.

- Khối vi xử lí: cĩ trách nhiệm xử lý dữ liệu trước khi đưa lên webserver hoặc nhận tín hiệu điều khiển từ webserver để điều khiển bật/tắt các thiết bị. - Web server: cĩ vai trị đọc các thơng tin gửi từ khối vi xử lí sau đĩ hiển thị lên giao diện web, đồng thời gửi lệnh điều khiển từ người dùng trở lại khối vi xử lí.

- Khối chấp hành: bao gồm hệ thống đèn, quạt, cửa, cịi báo động. Khối này

nhận lệnh trực tiếp từ khối vi xử lí từ đĩ đưa ra hành động phù hợp.

Trong đề tài này, hệ thống các cảm biến được sử dụng để thu thập dữ liệu từ mơi trường ngồi, sau đĩ thực hiện quá trình xử lí, gửi lệnh tới cơ cấu chấp hành và gửi lên server. Trang web điều khiển được biết bằng ngơn ngữ HTML trong mơi trường của Arduino. Arduino đã phát triền một bộ thư viện Ethernet giúp cho người dùng cĩ thể trực tiếp viết code HTML ngay trong trình soạn thảo của arduino.

4.4 Nguyên lý điều khiển truyền nhận dữ liệu

4.4.1 Nguyên lý điều khiển – Truyền nhận dữ liệu sử dụng ESP8266

Quá trình giao tiếp, điều khiển gồm 2 phần :

- Webserver nhận tín hiệu trạng thái từ cơ cấu chấp hành để quản lý, giám sát:

Hình 4.2 Sơ đồ truyền tín hiệu từ cơ cấu chấp hành đến Webserver sử dụng ESP8266

Nguyên lý: Khi cĩ thiết bị được bật/tắt thủ cơng, tín hiệu sẽ được gửi đến ESP8266 bằng giao tiếp Serial, sau đĩ được gửi lên Webserver để hiển thị trạng thái thiết bị.

- Tín hiệu điều khiển từ WEB truyền về điều khiển các cơ cấu chấp hành:

Hình 4.3 Sơ đồ truyền tín hiệu từ Webserver đến cơ cấu chấp hành sử dụng ESP8266

Nguyên lý: Khi cĩ thao tác bật/tắt trên nút ảo của webserver thì tín hiệu sẽ truyền về ESP8266, ESP sẽ xử lý và đưa ra tín hiệu điều khiển cơ cấu chấp hành.

4.4.2 Nguyên lý điều khiển – Truyền nhận dữ liệu sử dụng Ethernet Shield

29

- Tín hiệu điều khiển từ WEB truyền về điều khiển các cơ cấu chấp hành:

Hình 4.4 Sơ đồ truyền tín hiệu từ Webserver đến cơ cấu chấp hành sử dụng Ethernet

Nguyên lý: Khi thực hiện các thao tác Bật/Tắt bằng các nút ảo trên giao diện Webserver, tín hiệu được truyền về server tại Ethernet Shiled, do module Ethernet Shiled được gắn trực tiếp với vi điều khiển Arduino và giao tiếp Serial đưa tín hiệu tới vi điều khiển, tại đây dữ liệu được xử lý so sánh để biết tín hiệu điều khiển là của thiết bị nào và cấp lệnh điều khiển cơ cấu chấp hành đĩ.

- Webserver nhận tín hiệu trạng thái từ cơ cấu chấp hành để quản lý, giám sát:

Hình 4.5 Sơ đồ truyền tín hiệu từ cơ cấp chấp hành đến Webserver sử dụng Ethernet

Nguyên lý: Hồn tồn tương tự như trên, nhưng chiều đi của tín hiệu ngược lại, khi một cơ cấu chấp hành được bật/tắt thủ cơng, sẽ cĩ tín hiệu truyền về vi điều khiển và do Ethernet Shield gắn trực tiếp với vi điều khiển nên tín hiệu truyền đến server của Ethernet bằng giao tiếp Serial, cuối cùng tín hiệu được truyền lên Webserver để Webserver cập nhật hiển thị trạng thái các thiết bị.

4.4.3 Ví dụ về điều khiển, giám sát thiết bị bằng Webserver

Chức năng: bật/tắt thiết bị bằng webserver: Phần cứng:

- ESP8266 NodeMCU CP2102

- Relay 4 kênh 5VDC

Sơ đồ kết nối:

Hình 4.6 Sơ đồ kết nối thiết bị

Code hoạt động:

30 #include <ESP8266WebServer.h>

const char* ssid = "P503"; // Enter SSID here

const char* password = "caovan99"; //Enter Password here ESP8266WebServer server(80);

uint8_t LED1pin = D4; bool LED1status = LOW; uint8_t LED2pin = D2; bool LED2status = LOW; uint8_t LED3pin = D3; bool LED3status = LOW; uint8_t LED4pin = D1; bool LED4status = LOW; void setup() { Serial.begin(115200); delay(100); pinMode(LED1pin, OUTPUT); pinMode(LED2pin, OUTPUT); pinMode(LED3pin, OUTPUT); pinMode(LED4pin, OUTPUT); Serial.println("Connecting to "); Serial.println(ssid);

//connect to your local wi-fi network WiFi.begin(ssid, password);

//check wi-fi is connected to wi-fi network while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected..!"); Serial.print("Got IP: "); Serial.println(WiFi.localIP());

server.on("/", handle_OnConnect);// nút ảo được kết nối server.on("/led1on", handle_led1on);//led bật -> nút ảo bật server.on("/led1off", handle_led1off);

server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off); server.on("/led3on", handle_led3on);

31 server.on("/led3off", handle_led3off); server.on("/led4on", handle_led4on); server.on("/led4off", handle_led4off); server.onNotFound(handle_NotFound); server.begin();

Serial.println("HTTP server started"); } void loop() { server.handleClient(); if(LED1status==HIGH) {digitalWrite(LED1pin, HIGH);} else {digitalWrite(LED1pin, LOW);} if(LED2status==HIGH) {digitalWrite(LED2pin, HIGH);} else {digitalWrite(LED2pin, LOW);} if(LED3status==HIGH) {digitalWrite(LED3pin, HIGH);} else {digitalWrite(LED3pin, LOW);} if(LED4status==HIGH) {digitalWrite(LED4pin, HIGH);} else {digitalWrite(LED4pin, LOW);} } void handle_OnConnect() {

LED1status = LOW;//ban đầu led 1 tắt LED2status = LOW;

LED3status = LOW; LED4status = LOW;

server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status,LED4status)); }

void handle_led1on() {//nút ảo bật LED1status = HIGH;

server.send(200, "text/html", SendHTML(true,LED2status,LED3status,LED4status)); }

32 LED1status = LOW;

server.send(200, "text/html", SendHTML(false,LED2status,LED3status,LED4status)); }

void handle_led2on() { LED2status = HIGH;

server.send(200, "text/html", SendHTML(LED1status,true,LED3status,LED4status)); }

void handle_led2off() { LED2status = LOW;

server.send(200, "text/html", SendHTML(LED1status,false,LED3status,LED4status)); }

void handle_led3on() { LED3status = HIGH;

server.send(200, "text/html", SendHTML(LED1status,LED2status,true,LED4status)); }

void handle_led3off() { LED3status = LOW;

server.send(200, "text/html", SendHTML(LED1status,LED2status,false,LED4status)); }

void handle_led4on() { LED4status = HIGH;

server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status,true)); }

void handle_led4off() { LED4status = LOW;

server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status,false)); }

void handle_NotFound(){

server.send(404, "text/plain", "Not found"); }

String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat,uint8_t led4stat){ String ptr = "<!DOCTYPE html> <html>\n";

ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";

ptr +="<title>Remote Control Using Wi-Fi</title>\n";

ptr +="<style>html {font-family: Helvetica; display: inline-block; margin: 0px auto; text- align: center;}\n";

33 20px}\n";

ptr +=".button {display: block;width: 100px;background-color: #1abc9c;border: none;color: white;padding: 10px 20px;text-decoration: none;font-size: 20px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";

ptr +=".button-on {background-color: #1abc9c;}\n"; ptr +=".button-on:active {background-color: #16a085;}\n"; ptr +=".button-off {background-color: #34495e;}\n"; ptr +=".button-off:active {background-color: #2c3e50;}\n"; ptr +="p {font-size: 20px;color: black;margin-bottom: 10px;}\n"; ptr +="</style>\n";

ptr +="</head>\n"; ptr +="<body>\n";

ptr +="<h1> &#272i&#7873u khi&#7875n kh&#244ng d&#226y s&#7917 d&#7909ng Wi-Fi </h1>\n";

//ptr +="<h1> Smart Home By Son Nguyen</h1> \n";

ptr +="<h1> Thi&#7871t b&#7883 &#273i&#7879n</h1> \n";

if(led1stat)

{ptr +="<p>Thi&#7871t b&#7883 1: T&#7855t</p><a class=\"button button-off\" href=\"/led1off\">B&#7853t</a>\n";}

else

{ptr +="<p>Thi&#7871t b&#7883 1: B&#7853t</p><a class=\"button button-on\" href=\"/led1on\">T&#7855t</a>\n";}

if(led2stat)

{ptr +="<p>Thi&#7871t b&#7883 2: B&#7853t</p><a class=\"button button-off\" href=\"/led2off\">B&#7853t</a>\n";}

else

{ptr +="<p>Thi&#7871t b&#7883 2: T&#7855t</p><a class=\"button button-on\" href=\"/led2on\">T&#7855t</a>\n";}

if(led3stat)

{ptr +="<p>Thi&#7871t b&#7883 3: B&#7853t</p><a class=\"button button-off\" href=\"/led3off\">B&#7853t</a>\n";}

else

{ptr +="<p>Thi&#7871t b&#7883 3: T&#7855t</p><a class=\"button button-on\" href=\"/led3on\">T&#7855t</a>\n";}

if(led4stat)

{ptr +="<p>Thi&#7871t b&#7883 4: B&#7853t</p><a class=\"button button-off\" href=\"/led4off\">B&#7853t</a>\n";}

else

{ptr +="<p>Thi&#7871t b&#7883 4: T&#7855t</p><a class=\"button button-on\" href=\"/led4on\">T&#7855t</a>\n";}

ptr +="</body>\n"; ptr +="</html>\n"; return ptr;

34 }

Giao diện Webserver:

Đầu tiên ta truy cập vào mạng Lan đã cài đặt cho ESP, sau đĩ truy cập vào địa chỉ IP hiện ra ở màn hình Serial Monitor trong phần mềm Arduino IDE, ta sẽ truy cập vào giao diện web như Hình 4.7.

Hình 4.7 Giao diện Web điều khiển sử dụng ESP8266

Khi ta nhấn bật thiết bị thì thiết bị sẽ được bật và trạng thái trên Web cũng được cập nhật.

Hình 4.8 Giao diện khi bật Relay 1 và Relay 2

35

CHƯƠNG 5.THIẾT KẾ, CHẾ TẠO MƠ HÌNH THỰC NGHIỆM

5.1 Mơ hình thực tế

Mơ hình nhà thực tế gồm 2 phịng: 1 phịng khách và 1 phịng ngủ được thiết kế với các thiết bị như sau:

- Cảm biến nhiệt độ và độ ẩm (phịng khách)

- Cảm biến khí Gas (phịng khách)

- Cảm biến ánh sáng (bên ngồi nhà)

- Cảm biến chuyển động (trước cửa phịng khách đi vào phịng ngủ)

- 3 đèn led: Lamp1 (bật/tắt online bằng Webserver – Phịng khách), Lamp2

(Bật/tắt dựa theo cảm biến ánh sáng – Phịng khách), Lamp3 (bật/tắt bằng nút nhấn – Phịng ngủ)

- 3 quạt: Fan1 (bật/tắt online bằng Webserver – Phịng khách), Fan2 (Bật/tắt dựa theo cảm biến nhiệt độ và độ ẩm – Phịng khách), Fan3 (bật/tắt bằng nút nhấn – Phịng ngủ)

- 1 Cịi báo động: Buzzer (báo động khi cĩ rị rỉ khí Gas – Phịng khách)

- 1 Cửa tự động từ phịng khác vào phịng ngủ: Door (đĩng/mở theo cảm biến

chuyển động)

Mơ hình thực tế sử dụng 1 board Arduino Mega 2560 kết hợp 1 board Ethernet Shield W5100 để cho khả năng kết nối ổn định và tốc độ truyền dữ liệu nhanh. Bên cạnh đĩ là khả năng cung cấp đủ chân dữ liệu (cả digital và analog) để sử dụng cho mơ hình.

Hình 5.1 Mơ hình nhà thực tế

36

Sơ đồ mạch điện mơ hình nhà thực tế:

Hình 5.3 Sơ đồ mạch điện mơ hình nhà thực tế

Code hoạt động mơ hình thực tế:

#include <SPI.h> // chuẩn giao tiếp ngoại vi nối tiếp #include <Ethernet.h> #include <DHT.h> #include <Servo.h> #define DHTTYPE DHT11 const int CBND = 7; const int CBCD = 9; const int CBgas = A7; const int CBAS = A9;

const int Lamp3 = 11;//button - relay 1 const int Fan3 = 40; //button

const int Door = 3; const int Buzzer = 17;//coi const int Led = 30;

const int Fan2 = 19;//relay2_cbnd

const int Lamp1 = 5;//relay4_on off online const int Lamp2 = 36;//relay3_lamp2_cbas const int Fan1 = 48;

const int buttonLamp3 = 46; const int buttonFan3 = 50;

int state_Lamp3=0,state_Fan3=0,state_Door=0,state_Buzzer=0,state_Fan2=0,state_Lamp1=0, state_Lamp2=0,state_Fan1=0;

Servo myServo;

DHT dht(CBND, DHTTYPE);

37 float Humidity, Temperature, Motion;

float Gas; float Light;

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // địa chỉ Mac vật lý cho ethernet W5100

IPAddress ip(192, 168, 100, 10); // địa chỉ IP cho ethernet cài trong mạng Lan EthernetServer server(80); //khởi tạo thư viện máy chủ ethernet với địa chỉ IP và cổng máy chủ (cổng 80 là mặc định cho HTTP)

String readString; //chuỗi để tìm nạp dữ liệu từ địa chỉ void setup() {

dht.begin();

Ethernet.begin(mac,ip); //bắt đầu kết nối ethernet và server server.begin(); //bắt đầu kết nối ethernet và server

Serial.begin(9600); //bắt đầu giao tiếp nối tiếp (Serial) với tốc độ 9600bit/s myServo.attach(Door); pinMode(buttonLamp3, INPUT); pinMode(buttonFan3, INPUT); pinMode(CBND, INPUT); pinMode(CBCD, INPUT); pinMode(CBgas, INPUT); pinMode(CBAS, INPUT); pinMode(Fan3, OUTPUT); pinMode(Door, OUTPUT); pinMode(Lamp3, OUTPUT); pinMode(Buzzer, OUTPUT); pinMode(Led, OUTPUT); pinMode(Fan2, OUTPUT); pinMode(Lamp1, OUTPUT); pinMode(Lamp2,OUTPUT); pinMode(Fan1,OUTPUT); } void loop() {

EthernetClient client = server.available(); //nghe các yêu cầu if (client) {

boolean currentLineIsBlank = true; //một yêu cầu http kết thúc bằng một dịng trống while (client.connected()) {

if (client.available()) {

char c = client.read(); //đọc char theo yêu cầu kiểu char của http if(readString.length()<100) {

readString+=c; //lưu các kí tự thành chuỗi Serial.write(c);

if (c == '\n' && currentLineIsBlank) { //nếu yêu cầu kết thúc Serial.println(readString);

38 if(readString.indexOf("Fan1on")>0) { //bấm bật quạt 1 state_Fan1=1; digitalWrite(Fan1,HIGH); } if(readString.indexOf("Fan1off")>0) { state_Fan1=0; digitalWrite(Fan1,LOW); } if(readString.indexOf("Lamp1on")>0) { state_Lamp1=1; digitalWrite(Lamp1,HIGH); } if(readString.indexOf("Lamp1off")>0) { state_Lamp1=0; digitalWrite(Lamp1,LOW); }

client.println("HTTP/1.1 200 OK"); //gửi trang web mới

Một phần của tài liệu ĐỒ án tốt NGHIỆP thiết kế hệ thống điều khiển nhà thông minh (Trang 33)