Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 149 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
149
Dung lượng
10,03 MB
Nội dung
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỘP THUỐC THÔNG MINH CHO NGƯỜI BỆNH GVHD: TS Nguyễn Thanh Hải SVTH: Lê Hồ Quang – 12141179 Nguyễn Quốc Khương - 12141117 Tp Hồ Chí Minh - 01/2018 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỘP THUỐC THÔNG MINH CHO NGƯỜI BỆNH GVHD: TS Nguyễn Thanh Hải SVTH: Lê Hồ Quang – 12141179 Nguyễn Quốc Khương - 12141117 Tp Hồ Chí Minh - 01/2018 TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC Tp HCM, ngày 15 tháng năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: Lê Hồ Quang Nguyễn Quốc Khương Kỹ thuật Điện - Điện tử Đại học quy 2012 MSSV: 12141119 MSSV: 12141117 Mã ngành: 510302 Mã hệ: D Lớp: 12141DT I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỘP THUỐC THÔNG MINH CHO NGƯỜI BỆNH II NHIỆM VỤ Các số liệu ban đầu: - Kit Arduino Mega, NodeMCU ngơn ngữ lập trình - Tài liệu Arduino Mega, NodeMCU, Firebase - Thư viện LCD, step motor Nội dung thực hiện: - Thiết kế mơ hình hộp thuốc: vỏ hộp, ống chứa thuốc, nắp đậy hộp, chân đế hộp - Lập trình cho mạch Arduino - Kết nối mạch điều khiển động cơ, mạch sim800a, hình LCD, nút nhấn, loa vào mạch Arduino - Đặt khối mạch điều khiển vào mô hình hộp thuốc - Thiết kế giao diện lập trình trang web theo dõi, điều khiển hộp thuốc từ xa - Chạy thử nghiệm hộp thuốc tự động - Cân chỉnh hệ thống III NGÀY GIAO NHIỆM VỤ: 11/10/2017 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 15/01/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: TS Nguyễn Thanh Hải CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH Tp HCM, ngày 15 tháng năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Lê Hồ Quang Lớp: 12141DT2B MSSV: 12141179 Họ tên sinh viên 2: Nguyễn Quốc Khương Lớp: 12141DT1A MSSV: 12141117 Tên đề tài: Thiết kế thi công hộp thuốc thông minh cho người bệnh Tuần/ngày Nội dung Tuần (25/9-1/10) Tuần (2/10-8/10) _Báo cáo GVHD _Tìm đề tài _Báo cáo GVHD _Tìm hiểu hoạt động Arduino Mega, NodeMCU _Báo cáo GVHD _Tổng hợp linh kiện cần dùng cho đề tài _Báo cáo GVHD _Tìm hiểu thiết kế cấu xoay, mơ hình đề tài _Báo cáo GVHD _Lập trình, tìm hiểu cách hoạt động linh kiện _Báo cáo GVHD _Lập trình code hoạt động cho tất linh kiện _Báo cáo GVHD _Tìm hiểu FireBase, lập trình web _Báo cáo GVHD _Thi cơng mơ hình bìa cứng nhựa _Báo cáo GVHD _Thi cơng mơ hình nhựa _Báo cáo GVHD _Thi cơng mơ hình nhựa _Báo cáo GVHD _Thi cơng mơ hình nhựa _Báo cáo GVHD _Kết nối linh kiện vào mơ hình chạy thử, hiệu chỉnh Tuần (9/10-15/10) Tuần (16/10-22/10) Tuần (23/10-29/10) Tuần (30/10-5/11) Tuần (6/11-12/11) Tuần (13/11-19/11) Tuần (20/11-26/11) Tuần 10 (27/11-3/12) Tuần 11 (4/12-10/12) Tuần 12 (11/12-17/12) Xác nhận GVHD Tuần 13 (18/12-24/12) Tuần 14 (25/12-31/12) _Báo cáo GVHD _Viết luận văn _Báo cáo GVHD _Chỉnh sửa, in đồ án GV HƯỚNG DẪN (Ký ghi rõ họ tên) ii LỜI CAM ĐOAN Đề tài tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Nếu có gian lận xin chịu trách nhiệm nội dung đồ án Người thực đề tài Lê Hồ Quang – 12141179 Nguyễn Quốc Khương - 12141117 LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn chân thành đến quý thầy, cô Trường Đại Học Sư Phạm Kỹ Thuật TP.HCM tận tình dạy bảo giúp đỡ chúng em suốt q trình học tập trường nói chung thầy, khoa Điện-Điện Tử nói riêng Các thầy khoa Điện-Điện Tử truyền đạt kiến thức, kinh nghiệm khơi dậy niềm đam mê tìm tòi sang tạo trong chúng em từ tảng bản, đam mê nhỏ nhoi giúp chúng em nổ lực hoàn thành đồ án cuối cùng, đồ án tốt nghiệp tạo ra, bước đệm cho phát triển sau chúng em Đặc biệt, chúng em chân thành cảm ơn Thầy Nguyễn Thanh Hải tận tình giúp đỡ trình chọn đề tài hỗ trợ suốt trình thực đề tài Trong trình thực xảy nhiều khúc mắc, thiếu sót đơn đốc góp ý thầy chúng em gặt hái nhiều kiến thức kinh nghiệm Một lần chân thành cảm ơn thầy Nhóm chân thành cảm ơn sâu sắc đến bạn lớp 12141DT chia sẻ nhiều kinh nghiệm quý báu cho nhóm thực tốt đề tài Cuối cùng, chúng xin chân thành cảm ơn động viên hỗ trợ gia đình cha mẹ suốt trình học tập Chúng xin gửi cảm ơn trân trọng đến bậc sinh thành nuôi dưỡng, hỗ trợ chúng từ kinh phí tinh thần giúp chúng hoàn thành tốt đề tài Nhóm em xin chân thành cảm ơn! Người thực đề tài Lê Hồ Quang – 12141179 Nguyễn Quốc Khương - 12141117 ii MỤC LỤC Trang bìa i Nhiệm vụ đồ án ii Lịch trình iii Phiếu đánh giá iv Cam đoan v Lời cảm ơn vi Mục lục vii Liệt kê hình vẽ ix Liệt kê bảng vẽ xi Tóm tắt xii CHƯƠNG TỔNG QUAN 1.1 Đặt vấn đề 1.2 Mục tiêu 1.3 Nội dung nghiên cứu 1.4 Giới hạn 1.5 Bố cục CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu phần cứng 2.1.1 Thiết bị đầu vào 2.1.2 Thiết bị đầu 2.1.3 Arduino Mega 2560 15 2.1.4 NodeMCU 1.0 (ESP-12E Module) 17 2.1.5 Mạch SIM800A 18 2.2 Các chuẩn truyền liệu 21 2.2.1 Giao tiếp I2C 21 2.1.2 Giao tiếp UART 24 2.1.3 Chuẩn giao tiếp Wifi 25 2.3 Firebase Hosting 30 2.4 Firebase Database 31 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Website tích hơp Firebase authentication để quản lý người phép sử dụng hộp thuốc Tích hợp cơng nghệ bảo mật cảm biến vân tay, cảm biến mống mắt, RFID BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 119 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO Sách tham khảo [1] Google, “Firebase Documentaion”, https://firebase.google.com/docs/web/setup, 2018 [2] NTP_PRO, “Giao tiếp I2C sử dụng module Realtime clock DS1307 (module RTC)”,http://arduino.vn/bai-viet/369-giao-tiep-i2c-va-su-dung-module-realtime-clockds1307 , 8/12/2015 [3] Bùi Mình Phúc, “ESP8266 NodeMCU – Một lựa chọn khác ngồi Adruino”, https://www.makerspace.vn/2017/07/26/esp8266-nodemcu-mot-lua-chon-khac-ngoaiadruino/, 26/7/2017 [4] Nhóm Review, “Module SIM800A Mini_Hướng dẫn sử dụng| Nhóm Review | R&D NEW PRODUCTS”, https://www.youtube.com/watch?v=ufhrJIY1qw8, 9/3/2017 [5] ArduinoInfo.Info WIKI, “Small Stepper Motor and Driver Board”, http://arduinoinfo.wikispaces.com/SmallSteppers, 2016 [6] Phạm Trần Đăng Khoa, “Tự học thiết kế Web tĩnh bản: HTML, CSS & jQuery KhoaPham.Vn”, https://www.youtube.com/watch?v=7x1PDHsQyGw&list=PLzrVYRai0riRDreiNl_QJ Oc9BEq3GE7Yp, 2015 [7] Trung tâm Tin tức, “Hộp thuốc thông minh, thân thiện với bệnh nhân”, http://www.htv.com.vn/Trang/TinTuc/2015-10-28/Hop-thuoc-thong-minh-than-thienvoi-benh-nhan.aspx, 28/10/2015 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP PHỤ LỤC PHỤ LỤC Các chương trình NodeMCU ///////////////////////////////////////////////////////////////////////////// void current() { DateTime now = rtc.now(); lcd.setCursor(0, 1); lcd.print(now.hour(), DEC); lcd.print(":"); lcd.print(now.minute(), DEC); lcd.print(":"); lcd.print(now.second(), DEC); lcd.print(" "); lcd.setCursor(0, 0); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); lcd.print( ", "); lcd.print(now.day(), DEC); lcd.print(" "); lcd.print(mmonth[now.month()-1]); lcd.print(" "); lcd.print(now.year()); if(now.minute() % == && now.second() == 0) database_update(); } ///////////////////////////////////////////////////////////////////////////// void time_check() { DateTime now = rtc.now(); if(pill == 0) { pill == 6; Serial.println("ROTATE"); period ++; } if(period > 6) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xiv PHỤ LỤC period == 1; Serial.println("RESTART"); enable = 0; } if(EEPROM.read(0) == now.hour() && EEPROM.read(1) == now.minute() && EEPROM.read(6) == ) { if(now.second() == 0) { Serial.println("ALARM"); stat = 1; delay(1000); } } if(EEPROM.read(2) == now.hour() && EEPROM.read(3) == now.minute() && EEPROM.read(7) == 1) { if(now.second() == 0) { Serial.println("ALARM"); stat = 1; delay(1000); } } if(EEPROM.read(4) == now.hour() && EEPROM.read(5) == now.minute() && EEPROM.read(8) == 1) { if(now.second() == 0) { Serial.println("ALARM"); stat = 1; delay(1000); } } if(EEPROM.read(0) == now.hour() && EEPROM.read(1) == now.minute() - && stat == 1) { Serial.println("CANCEL"); sendEmail1(); stat = 0; pill ; } if(EEPROM.read(2) == now.hour() && EEPROM.read(3) == now.minute() - && stat == 1) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xv PHỤ LỤC Serial.println("CANCEL"); sendEmail1(); stat = 0; pill ; } if(EEPROM.read(4) == now.hour() && EEPROM.read(5) == now.minute() - && stat == 1) { Serial.println("CANCEL"); sendEmail1(); stat = 0; pill ; } } ///////////////////////////////////////////////////////////////////////////// void database_update() { int HH1 = Firebase.getFloat("hour1"); int mm1 = Firebase.getFloat("minute1"); int HH2 = Firebase.getFloat("hour2"); int mm2 = Firebase.getFloat("minute2"); int HH3 = Firebase.getFloat("hour3"); int mm3 = Firebase.getFloat("minute3"); int alm1 = Firebase.getFloat("alarm1"); int alm2 = Firebase.getFloat("alarm2"); int alm3 = Firebase.getFloat("alarm3"); if(HH1 != EEPROM.read(0)) EEPROM.write(0, HH1); if(mm1 != EEPROM.read(1)) EEPROM.write(1, mm1); if(HH2 != EEPROM.read(2)) EEPROM.write(2, HH2); if(mm2 != EEPROM.read(3)) EEPROM.write(3, mm2); if(HH3 != EEPROM.read(4)) EEPROM.write(4, HH3); if(mm3 != EEPROM.read(5)) EEPROM.write(5, mm3); if(alm1 != EEPROM.read(6)) EEPROM.write(6, alm1); if(alm2 != EEPROM.read(7)) EEPROM.write(7, alm2); if(alm3 != EEPROM.read(8)) EEPROM.write(8, alm3); } ///////////////////////////////////////////////////////////////////////////// int nut_up(int temp) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xvi PHỤ LỤC if(digitalRead(up) == 1) { delay(100); if(digitalRead(up) == 1) { temp++; } //while(digitalRead(up) == 1); } return temp; } ///////////////////////////////////////////////////////////////////////////// int nut_down(int temp) { if(digitalRead(down)==1) { delay(100); if(digitalRead(down)==1) { temp ; } //while(digitalRead(down) == 1); } return temp; } ///////////////////////////////////////////////////////////////////////////// void nut_eject() { if(digitalRead(eject)==1) { delay(100); if(digitalRead(eject)==1) { Serial.println("EJECT"); stat = 0; pill ; } while(digitalRead(eject) == 1); } } ///////////////////////////////////////////////////////////////////////////// void nut_set() { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xvii PHỤ LỤC if(digitalRead(set) == 1) { delay(100); if(digitalRead(set) == 1) { mode++; if(mode > 4) mode = 0; if(mode == 1) { HH = EEPROM.read(0); MM = EEPROM.read(1); } if(mode == 2) { HH = EEPROM.read(2); MM = EEPROM.read(3); } if(mode == 3) { HH = EEPROM.read(4); MM = EEPROM.read(5); } lcd.clear(); } while(digitalRead(set) == 1); } } ///////////////////////////////////////////////////////////////////////////// void nut_adj() { if(digitalRead(adj) == 1) { delay(100); if(digitalRead(adj) == 1) { lcd.clear(); adjmode++; if(adjmode > 2) adjmode = 0; if(mode == 1) { if(adjmode == 1) { EEPROM.write(0, HH); EEPROM.commit(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xviii PHỤ LỤC Firebase.setFloat("hour1", HH); } if(adjmode == 2) { EEPROM.write(1, MM); EEPROM.commit(); Firebase.setFloat("minute1", MM); } } if(mode == 2) { if(adjmode == 1) { EEPROM.write(2, HH); EEPROM.commit(); Firebase.setFloat("hour2", HH); } if(adjmode == 2) { EEPROM.write(3, MM); EEPROM.commit(); Firebase.setFloat("minute2", MM); } } if(mode == 3) { if(adjmode == 1) { EEPROM.write(4, HH); EEPROM.commit(); Firebase.setFloat("hour3", HH); } if(adjmode == 2) { EEPROM.write(5, MM); EEPROM.commit(); Firebase.setFloat("minute3", MM); } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xix PHỤ LỤC } while(digitalRead(adj) == 1); } } ///////////////////////////////////////////////////////////////////////////// void nut_confirm() { if(digitalRead(confirm) == 1) { delay(100); if(digitalRead(confirm) == 1) { if(mode == 1) { on1++; if(on1 >1) on1 = 0; if(on1 == 0) { EEPROM.write(6, 0); EEPROM.commit(); Firebase.setFloat("alarm1", 0); } if(on1 == 1) { EEPROM.write(6, 1); EEPROM.commit(); Firebase.setFloat("alarm1", 1); } } if(mode == 2) { on2++; if(on2 >1) on2 = 0; if(on2 == 0) { EEPROM.write(7, 0); EEPROM.commit(); Firebase.setFloat("alarm2", 0); } if(on2 == 1) { EEPROM.write(7, 1); EEPROM.commit(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xx PHỤ LỤC Firebase.setFloat("alarm2", 1); } } if(mode == 3) { on3++; if(on3 >1) on3 = 0; if(on3 == 0) { EEPROM.write(8, 0); EEPROM.commit(); Firebase.setFloat("alarm3", 0); } if(on3 == 1) { EEPROM.write(8, 1); EEPROM.commit(); Firebase.setFloat("alarm3", 1); } } } while(digitalRead(confirm) == 1); } } ///////////////////////////////////////////////////////////////////////////// void alarm_x(int x) { if(adjmode == 0) { lcd.setCursor(0, 0); lcd.print("Chinh gio "); } if(adjmode == 1) { lcd.setCursor(0, 0); lcd.print("Chinh phut "); } if(adjmode == 2) { lcd.setCursor(0, 0); lcd.print("Da luu "); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xxi PHỤ LỤC delay(1000); adjmode = 0; } lcd.setCursor(0, 1); lcd.print("Alarm " + String(x) + ": "); lcd.setCursor(9, 1); lcd.print(HH, DEC); lcd.print(":"); lcd.print(MM, DEC); lcd.print(" "); if(mode == 1) { if(EEPROM.read(6) == 0) { lcd.setCursor(13, 0); lcd.print("Off"); } if(EEPROM.read(6) == 1) { lcd.setCursor(13, 0); lcd.print("On "); } } if(mode == 2) { if(EEPROM.read(7) == 0) { lcd.setCursor(13, 0); lcd.print("Off"); } if(EEPROM.read(7) == 1) { lcd.setCursor(13, 0); lcd.print("On "); } } if(mode == 3) { if(EEPROM.read(8) == 0) { lcd.setCursor(13, 0); lcd.print("Off"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xxii PHỤ LỤC } if(EEPROM.read(8) == 1) { lcd.setCursor(13, 0); lcd.print("On "); } } } ///////////////////////////////////////////////////////////////////////////// byte sendEmail1() //chức gửi email { WiFiClientSecure client; if (client.connect("smtp.gmail.com", 465) == 1) { } else { return 0; } if (!eRcv(client)) return 0; client.println("EHLO 1.2.3.4"); if (!eRcv(client)) return 0; client.println("AUTH LOGIN"); if (!eRcv(client)) return 0; client.println(user_base64); if (!eRcv(client)) return 0; client.println(user_password_base64); if (!eRcv(client)) return 0; client.println(from_email); if (!eRcv(client)) return 0; client.println(to_email); if (!eRcv(client)) return 0; client.println(F("DATA")); if (!eRcv(client)) return 0; client.println(F("Subject: Thông báo\r\n")); client.println(F("Benh nhan quen uong thuoc\n")); client.println(F("")); client.println(F(".")); if (!eRcv(client)) return 0; client.println(F("QUIT")); if (!eRcv(client)) return 0; client.stop(); return 1; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xxiii PHỤ LỤC byte sendEmail2() //sending email function { WiFiClientSecure client; if (client.connect("smtp.gmail.com", 465) == 1) { } else { return 0; } if (!eRcv(client)) return 0; client.println("EHLO 1.2.3.4"); if (!eRcv(client)) return 0; client.println("AUTH LOGIN"); if (!eRcv(client)) return 0; client.println(user_base64); if (!eRcv(client)) return 0; client.println(user_password_base64); if (!eRcv(client)) return 0; client.println(from_email); if (!eRcv(client)) return 0; client.println(to_email); if (!eRcv(client)) return 0; client.println(F("DATA")); if (!eRcv(client)) return 0; client.println(F("Subject: Thông báo\r\n")); client.println(F("Thuoc hop da het\n")); client.println(F("")); client.println(F(".")); if (!eRcv(client)) return 0; client.println(F("QUIT")); if (!eRcv(client)) return 0; client.stop(); return 1; } byte eRcv(WiFiClientSecure client) { byte respCode; byte thisByte; int loopCount = 0; while (!client.available()) { delay(1); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xxiv PHỤ LỤC loopCount++; if (loopCount > 10000) { client.stop(); return 0; } } respCode = client.peek(); while (client.available()) { thisByte = client.read(); Serial.write(thisByte); } if (respCode >= '4') { return 0; } return 1; } void efail(WiFiClientSecure client) { byte thisByte = 0; int loopCount = 0; client.println(F("QUIT")); while (!client.available()) { delay(1); loopCount++; if (loopCount > 10000) { client.stop(); return; } } while (client.available()) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xxv PHỤ LỤC thisByte = client.read(); Serial.write(thisByte); } client.stop(); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH xxvi ... đề tài "Thi t kế thi công hộp thuốc thông minh cho người bệnh" 1.2 MỤC TIÊU Thi t kế thi công hộp thuốc tự động cho người bệnh, có số chức nhắc người bệnh uống thuốc giờ, toa, thơng báo cho người... thi t kế Tính tốn thi t kế hệ thống, sơ đồ ngun lý tồn mạch, lựa chọn thơng số ban đầu cho phần thi công Thi t kế mô hình Chương 4: Thi cơng hệ thống Chương giới thi u phần thi cơng mạch, đóng... tốn thi t kế mơ hình 38 CHƯƠNG THI CÔNG HỆ THỐNG 41 4.1 Giới thi u 41 4.2 Đóng gói thi cơng mơ hình 41 4.2.1 Đóng gói điều khiển 41 4.2.2 Thi