1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Thiết kế hệ thống đa cảm biến giám sát và phân tích chất lượng môi trường trong toà nhà thông minh

103 47 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 103
Dung lượng 4,64 MB

Nội dung

Thiết kế hệ thống đa cảm biến giám sát và phân tích chất lượng môi trường trong toà nhà thông minh. Tìm hiểu về vấn đề giám sát chất lượng môi trường (bao gồm chất lượng không khí, nhiệt độ, âm thanh, ánh sáng, v.v…) và các quy chuẩn chất lượng trong nước và quốc tế. Thiết kế mạch đa cảm biến (sensor array board) đo nhiều chỉ tiêu chất lượng với yêu cầu: thực hiện phép đo tương đối chính xác, chỉnh định..Thiết kế và phát triển hệ thống thu thập dữ liệu bao gồm việc tích hợp module truyền thông vào mạch đa cảm biến, phát triển thiết bị xử lý trung tâm (data center) bao gồm việc lựa chọn và phát triển phần cứng và xây dựng phần mềm thu thập và xử lý dữ liệu. Phát triển thành sản phẩm hoàn chỉnh, thử nghiệm thực tế. Các dữ liệu này có thể được hiển thị bằng LCD và đưa về máy tính trung tâm hiển thị trên một phần mềm giao diện (GUI).

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ĐỒ ÁN TỐT NGHIỆP Thiết kế hệ thống đa cảm biến giám sát phân tích chất lượng mơi trường tịa nhà thông minh NGUYỄN VĂN QUANG quang.nv166609@sis.hust.edu.vn Ngành CN-CN KT Điều khiển & TĐH Giảng viên hướng dẫn: TS Hoàng Đức Chính Bộ mơn: Viện: Tự động hóa Cơng nghiệp Điện HÀ NỘI, 7/2020 Chữ ký GVHD ĐỀ TÀI TỐT NGHIỆP Thiết kế hệ thống đa cảm biến giám sát phân tích chất lượng mơi trường tịa nhà thông minh Giáo viên hướng dẫn Ký ghi rõ họ tên Lời cảm ơn Để hoàn thành đồ án tốt nghiệp, lời em xin chân thành cảm ơn thầy cô Trường đại học bách khoa Hà nội nói chung thầy viện Điện nói riêng tận tình truyền đạt kiến thức suốt bốn năm học đại học giúp đỡ em trình thực đồ án Đặc biệt, em xin chân thành cảm ơn thầy hướng dẫn TS Hồng Đức Chính tận tình giúp đỡ, truyền đạt kiến thức, giúp chúng em định hướng thực đồ án cách tốt Bên cạnh đó, q trình làm đồ án gặp nhiều khó khăn giúp đỡ gia đình bạn bè , người bên cạnh động viên giúp đỡ em mặt vật chất tinh thần Em xin chân thành cảm ơn người cảm ơn nhà trường đồng hành với em suốt bốn năm đại học Tóm tắt nội dung đồ án Trong đồ án này, chúng em thiết kế hệ thống đa cảm biến giám sát phân tích chất lượng mơi trường tịa nhà thông minh Trong đồ án này, chúng em thực vấn đề: ̶̶̶ Tìm hiểu vấn đề giám sát chất lượng môi trường (bao gồm chất lượng khơng khí, nhiệt độ, âm thanh, ánh sáng, v.v…) quy chuẩn chất lượng nước quốc tế ̶̶ Thiết kế mạch đa cảm biến (sensor array board) đo nhiều tiêu chất lượng với yêu cầu: thực phép đo tương đối xác, chỉnh định ̶̶ Thiết kế phát triển hệ thống thu thập liệu bao gồm việc tích hợp module truyền thơng vào mạch đa cảm biến, phát triển thiết bị xử lý trung tâm (data center) bao gồm việc lựa chọn phát triển phần cứng xây dựng phần mềm thu thập xử lý liệu ̶̶ Phát triển thành sản phẩm hoàn chỉnh, thử nghiệm thực tế ̶̶ Các liệu hiển thị LCD đưa máy tính trung tâm hiển thị phần mềm giao diện (GUI) Chúng em sử dụng phần mềm Altium Designer 18 để thiết kế phần cứng, sử dụng phần mềm Arduino IDE để lập trình firmware cho vi điều khiển, dùng PostgreSQL để quản lý liệu hiển thị lên Grafana Kết đồ án xác so với thực tế Đồ án có tính ứng dụng cao thời đại cơng nghệ 4.0 nói chung lĩnh vực Smart Building nói riêng Từ q trình giám sát phân tích chất lượng mơi trường tịa nhà thơng minh, sau chúng em phát triển thêm như, điều khiển thiết bị tịa nhà, ví dụ nhiệt độ tòa nhà cao mức cho phép tự động bật điều hịa, cường độ ánh sáng phịng thấp tự động bật đèn…, Có thể đưa cảnh báo người dùng có thơng số vượt ngưỡng quy định Sinh viên thực Ký ghi rõ họ tên MỤC LỤC CHƯƠNG GIỚI THIỆU TỔNG QUAN 10 1.1 Đặt vấn đề .10 1.2 Các thông số môi trường cần giám sát tòa nhà .11 1.3 Các tiêu chuẩn chất lượng môi trường 11 1.4 Nhiệm vụ nội dung cần thực 16 CHƯƠNG TÌM HIỂU VỀ TỊA NHÀ THƠNG MINH 18 2.1 Giới thiệu tịa nhà thơng minh 18 2.2 Cơ chế hoạt động tịa nhà thơng minh .18 2.3 Lợi ích tịa nhà thông minh .19 CHƯƠNG THIẾT KẾ PHẦN CỨNG .21 3.1 Sơ đồ khối tổng quan hệ thống 21 3.2 Sơ đồ khối phần cứng 22 3.3 Lựa chọn cảm biến 23 3.4 Lựa chọn thiết bị ngoại vi 30 3.5 Tìm hiểu chuẩn giao tiếp sử dụng .32 3.6 Bảng tổng hợp thông số kết nối cảm biến với vi điều khiển 3.7 Lựa chọn vi điều khiển module truyền thông 37 3.8 Thiết kế nguồn cho hệ thống 39 3.9 Thiết kế lưu đồ thuật toán cho ESP8266 .41 3.10 Thiết kế mạch phần mềm Altium Designer 18 .44 35 CHƯƠNG THIẾT KẾ PHẦN MỀM 51 4.1 Sơ đồ khối phần mềm 51 4.2 Giao thức truyền thông 51 4.2.1 Giới thiệu giao thức MQTT 52 4.3 Phần mềm xử lí liệu 53 4.3.1 Thuật tốn lọc để xử lí liệu .53 4.4 Hệ quản trị sở liệu .54 4.5 Phần mềm hiển thị 55 4.6 Lưu đồ thuật toán phần mềm 56 CHƯƠNG MẠCH THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ ĐO ĐƯỢC 5.1 Mạch thực nghiệm 58 58 5.2 Đánh giá kết đo 60 5.3 Áp dụng thuật tốn lọc nhiễu Moving Average xử lí số liệu 68 CHƯƠNG KẾT LUẬN .73 6.1 KẾT LUẬN 73 6.2 HƯỚNG PHÁT TRIỂN ĐỀ TÀI 73 DANH MỤC HÌNH Y Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 1.1 Các yếu tố ảnh hưởng tới chất lượng môi trường nhà (IEQ) 10 2.1 Smart Building 18 3.1 Sơ đồ khối tổng quan hệ thống 21 3.2 Sơ đồ khối phần cứng cho node sensor 22 3.3 Cảm biến nhiệt độ, độ ẩm SHT31 .23 3.4 Cảm biến âm Max9814 26 3.5 Kết nối Master, Slave SPI 33 3.6 Nguyên lý hoạt động SPI 34 3.7 Nguyên lý hoạt động UART 35 3.8 Module ESP12-E .37 3.9 Sơ đồ chân ESP12-E 38 3.10 IC LM7805 40 3.11 IC LM1117 41 3.12 Sơ đồ nguyên lý mạch nguồn 41 3.13 Lưu đồ thuật toán cho ESP12-E 42 3.14 Lưu đồ thuật toán cho ESP12-E (tiếp) .43 3.15 Schematic board 45 3.16 Schematic board 46 3.17 Khối vi điều khiển 46 3.18 Cấu hình chân cho chế độ flash mode, run mode 47 3.19 Khối thời gian thực 48 3.20 Khối ADC 48 3.21 Khối SD card, cảm biến chuyển động LCD 49 3.22 Khối Conector 49 3.23 Khối nguồn 49 4.1 Sơ đồ khối phần mềm 51 4.2 Nguyên lý hoạt động MQTT 52 4.3 Lưu đồ thuật toán phần mềm .56 5.1 Mạch thực nghiệm .58 5.2 PCB boarrd .58 5.3 PCB board 59 5.4 PCB Board 59 5.5 PCB board nguồn .60 Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 5.6 Giao diện giám sát chất lượng môi trường Grafana 60 5.7 Drop down list Grafana 61 5.8 Hiển thị tất thông số từ sensor node 61 5.9 Thông số nhiệt độ, độ ẩm Node sensor 61 5.10 Thông số nhiệt độ, độ ẩm Node sensor 61 5.11 Nồng độ CO2 sensor node .63 5.12 Nồng độ CO2 sensor node .63 5.13 Cường độ ánh sáng đo từ sensor node 64 5.14 Cường độ ánh sáng đo từ sensor node 64 5.15 Nồng độ bụi mịn sensor node 65 5.16 Nồng độ bụi mịn đo sensor node .65 5.17 Màu sắc đo sensor node 66 5.18 Màu sắc đo sensor node 66 5.19 Nồng độ TVOC sensor node 67 5.20 Nồng độ TVOC sensor node 67 5.21 Số lần độ ồn vượt ngưỡng .67 5.22 Cảm biến HC SR 501 đếm số người 68 5.23 Biểu đồ nhiệt độ trước sau lọc với Moving Average 20 69 5.24 Đồ thị độ ẩm trước sau lọc với Moving Average 20 .70 5.25 Đồ thị bụi mịn trước sau lọc với Moving Average 20 70 5.26 Nồng độ CO2 trước sau lọc với Moving Average 20 71 5.27 Cường độ ánh sáng trước sau có lọc Moving Average 20 72 DANH MỤC BẢNG Bảng 1: Giá trị cho phép vi khí hậu nơi làm việc [2] 11 Bảng Bảng yêu cầu độ rọi trì tối thiểu cho phòng, khu vực làm việc [3] Bảng Giới hạn cho phép mức áp suất âm theo thời gian tiếp xúc [4] 14 Bảng Bảng tiêu chuẩn mức TVOC [5] 15 Bảng Giới hạn bụi mịn khơng khí [6] 15 Bảng Ngưỡng CO2 cần biết [7] .16 Bảng So sánh vài cảm biến nhiệt độ, độ ẩm 24 Bảng Bảng tổnrg hợp thơng số kết nối cảm biến với vi điều khiển.36 Bảng Chức chân Esp12-E 39 13 CHƯƠNG GIỚI THIỆU TỔNG QUAN 1.1 Đặt vấn đề Theo nghiên cứu “ phần lớn thời gian người dành cho hoạt động nhà (chiếm 86,9%), lại hoạt động trời (chiếm 7,6%) phương tiện giao thông (chiếm 5,5%).[ CITATION Kle \l 1033 ] Chất lượng môi trường nhà (IEQ) chất lượng mơi trường bên tịa nhà liên quan tới thơng số chất lượng khơng khí, nhiệt độ, độ ẩm, ánh sáng, âm yếu tố ảnh hưởng tới sức khỏe người Việc đảm bảo chất lượng mơi trường bên tịa nhà mức nhiệt độ thích hợp, yên tĩnh, đủ ánh sáng, khơng khí lành, khơng bị ẩm ướt hay chất ô nhiễm yêu cầu cần thiết để sống, học tập làm việc khỏe mạnh tăng suất lao động Các thơng số ảnh hưởng đến chất lượng mơi trường thể hình 1.1 Hình 1.1 Các yếu tố ảnh hưởng tới chất lượng mơi trường nhà (IEQ) Để đảm bảo chất lượng khơng khí tịa nhà cần đo đạc, giám sát phân tích thơng số chất lượng khơng khí, từ làm sở để có biện pháp cải thiện hay nâng cao khơng khí tòa nhà để đảm bảo sức khỏe người Vì thế, định hướng giáo viên hướng dẫn, em lựa chọn đề tài: “Thiết kế hệ thống đa cảm biến giám sát phân tích chất lượng khơng khí tịa nhà thơng minh” unsigned long currentTime_8_8 = millis(); if ( currentTime_8_8 - previousTime_8_8 >= eventTime_8_MAX9814) { // Serial.print("Sound: "); // Serial.print(raw0); Serial.print(dB); Serial.println(" dB"); previousTime_8_8 = currentTime_8_8; } unsigned long currentTime_9_9 = millis(); if ( currentTime_9_9 - previousTime_9_9 >= eventTime_9_GP2Y) { Serial.print("Dust: "); Serial.print(dust); Serial.println(" ppm)"); previousTime_9_9 = currentTime_9_9; } //8-PIR unsigned long currentTime_10_10 = millis(); long state = digitalRead(PIR); if ( currentTime_10_10 - previousTime_10_10 >= eventTime_10_PIR) { val = digitalRead(PIR); // read PIR sensor input value if (val == HIGH) { // check if the input is HIGH if (pirState == LOW) { currentState = 1;// we have just turned on pirState = HIGH;// We only want to print on the output change, not state } } else { if (pirState == HIGH){ currentState = 0;// we have just turned of pirState = LOW;// We only want to print on the output change, not state } } if(currentState != previousState){ if(currentState == 1){ pir_counter = pir_counter + 1; currentState=previousState; } } previousTime_10_10 = currentTime_10_10; } switch (page_counter) { case 1:{ //Design of home page lcd.setCursor(0, 0); lcd.print("Date: "); lcd.setCursor(0, 1); lcd.print("Time: "); lcd.setCursor(6, 0); lcd.print(now.year(), DEC); lcd.print(":"); lcd.print(now.month(), DEC); lcd.print(":"); lcd.print(now.day(), DEC); lcd.setCursor(6, 1); lcd.print(now.hour(), DEC); lcd.print(":"); lcd.print(now.minute(), DEC); lcd.print(":"); lcd.print(now.second(), DEC); } break; case 2: { //Design of page lcd.setCursor(0,0); //line - temperature lcd.print("Temp(C): "); lcd.print(t); lcd.setCursor(0,1); //line - humidity lcd.print("RH(%): "); lcd.setCursor(9,1); lcd.print(h); } break; case 3: { //Design of page sensors_event_t event;// Get a new sensor event tsl.getEvent(&event);// Display the results (light is measured in lux) // put your setup code here, to run once: lcd.setCursor(5,0); lcd.print("Light: "); lcd.setCursor(3,1); lcd.print(event.light); lcd.setCursor(10,1); lcd.print("lux"); } break; case 4: { if(!ccs.readData()){ if(!ccs.readData()){ lcd.setCursor(0,0); lcd.print("eCO2: "); lcd.setCursor(7,0); lcd.print(ccs.geteCO2()); lcd.setCursor(11,0); lcd.print("ppm"); lcd.setCursor(0,1); lcd.print("TVOC :"); lcd.setCursor(7,1); lcd.print(ccs.getTVOC()); } } } break; case 5: { lcd.setCursor(0,0); lcd.print("R:"); lcd.setCursor(3,0); lcd.print(r); lcd.setCursor(8,0); lcd.print("G:"); lcd.setCursor(10,0); lcd.print(g); lcd.setCursor(0,1); lcd.print("B:"); lcd.setCursor(3,1); lcd.print(b); lcd.setCursor(8,1); lcd.print("C"); lcd.setCursor(10,1); lcd.print(c); } break; case 6: { measurement_t m = mhz19_uart->getMeasurement(); // Display on LCD1602 lcd.setCursor(6, 0); lcd.print("CO2: "); lcd.setCursor(5, 1); lcd.print(m.co2_ppm); lcd.setCursor(9, 1); lcd.print("ppm"); } break; case 7: { lcd.setCursor(0,0); lcd.print("Sound: "); lcd.setCursor(8,0); lcd.print(Counter); // lcd.setCursor(14,0); // lcd.print("mV"); lcd.setCursor(0,1); lcd.print("Dust: "); lcd.setCursor(8,1); lcd.print(dust); // lcd.setCursor(14,1); // lcd.print("mV"); } break; case 8: { long state = digitalRead(PIR); lcd.setCursor(0,0); lcd.print("People:"); lcd.setCursor(0,8); lcd.print(pir_counter); } break; }//switch end // -Auto scroll function - unsigned long currentTime = millis(); lcd.setCursor(15,1); //call current millis // Show millis counter status lcd.print((currentTime-previousTime_2)/1000); if (currentTime - previousTime_2 > eventTime_2_LCD) { //If interval is reached, scroll page previousTime_2 = currentTime; as new start point lcd.clear(); //replace previous millis with current millis //lcd clear if page is changed if (page_counter 10000) { DynamicJsonBuffer JSONbuffer; JsonObject& JSONencoder = JSONbuffer.createObject(); JSONencoder["sensorid"] = 2; JSONencoder["time"]= now.unixtime(); JSONencoder["temperature"] = t; JSONencoder["humidity"] = h; JSONencoder["light"]=event.light; JSONencoder["eco2"]= ccs.geteCO2(); JSONencoder["tvoc"]= ccs.getTVOC(); JSONencoder["red"]= r; JSONencoder["green"]= g; JSONencoder["blue"]= b; JSONencoder["co2"]= m.co2_ppm; JSONencoder["sound"]= Counter; JSONencoder["dust"]= dust; JSONencoder["people"]= pir_counter; int lenghtSimple = JSONencoder.measureLength(); Serial.print("Less overhead JSON message size: "); Serial.println(lenghtSimple); int lenghtPretty = JSONencoder.measurePrettyLength(); Serial.print("Pretty JSON message size: "); Serial.println(lenghtPretty); char JSONmessageBuffer[1000]; JSONencoder.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer)); client.publish("node2",JSONmessageBuffer,false); Serial.print("JSON: "); Serial.println(JSONmessageBuffer); Counter=0; pir_counter=0; lastMsg = current; } } } CHƯƠNG TRÌNH TẠO BẢNG import psycopg2 class DatabaseConnection: def init (self): try: self.connection = psycopg2.connect( "dbname='data' user='postgres' host='localhost' password='Sonhust1998' port='5432'") #tao ket noi voi database self.connection.autocommit = True self.cursor = self.connection.cursor() print("Connect to database") #in thong bao man hinh ket noi cong except: pprint("Cannot connect to database") cong #in thong bao man hinh ket noi khong def create_table(self): create_table_command = "CREATE TABLE %s(sensorid int, time bigint PRIMARY KEY , Temperature real, humidity real, light real, eco2 real, tvoc real, red real, green real, blue real, co2 real, sound real, dust real, peopel real)"%(command) self.cursor.execute(create_table_command) create_table_command = "CREATE TABLE %savg(sensorid real, time bigint PRIMARY KEY , Temperature real, humidity real, light real, eco2 real, tvoc real, red real, green real, blue real, co2 real, sound real, dust real, peopel real)"%(command) self.cursor.execute(create_table_command) def delete_table(self): # if exists Temperature delete_table_command = "DELETE FROM %s"%(command) self.cursor.execute(delete_table_command) delete_table_command = "DELETE FROM %savg"%(command) self.cursor.execute(delete_table_command) if name == ' main ': database_connection = DatabaseConnection() while True: command = input("You would to subcribe data node?") command = command.replace(" ","") cmd = "select * from information_schema.tables where table_name='%s'"%(command) x = impact.cmd1() if x == True: #kiem tra database co table='node ' database_connection.delete_table() #xoa du lieu bang if x == False: database_connection.create_table() #tao bang break CHƯƠNG TRÌNH THU THẬP DỮ LIỆU import paho.mqtt.subscribe as subscribe import json import psycopg2 import numpy as np import csv #khai bao module co file class impactDatabase: def connect(self): #tao ket noi toi database try: self.connection = psycopg2.connect( "dbname='data' user='postgres' host='localhost' password='Sonhust1998' port='5432'") self.connection.autocommit = True self.cursor = self.connection.cursor() print("Connect to database") #in thong bao ket noi cong man hinh except: pprint("Cannot connect to database") khoi chuong trinh def cmd(self): #in thong bao ket noi man hinh va thoat #thuc thi cac cau lenh cmd va tra ket qua ve self.cursor.execute(cmd) def cmd1(self): #thuc thi cac cau lenh cmd va tra ket qua True hoac False self.cursor.execute(cmd) return bool(self.cursor.rowcount) def close(self): #ngat ket noi toi database self.cursor.close() self.connection.close() if name == ' main ': impact = impactDatabase() impact.connect() while True: command = input("You would to subcribe data node?") command = command.replace(" ","") cmd = "select * from information_schema.tables where table_name='%s'"% (command) x = impact.cmd1() if x == True: #kiem tra database co table='node ' break fieldnames = ['sensorid', 'time', 'temperature','humidity','light','eco2','tvoc','red','green','blue','co2','sound','dust','people'] with open('%s.csv'%(command), 'w+', newline='') as csv_file: #mo file csv đe ghi va doc Truoc xoa het noi dung cua file hien co Neu file khong ton tai se tạo file moi voi ten la file truyen vao csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames) csv_writer.writeheader()#tao header voi filedname while True: msg = subscribe.simple("%s"%(command), hostname="broker.mqttdashboard.com") #subcribe topic print(msg.topic) #in topic nhan print(msg.payload.decode('utf-8')) #in message duoc nhan voi bo ma hoa utf-8 data = json.loads(msg.payload.decode('utf-8')) with open('%s.csv'%(command), 'a+', newline='') as csv_file: #mo file de doc va ghi neu khong ton tai,se tao file voi ten la ten file truyen vao csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames) csv_writer.writerow(data) #Nhap du lieu vao file csv x = "" y = [] for key, value in data.items(): x = x + "," + key y.append(str(value)) z = str(y) cmd = "INSERT INTO %s(%s)VALUES(%s)"%(command,x[1:],z[1:-1]) #cau lenh nhap dung lieu vao PostgresSQL impact.cmd() CODE CHƯƠNG TRÌNH XỬ LÍ SỐ LIỆU import csv import psycopg2 import scipy.signal as ss import numpy as np import matplotlib.pyplot as plt import pandas as pd ##khai bao module co file series = pd.read_csv('node1.csv', header=0) #doc file csv time = series['time'][9:] print(time) # Tail-rolling average transform rolling = series.rolling(window=10) #xu ly du lieu voi moving average rolling_mean = rolling.mean() k = rolling_mean.dropna() del k['time'] #xoa hang k co du lieu #xoa cot time k.insert(1, 'time', time) #them cot time vao print(k) # i = k.replace(k['temperature'], time) # print(i) k.to_csv('node1avg.csv',index=False) #nhap vao file csv conn = psycopg2.connect("dbname='data' user='postgres' host='localhost' password='Sonhust1998' port='5432'") #ket noi voi database cur = conn.cursor() cur.execute("DELETE FROM node1avg") #xoa du lieu dang co file with open('node1avg.csv', 'r') as f: reader = csv.reader(f) #doc file csv va luu vao next(reader) # Skip the header row for row in reader: cur.execute("INSERT INTO node1avg VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",row) #nhap du lieu vao postgresSQL conn.commit() ... biến giám sát phân tích chất lượng mơi trường tịa nhà thơng minh Để hiểu rõ cần giám sát phân tích chất lượng mơi trường tịa nhà thơng minh ban đầu em tìm hiểu tiêu chuẩn chất lượng môi trường. .. lựa chọn đề tài: ? ?Thiết kế hệ thống đa cảm biến giám sát phân tích chất lượng khơng khí tịa nhà thơng minh? ?? Em thấy đề tài có ứng dụng thực tiễn cao, giúp đảm bảo nâng cao chất lượng khơng khí...ĐỀ TÀI TỐT NGHIỆP Thiết kế hệ thống đa cảm biến giám sát phân tích chất lượng mơi trường tịa nhà thơng minh Giáo viên hướng dẫn Ký ghi rõ họ tên Lời cảm ơn Để hoàn thành đồ án tốt

Ngày đăng: 15/12/2021, 17:10

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w