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

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 48 - 76)

 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:

+ 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:

 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;

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; while (client.connected()) { if (client.available()) { char c = client.read(); readString.concat(c);

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N if (c == '*') { printHtmlHeader(client); printLogin(client); printHtmlFooter(client); break; } if (!sentHeader) { printHtmlHeader(client); printHtmlTitle(client); sentHeader = true; } if (reading && c == ' ') { reading = false; login = false; } if (c == '?') { reading = true; } if (login == false) { if (readString.indexOf("ten=huuhau&matkhau=huuhau") > 0) { login = true; } }

if (login && reading) { if (c == 'H') { outp = 1; } if (c == 'L') { outp = 0; } switch (c) { case '0':

triggerPin(outputAddress[0], client, outp); break;

case '1':

triggerPin(outputAddress[1], client, outp); break;

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

triggerPin(outputAddress[2], client, outp); break;

case '3':

triggerPin(outputAddress[3], client, outp); break;

case '4':

triggerPin(outputAddress[4], client, outp); break;

case '5':

triggerPin(outputAddress[5], client, outp); break;

case '6':

triggerPin(outputAddress[6], client, outp); break;

case '7':

triggerPin(outputAddress[7], client, outp); break;

case '8':

triggerPin(outputAddress[8], client, outp); break;

case '9':

triggerPin(outputAddress[9], client, outp); break;

case 'A':

triggerPin(outputAddress[10], client, outp); break;

case 'B':

triggerPin(outputAddress[11], client, outp); break;

case 'C':

triggerPin(outputAddress[12], client, outp); break;

case 'D':

triggerPin(outputAddress[13], client, outp); break;

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N triggerPin(outputAddress[14], client, outp); break; case 'thoat': login = false; readString = ""; break; } } if (c == '\n' && currentLineIsBlank) { if (login == false) { printLogin(client); printHtmlFooter(client); }

triggerPin(7676, client, outp); break; } } } printHtmlFooter(client); } else { if (millis() > (timeConnectedAt + 60000)) { if (writeToEeprom == true) { writeEepromValues(); } } } } //triggerPin Function

void triggerPin(int pin, EthernetClient client, int outp) { if (pin != 7676) { if (outp == 1) { if (outputConversed == false) { digitalWrite(pin, HIGH); } else { digitalWrite(pin, LOW); }

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N } if (outp == 0) { if (outputConversed == false) { digitalWrite(pin, LOW); } else { digitalWrite(pin, HIGH); } } } } //printHtmlButtons Function

void printHtmlButtons(EthernetClient client) { client.println("");

client.println("<form>");

client.println("<table border=\"0\" align=\"center\">"); client.print("<tr>\n");

client.print("<td></td>"); client.print("<td></td>");

client.print("<td><h4 style=\"margin: 0 0 0 -5.9em;color: #0181eb;\">"); client.print("TOÀ NHÀ"); client.print("</h4></td>\n"); client.print("<td></td>"); client.print("</tr>"); int countF = 1; float ArrTemper[4] = { 0.1, temp1, temp2, temp3 };

for (int var = 0; var < outputNum; var++) { onAll += "H";

onAll += idC[var]; offAll += "L"; offAll += idC[var];

if (var == 0 || var == 5 || var == 10) { client.print("<tr class=\"floor\">\n"); client.print("<td><h4>");

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N client.print(countF); client.print("</h4></td>\n"); client.print("<td></td>"); client.print("<td></td>"); client.print("<td>"); client.print("<h4 class=\"temper\">"); client.print("Nhiệt độ: "); client.print(ArrTemper[countF]); client.print(" &deg;C</h4></td>\n"); client.print("</tr>"); countF += 1; } client.print("<tr>\n"); client.print("<td><h4>"); client.print(buttonLabel[var]); client.print("</h4></td>\n"); client.print("<td>");

client.print("<input type=\"button\" value=\"ON "); client.print("\" onClick=\"parent.location='/?H"); client.print(idC[var]);

client.print("'\"></td>\n"); if (outputStatus[var] == true) { if (outputConversed == false) {

client.print(" <td><div class='blue-circle'><div class='glare'></div></div></td>\n");

} else {

client.print(" <td><div class='grey-circle'><div class='glare'></div></div></td>\n");

} } else {

if (outputConversed == false) {

client.print(" <td><div class='grey-circle'><div class='glare'></div></div></td>\n");

} else {

client.print(" <td><div class='blue-circle'><div class='glare'></div></div></td>\n");

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

client.print(" <td><input type=\"button\" value=\"OFF"); client.print("\" onClick=\"parent.location='/?L");

client.print(idC[var]); client.print("'\"></td>\n"); client.print("</tr>\n");

if (var == 4 || var == 9 || var == 14) { if (onAllPins == true) {

client.print("<tr>\n<td></td>\n");

client.print("<td><input class=\"all\" type=\"button\" value=\"ON All "); client.print("\" onClick=\"parent.location='/?");

client.print(onAll);

client.print("'\"></td>\n"); client.print("<td></td>\n");

client.print("<td><input class=\"all\" type=\"button\" value=\"OFF All"); client.print("\" onClick=\"parent.location='/?"); client.print(offAll); client.print("'\"></td>\n</tr>\n"); } onAll = ""; offAll = ""; } } client.println("</table>");

client.print("<h3 align=\"center\"><input type=button onClick=\"location.href='/?thoat'\" value='Thoát'></h3>"); client.println("</form>");

}

//readOutputStatuses Function void readOutputStatuses() {

for (int var = 0; var < outputNum; var ++) {

outputStatus[var] = digitalRead(outputAddress[var]); }

}

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N void readEepromValues() {

for (int adr = 0; adr < outputNum; adr++) { outputStatus[adr] = EEPROM.read(adr); }

}

//writeEepromValues Function void writeEepromValues() {

for (int adr = 0; adr < outputNum; adr++) { EEPROM.write(adr, outputStatus[adr]); }

}

