Giám sát trên Web

Một phần của tài liệu thi công hệ thống điều khiển các thiết bị trong toà nhà qua mạng internet (Trang 44 - 76)

Nhiệm vụ đặt ra là làm thế nào để biết được trạng thái các biến hệ thống và kiểm tra các trạng thái này thường xuyên trên Web Server?

Trên Arduino board sau khi tạo một thiết lập các biến chức năng, khởi tạo và thiết lập các giá trị ban đầu, hàm loop() sẽ thực hiện chính xác những giá trị các biến đã khởi

tạo ban đầu, và các vòng lặp được thực hiện liên tục lúc này Web Server luôn được làm mới, cho phép chương trình thay đổi và cập nhật mới nhất về trạng thái hệ thống trong đó gồm giá trị các cảm biến nhiệt độ và trạng thái tắt mở thiết bị.

Tại Website chúng ta cập nhật trạng thái hệ thống bằng cách thực hiện auto refresh bằng thẻ meta được đặt trong thẻ <head></head> của code HTML.

<meta http-equiv="refresh" content="15">(ở đây refresh với thời gian 15s/lần)

Sau đây, chúng ta sẽ đi vào một ví dụ cụ thể là đưa giá trị nhiệt độ đo được từ cảm biến nhiệt độ lên trình duyệt.

Hình 4.5: Từ cảm biến nhệt độ lên trình duyệt 4.3.3. Điều khiển trên Web

Công việc tiếp theo là làm cách nào để điều khiển thiết bị thông qua trình duyệt? Trước hết chúng ta tìm hiểu về thẻ <form>, cách đọc nó trong HTML code và phương pháp truyền tin được sử dụng trong đồ án này.

Web forms cho phép Web Server nhận dữ liệu từ người dùng thông qua mạng. Dữ liệu này có thể dùng để điều khiển một đầu ra hoặc một vùng nhớ của hệ thống. Chúng ta sẽ lấy một ví dụ là vi điều khiển nhận lệnh “On/Off” từ trang web và điều khiển trạng thái của một bóng đèn tương ứng.

Trang 40 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

Hình 4.6: Vi điều khiển nhận lệnh từ Web và điều khiển

Giống như bất kỳ phần nào trong HTML, web forms có thể nhận ra thông qua cặp thẻ <form></form>. Trong cặp thẻ này sẽ có các thẻ <input> với các kiểu tương tác người dùng (nút bấm, dạng check,…)

Phương pháp truyền dữ liệu: Sử dụng phương pháp GET để truyền dữ liệu điều khiển, dữ liệu được đặt ngay sau URL (ví dụ: /form.html?ten1=giatri1&ten2=giatri2). Tuy nhiên ở đây phương pháp GET được sử dụng bằng cách không gán method và action tại thẻ <form></form> mà sử dụng link đến URL bằng lệnh onClick để truyền dữ liệu

được đặt trong <form></form> tại các thẻ <input>. Code ví dụ tầng 1 và tầng 2 của toà nhà: <form>

<table border="0" align="center"> <tr>

<td></td> <td></td>

<td><h4 style="margin: 0 0 0 -5.9em;color: #0181eb;">TOÀ NHÀ</h4></td> <td></td></tr><tr class="floor">

<td><h4>Tầng 1</h4></td>

<td></td><td></td><td><h4 class="temper">Nhiệt độ: 30.25 &deg;C</h4></td> </tr><tr>

<td><h4>1. Đèn cửa chính</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H0'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L0'"></td> </tr>

<tr>

<td><h4>2. Đèn sảnh lớn</h4></td>

Trang 41 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

<td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L1'"></td> </tr>

<tr>

<td><h4>3. Quạt sảnh</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H2'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L2'"></td> </tr> (adsbygoogle = window.adsbygoogle || []).push({});

<tr>

<td><h4>4. Đèn lối đi</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H3'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L3'"></td> </tr>

<tr>

