Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 38 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
38
Dung lượng
1,46 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐỒNG NAI BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CẤP TRƯỜNG ĐIỀU KHIỂN THIẾT BỊ BẰNG GIỌNG NÓI Mã số: TR:2020-29/KCN-SV Chủ nhiệm đề tài: Võ Minh Hưng Đồng Nai, tháng năm 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐỒNG NAI BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CẤP TRƯỜNG ĐIỀU KHIỂN THIẾT BỊ BẰNG GIỌNG NÓI Mã số: TR:2020-29/KCN-SV Chủ nhiệm đề tài Võ Minh Hưng Đồng Nai, tháng năm 2021 DANH SÁCH THÀNH VIÊN THAM GIA NGHIÊN CỨU ĐỀ TÀI STT Họ tên Chức vụ Võ Minh Hưng Sinh viên Võ Thanh Tùng Giảng viên Nguyễn Thị Hiền Giảng viên MỤC LỤC DANH MỤC CÁC TỪ VIẾT TẮT DANH MỤC HÌNH ẢNH .4 THÔNG TIN KẾT QUẢ NGHIÊN CỨU .5 CHƯƠNG 1: TỔNG QUAN 1.1 Tổng quan lĩnh vực nghiên cứu 1.2 Tính cấp thiết 1.3 Mục tiêu 1.4 Cách tiếp cận 1.5 Phương pháp nghiên cứu 1.6 Đối tượng phạm vi nghiên cứu 1.7 Nội dung nghiên cứu 1.8 Kế hoạch thực đề tài CHƯƠNG 2: GIỚI THIỆU CÁC THIẾT BỊ ĐƯỢC LỰA CHỌN 2.1 Module Node MCU ESP8266 2.2 App Blynk 2.3 Google Assistant 2.4 Sự kết hợp Blynk, Google assistant bo MCU esp8266 11 CHƯƠNG 3: THIẾT KẾ LẮP ĐẶT .13 3.1 Lắp đặt phần cứng 13 3.2 Cài đặt phần mềm 13 3.2.1 Hướng dẫn cài đặt ESP8266 kết nối với Blynk .13 3.2.2 Cài đặt điều khiển thiết bị giọng nói thơng qua Google Assistant 17 3.3 Kết thực 24 KẾT LUẬN 35 TÀI LIỆU THAM KHẢO .36 DANH MỤC CÁC TỪ VIẾT TẮT IFTTT: If This Then That Nếu việc xảy thực việc Applets HMI: Human Machine Interface Blynk Các tác vụ người dùng tạo Giao diện người - máy Ứng dụng điện thoại thông minh DANH MỤC HÌNH ẢNH Hình 2.1: Module NodeMCU 0.9 Hình 2.2: Chân chức Node MCU Hình 2.3: Mơ cách sử dụng Google Assistant Hình 2.4: Sơ đồ thể kết hợp Blynk, Google assistant bo MCU esp8266 Hình 2.5: Nguyên lý hoạt động mạch điều khiển thiết bị giọng nói Hình 3.1: Sơ đồ mạch nguyên lý Hình 3.2: Thủ tục để cập nhật phần mềm cho Arduino IDE Hình 3.3: Thủ tục để cập nhật phần mềm cho Arduino IDE Hình 3.4: Thủ tục để cập nhật phần mềm cho Arduino IDE Hình 3.5: Thủ tục tạo tài khoản Blynk Hình 3.6: Thủ tục tạo dự án Blynk Hình 3.7: Thủ tục chèn nút nhấn vào giao diện Hinh 3.8: Chọn chân Hình 3.9: Cấu trúc IFTTT Hình 3.10: Sự kết nối google assistant vi xử lý Hình 3.11: Chọn đăng nhập vào IFTTT Hình 3.12: Chọn tạo applets Hình 3.13: Cách chọn thêm câu lệnh Hình 3.14: Tìm kiếm chọn Google assistant Hình 3.15: Chọn thêm yêu cầu Hình 3.16: Tìm kiếm chọn Webhook Hình 3.17: Mạch kết nối thực tế Hình 3.18: Điều khiển đèn dùng Blynk Hình 3.19: Bật đèn dùng giọng nói Hình 3.20: Tắt đèn dùng giọng nói Hình 3.21: Bật đèn dùng remote nút Hình 3.22: Tắt đèn dùng remote nút THÔNG TIN KẾT QUẢ NGHIÊN CỨU ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CẤP TRƯỜNG Thông tin chung: - Tên đề tài: Điều khiển thiết bị giọng nói - Mã số: TR:2020-29/KCN-SV - Chủ nhiệm đề tài: Võ Minh Hưng Điện thoại: 0969 297 924 Email: 141801686@dntu.edu.vn - Đơn vị quản lý chuyên môn: Khoa Công nghệ - Thời gian thực hiện: Từ tháng năm 2020 đến tháng năm 2021 Mục tiêu: Tạo thiết bị dùng để bật tắt thiết bị điện gia đình giọng nói Nội dung chính: Cài đặt ứng dụng Google Assistant lên điện thoại ứng dụng dịch vụ web IFTTT để thực bặt tắt thiết bị điện giọng nói Kết đạt (khoa học, đào tạo, kinh tế - xã hội, ứng dụng, ) - Nghiên cứu thiết kế thi công thiết bị bật tắt tự động giọng nói để giúp người tiết kiệm thời gian tiện lợi việc sử dụng thiết bị gia đình Thiết bị có số ưu điểm sau: + Lắp ráp bảo dưỡng dễ dàng + Hoạt động êm, tốc độ cao xác + Có thể điều khiển từ xa điện thoại + Có thể di chuyển dễ dàng điều khiển cần sử dụng + Giá thành thấp - Tạo môi trường học tập nghiên cứu cho người học giảm chi phí cho nhà trường - Truyền cảm hứng cho giảng viên sinh viên ham tìm tịi, học hỏi tự hợp tác để tạo sản phẩm riêng CHƯƠNG 1: TỔNG QUAN 1.1 Tổng quan lĩnh vực nghiên cứu Điều khiển thiết bị từ xa RF, bluetooth, hồng ngoại…thì có từ trước, với wifi, smartphone android có khắp nơi người dùng ưa chuộng điều khiển thiết bị giọng nói Hiện có điều khiển thiết bị giọng nói tiếng anh tiếng việt nên tiện lợi cho người sử dụng Song để thiết lập việc mã hóa gửi liệu từ lời thoại người dùng đến xử lý trung tâm, cần dùng ứng dụng web trung gian IFTTT Do nhu cầu sử dụng ngày cao nên IFTTT tính phí với phiên IFTTT Pro giá 39,99USD/năm 1.2 Tính cấp thiết Qua tìm hiểu, thấy vận động phát triển người ngày dần tiên tiến, sử dụng tự động hóa thứ cơng nghiệp chế biến, sản xuất sử dụng máy móc vận hành để tiết kiệm nhân công thời gian làm việc Nên sinh hoạt cần tự động hóa để phục vụ đời sống người 1.3 Mục tiêu Nghiên cứu thiết kế thi công thiết bị bật tắt tự động để giúp người sinh hoạt tiết kiệm thời gian tiện lợi Thiết bị bật tắt ba có số ưu điểm sau: + Lắp ráp bảo dưỡng dễ dàng + Hoạt động êm, tốc độ cao xác + Có thể điều khiển từ xa điện thoại + Có thể di chuyển dễ dàng điều khiển cần sử dụng + Giá thành thấp 1.4 Cách tiếp cận Nắm bắt mong muốn người dùng giá thành chất lượng sản phẩm thiết bị bật tắt tự động, nhóm nghiên cứu tâm làm sản phẩm thiết bị bật tắt giọng nói có chức mong muốn mà giá thành lại giảm đáp ứng thị hiếu người dùng 1.5 Phương pháp nghiên cứu Giải pháp nhóm sử dụng vận dụng vật liệu có gia đình như: bóng đèn, dây điện bo mạch cần thiết Tra cứu tài liệu, video liên quan đến nội dung đề tài Thử nghiệm, sửa sai, hoàn thiện sản phẩm 1.6 Đối tượng phạm vi nghiên cứu - App Google Assistant điện thoại thông minh - Dịch vụ web IFTTT vấn đề liên quan - NodeMCU ESP8266 cách viết code cho theo yêu cầu đề tài 1.7 Nội dung nghiên cứu Cài đặt ứng dụng Google Assistant lên điện thoại ứng dụng dịch vụ web IFTTT để thực bặt tắt thiết bị điện giọng nói Viết code cho Node MCU để mạch hoạt động theo yêu cầu 1.8 Kế hoạch thực đề tài STT Nội dung công việc (1) (2) Tìm hiểu cách kết nối Google Assistant với bo wifi Node MCU ESP8266 Thực thi dịch vụ web IFTTT để tạo Applet Viết code cho vi xử lý Kết nối phần cứng Cài đặt ứng dụng Google Assistant lên Smart phone Hoàn thiện thiết bị Viết toàn văn đề tài Kết đạt (3) Thời gian bắt đầu, kết thúc (4) Sơ đồ nguyên 9/2020 đến 10/2020 lý Tạo Applet 10/2020 đến 11/2020 Code Bo mạch Có phản hồi từ Google Assistant Thiết bị vận hành tốt Cuốn báo cáo 11/2020 12/2020 12/2020 12/2021 12/2020 đến 1/2021 CHƯƠNG 2: GIỚI THIỆU CÁC THIẾT BỊ ĐƯỢC LỰA CHỌN 2.1 Module Node MCU ESP8266 ESP8266 mạch vi điều khiển giúp điều khiển thiết bị điện tử Điều đặc biệt nó, kết hợp module Wifi tích hợp sẵn bên vi điều khiển Hiện nay, ESP8266 giới nghiên cứu tự động hóa Việt Nam ưa chuộng giá thành rẻ (chỉ Arduino Nano), lại tích hợp sẵn Wifi, nhớ flash 8Mb Hình dạng Module Node MCU ESP8266 hình 2.1 Hình 2.1: Module NodeMCU 0.9 ESP8266 có nhiều phiên đóng gói theo nhiều cách khác nhau, nhiên lại giống chức khả lập trình Trên thị trường phổ biến ESP8266v1, ESP8266v7 ESP8266v12 Trong giải pháp này, nhóm sử dụng mạch ESP8266v12 đóng gói mạch NodeMCU 0.9 Các board khác sử dụng nhân ESP8266v12 v7 chạy được, ví dụ WeMos, Olimex, ESPino hay hãng sử dụng ESP8266v12 làm core Mỗi hãng khác cách đặt board bố trí thứ tự chân Sơ đồ chân chức Node MCU hình 2.2 Hình 2.2: Chân chức Node MCU Chúng ta điền đầy đủ thông tin trường hiển thị URL: Nhập URL theo cú pháp sau: 22 http://188.166.206.43/YourAuthTokenHere/update/DigitalPinToBeUpdateHere Trong đó: http://188.166.206.43 URL Blynk Server YourAuthTokenHere: Mã Token cấp tạo dự án App Blynk DigitalPinToBeUpdateHere: Chân cấu hình để điều khiển thiết bị Method: Chọn PUT Content Type: Chọn application/json Body: Chúng ta điền vào [“1”], nghĩa bật thiết bị Sau điền đầy đủ thông tin nhấn “Create action” để hoàn tất Tương tự cho phần “Turn on the light 1” có kết sau Lưu ý: Ở phần chọn chân để điều khiển thiết bị, bạn chọn pin “GPIO” để IFTTT truyền lệnh xuống ESP8266 hiểu Ví dụ: chọn chân “GPIO16” chọn theo hình 2.2 điền D16 kết nối với relay nối chân Do với IN1 23 3.3 Kết thực Mạch kết nối thực tế hình 3.17 Hình 3.17: Mạch kết nối thực tế Kết chạy mạch phần điều khiển Blynk hình 3.18 Hình 3.18: Điều khiển đèn dùng Blynk Điều khiển giọng nói - Mở đèn 24 Hình 3.19: Bật đèn dùng giọng nói - Tắt đèn Hình 3.20: Tắt đèn dùng giọng nói Mở tắt đèn dùng remote nút 25 Mở đèn dùng remote nút hình 3.21 Hình 3.21: Bật đèn dùng remote nút Tắt đèn Hình 3.22: Tắt đèn dùng remote nút Code nạp cho vi xử lý: 26 #include #include #include #include #include #define BLYNK_PRINT Serial int Relay1State = HIGH; int Relay2State = HIGH; int Relay3State = HIGH; int Relay4State = HIGH; WidgetLED led1(V0); BlynkTimer timer; BlynkTimer timerCheckInternet; ESP8266WebServer webServer(80); //==========AP info=======================// char* ssid_ap = "BAT KY"; char* pass_ap = "12345678"; IPAddress ip_ap(192,168,1,1); IPAddress gateway_ap(192,168,1,1); IPAddress subnet_ap(255,255,255,0); String statusD1="1",statusD2="1",statusD3="1",statusD4="1"; String ssid; String pass; String auth; boolean internetState = 0; int timer_ReconnectBlynk; boolean setBlynk = 0; void setup() { Serial.begin(9600); pinMode(D1,OUTPUT); pinMode(D2,OUTPUT); pinMode(D3,OUTPUT); pinMode(D4,OUTPUT); pinMode(D5, INPUT); pinMode(D6, INPUT); pinMode(D7, INPUT); pinMode(D8, INPUT); digitalWrite(D1,HIGH); digitalWrite(D2,HIGH); digitalWrite(D3,HIGH); digitalWrite(D4,HIGH); attachInterrupt(D5, checkPhysicalButton, RISING); attachInterrupt(D6, checkPhysicalButton, RISING); attachInterrupt(D7, checkPhysicalButton, RISING); attachInterrupt(D8, checkPhysicalButton, RISING); EEPROM.begin(512); delay(10); if(read_EEPROM()){ if(checkConnection()){ //Khởi tạo nhớ EEPROM 27 startWebServer(); checkInternet(); if(internetState == 1){ Blynk.begin(auth.c_str(),ssid.c_str(),pass.c_str()); timer.setInterval(1000L, blinkLedWidget); setBlynk = 1; }else{ setBlynk = 0; } timerCheckInternet.setInterval(60000L,checkInternet); return; } } WiFi.disconnect(); delay(100); WiFi.mode(WIFI_AP); WiFi.softAPConfig(ip_ap, gateway_ap, subnet_ap); WiFi.softAP(ssid_ap,pass_ap,1,false); Serial.println("Soft Access Point mode!"); Serial.print("Please connect to "); Serial.println(ssid_ap); Serial.print("Web Server IP Address: "); Serial.println(ip_ap); startWebServer(); } void loop() { webServer.handleClient(); if(internetState == 1){ if(Blynk.connected()){ Blynk.run(); timer.run(); } } timerCheckInternet.run(); } //==========Chương trình con=================// //============Blynk======================== // -Ngắt timer kiểm tra internet -ICACHE_RAM_ATTR void checkInternet(){ bool ret = Ping.ping("www.google.com"); if(ret){ Serial.println("Đã kết nối internet"); internetState = 1; if(setBlynk == 0){ Blynk.begin(auth.c_str(),ssid.c_str(),pass.c_str()); timer.setInterval(1000L, blinkLedWidget); setBlynk = 1; } if(!Blynk.connected()){ Blynk.connect(); } }else{ 28 Serial.println("Mất kết nối internet"); internetState = 0; } } // -Ngắt timer led kết nối ICACHE_RAM_ATTR void blinkLedWidget() { if (led1.getValue()) { led1.off(); } else { led1.on(); } } // -Ngắt phuc vụ xử lý nút nhấn -ICACHE_RAM_ATTR void checkPhysicalButton() { if (digitalRead(D5) == HIGH) { Relay1State = !Relay1State; digitalWrite(D1, Relay1State); Blynk.virtualWrite(V1, Relay1State); } if (digitalRead(D6) == HIGH) { Relay2State = !Relay2State; digitalWrite(D2, Relay2State); Blynk.virtualWrite(V2, Relay2State); } if (digitalRead(D7) == HIGH) { Relay3State = !Relay3State; digitalWrite(D3, Relay3State); Blynk.virtualWrite(V3, Relay3State); } if (digitalRead(D8) == HIGH) { Relay4State = !Relay4State; digitalWrite(D4, Relay4State); Blynk.virtualWrite(V4, Relay4State); } } // Đồng liệu chân V với Server Blynk -BLYNK_CONNECTED() { Blynk.syncVirtual(V1,V2,V3,V4); } // Lấy trạng thái chân V từ Server Blynk BLYNK_WRITE(V1) { Relay1State = param.asInt(); digitalWrite(D1, Relay1State); } BLYNK_WRITE(V2) { Relay2State = param.asInt(); digitalWrite(D2, Relay2State); } BLYNK_WRITE(V3) { Relay3State = param.asInt(); 29 digitalWrite(D3, Relay3State); } BLYNK_WRITE(V4) { Relay4State = param.asInt(); digitalWrite(D4, Relay4State); } //===============Web Server====================== void startWebServer(){ webServer.on("/",mainpage); webServer.on("/getSTATUSD",get_STATUSD); webServer.on("/D1on",D1_on); webServer.on("/D1off",D1_off); webServer.on("/D2on",D2_on); webServer.on("/D2off",D2_off); webServer.on("/D3on",D3_on); webServer.on("/D3off",D3_off); webServer.on("/D4on",D4_on); webServer.on("/D4off",D4_off); webServer.on("/Allon",All_on); webServer.on("/Alloff",All_off); webServer.on("/getIP",get_IP); webServer.on("/writeEEPROM",write_EEPROM); webServer.on("/restartESP",restart_ESP); webServer.on("/clearEEPROM",clear_EEPROM); webServer.begin(); Serial.println("Web Server is started!"); } // -Trang chủ void mainpage(){ String s = FPSTR(MainPage); webServer.send(200,"text/html",s); } // Lấy trạng thái chân điều khiển -void get_STATUSD(){ if(digitalRead(D1)==0){ statusD1 = "0"; }else{ statusD1 = "1"; } if(digitalRead(D2)==0){ statusD2 = "0"; }else{ statusD2 = "1"; } if(digitalRead(D3)==0){ statusD3 = "0"; }else{ statusD3 = "1"; } if(digitalRead(D4)==0){ statusD4 = "0"; }else{ 30 statusD4 = "1"; } String s = "{\"D1\": \""+ statusD1 +"\"," + "\"D2\": \""+ statusD2 + "\"," + "\"D3\": \""+ statusD3 + "\"," + "\"D4\": \""+ statusD4 +"\"}"; webServer.send(200,"application/json",s); } // Điều khiển chân D1 -void D1_on(){ digitalWrite(D1,LOW); Blynk.virtualWrite(V1,LOW); get_STATUSD(); } void D1_off(){ digitalWrite(D1,HIGH); Blynk.virtualWrite(V1,HIGH); get_STATUSD(); } // Điều khiển chân D2 -void D2_on(){ digitalWrite(D2,LOW); Blynk.virtualWrite(V2,LOW); get_STATUSD(); } void D2_off(){ digitalWrite(D2,HIGH); Blynk.virtualWrite(V2,HIGH); get_STATUSD(); } // Điều khiển chân D3 -void D3_on(){ digitalWrite(D3,LOW); Blynk.virtualWrite(V3,LOW); get_STATUSD(); } void D3_off(){ digitalWrite(D3,HIGH); Blynk.virtualWrite(V3,HIGH); get_STATUSD(); } // Điều khiển chân D4 -void D4_on(){ digitalWrite(D4,LOW); Blynk.virtualWrite(V4,LOW); get_STATUSD(); } void D4_off(){ digitalWrite(D4,HIGH); Blynk.virtualWrite(V4,HIGH); get_STATUSD(); } 31 // Điều khiển chân D -void All_on(){ digitalWrite(D1,LOW); digitalWrite(D2,LOW); digitalWrite(D3,LOW); digitalWrite(D4,LOW); Blynk.virtualWrite(V1,LOW); Blynk.virtualWrite(V2,LOW); Blynk.virtualWrite(V3,LOW); Blynk.virtualWrite(V4,LOW); get_STATUSD(); } void All_off(){ digitalWrite(D1,HIGH); digitalWrite(D2,HIGH); digitalWrite(D3,HIGH); digitalWrite(D4,HIGH); Blynk.virtualWrite(V1,HIGH); Blynk.virtualWrite(V2,HIGH); Blynk.virtualWrite(V3,HIGH); Blynk.virtualWrite(V4,HIGH); get_STATUSD(); } // Lấy địa IP kết nối void get_IP(){ String s = WiFi.localIP().toString(); webServer.send(200,"text/html", s); } // Đọc nhớ EEPROM -boolean read_EEPROM(){ Serial.println("Reading EEPROM "); if(EEPROM.read(0)!=0){ ssid = ""; pass = ""; auth = ""; for (int i=0; i