1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Thiết kế và thi công đồng hồ đo điện năng AC, DC giám sát dữ liệu trên internet

142 6 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 142
Dung lượng 10,91 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CNKT ĐIỆN TỬ - VIỄN THÔNG THIẾT KẾ VÀ THI CÔNG ĐỒNG HỒ ĐO ĐIỆN NĂNG AC, EC GIÁM SÁT DỮ LIỆU TRÊN INTERNET GVHD: TRƯƠNG NGỌC ANH SVTH: NGUYỄN HOÀNG NAM BÙI VĂN QUỐC SKL009341 Tp Hồ Chí Minh, tháng 08/2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐ NGHIỆP NGÀNH CNKT ĐIỆN TỬ - VIỄN THÔNG THIẾT KẾ VÀ THI CÔNG ĐỒNG HỒ ĐO ĐIỆN NĂNG AC, EC GIÁM SÁT DỮ LIỆU TRÊN INTERNET GVHD: TRƯƠNG NGỌC ANH SVTH: NGUYỄN HOÀNG NAM BÙI VĂN QUỐC SKL009341 Tp Hồ Chí Minh, tháng 08/2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO - ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ VÀ THI CÔNG ĐỒNG HỒ ĐO ĐIỆN NĂNG AC, DC GIÁM SÁT DỮ LIỆU TRÊN INTERNET SVTH1 : NGUYỄN HỒNG NAM MSSV SVTH2 : BÙI VĂN QUỐC MSSV Khóa Ngành GVHD Tp Hồ Chí Minh, tháng 08 năm 2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO - ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ VÀ THI CÔNG ĐỒNG HỒ ĐO ĐIỆN NĂNG AC, DC GIÁM SÁT DỮ LIỆU TRÊN INTERNET SVTH1 : NGUYỄN HỒNG NAM MSSV SVTH2 : MSSV Khóa Ngành GVHD : Tp Hồ Chí Minh, tháng 08 năm 2022 CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** Tp Hồ Chí Minh, ngày 01 tháng 07 năm 2022 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Hồng Nam Ngành: Cơng nghệ kỹ thuật Điện tử- Viễn thông Họ tên sinh viên: Bùi Văn Quốc Ngành: Công nghệ kỹ thuật Điện tử- Viễn thông Giảng viên hướng dẫn: GVC.ThS Trương Ngọc Anh Ngày nhận đề tài: 09/03/2022 Tên đề tài: Thiết kế thi công đồng hồ đo điện DC, AC giám sát liệu Internet Các số liệu, tài liệu ban đầu: Lập trình ESP8266 Arduino, ESP8266 Datasheet, MAX 485 Datasheet, Solarduino Nội dung thực đề tài: - Tìm hiểu chuẩn truyền thơng I2C, UART, giao thức Modbus RTU - Lập trình giao tiếp với module PZEM004T để đo thông số điện AC - Lập trình giao tiếp với module PZEM017 để đo thơng số điện DC - Lập trình cho module wifi ESP8266 Arduino IDE, gửi liệu lên Web đồng liệu App Smartphone - Thiết kế, kết nối linh kiện thành mơ hình hoàn thiện - Chạy thử nghiệm cân chỉnh hệ thống Sản phẩm: Mơ hình giám sát điện AC, DC đơn giản TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** Tp Hồ Chí Minh, ngày 10 tháng 03 năm 2022 LỊCH TRÌNH THỰC HIỆN KHĨA LUẬN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Hoàng Nam Lớp: 18161CLDT2A Họ tên sinh viên: Bùi Văn Quốc Lớp: 18161CLDT1A Tuần/ngày Tuần (07/03 – 13/03) Tuần (14/03 – 20/03) Tuần (21/03 – 27/03) Tuần (28/03 – 03/04) Tuần 5,6(04/04 - 17/04) Tuần 7, (18/04 – 01/05) Tuần 9,10 (02/05 – 15/05) Tuần 11, 12 (16/05 – 29/05) Tuần 13,14 (30/05 – 12/06) Tuần 15 (13/06 – 19/06) Giáo viên hướng dẫn CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪ N Họ tên Sinh viên: MSSV: 18161113 Nguyễn Hoàng Nam MSSV: 18161137 Bùi Văn Quốc Ngành: Công nghệ kỹ thuật Điện tử- Viễn thông Tên đề tài: Thiết kế thi công đồng hồ đo điện AC, DC giám sát liệu Internet Họ tên Giáo viên hướng dẫn: GVC.ThS Trương Ngọc Anh NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: ……………………………………………………………………… ……………………………………………………………………………………… Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng 07 năm 2022 Giáo viên hướng dẫn CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên: MSSV: 18161113 Nguyễn Hoàng Nam MSSV: 18161137 Bùi Văn Quốc Ngành: Công nghệ kỹ thuật Điện tử- Viễn thông Tên đề tài: Thiết kế thi công đồng hồ đo điện AC, DC giám sát liệu Internet Họ tên Giáo viên phản biện: NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 2022 Giáo viên phản biện LỜI CAM ĐOAN Nhóm cam đoan báo cáo làm từ kiến thức tổng quát chuyên ngành nhóm tích lũy q trình học tập rèn luyện Bên cạnh đó, nhóm tìm hiểu từ nhiều nguồn tài liệu để hoàn thành đề tài Các kết nghiên cứu kết luận báo cáo trung thực, không chép từ nguồn Người thực đề tài Nguyễn Hoàng Nam Bùi Văn Quốc i LỜI CẢM ƠN Lời nói nhóm em xin gửi lời cảm ơn chân thành lòng tri ân sâu sắc đến Thầy Trương Ngọc Anh Thầy dành khoảng thời gian quý báu trực tiếp hướng dẫn tận tình giúp đỡ, tạo điều kiện để nhóm hồn thành tốt đề tài Bên cạnh đó, nhóm xin chân thành cảm ơn quý Thầy Cô trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh nói chung q Thầy Cơ khoa Điện – Điện tử nói riêng với tri thức tâm huyết truyền đạt kiến thức quý báu, tạo dựng móng cho chúng em có sơ sở kiến thức cần thiết suốt thời gian học tập trường, nhờ nhóm hồn thành tốt Đề Tài Và đặc biệt nhóm xin chân thành gửi lời cảm ơn đến bạn sinh viên lớp 18161CLDT chia sẻ, trao đổi kiến thức, kinh nghiệm quý báu để góp phần giúp nhóm hồn thành đề tài tốt Cuối cùng, nhóm xin phép cảm ơn gia đình, bạn bè ln bên cạnh hỗ trợ, động viên nhóm mặt tinh thần lẫn tài suốt thời gian nhóm thực đề tài Xin chân thành cảm ơn ! Người thực đề tài Nguyễn Hồng Nam Bùi Văn Quốc ii BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO [1]Nguyễn Đình Phú (2007), Giáo trình “Vi điều khiển”, Trường ĐH Sư Phạm Kỹ Thuật TP Hồ Chí Minh [2]Hồ Lê Minh Hải (2022), Đồ án môn học “Thiết kế thi công giám sát điện từ xa” [3]TAPIT (2020), https://tapit.vn/khai-niem-ve-giao-thuc-modbus-rtuva-ket-noi-phan-cung/ [4]4E VN Projects(2021), https://www.4evn.com/2021/09/cong-to-ientu-wifi-theo-doi-chi-so-qua.html [5]Lập trình ESP8266 Arduino IDE, http://arduino.vn/baiviet/1712-lap-trinh-esp8266-bang-arduino-ide [6]Datasheet PZEM004T (2018), https://github.com/olohs/PZEM004T [7]Internet of things (2018), http://iot.dtt.vn/InternetofThings.html [8]hshop.vn,"https://hshop.vn/products/mach-do-dien-dc-da-nang200a-giao-tiep-rs485-modbus-pzem-017” [9] DatasheetPZEM017,http://www.rcscomponents.kiev.ua/datasheets/pz e m-017%20-datasheet.pdf [10] Solarduino(2020),https://solarduino.com/diy-bi-directional- ac-energy-meter-for-solar-pv-system/ [11] Solarduino(2020), https://solarduino.com/pzem-017-dc- energy-meter-online-monitoring-with-blynk-app/ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC PHỤ LỤC *Code Arduino hệ thống: #include #include #include #include #include #include SoftwareSerial PZEMSerial; #include #include LiquidCrystal_I2C lcd(0x27,20,4); #include //String readString; #define BLYNK_PRINT Serial #define APP_DEBUG #define BLYNK_TEMPLATE_ID "TMPLiX7VkUMV" #define BLYNK_DEVICE_NAME "Cong To Dien Online" #define BLYNK_FIRMWARE_VERSION "0.1.0" #define BLYNK_AUTH_TOKEN "amG1N1yrDFz5lhK_-rBFch9ntlTiZZ1C" char auth[]= BLYNK_AUTH_TOKEN; char ssid[]= "No internet"; char pass[]= "@@18161308@@"; #if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN) #define PZEM_RX_PIN D3 #define PZEM_TX_PIN D4 #endif SoftwareSerial pzemSWSerial(PZEM_RX_PIN, PZEM_TX_PIN); PZEM004Tv30 pzem(pzemSWSerial); SimpleTimer timer; #define MAX485_RE #define MAX485_RO #define MAX485_DI 16 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC float PZEMCurrent =0; =0; 0x01; float PZEMPower float PZEMEnergy=0; static uint8_t pzemSlaveAddr = static uint8_t pzemSlaveAddr2 = 0x02; 0x0000; static uint16_t NewshuntAddr = unsigned long startMillisPZEM; unsigned long currentMillisPZEM; unsigned long startMilliSetShunt; const unsigned long periodPZEM = 500; unsigned long st= millis(); unsigned long startMillisReadData; unsigned long currentMillisReadData; const unsigned long periodReadData = 1000; int ResetEnergy = 0; unsigned long startMillis1; const char* host = "script.google.com" ; const int httpsPort = 443; WiFiClientSecure client; String GAS_ID = "AKfycbxC_-Jrq7n-PTy75J1MYzt0pdc7y-jd5HVNRT-jh_alrFIKcqO5NM6RnQn7x0N3PBbMQ"; void sendEnergy() { / pzem_info pzemData = pzem.getData(); Serial.print("Custom Address:"); Serial.println(pzem.readAddress (), HEX); float voltage = u = pzem.voltage(); float current = i = pzem.current(); float power = w = pzem.power(); float energy = Wh = pzem.energy(); float frequency = fe = pzem.frequency(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC float pf = pe = pzem.pf(); if(isnan(voltage)){ Serial.println("Error reading voltage"); } else if (isnan(current)) { } else if (isnan(power)){ } else if (isnan(energy)){ } else if (isnan(frequency)){ } else if (isnan(pf)){ Serial.println("Error reading factor"); } else { "); "); "); "); "); Serial.print("Voltage: Serial.print(voltage); Serial.print("Current: Serial.print(current); Serial.print("Power: Serial.print(power); Serial.print("Energy: Serial.print(energy,3); Serial.print("Frequency: Serial.print(frequency,1); Serial.print("PF: "); lcd.setCursor(0, 0); lcd.print(F("Vac:")); lcd.setCursor(4, 0); lcd.print(voltage); lcd.setCursor(0, 1); lcd.print(F("Iac:")); lcd.setCursor(4, 1); lcd.print(current); lcd.setCursor(0, 2); lcd.print(F("Wac:")); lcd.setCursor(4, 2); lcd.print(power); lcd.setCursor(0, 3); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC lcd.print(F("Wh")); lcd.setCursor(3, 3); lcd.print(F(":")); lcd.setCursor(4, 3); lcd.print(energy); } } Blynk.virtualWrite(V0, Blynk.virtualWrite(V1, Blynk.virtualWrite(V2, Blynk.virtualWrite(V4, Blynk.virtualWrite(V3, Blynk.virtualWrite(V5, voltage); current); power); energy); frequency); pf); void setup() { Serial.begin(9600); Wire.begin(14,12); lcd.init(); lcd.backlight(); delay(100); PZEMSerial.begin(9600,SWSERIAL_8N2,5,4); Blynk.begin(auth, ssid, pass, "blynk.cloud", 80); timer.setInterval(1000L, sendEnergy); startMillis1 =millis(); startMillisPZEM = millis(); pinMode(MAX485_RE, OUTPUT); digitalWrite(MAX485_RE, LOW); node.preTransmission(preTransmission); node.postTransmission(postTransmission); delay(1000); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC startMillisReadData = millis(); client.setInsecure (); } BLYNK_WRITE(V6) { if (param.asInt() == 1) { pzem.resetEnergy(); } else { }} BLYNK_WRITE(V11) { if(param.asInt()==1) { uint16_t u16CRC = 0xFFFF; static uint8_t resetCommand = 0x42; uint8_t slaveAddr =0X01; u16CRC = crc16_update(u16CRC, slaveAddr); u16CRC = crc16_update(u16CRC, resetCommand); preTransmission(); PZEMSerial.write(slaveAddr); PZEMSerial.write(resetCommand); PZEMSerial.write(lowByte(u16CRC)); PZEMSerial.write(highByte(u16CRC)); delay(10); postTransmission(); delay(100); } } void loop() { if(millis() - st > 30000) { st = millis(); sendData(); } Blynk.run(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC timer.run(); currentMillisPZEM = millis(); if (millis()- startMilliSetShunt == 10000) {setShunt(0x01);} node.begin(pzemSlaveAddr, PZEMSerial); /* if (currentMillisPZEM - startMillisPZEM >= periodPZEM) { uint8_t result; result = node.readInputRegisters(0x0000, 6); if (result == node.ku8MBSuccess) { uint32_t tempdouble = 0x00000000; PZEMVoltage = node.getResponseBuffer(0x0000) / 100.0; PZEMCurrent = node.getResponseBuffer(0x0001) / 100.0; < tempdouble = (node.getResponseBuffer(0x0003) 16) + node.getResponseBuffer(0x0002); PZEMPower = tempdouble / 10.0; tempdouble = (node.getResponseBuffer(0x0005) < 16) + node.getResponseBuffer(0x00 04); PZEMEnergy = tempdouble; } startMillisPZEM = currentMillisPZEM ; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC currentMillisReadData = millis(); if (currentMillisReadData - startMillisReadData >= periodReadData) { Serial.print("Vdc : "); Serial.print(PZEMVoltage); Serial.println(" V "); Serial.print("Idc : "); Serial.print(PZEMCurrent); Serial.println(" A "); Serial.print("Power : "); Serial.print(PZEMPower); Serial.println(" W "); Serial.print("Energy : "); Serial.print(PZEMEnergy); Serial.println(" Wh "); lcd.setCursor(11, 0); lcd.print(F("Vdc")); lcd.setCursor(14, 0); lcd.print(F(":")); lcd.setCursor(15, 0); lcd.print(PZEMVoltage); lcd.setCursor(11, 1); lcd.print(F("Idc:")); lcd.setCursor(15, 1); lcd.print(PZEMCurrent); lcd.setCursor(11, 2); lcd.print(F("Wdc:")); lcd.setCursor(15, 2); lcd.print(PZEMPower); lcd.setCursor(11, 3); lcd.print(F("Wh:")); lcd.setCursor(14, 3); lcd.print(F(":")); lcd.setCursor(15, 3); lcd.print(PZEMEnergy); Blynk.virtualWrite(V7,PZEMVoltage); Blynk.virtualWrite(V8,PZEMCurrent); Blynk.virtualWrite(V9,PZEMPower); Blynk.virtualWrite(V10,PZEMEnergy); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC startMillisReadData = millis(); } } void sendData () { Serial.println("======="); Serial.print("connecting to"); Serial.println(host); if (!client.connect(host, httpsPort)){ Serial.println("connection failed"); return; } String u_ac = String (u); String i_ac = String (i);; String w_ac = String (w); String wh_ac = String (Wh); String f = String (fe); String p = String (pe); String u_dc = String (PZEMVoltage); String i_dc = String (PZEMCurrent); String w_dc = String (PZEMPower); String wh_dc = String (PZEMEnergy); String url = "/macros/s/" + GAS_ID + "/exec?u=" + u_ac+ "&i=" + i_ac + "&w=" + w_ac + "&Wh=" + wh_ac + "&fe=" + f + "&pe=" + p + "&PZEMVoltage=" + u_dc + "&PZEMCurrent=" + i_dc + "&PZEMPower=" + w_dc + "&PZEMEnergy=" + wh_dc; Serial.print("requesting URL: "); Serial.println(url); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: BuildFailureDetectorESP8266\r\n" + "Connection: close\r\n\r\n"); Serial.println("request sent"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); break; } } String line = client.readStringUntil('\n'); if (line.startsWith("{\"state\":\"success\"")) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC Serial.println("esp8266/Arduino CI successfull!"); } else { Serial.println("esp8266/Arduino CI has failed"); } Serial.println("reply was:"); Serial.println("=========="); Serial.println(line); Serial.println("=========="); Serial.println("closing connection"); } void preTransmission(){ digitalWrite(MAX485_RE, 1); delay(1); } void postTransmission(){ delay(3); digitalWrite(MAX485_RE, 0); } void setShunt(uint8_t slaveAddr) { //Change the slave address of a node static uint8_t SlaveParameter = 0x06; static uint16_t registerAddress = 0x0003; uint16_t u16CRC = 0xFFFF; u16CRC = crc16_update(u16CRC, BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC slaveAddr); u16CRC = crc16_update(u16CRC, SlaveParameter); u16CRC = crc16_update(u16CRC, highByte(registerAddress)); u16CRC = crc16_update(u16CRC, lowByte(registerAddress)); u16CRC = crc16_update(u16CRC, highByte(NewshuntAddr)); u16CRC = crc16_update(u16CRC, lowByte(NewshuntAddr)); preTransmission(); PZEMSerial.write(slaveAddr); PZEMSerial.write(SlaveParameter); PZEMSerial.write(highByte(registerAddress)); PZEMSerial.write(lowByte(registerAddress)); PZEMSerial.write(highByte(NewshuntAddr)); PZEMSerial.write(lowByte(NewshuntAddr)); PZEMSerial.write(lowByte(u16CRC)); PZEMSerial.write(highByte(u16CRC)); delay(10); postTransmission(); delay(100); while (PZEMSerial.available()) { } } *Code quản lý liệu Google Sheets: function doGet(e) { Logger.log( JSON.stringify(e) ); var result = 'Ok'; if (e.parameter == 'undefined') { result = 'No Parameters'; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC else { var sheet_id = '1FwSKCqLiBKdM7759WQWIlvVFV7vst2frw2UXPHvKiAs'; var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet(); var newRow = sheet.getLastRow() + 1; var rowData = []; d=new Date(); rowData[0] = d; rowData[1] = d.toLocaleTimeString(); for (var param in e.parameter) { Logger.log('In for loop, param=' + param); var value = stripQuotes(e.parameter[param]); Logger.log(param + ':' + e.parameter[param]); switch (param) { case 'u': rowData[2] = value; break; case 'i': rowData[3] = value; break; case 'w': rowData[4] = value; break; case 'Wh': rowData[5] = value; break; case 'fe': rowData[6] = value; break; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC case 'pe': rowData[7] = value; break; case 'PZEMVoltage': rowData[8] = value; break; case 'PZEMCurrent': rowData[9] = value; break; case 'PZEMPower': rowData[10] = value; break; case 'PZEMEnergy': rowData[11] = value; break; default: result = "unsupported parameter"; } } Logger.log(JSON.stringify(rowData)); var newRange = sheet.getRange(newRow, 1, 1, rowData.length); newRange.setValues([rowData]); } return ContentService.createTextOutput(result); } function stripQuotes( value ) { return value.replace(/^["']|['"]$/g, ""); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH

Ngày đăng: 05/05/2023, 15:23

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

TÀI LIỆU LIÊN QUAN

w