<td><h4>5. Đèn cầu thang</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H4'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L4'"></td> </tr>

<tr> <td></td>

<td><input class="all" type="button" value="ON All " onClick=" parent.location='/?H0H1H2H3H4'"></td>

<td></td>

<td><input class="all" type="button" value="OFF All" onClick=" parent.location='/?L0L1L2L3L4'"></td> </tr> <tr class="floor"> <td><h4>Tầng 2</h4></td> <td></td><td></td><td><h4 class="temper">Nhiệt độ: 30.25 &deg;C</h4></td> </tr><tr> <td><h4>1. Đèn cửa trước</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H5'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

Trang 42 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

</tr> <tr>

<td><h4>2. Đèn phòng A</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H6'"></td> <td><div class='grey-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L6'"></td> </tr>

<tr>

<td><h4>3. Đèn phòng B</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H7'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L7'"></td> </tr>

<tr>

<td><h4>4. Tivi phòng B</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H8'"></td> <td><div class='blue-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L8'"></td> </tr>

<tr>

<td><h4>5. Đèn cầu thang</h4></td>

<td><input type="button" value="ON " onClick="parent.location='/?H9'"></td> <td><div class='grey-circle'><div class='glare'></div></div></td>

<td><input type="button" value="OFF" onClick="parent.location='/?L9'"></td> </tr> (adsbygoogle = window.adsbygoogle || []).push({});

<tr> <td></td>

<td><input class="all" type="button" value="ON All " onClick=" parent.location='/?H5H6H7H8H9'"></td>

<td></td>

<td><input class="all" type="button" value="OFF All" onClick=" parent.location='/?L5L6L7L8L9'"></td>

</tr> </table> </form>

Trang 43 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

4.4. Thiết kế phần cứng mạch chính

 Nguồn cung cấp:

Hình 4.7: Sơ đồ nguyên lý nguồn cung cấp cho toàn mạch

Khối nguồn: dùng IC ổn áp LM7805 để ổn định điện áp làm việc, các tụ để lọc điện áp ra. - Thông số kỹ thuật:

+ Vi = 9V ÷ 12V + Vo = 4.75V ÷ 5.25V + Imax = 1A

+ Pmax = 5.25W - Thông số linh kiện:

+ Cầu chỉnh lưu B1: diode cầu 1A. + Tụ C31 = 1000uF/16V: tụ lọc nguồn.

+ Tụ C32 = 1uF: tụ chống xung kim cho IC 7805. + Tụ C32 = 0.1uF: tụ chống xung kim cho IC 7805.

Trang 44 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

 Khối điều khiển – Arduino Mega 2560

Hình 4.8: Khối điều khiển – Arduino Mega 2560

- Cấp nguồn: nguồn được cấp vào board hoạt động tại chân Vin hoặc qua jack 2.1mm - Lấy tín hiệu:

+ Các chân từ 22 đến 41: lấy tín hiệu ra điều khiển 15 thiết bị. + Chân 2: lấy tín hiệu vào từ các cảm biến nhiệt độ.

 Khối giao tiếp mạng – Arduino Ethernet Shield

Hình 4.9: Khối giao tiếp mạng – Arduino Ethernet Shield

- Cấp nguồn: nguồn hoạt động được cấp tại chân Vin thông qua board Mega 2560. - Lấy tín hiệu: kết nối với router mạng qua cổng RJ45 để truyền tín hiệu điều khiển.

Trang 45 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

 Khối cảm biến nhiệt độ:

Hình 4.10: Sơ đồ nguyên lý khối cảm biến nhiệt độ

Khối cảm biến nhiệt độ: sử dụng giao thức OneWire nghĩa là tất cả các cảm biến cùng truyền tín hiệu trên một dây.

- Thông số kỹ thuật:

+ Nhiệt độ định mức: -55 ÷ 125°C (-67°F ÷ 257°F) + Độ phân giải: 9 ÷ 12 bit

