Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 114 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
114
Dung lượng
7,16 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 KỸ THUẬT Y SINH THIẾT KẾ VÀ THI CƠNG MÁY ĐO THÂN NHIỆT KHƠNG TIẾP XÚC TÍCH HỢP KHỬ KHUẨN TAY TỰ ĐỘNG VÀ CẢNH BÁO ĐEO KHẨU TRANG GVHD: THS VÕ ĐỨC DŨNG SVTH: NGUYỄN CHÂU KIM NGÂN PHAN THỊ HỒI PHƯƠNG SKL008912 Tp.Hồ Chí Minh, tháng 6/2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM 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 Y SINH ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG MÁY ĐO THÂN NHIỆT KHƠNG TIẾP XÚC TÍCH HỢP KHỬ KHUẨN TAY TỰ ĐỘNG VÀ CẢNH BÁO ĐEO KHẨU TRANG GVHD: Th.S Võ Đức Dũng SVTH1: Nguyễn Châu Kim Ngân MSSV: 18129037 SVTH2: Phan Thị Hoài Phương MSSV: 18129046 TP Hồ Chí Minh- 06/2022 i BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM 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 Y SINH ĐỀ TÀI: THIẾT KẾ VÀ THI CƠNG MÁY ĐO THÂN NHIỆT KHƠNG TIẾP XÚC TÍCH HỢP KHỬ KHUẨN TAY TỰ ĐỘNG VÀ CẢNH BÁO ĐEO KHẨU TRANG GVHD: Th.S Võ Đức Dũng SVTH1: Nguyễn Châu Kim Ngân MSSV: 18129037 SVTH2: Phan Thị Hoài Phương MSSV: 18129046 TP Hồ Chí Minh- 06/2022 ii TRƯỜNG ĐẠI HỌC SPKT TPHCM 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ự - Hạnh phúc - - Tp Hồ Chí Minh, ngày 08 tháng 03 năm 2022 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Châu Kim Ngân MSSV: 18129037 Phan Thị Hoài Phương MSSV: 18129046 Chuyên ngành: Kỹ thuật Y sinh Mã ngành: 7520212D Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2018 Lớp: 181290 I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG MÁY ĐO THÂN NHIỆT KHƠNG TIẾP XÚC TÍCH HỢP KHỬ KHUẨN TAY TỰ ĐỘNG VÀ CẢNH BÁO ĐEO KHẨU TRANG II NHIỆM VỤ Các số liệu ban đầu: - Bộ xử lý trung tâm: Arduino Mega 2560, Raspberry Pi Model B - Các loại cảm biến: cảm biến nhiệt độ hồng ngoại MLX90614, cảm biến siêu âm HCSR04, cảm biến khoảng cách hồng ngoại E3F-DS30C4 - Các loại module: LCD TFT 3,2”, mạch điều khiển đóng ngắt Non-contact IR AC/DC Switch, máy bơm P385, camera Raspberry Pi - Ngơn ngữ lập trình: C/C++, Python Nội dung thực hiện: - Nội dung 1: Tìm tham khảo tài liệu tương tự đưa hướng cho đề tài - Nội dung 2: Thiết kế mạch đo thân nhiệt không tiếp xúc code Arduino cho mạch i - Nội dung 3: Thiết kế nghiên cứu mạch khử khuẩn tay tự động - Nội dung 4: Viết chương trình nhận dạng khn mặt, cảnh báo không đeo trang Raspberry Pi Nội dung 5: Kết nối Arduino Raspberry Pi truyền liệu để đọc nhiệt độ, cảnh báo - nhiệt yêu cầu rửa tay - Nội dung 6: Thiết kế mô hình hệ thống - Nội dung 7: Thi cơng phần cứng, chạy thử nghiệm hiệu chỉnh hệ thống, hoàn chỉnh hệ thống - Nội dung 8: Viết báo cáo thực - Nội dung 9: Bảo vệ luận văn III NGÀY GIAO NHIỆM VỤ: 25/02/2022 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 30/06/2022 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Võ Đức Dũng CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP- Y SINH ii TRƯỜNG ĐẠI HỌC SPKT TPHCM 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ự - Hạnh phúc - - Tp Hồ Chí Minh, ngày 08 tháng 03 năm 2022 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Châu Kim Ngân MSSV: 18129037 Lớp: 181290C Họ tên sinh viên: Phan Thị Hoài Phương MSSV: 18129046 Lớp: 181290C Tên đề tài: THIẾT KẾ VÀ THI CÔNG MÁY ĐO THÂN NHIỆT KHƠNG TIẾP XÚC TÍCH HỢP KHỬ KHUẨN TAY TỰ ĐỘNG VÀ CẢNH BÁO ĐEO KHẨU TRANG Tuần/ngày Tuần (25/02 27/02) Nội dung Xác nhận GVHD Gặp GVHD để nghe phổ biến yêu cầu làm đồ án, tiến hành chọn đồ án Tuần (28/02 06/03) GVHD tiến hành xét duyệt đề tài Tuần Viết tóm tắt yêu cầu đề tài chọn: đề tài làm gì, nội dung thiết kế, thông số giới hạn đề tài (07/03 13/03) Tuần (14/03 20/03) - Tìm hiểu sở lý thuyết đo nhiệt độ hồng ngoại iii Tuần (21/03 – 27/03) - Tìm hiểu cách thức hoạt động máy khử khuẩn - Tìm hiểu thuật tốn nhận dạng, lựa chọn camera Tuần (28/03 – 03/04) Tuần (04/04 – 10/04) - Kết nối Raspberry với camera - Tiến hành viết code Raspberry nhận diện khuôn mặt đeo trang Tuần (11/04 – 17/04) Tuần (18/04 – 24/04) - Hồn thành chương trình nhận diện khn mặt đeo trang cảnh báo - Thiết kế sơ đồ khối, giải thích chức khối Tuần 10 (25/04 – 01/05) Tuần 11 - Thiết kế sơ đồ mạch, giải thích ngun lý hoạt động mạch - Mơ mạch (02/05 – 08/05) Tuần 12 (09/05 – 15/05) Tuần 13 - Thiết kế thi cơng mơ hình - Tiến hành thi công mạch - Kiểm tra mạch thi công (16/05 – 22/05) iv Tuần 14 (23/05 – 29/05) - Chạy thử nghiệm hiệu chỉnh mạch code - Thi cơng sản phẩm hồn chỉnh Tuần 15 (30/05 – 05/06) Viết báo cáo, tóm tắt, thiết kế poster Tuần 16 (06/06 – 12/06) Làm slide, chỉnh sửa hoàn báo cáo GV HƯỚNG DẪN (Ký ghi rõ họ tên) v 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 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 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 Châu Kim Ngân Phan Thị Hoài Phương vi LỜI CẢM ƠN Lời đầu tiên, chúng em xin gửi lời cảm ơn sâu sắc đến giáo viên hướng dẫn đồ án tốt nghiệp Thầy Võ Đức Dũng Cảm ơn thầy giúp đỡ, theo dõi đưa lời khuyên cho chúng em hoàn thành đề tài suốt tháng qua Chúng em xin gửi lời cảm ơn đến Thầy/Cô khoa Điện- Điện tử nói chung Thầy/Cơ mơn Điện Tử Cơng Nghiệp- Y Sinh nói riêng truyền kiến thức kinh nghiệm quý báu tạo điều kiện giúp cho chúng em có nhiều tảng kiến thức vững vàng để hồn thành đề tài Chúng em xin gửi lời cảm ơn chân thành ba mẹ, người thân quan tâm tạo điều kiện vật chất tinh thần cho chúng em có hội học hành, phát triển kỹ thân năm qua Cảm ơn bạn bè người hỗ trợ chúng em quan tâm giúp đỡ, động viên ủng hộ suốt trình thực đề tài Lời cuối cùng, thời gian, kinh nghiệm, kiến thức hạn chế nên khó tránh khỏi sai sót nội dung hình thức Kính mong q Thầy/Cơ thơng cảm đưa ý kiến đóng góp để chúng em khắc phục rút kinh nghiệm tốt sau Một lần nhóm em xin chân thành cảm ơn quý Thầy/Cô nhiều Người thực đề tài Nguyễn Châu Kim Ngân Phan Thị Hoài Phương vii ĐỒ ÁN TỐT NGHIỆP https://lib.hpu.edu.vn/bitstream/handle/123456789/16760/25_NguyenThiThom_CT1301 pdf?sequence=1, 02/03/2022 [9] Vanito Hoang, Hướng dẫn xây dựng hệ thống phát nhận diện khuôn mặt, https://www.thegioimaychu.vn/blog/ai-deep-learning/huong-dan-xay-dung-he-thongphat-hien-va-nhan-dien-khuon-mat-p5788/, 01/03/2022 [10] Yêu điện tử, Chế máy rửa tay thông minh sát khuẩn chống dịch bệnh COVID-19 hay gọi Corona, https://www.youtube.com/watch?v=z_t3-EtCAFI, 01/03/2022 [11] Võ Đức Dũng, Nguyễn Thanh Hải, Nguyễn Thanh Nghĩa, Nguyễn Trường Duy, Giáo Trình Thực Tập Mạch Điện Tử Y Sinh ( Ngành Kỹ Thuật Y Sinh ), Nhà xuất Đại học Quốc gia Thành phố Hồ Chí Minh, 2019 BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 81 ĐỒ ÁN TỐT NGHIỆP PHỤ LỤC Code chương trình Vì code chương trình cho hệ thống có độ dài lớn nên nhóm gửi phần code chương trình link đính kèm Trong link gồm có file: code cho chương trình đo nhiệt độ Arduino code cho chương trình Raspberry (đọc kết nhiệt độ, traininng chương trình đọc nhiệt độ cảnh báo đeo trang) https://drive.google.com/drive/folders/1LGOyE3RejLYm1g7bvw4JonUve7mvCJkJ?usp =sharing Nhóm trình bày code hệ thống code Arduino đo hiển thị nhiệt độ; code Raspberry Pi nhận nhiệt độ từ Arduino đọc kết quả; code Raspberry Pi nhận diện cảnh báo yêu cầu đeo trang Code Arduino: #include #include #include Adafruit_MLX90614 mlx = Adafruit_MLX90614(); const int trigPin = 56; const int echoPin = 57; long duration; int distance; extern uint8_t SmallFont[]; extern uint8_t BigFont[]; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 82 ĐỒ ÁN TỐT NGHIỆP extern uint8_t SevenSegNumFont[]; UTFT myGLCD(ILI9341_16,38,39,40,41); extern unsigned short nhietke[]; extern unsigned short ute[]; extern unsigned short bio[]; extern unsigned short cloud[]; void setup() { Serial.begin(9600); Wire.begin(); mlx.begin(); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); myGLCD.InitLCD(); myGLCD.fillScr(255,255,255); myGLCD.setBackColor(VGA_WHITE); myGLCD.setFont(SmallFont); myGLCD.setColor(VGA_BLUE); myGLCD.print("HCMC UNIVERSITY OF",CENTER,0); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 83 ĐỒ ÁN TỐT NGHIỆP myGLCD.print("TECHNOLOGY AND EDUCATION ",CENTER,10); myGLCD.setColor(VGA_BLUE); myGLCD.print("KHOA DIEN-DIEN TU",CENTER,20); myGLCD.print("BO MON DIEN TU CONG NGHIEP- Y SINH",CENTER,30); myGLCD.drawBitmap(110,50,50,50,ute); myGLCD.drawBitmap(160,50,50,50,bio); myGLCD.setFont(BigFont); myGLCD.setColor(VGA_RED); myGLCD.print("DO AN TOT NGHIEP",CENTER,120); myGLCD.setFont(SmallFont); myGLCD.print("NGANH KY THUAT Y SINH",CENTER,160); myGLCD.setColor(VGA_BLACK); myGLCD.print("GVHD: Th.S Vo Duc Dung" ,RIGHT,180); myGLCD.print("SVTH1:Nguyen Chau Kim Ngan- 18129037" ,RIGHT,190); myGLCD.print("SVTH2:Phan Thi Hoai Phuong- 18129046" ,RIGHT,200); delay(5000); myGLCD.clrScr(); myGLCD.fillScr(VGA_AQUA); myGLCD.drawBitmap(0,0,50,240,nhietke); myGLCD.drawBitmap(160,140,150,50,cloud); myGLCD.setFont(BigFont); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 84 ĐỒ ÁN TỐT NGHIỆP myGLCD.setColor(VGA_RED); myGLCD.setBackColor(VGA_AQUA); myGLCD.print("TEMPERTURE",CENTER,0); myGLCD.setColor(VGA_WHITE); myGLCD.fillRect(160,50,310 ,100); } void loop() { float temp_obj = mlx.readObjectTempC()+2.0; // chinh sai so float temp_amb = mlx.readAmbientTempC(); myGLCD.setFont(BigFont); myGLCD.setColor(VGA_NAVY); myGLCD.setBackColor(VGA_AQUA); myGLCD.printNumF(temp_amb,1,190,200); myGLCD.setFont(SmallFont); myGLCD.print("o",260,190); myGLCD.setFont(BigFont); myGLCD.print ("C",270,200); delayMicroseconds(2); digitalWrite(trigPin, HIGH); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 85 ĐỒ ÁN TỐT NGHIỆP delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //23529us for timeout 4.0m distance= (duration/2)*0.0343; delay(500); if ((distance0)) { if( temp_obj>30) { Serial.print(temp_obj); Serial.println(); delay(100); myGLCD.setFont(BigFont); myGLCD.setColor(VGA_BLUE); myGLCD.setBackColor(VGA_WHITE); myGLCD.printNumF(temp_obj,1,190,60); myGLCD.setFont(SmallFont); myGLCD.print("o",260,50); myGLCD.setFont(BigFont); myGLCD.print ("C",270,60); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 86 ĐỒ ÁN TỐT NGHIỆP delay(5000);} } else{ delay(500); } } Code Raspberry Pi nhận nhiệt độ từ Arduino đọc kết quả: import serial import RPi.GPIO as GPIO import time from time import sleep import numpy as np import os import pygame pygame.mixer.init() ser = serial.Serial("/dev/ttyACM0",9600) while 1: a=ser.readline() data=a.decode() data=data.rstrip() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 87 ĐỒ ÁN TỐT NGHIỆP Obj=data[0:4] print("Obj=",Obj) pygame.mixer.music.load("1.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue Obj_result= float (Obj) Obj_result=Obj_result*10 Obj_result=round(Obj_result) Obj0= int(Obj_result) Obj1 = Obj0/10 Obj21= Obj1%10 Obj2=int(Obj21) Obj3 = Obj0%10 if Obj1 >=30 and Obj1 = 0: speak_num (Obj2) if Obj1 >= 20: pygame.mixer.music.load("phay.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue speak_num (Obj3) pygame.mixer.music.load("doC.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 90 ĐỒ ÁN TỐT NGHIỆP continue if Obj < str(37.5): pygame.mixer.music.load("bt.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue pygame.mixer.music.load("2.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue elif Obj >= str(37.5): pygame.mixer.music.load("3.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue Code Raspberry Pi nhận diện cảnh báo yêu cầu đeo trang from tensorflow.keras.applications.mobilenet_v2 import preprocess_input from tensorflow.keras.preprocessing.image import img_to_array from tensorflow.keras.models import load_model from imutils.video import VideoStream import numpy as np import imutils import time import cv2 import os BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 91 ĐỒ ÁN TỐT NGHIỆP import pygame pygame.mixer.init() pygame.mixer.music.load("notice.mp3") def detect_and_predict_mask(frame, faceNet, maskNet): (h, w) = frame.shape[:2] blob = cv2.dnn.blobFromImage(frame, 1.0, (300, 300), (104.0, 177.0, 123.0)) faceNet.setInput(blob) detections = faceNet.forward() faces = [] locs = [] preds = [] for i in range(0, detections.shape[2]): confidence = detections[0, 0, i, 2] if confidence > 0.5: box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype("int") (startX, startY) = (max(0, startX), max(0, startY)) (endX, endY) = (min(w - 1, endX), min(h - 1, endY)) face = frame[startY:endY, startX:endX] face = cv2.cvtColor(face, cv2.COLOR_BGR2RGB) face = cv2.resize(face, (224, 224)) face = img_to_array(face) face = preprocess_input(face) faces.append(face) locs.append((startX, startY, endX, endY)) if len(faces) > 0: faces = np.array(faces, dtype="float32") preds = maskNet.predict(faces, batch_size=32) return (locs, preds) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 92 ĐỒ ÁN TỐT NGHIỆP prototxtPath = os.path.join(os.getcwd(), 'face_detector', 'deploy.prototxt') weightsPath = os.path.join(os.getcwd(), 'face_detector', 'res10_300x300_ssd_iter_140000.caffemodel') faceNet = cv2.dnn.readNet(prototxtPath, weightsPath) print("[INFO] loading face mask detector model ") maskNet = load_model("MaskDetector.h5") print("[INFO] starting video stream ") vs = VideoStream(src=0).start() time.sleep(2.0) while True: frame = vs.read() frame = imutils.resize(frame, width=500) (locs, preds) = detect_and_predict_mask(frame, faceNet, maskNet) for (box, pred) in zip(locs, preds): (startX, startY, endX, endY) = box (mask, withoutMask) = pred if mask > withoutMask: label = "Mask Detected." color = (0, 255, 0) else: label = "No Mask Detected" color = (0, 0, 255) pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue cv2.putText(frame, label, (startX-50, startY - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2) cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 93 ĐỒ ÁN TỐT NGHIỆP cv2.imshow("Mask Detector", frame) key = cv2.waitKey(1) & 0xFF if key == ord("q"): break cv2.destroyAllWindows() vs.stop() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 94 S K L 0