Thiết kế mô hình thủy sinh điều khiển từ xa sử dụng ESP32, tạo app điều khiển trên lap hoặc điều khiển trực tiếp trên web server. Khoa học công nghệ phát triển cốt yếu để phục vụ con người và vì con người. Khoa học công nghệ len lỏi vào đời sống con người, chạm đến cả những thói quen sinh hoạt, sở thích của chúng ta. Việc ứng dụng khoa học công nghệ vào cuộc sống giúp những điều bình thường quen thuộc đó đơn giản hơn mà vẫn đạt được những hiệu quả nằm ngoài mong đợi. Nuôi cá cảnh là một sở thích mà có lẽ rất nhiều người đam mê. Nhưng tuy nhiên rất ít người có thể duy trì đam mê này bởi yêu cầu về kỹ thuật và thời gian phải bỏ ra để chăm sóc 1 bể cá cảnh là rất nhiều. Trên thị trường đã có rất nhiều sản phẩm bể cá thông minh, đáp ứng được cả về mặt công nghệ lẫn thẩm mỹ nhưng vẫn còn những hạn chế nhất định do chưa tích hợp hết các công năng vào một sản phẩm, và đôi khi giá thành cũng rất cao. Nhận thấy những điều này, nhóm chúng em quyết định lựa chọn đề tài “Nghiên cứu thiết kế hệ thống giám sát và điều khiển từ xa cho bể thuỷ sinh” mà trong nó tích hợp hết các tính năng cần thiết cũng như phù hợp về mặt giá thành để có thể cạnh tranh trên thị trường hiện nay.
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA 🙣🕮🙡 ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU THIẾT KẾ HỆ THỐNG GIÁM SÁT VÀ ĐIỀU KHIỂN TỪ XA CHO BỂ THUỶ SINH Giảng viên hướng dẫn : TS BÙI THỊ DUYÊN Sinh viên thực : NGUYỄN THỊ THU HÀ Mã sinh viên : 18810410207 Ngành : Cơng nghệ kỹ thuật điều khiển Tự động hóa Chuyên ngành : Công nghệ kỹ thuật điều khiển Lớp : D13CNKTĐK Khóa : 2018-2023 Hà Nội, tháng 02 năm 2023 TRƯỜNG ĐẠI HỌC ĐIỆN LỰC CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐK&TĐH Độc lập - Tự – Hạnh phúc Hà Nội, ngày 13 tháng 10 năm 2022 ĐỀ CƯƠNG ĐỀ TÀI ĐỒ ÁN TỐT NGHIỆP TRÌNH ĐỘ ĐẠI HỌC Họ tên sinh viên : Nguyễn Thị Thu Hà Mã sinh viên: 18810410207 Lớp:D13CNKTDK Khóa: 2018-2023 Ngành: Cơng nghệ kỹ thuật điều khiển tự động hố Chun ngành: Cơng nghệ kỹ thuật điều khiển Tên đề tài: Nghiên cứu thiết kế hệ thống giám sát điều khiển từ xa cho bể thuỷ sinh Lý chọn đề tài (nếu có khơng q ½ trang) Khoa học cơng nghệ phát triển cốt yếu để phục vụ người người Khoa học công nghệ len lỏi vào đời sống người, chạm đến thói quen sinh hoạt, sở thích Việc ứng dụng khoa học cơng nghệ vào sống giúp điều bình thường quen thuộc đơn giản mà đạt hiệu nằm ngồi mong đợi Ni cá cảnh sở thích mà có lẽ nhiều người đam mê Nhưng nhiên người trì đam mê yêu cầu kỹ thuật thời gian phải bỏ để chăm sóc bể cá cảnh nhiều Trên thị trường có nhiều sản phẩm bể cá thơng minh, đáp ứng mặt công nghệ lẫn thẩm mỹ hạn chế định chưa tích hợp hết cơng vào sản phẩm, giá thành cao Nhận thấy điều này, nhóm chúng em định lựa chọn đề tài “Nghiên cứu thiết kế hệ thống giám sát điều khiển từ xa cho bể thuỷ sinh” mà tích hợp hết tính cần thiết phù hợp mặt giá thành để cạnh tranh thị trường Nội dung, nhiệm vụ nghiên cứu (không trang, không chi tiết) Chương 1: Đặt vấn đề nhiệm vụ thư Chương 2: Tổng quan mô hình thuỷ sinh Chương 3: Thiết kế hệ thống Chương 4: Kết đạt phương hướng phát triển Tài liệu tham khảo (dự kiến) [1] http://arduino.vn/ [2] https://howkteam.vn/learn [3] Giáo trình kỹ thuật lập trình C sở nâng cao_ PGS.TS Phạm Văn Ất, ThS Đỗ Văn Tuấn_Nhà xuất thông tin truyền thông [4] Python bản_TS Nguyễn Văn Hậu, TS Nguyễn Duy Tân, ThS Nguyễn Thị Hải Năng, ThS Nguyễn Hoàng Điệp_ Nhà xuất Đại học Quốc gia Ngày giao đề tài: Ngày 13 tháng 10 năm 2022 Ngày nộp quyển: Ngày 15 tháng 02 năm 2023 Phụ Trách Khoa TRƯƠNG NAM HƯNG Giảng viên hướng dẫn TRƯỜNG ĐẠI HỌC ĐIỆN LỰC CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐK&TĐH Độc lập - Tự – Hạnh phúc NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN I Thông tin chung Họ tên người hướng dẫn: Đơn vị công tác: Khoa Điều khiển Tự động hóa Học hàm, học vị: Tiến sĩ Họ tên sinh viên: Nguyễn Thị Thu Hà Ngày sinh: 31/03/2000 Mã sinh viên: 18810410207 Lớp: D13CNKTDK Tên đề tài: Nghiên cứu thiết kế hệ thống giám sát điều khiển từ xa cho bể thuỷ sinh II Nhận xét đồ án tốt nghiệp 2.1 Nhận xét hình thức: (kết cấu, phương pháp trình bày) 2.2 Mục tiêu nội dung: (cơ sở lý luận, tính thực tiễn, khả ứng dụng) 2.3 Kết đạt được: 2.4 Kết luận kiến nghị: (các hướng nghiên cứu đề tài tiếp tục phát triển cao hơn) III Nhận xét tinh thần thái độ làm việc sinh viên ……………………………………………………………………………………… IV Đề nghị Được báo cáo: Không báo cáo: Hà Nội, ngày 15 tháng 02 năm 2023 Giảng viên hướng dẫn TRƯỜNG ĐẠI HỌC ĐIỆN LỰC CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐK&TĐH Độc lập - Tự – Hạnh phúc NHẬN XÉT CỦA HỘI ĐỒNG CHẤM ĐỒ ÁN TỐT NGHIỆP I Kết thực báo cáo trước hội đồng sinh viên: TT Nội dung Ý kiến nhận xét Hình thức trình bày Nội dung thực theo yêu cầu đề tài Các kết tính tốn Kỹ thuyết trình Trả lời câu hỏi Tổng thể Các ý kiến khác: ……………………………………………………………………………………… II GVHD xác nhận sau chỉnh sửa (nếu có) ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… Hà Nội, ngày tháng 02 năm 2023 Giáo viên hướng dẫn Thư ký hội đồng Chủ tịch hội đồng LỜI CẢM ƠN Để hoàn thành tốt đề tài tốt nghiệp này, nỗ lực thân, em nhận quan tâm giúp đỡ nhiều tập thể cá nhân Trước hết, em xin gửi tới toàn thể thầy giáo Khoa Điều khiển Tự động hố thầy cô trường Đại học Điện lực lời cảm ơn chân thành Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc tới giảng viên hướng dẫn Bùi Thị Dun, người tận tình hướng dẫn em suốt trình làm đồ án tốt nghiệp hoàn thiện đề tài đồ án Ngoài ra, xin gửi lời cảm ơn chân thành đến bố mẹ người thân, người hậu phương vững chắc, chỗ dựa giúp đỡ vật chất lẫn tinh thần Hơn nữa, em xin cảm ơn tất bạn bè người đồng hành với em suốt chặng đường qua, đặc biệt người bạn lớp giúp đỡ em nhiều trình học tập trường Cuối cùng, em kính chúc q thầy dồi sức khỏe thành công nghiệp giảng dạy chúng em Em xin chân thành cảm ơn ! SINH VIÊN THỰC HIỆN 40 from customtkinter import * from tkinter import ttk #connect to firebase import firebase_admin from firebase_admin import credentials from firebase_admin import db cred = credentials.Certificate("./project3-daf2c-firebaseadminsdk-dn4sm-99ac9e8903.json") default_app = firebase_admin.initialize_app(cred, { 'databaseURL':"https://project3-daf2c-default-rtdb.asiasoutheast1.firebasedatabase.app" }) RL1 = db.reference("/RL1") RL2 = db.reference("/RL2") RL3 = db.reference("/RL3") RL4 = db.reference("/RL4") RL5 = db.reference("/RL5") TEMP=db.reference("/Temp") relay4=db.reference("/relay4") FOOD=db.reference("/Food") count1=0 count2=0 def time(): string = strftime('%H:%M:%S %p') app.lbl.configure(text = string,font =('Verdana', 20)) app.lbl.after(1000, time) def update_table(): global count1,count2 string = strftime('%H:%M:%S %p') temp_data=TEMP.get() cho_an_data=app.home_frame_button_5.get() light_data=app.home_frame_button_1.get() oxi_data=app.home_frame_button_2.get() loc_data=app.home_frame_button_3.get() value=(string,temp_data,cho_an_data,light_data,oxi_data,l oc_data) app.tv.insert(parent='',index=count1,iid=count2,values=va lue) count1+=1 count2+=1 app.tv.after(10000,update_table) def slider_event(value): value=app.button_temp.get() 41 app.label2.configure(text=int(value)) TEMP.set(int(value)) print(type(value)) def turn_light(): value=app.home_frame_button_1.get() RL1.set(value) def turn_oxi(): value=app.home_frame_button_2.get() RL2.set(value) def turn_loc(): value=app.home_frame_button_3.get() RL3.set(value) def turn_quat(): value=app.home_frame_button_4.get() RL5.set(value) def turn_choan(): value=app.home_frame_button_5.get() FOOD.set(value) def turn_suoi(): value=app.home_frame_button_6.get() RL4.set(value) class App(customtkinter.CTk): def init (self): super(). init () self.title("Bể thuỷ sinh IOT") self.geometry("700x450") # set grid layout 1x2 self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(1, weight=1) # load images with light and dark mode image image_path = "test_images" self.logo_image = customtkinter.CTkImage(Image.open(os.path.join(image_path, "lo.png")), size=(26, 26)) self.icon_lights = customtkinter.CTkImage(Image.open(os.path.join(image_path, "lights.jpg")), size=(20, 20)) self.image_icon_image = customtkinter.CTkImage(Image.open(os.path.join(image_path, "image_icon_light.png")), size=(20, 20)) 42 self.home_image = customtkinter.CTkImage(light_image=Image.open(os.path.join(im age_path, "home_dark.png")), dark_image=I mage.open(os.path.join(image_path, "home_light.png")), size=(20, 20)) self.chat_image = customtkinter.CTkImage(light_image=Image.open(os.path.join(im age_path, "chat_dark.png")), dark_image=I mage.open(os.path.join(image_path, "chat_light.png")), size=(20, 20)) self.add_user_image = customtkinter.CTkImage(light_image=Image.open(os.path.join(im age_path, "add_user_dark.png")), dark_ima ge=Image.open(os.path.join(image_path, "add_user_light.png")), size=(20, 20)) # create navigation frame self.navigation_frame = customtkinter.CTkFrame(self, corner_radius=0) self.navigation_frame.grid(row=0, column=0, sticky="nsew") self.navigation_frame.grid_rowconfigure(4, weight=1) self.navigation_frame_label = customtkinter.CTkLabel(self.navigation_frame, text=" Smart Aquarium System", image=self.logo_image, compound="left", font=customtkinter.CTkFont(size=15, weight="bold")) self.navigation_frame_label.grid(row=0, column=0, padx=20, pady=20) self.home_button = customtkinter.CTkButton(self.navigation_frame, corner_radius=0, height=40, border_spacing=10, text="Home", fg_color=" transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), image=self home_image, anchor="w", command=self.home_button_event) self.home_button.grid(row=1, column=0, sticky="ew") 43 self.frame_2_button = customtkinter.CTkButton(self.navigation_frame, corner_radius=0, height=40, border_spacing=10, text="Manager", fg_colo r="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), image=s elf.chat_image, anchor="w", command=self.frame_2_button_event) self.frame_2_button.grid(row=2, column=0, sticky="ew") # self.frame_3_button = customtkinter.CTkButton(self.navigation_frame, corner_radius=0, height=40, border_spacing=10, text="Setting", # lor="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"), # =self.add_user_image, anchor="w", command=self.frame_3_button_event) # self.frame_3_button.grid(row=3, column=0, sticky="ew") fg_co image self.appearance_mode_menu = customtkinter.CTkOptionMenu(self.navigation_frame, values=["Light", "Dark", "System"], command=self.change_appearance_mode_event) self.appearance_mode_menu.grid(row=6, column=0, padx=20, pady=20, sticky="s") # create home frame self.home_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent") self.home_frame.grid_columnconfigure(0, weight=1) # self.home_frame_large_image_label = customtkinter.CTkLabel(self.home_frame, text="Nguyen Thi Thu Ha EPU") # self.home_frame_large_image_label.grid(row=0, column=0, padx=20, pady=10) self.home_frame_button_5 = customtkinter.CTkSwitch(self.home_frame, 44 height=70,width=300,switch_width=100,switch_height=50,text="T hức ăn",onvalue="on", offvalue="off",command=turn_choan) self.home_frame_button_5.place(x=70,y=150) self.home_frame_button_1 = customtkinter.CTkSwitch(self.home_frame, height=70,width=300,switch_width=100,switch_height=50,text="Đ èn",onvalue="on", offvalue="off",command=turn_light) self.home_frame_button_1.place(x=70,y=225) self.home_frame_button_2 = customtkinter.CTkSwitch(self.home_frame, height=70,width=300 ,switch_width=100,switch_height=50,text="Máy oxi",onvalue="on", offvalue="off",command=turn_oxi) # print(self.home_frame_button_1.get()) self.home_frame_button_2.place(x=270,y=225) self.home_frame_button_3 = customtkinter.CTkSwitch(self.home_frame, height=70,width=300 ,switch_width=100,switch_height=50,text="Máy Lọc ",onvalue="on", offvalue="off",command=turn_loc) self.home_frame_button_3.place(x=70,y=300) self.home_frame_button_4 = customtkinter.CTkSwitch(self.home_frame, height=70,width=300 ,switch_width=100,switch_height=50,text="Quạt",onvalue="on", offvalue="off",command=turn_quat) self.home_frame_button_4.place(x=270,y=300) self.home_frame_button_6 = customtkinter.CTkSwitch(self.home_frame, height=70,width=300 ,switch_width=100,switch_height=50,text="Sưởi",onvalue="on", offvalue="off",command=turn_suoi) self.home_frame_button_6.place(x=270,y=150) self.lbl=customtkinter.CTkLabel(self.home_frame,bg_co lor="#E0F8F7") self.lbl.place(x=300,y=10) # self.chart_template = customtkinter.CTkCanvas(self.home_frame,width=100,height=100, bg="red") # self.chart_template.place(x=50 ,y=80) # self.chart_template_2 = customtkinter.CTkCanvas(self.home_frame,width=80,height=80,bg ="green") # self.chart_template_2.place(x=60,y=90) # create second frame self.manager = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent") 45 self.frame=CTkFrame(self.manager,width=700,height=450 ,bg_color="white") self.frame.place(x=0,y=0) self.tv = ttk.Treeview(self.frame, columns=(1, 2, 3,4,5,6), show='headings',height=25) self.tv.place(x=0,y=0) self.tv.column(1,width=110, stretch=0,anchor=CENTER) self.tv.heading(1, text="Time") self.tv.column(2,width=65, stretch=0,anchor=CENTER) self.tv.heading(2, text="Temp") self.tv.column(3,width=65, stretch=0,anchor=CENTER) self.tv.heading(3, text="Food") self.tv.column(4,width=65, stretch=0,anchor=CENTER) self.tv.heading(4, text="Led") self.tv.column(5,width=65, stretch=0,anchor=CENTER) self.tv.heading(5, text="Oxigen") self.tv.column(6,width=70, stretch=0,anchor=CENTER) self.tv.heading(6, text="Refinery") # create third frame self.third_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent") # select default frame self.select_frame_by_name("Home") def select_frame_by_name(self, name): # set button color for selected button self.home_button.configure(fg_color=("gray75", "gray25") if name == "Home" else "transparent") self.frame_2_button.configure(fg_color=("gray75", "gray25") if name == "Manager" else "transparent") # self.frame_3_button.configure(fg_color=("gray75", "gray25") if name == "Setting" else "transparent") # show selected frame if name == "Home": self.home_frame.grid(row=0, column=1, sticky="nsew") else: self.home_frame.grid_forget() if name == "Manager": self.manager.grid(row=0, column=1, sticky="nsew") else: self.manager.grid_forget() # if name == "Setting": 46 # self.third_frame.grid(row=0, column=1, sticky="nsew") # else: # self.third_frame.grid_forget() def home_button_event(self): self.select_frame_by_name("Home") def frame_2_button_event(self): self.select_frame_by_name("Manager") def frame_3_button_event(self): self.select_frame_by_name("Setting") def change_appearance_mode_event(self, new_appearance_mode): customtkinter.set_appearance_mode(new_appearance_mode ) if name == " main ": app = App() time() update_table() app.mainloop() 47 CHƯƠNG 4: KẾT QUẢ ĐẠT ĐƯỢC VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN 4.1 Kết đạt 4.1.1 Kết phần cứng Hình 4.1 Thiết kế mạch in phần mềm Hình 4.2 Mạch điều khiển thực tế 48 Hình 4.3 Mơ hình hệ thống hồn thiện( phía trước) Hình 4.4 Mơ hình hệ thống hồn thiện( phía trên) 49 4.1.2 Kết phần mềm Hình 4.5 Giao diện hình điều khiển hệ thống Hình 4.6 Giao diện hình thống kê liệu 50 4.1.3 Nhận xét Ưu điểm: - Phần cứng thiết kế nhỏ gọn, dễ lắp đặt, sử dụng linh kiện phổ biến, giá thành hợp lý, thiết bị thiết kế hoạt động tốt ổn định - Các thiết bị giám sát điều khiển từ xa qua firebase giúp cho việc điều khiển thiết bị trở nên dễ dàng hơn, tiện nghi Có thể điều khiển thời điểm nào, cần có mạng internet thiết bị truy cập - Điều khiển từ xa tốt, ổn định, cần kết nối internet - Trang web hiển thị trực quan, dễ điều khiển xem thông tin - Thông tin bể cá cập nhật liên tục thiết bị kết nối internet - Mơ hình hoạt động mượt mà, ổn định với thời gian trễ từ – 1.5 giây để gửi liệu từ mạch lên app điều khiển thao tác từ app xuống mạch cứng - Bài tốn kinh tế hồn thiện, thành phẩm đạt giá thành cạnh trạnh thị trưởng - Đảm bảo thẩm mỹ dễ dàng lắp ráp Nhược điểm: - Không thể xem thông tin điều khiển thiết bị từ trang web thiết bị khơng có kết nối internet - Tên wifi mật để thiết bị kết nối internet cố định, thay đổi cách nạp lại chương trình cho ESP32 4.2 Phương hướng phát triển đề tài Vì thời gian thực đề tài có giới hạn nên nhiều phương án - thiết kế để thay đổi - bổ sung thêm cho hệ thống mà nhóm chưa thể tìm hiểu thực Những phương án bổ sung nhằm tăng thêm chức năng, mở rộng khả điều khiển, tính linh hoạt cho thiết bị hỗ trợ nuôi cá Cụ thể hướng phát triển mà chúng em nghĩ đến sau: 51 - Kết hợp với module SIM để thiết bị gửi thơng tin phịng thiết bị kết nối internet - Kết hợp thêm camera giám sát, hình ảnh đưa lên web giúp người dùng xem bể cá từ xa - Thêm cảm biến đo độ pH cho bể thuỷ sinh - Chế độ cho ăn tự động theo 52 DANH MỤC TÀI LIỆU THAM KHẢO [1] http://arduino.vn/ [2] https://howkteam.vn/learn [3] Giáo trình kỹ thuật lập trình C sở nâng cao_ PGS.TS Phạm Văn Ất, ThS Đỗ Văn Tuấn_Nhà xuất thông tin truyền thông [4] Python bản_TS Nguyễn Văn Hậu, TS Nguyễn Duy Tân, ThS Nguyễn Thị Hải Năng, ThS Nguyễn Hoàng Điệp_ Nhà xuất Đại học Quốc gia 53 54 ... thuỷ sinh Hệ thống giám sát điều khiển từ xa cho bể thuỷ sinh có vi điều khiển ESP32DEVKIT V1 DIOT để điều khiển thiết bị từ việc điều khiển web máy tính, thông qua cảm biến nhiệt độ DS18B20 để điều. .. 47 Hình 4.2 Mạch điều khiển thực tế 47 Hình 4.3 Mơ hình hệ thống hồn thiện( phía trước) 48 Hình 4.4 Mơ hình hệ thống hồn thiện( phía trên) 48 Hình 4.5 Giao diện hình điều khiển. .. trú ẩn Trồng thủy sinh bể cá tạo môi trường sống an toàn cho cá Tảo thủy sinh bể cá hấp thu dinh dưỡng nguồn nước Vì thiết kế bể cá, nên trồng thủy sinh với mật độ dày Cây thủy sinh có sức sống