+ Độ chính xác: ± 0.5°C từ -10°C ÷ 85°C + Thời gian truy vấn: < 750ms

+ Hoạt động: 3.0V ÷ 5.5V - Thông số linh kiện: (adsbygoogle = window.adsbygoogle || []).push({});

+ Cảm biến: DS18B20

Trang 46 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

 Khối công suất:

Trang 47 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

Khối công suất:

- Thông số kỹ thuật: + Vi = 5V

+ Dòng kích relay tối thiểu: 15 ÷ 20mA. - Thông số linh kiện:

+ Relay 5VDC: AC250VAC 7A; 24VDC 12A.

+ Điện trở R22 = R25 = R27 = R29 = 220Ω: tạo dòng qua led (I = 13.7mA). + Điện trở R21 = R24 = R26 = R28 = 2K2: tạo dòng bật transistor (I = 2.27mA). + Transistor T6, T7, T8, T9: transistor 2N2222 dùng kích relay.

+ Diode D8, D9, D10, D11: diode 1N4148 bảo vệ relay. + Led: báo trạng thái nguồn và trạng thái relay.

Trang 48 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1. Kết luận

Qua thời gian nghiên cứu, thi công đồ án đã cơ bản được hoàn thành. Bằng sự nỗ lực cố gắng của cá nhân phân phối công việc hợp lý, chặt chẽ, đúng tiến độ đã đề ra, bên cạnh đó còn là sự hướng dẫn nhiệt tình, tận tâm của thầy Phan Thanh Toản, đồ án này đã được hoàn thành đúng thời gian như đã định và đã đạt được yêu cầu đặt ra là thiết kế và thi công hệ thống điều khiển các thiết bị trong toà nhà qua mạng Internet. Trong quá trình thực hiện đề tài, em đã thu được những kết quả nhất định như sau:

- Mạch điện với các module trên mạch được thiết kế, thi công hoàn chỉnh và đã được thử nghiệm nhiều lần và đã hoạt động ổn định trong thực tế.

- Xây dựng được mô hình toà nhà thu nhỏ để ứng dụng điều khiển các thiết bị và tạo thành một hệ thống thống nhất.

Hệ thống điều khiển thiết bị điện trong toà nhà qua mạng Internet được thực hiện như trong đề tài là một hệ thống với các chức năng đạt được như sau:

 Hệ thống của thể điều khiển được thiết bị điện từ xa thông qua mạng Internet: - Người dùng có thể dùng máy tính đăng nhập vào Web Server và thực thi điều

khiển thiết bị ngay trên giao điện Web.

- Trạng thái của thiết bị được cập nhật ngay trên giao diện Web.

- Hệ thống có khả năng được bảo vệ tốt, nghĩa là người sử dụng phải có tên đăng nhập và mật khẩu thì mới đăng nhập được vào hệ thống.

 Hệ thống có tính năng đo và cập nhật nhiệt độ tại các tầng:

- Khối cảm biến đo nhiệt độ DS18B20 được kết nối tới vi điều khiển cho biết nhiệt độ phòng.

- Luôn cập nhật nhiệt độ về Web Server.

Để thực hiện được các chức năng nêu trên, em đã tìm hiểu, nghiên cứu các vấn đề có liên quan tới đề tài như: truyền thông SPI, giao thức TCP/IP, Board Arduino Mega 2560, Arduino Ethernet Shield, mạng Ithernet, tập lệnh dành cho Arduino, và các vấn đề khác liên quan tới đề tài. Trong đó, đặc biệt quan tâm đến ứng dụng Arduino, Arduino ngày càng phổ biến trên toàn thế giới, với giới công nghệ nó có những ứng dụng thật vượt trội và tiện dụng. Arduino thuộc dạng mã nguồn mở, rất dễ dàng code và phát triển ứng dụng, có các thư viện hỗ trợ và cả một cộng động rất lớn, họ sẵn sàng hỗ trợ khi chúng ta có bất cứ vần đề gì, với đề tài này em đã ứng dụng Arduino thực hiện điều khiển thiết bị qua mạng internet nó hoàn toàn là một đề tài hướng mở cho những ai quan tâm và phát triển thêm càng tăng tính năng hơn dựa trên nền tảng sẵn có.