void printTemperature1(DeviceAddress deviceAddress) { temp1 = sensors.getTempC(deviceAddress);

}

void printTemperature2(DeviceAddress deviceAddress) { temp2 = sensors.getTempC(deviceAddress);

}

void printTemperature3(DeviceAddress deviceAddress) { temp3 = sensors.getTempC(deviceAddress);

}

//htmlHeader Function

void printHtmlHeader(EthernetClient client) { timeConnectedAt = millis(); writeToEeprom = true; client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>");

client.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf- 8\">");

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

client.println("<meta name=\"description\" content=\"Điều khiển thiết bị từ xa qua mạng Ethernet\"/>");

client.println("<link href=\"http://nguyenhuuhau.com/hn-icon.png\" rel=\"icon\">"); client.println("<meta http-equiv=\"refresh\" content=\"15; url=/\">");

client.println("<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">"); client.println("<meta name=\"apple-mobile-web-app-status-bar-style\"

content=\"default\">");

client.println("<meta name=\"viewport\" content=\"width=device-width, user- scalable=no\">");

client.println("<style type=\"text/css\">"); client.println("body {");

client.println(" margin: 0;");

client.println(" font-family: helvetica, sans-serif;"); client.println(" background-color: #fff;");

client.println(" background-image:");

client.println(" -webkit-gradient(linear, right bottom, left top,"); client.println(" color-stop(.75, transparent),");

client.println(" color-stop(.75, rgba(0,0,0,.15)) );"); client.println(" -webkit-background-size: 1em;"); client.println(" }");

client.println("h1,h2,h3,h4 {");

client.println(" font-weight: bold;"); client.println(" }");

client.println(".wrapper {");

client.println(" min-height: 100%;"); client.println(" overflow: auto;"); client.println(" }");

client.println(".header {");

client.println(" color: #FFFF00;");

client.println(" background-color: #336702;");

client.println(" -webkit-box-shadow: inset 0 5px 21px 2px rgba(0,0,0,0.72);"); client.println(" -moz-box-shadow: inset 0 5px 21px 2px rgba(0,0,0,0.72);"); client.println(" box-shadow: inset 0 5px 21px 2px rgba(0,0,0,0.72);"); client.println(" padding: 0 .9em;");

client.println(" }");

client.println(".header h1 {");

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N client.println(" line-height: 2.2em;");

client.println(" margin: 0;"); client.println(" }");

client.println(".content {");

client.println(" margin: .9em;"); client.println(" }");

client.println(".info {");

client.println(" margin: 0 auto;"); client.println(" color: #D34836;"); client.println(" }");

client.println(".info h2 {");

client.println(" line-height: .5;");

client.println(" text-shadow: #fff 0 .1em 0;"); client.println(" }");

client.println(".content h3 {"); client.println(" line-height: 1.5;");

client.println(" text-shadow: #fff 0 .1em 0;"); client.println(" margin: .2em;");

client.println(" }");

client.println(".content .floor h4.temper {"); client.println(" margin: 0 0 0 -5.65em;"); client.println(" }");

client.println(" .all {");

client.println(" margin: .5em 0 0 -7.08em;"); client.println(" padding: .3em 1.4em;"); client.println(" }");

client.println(".content h4 {");

client.println(" font-size: 1.4em;"); client.println(" line-height: 1;"); client.println(" margin: .4em;"); client.println(" }");

client.println(".content .floor {"); client.println(" height: 2.5em;");

client.println(" vertical-align: bottom;"); client.println(" color: #0181eb;");

client.println(" }");

SVTH: NGUYỄN HỮU HẬU LỚP: L12CQVT02-N client.println(" margin: 0 .4em;");

client.println(" }");

client.println(".content table {");

client.println(" background-color: #fff;"); client.println(" border-radius: .5em;");

client.println(" border: solid .1em #a9a9a9;"); client.println(" padding: 1em;");

client.println(" -webkit-box-shadow: inset 0 0 15px 0 rgba(192,192,192,1);"); client.println(" -moz-box-shadow: inset 0 0 15px 0 rgba(192,192,192,1);"); client.println(" box-shadow: inset 0 0 15px 0 rgba(192,192,192,1);"); client.println(" }");

client.println(".blue-circle {");

client.println(" background: radial-gradient(circle farthest-side at center center, #FFFFFF 0%, #0181EB 100%);");

client.println(" box-shadow: #0181EB 0 0 1.5em;"); client.println(" }");

client.println(".grey-circle {");

client.println(" background: radial-gradient(circle farthest-side at center center, #FFFFFF 0%, #708090 100%);");

client.println(" box-shadow: #708090 0 0 1.5em;"); client.println(" }");

client.println(".grey-circle, .blue-circle {"); client.println(" display: block;");

client.println(" height: 2em;"); client.println(" width: 2em;");

client.println(" -moz-border-radius: 1.1em;"); client.println(" -webkit-border-radius: 1.1em;"); client.println(" -khtml-border-radius: 1.1em;"); client.println(" border-radius: 1.1em;");

client.println(" margin: 0 .3em;"); client.println(" }");

client.println(" .glare {");

client.println(" position: relative;"); client.println(" top: .7em;");

client.println(" left: .7em;"); client.println(" margin: 0;"); client.println(" height: .6em;");

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

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 48 - 76)

Tải bản đầy đủ (PDF)

(76 trang)