Trang 49 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

Cuối cùng, theo nhận định chủ quan của cá nhân em thì đồ án đã được hoàn thành đúng thời gian cho phép và đã trình bày khá đầy đủ các mảng kiến thức liên quan, các vấn đề liên qua tới đề tài. Song do những điều kiện khách quan, đề tài này chỉ thực hiện một phần nhỏ đối với việc điều khiển. Đó là điều khiển 15 thiết bị công suất tại 3 tầng của toà nhà và đo nhiệt độ tại các tầng.

Trang 50 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

Trang 51 SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

5.2. Hướng phát triển đề tài

Do thời gian thực hiện đề tài có hạn và lượng kiến thức cá nhân là nhất định nên đề tài thực hiện xong chỉ đáp ứng được một phần nhỏ của một hệ thống hoàn chỉnh. Vì vậy, để đề tài này thêm phong phú hơn, mang nhiều tính thực tế hơn nữa, có khả năng ứng dụng cao hơn thì em đề xuất đưa thêm vào những yêu cầu như sau: (adsbygoogle = window.adsbygoogle || []).push({});

 Tích hợp thêm tính năng điều khiển các thiết bị bằng tin nhắn SMS.

 Giao tiếp phần cứng của các module chuyển sang bằng sóng vô tuyến để các module có thể tách rời nhằm dễ dàng cho việc lắp đặt, chỉnh sửa.

 Sử dụng thêm nhiều loại cảm biến khác, chẳng hạn như cảm biến độ ẩm không khí để đo độ ẩm không khí, hệ thống báo cháy tự động,… để ứng dụng vào đề tài.  Thêm khối bàn phím, thời gian thực để người dùng có thể trực tiếp chỉ định lại các

thông số của hệ thống sao cho phù hợp và có thể hẹn giờ để tắt/bật thiết bị theo ý muốn.

Hy vọng với những hướng phát triển nêu trên cùng với những ý tưởng, góp ý khác của các thầy cô giáo, các bạn đọc sẽ phát triển hơn nữa đề tài này, khắc phục những hạn chế, tồn tại của đề tài, làm cho đề tài trở nên phong phú hơn, mang tính ứng dụng cao hơn vào trong thực tế cuộc sống, phục vụ cho những lợi ích trong tương lai.

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

PHỤ LỤC A: CÀI ĐẶT ARDUINO IDE VÀ CÀI ĐẶT DRIVER

A.1. Cài đặt chương trình Arduino IDE

Truy cập vào trang web http://arduino.cc/en/Main/Software và tải về chương trình Arduino IDE phù hợp với hệ điều hành của máy mình bao gồm Windown, Mac OS hay Linux. Đối với Windown có bản cài đặt (.exe) và bản Zip, đối với Zip thì chỉ cần giải nén và chạy chương trình không cần cài đặt.

Sau khi cài đặt xong thì giao diện chương trình như sau:

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

A.2. Cài đặt Driver

Sử dụng cáp USB kết nối Arduino với máy tính, lúc này sẽ thấy đèn led power của board sáng. Máy tính nhận dạng thiết bị và sẽ thông báo:

“Device driver software was not successfully installed”

Bây giờ click vào Start Menu chọn Control Panel kế đến chúng ta chọn System and Security, click System và sau đó chọn Device Manager.

Chúng ta sẽ thấy cảnh báo màu vàng thiếu driver trên Arduino. Click chuột phải trên icon Arduino Mega 2560 sau đó chọn “Update Driver Software”

Hình A.2: Update Driver

Chọn “Browse my computer for driver software”.

Hình A.3: Chế độ update

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

Hình A.4: Driver Arduino board

Click “Next” Windown tự động cài đặt driver, qua trình cài đặt driver hoàn tất.

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

PHỤ LỤC B: MÃ CHƯƠNG TRÌNH ĐIỀU KHIỂN

//CHƯƠNG TRÌNH #include <Ethernet.h> #include <SPI.h> #include <EEPROM.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 #define TEMPERATURE_PRECISION 10 //CẤU HÌNH byte ip[] = { 192, 168, 1, 76 }; byte gateway[] = { 192, 168, 1, 254 }; byte subnet[] = { 255, 255, 255, 0 };

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetServer server = EthernetServer(80);

OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire);

DeviceAddress sensorDev_1= { 0x28, 0xA4, 0x0E, 0x75, 0x04, 0x00, 0x00, 0x8B }; DeviceAddress sensorDev_2= { 0x28, 0x49, 0xAC, 0x74, 0x04, 0x00, 0x00, 0xD7 }; DeviceAddress sensorDev_3= { 0x28, 0x68, 0x9F, 0x77, 0x04, 0x00, 0x00, 0x14 }; //BIẾN

int outputNum = 15;

boolean outputConversed = false; int onAllPins = false; (adsbygoogle = window.adsbygoogle || []).push({});

boolean outputStatus[15]; int outputAddress[15] = { 22, 24, 26, 28, 30, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41 }; String idC[15] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E" }; String buttonLabel[15] = {

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N

"1. Đèn cửa chính", "2. Đèn sảnh lớn", "3. Quạt sảnh", "4. Đèn lối đi", "5. Đèn cầu thang", "1. Đèn cửa trước", "2. Đèn phòng A", "3. Đèn phòng B", "4. Tivi phòng B", "5. Đèn cầu thang", "1. Đèn cửa trước", "2. Đèn phòng C", "3. Tivi phòng C", "4. Đèn phòng D", "5. Đèn cầu thang"

};

String onAll = ""; String offAll = ""; boolean reading = false;

unsigned long timeConnectedAt; boolean writeToEeprom = false; int outp = 0;

float temp1 = 0.0; float temp2 = 0.0; float temp3 = 0.0; String readString; boolean login = false; //CHẠY 1 LẦN void setup() {

Serial.begin(9600); readEepromValues();

boolean currentState = false;

for (int var = 0; var < outputNum; var ++) { pinMode(outputAddress[var], OUTPUT); if (outputConversed == true) { if (outputStatus[var] == 0) { currentState = true; } else { currentState = false; } digitalWrite(outputAddress[var], currentState); } else { if (outputStatus[var] == 0) { currentState = false; } else { currentState = true; }

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N digitalWrite(outputAddress[var], currentState); }

}

Ethernet.begin(mac, ip, gateway, subnet); server.begin();

sensors.begin();

if (!sensors.getAddress(sensorDev_1, 0)) Serial.println("Không tìm được địa chỉ cho sensor 1");

if (!sensors.getAddress(sensorDev_2, 1)) Serial.println("Không tìm được địa chỉ cho sensor 2");

if (!sensors.getAddress(sensorDev_3, 2)) Serial.println("Không tìm được địa chỉ cho sensor 3"); sensors.setResolution(sensorDev_1, TEMPERATURE_PRECISION); sensors.setResolution(sensorDev_2, TEMPERATURE_PRECISION); sensors.setResolution(sensorDev_3, TEMPERATURE_PRECISION); } //LẶP void loop() { sensors.requestTemperatures(); printTemperature1(sensorDev_1); printTemperature2(sensorDev_2); printTemperature3(sensorDev_3); checkClient(); } //checkClient Function void checkClient() {

EthernetClient client = server.available(); if (client) {

boolean currentLineIsBlank = true; boolean sentHeader = false;

boolean login = false;

Một phần của tài liệu thi công hệ thống điều khiển các thiết bị trong toà nhà qua mạng internet (Trang 44 - 76)