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

BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT

33 5 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

Tiêu đề Báo Cáo Bài Tập Lớn Điều Khiển Và Giám Sát Thiết Bị Điện Thông Qua Trợ Lý Ảo Google Assistant
Tác giả Phạm Xuân Thi, Phạm Minh Uy, Đặng Xuân Khu
Người hướng dẫn ThS. Trần Hoàng Quân
Trường học Đại Học Quốc Gia Tp.Hồ Chí Minh
Chuyên ngành Điện – Điện Tử
Thể loại Đồ án môn học
Năm xuất bản 2021
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 33
Dung lượng 1,63 MB

Cấu trúc

  • 1. GIỚI THIỆU (7)
    • 1.1 Tổng quan (7)
    • 1.2 Nhiệm vụ đề tài (7)
    • 1.3 Phân chia công việc trong nhóm (8)
  • 2. LÝ THUYẾT (8)
    • 2.1 Google Assistant (8)
    • 2.2 NODE MCU ESP8266 (9)
    • 2.3 IFTTT (10)
    • 2.4 ATmega328P (10)
    • 2.5 Blynk (12)
    • 2.6 Cảm Biến Nhiệt Độ Độ Ẩm (13)
    • 2.7 Module I2C giao tiếp với LCD (14)
    • 2.8 Keypad 4x4 (15)
    • 4.1 Yêu cầu thiết kế (20)
    • 4.2 Lưu đồ giải thuật (0)
    • 5.1 Kết quả tạo app bằng Blynk (23)
    • 5.2 Kết quả (24)
    • 6.1 Kết luận (27)

Nội dung

GIỚI THIỆU

Tổng quan

Cuộc cách mạng 4.0 đã đưa Internet of Things (IoT) trở thành một khái niệm quen thuộc, với nhiều thành quả đáng kể từ công nghệ này Nhiều công ty đang nỗ lực phát triển IoT, do đó nhóm chúng tôi quyết định chọn đề tài này để tích lũy kinh nghiệm cho tương lai Chúng tôi nhận thấy tầm quan trọng của việc điều khiển thiết bị điện trong gia đình và sự tiện lợi mà Google Assistant mang lại Nhóm sẽ sử dụng Google Assistant để điều khiển thiết bị điện bằng giọng nói và thiết kế phần mềm trên hệ điều hành Android, giúp người dùng dễ dàng quản lý trạng thái thiết bị từ xa qua kết nối WIFI.

Hệ thống này mang lại nhiều lợi ích, bao gồm khả năng tự động tắt quạt và đèn khi chủ nhà quên, cũng như bật máy điều hòa để làm mát phòng trước khi về nhà Ngoài ra, người dùng còn có thể tùy chỉnh nhiệt độ máy điều hòa theo nhu cầu cá nhân.

Nhiệm vụ đề tài

Tìm hiểu về nguyên lý và lý thuyết của hệ thống giao tiếp qua Internet và WIFI, cũng như cách hoạt động của module NodeMCU ESP8266 Bài viết sẽ cung cấp thông tin chi tiết về điện áp hoạt động của ESP8266, hướng dẫn cách nạp code và các thông số kỹ thuật cần thiết để sử dụng module này hiệu quả.

Tìm hiểu về cảm biến, vi xử lý và bo mạch phát triển là rất quan trọng trong lĩnh vực điện tử Đặc biệt, giao tiếp UART của Atmega328p cần được nghiên cứu kỹ lưỡng, bao gồm cả việc đọc Datasheet của các cảm biến để hiểu cách thức giao tiếp giữa vi xử lý và cảm biến Bên cạnh đó, việc nắm vững các thao tác trên phần mềm mô phỏng Proteus sẽ giúp tối ưu hóa quá trình phát triển và kiểm tra các dự án điện tử.

• Nội dung 3: Thiết kế bộ điều khiển đèn, cửa.

Phân chia công việc trong nhóm

• Đặng Xuân Khu: Mua thiết bị phần cứng, hàn mạch, đổ và sửa code

• Phạm Xuân Thi: Code phần khóa cửa điện tử trên Atmega328p, hiển thị LCD

• Phạm Minh Uy: Code giao tiếp UART giữa Atmega328p và NodeMCU ESP8266

Mỗi sinh viên cần nắm vững lý thuyết liên quan đến phần việc của mình và tham gia thảo luận qua Google Meet vào cuối tuần hoặc khi có thắc mắc cần trao đổi.

LÝ THUYẾT

Google Assistant

Google Assistant là một trợ lý ảo thông minh, tương tự như Siri của Apple, Bixby của Samsung và Cortana của Microsoft Nó cung cấp nhiều tính năng hữu ích, bao gồm tìm kiếm thông tin, thực hiện yêu cầu của người dùng như mở danh bạ, gọi điện cho người trong danh bạ, đọc tin nhắn và mở nhạc.

Google Assistant là một trợ lý cá nhân ảo do Google phát triển, ra mắt lần đầu tiên tại hội nghị nhà phát triển vào tháng 5 năm 2016.

Google Assistant được giới thiệu lần đầu tiên vào năm 2016 trong ứng dụng nhắn tin Google Allo và loa thông minh Google Home Sau một thời gian chỉ có mặt trên điện thoại Pixel và Pixel XL, Google đã mở rộng Assistant cho các thiết bị Android khác vào tháng 2 năm 2017, bao gồm điện thoại bên thứ ba và thiết bị Android Wear Đến tháng 5 cùng năm, Assistant đã có mặt dưới dạng ứng dụng riêng trên iOS Với bộ phát triển phần mềm ra mắt vào tháng 4 năm 2017, Assistant tiếp tục được mở rộng hỗ trợ cho nhiều thiết bị, từ ô tô đến các thiết bị nhà thông minh, đồng thời cho phép các nhà phát triển bên thứ ba bổ sung chức năng cho Assistant.

NODE MCU ESP8266

Sơ đồ chân Node MCU ESP8266

NodeMCU là một nền tảng phần mềm mã nguồn mở dựa trên ngôn ngữ Lua, được thiết kế đặc biệt cho các ứng dụng IoT Nó bao gồm firmware hoạt động trên SoC Wi-Fi ESP8266 của Espressif Systems và phần cứng dựa trên mô-đun ESP-12.

Bộ vi điều khiển sử dụng CPU RISC 32-bit Tensilica Xtensa LX106 với điện áp hoạt động 3.3V và điện áp đầu vào từ 7-12V Thiết bị có 16 chân I/O kỹ thuật số (DIO), 1 chân đầu vào tương tự (ADC), 1 UART, 1 SPI và 1 I2C Ngoài ra, bộ nhớ Flash của nó đạt 4 MB.

4 o SRAM: 64 KB o Tốc độ đồng hồ: 80 MHz o USB-TTL dựa trên CP2102 được bao gồm trên bo mạch, cho phép Plug n Play o Ăng-ten PCB.

IFTTT

IFTTT, viết tắt của "If This Then That", là một dịch vụ web trung gian giúp kết nối và tự động hóa các tác vụ giữa hai dịch vụ khác nhau Nguyên lý hoạt động của IFTTT dựa trên câu lệnh "nếu việc này xảy ra, thì làm việc kia", cho phép người dùng thiết lập các quy tắc tự động hóa Khi có bất kỳ sự thay đổi nào trên một ứng dụng, IFTTT sẽ kích hoạt ứng dụng kia để thực hiện các thay đổi tương tự, giúp tiết kiệm thời gian và nâng cao hiệu quả công việc.

IFTTT là một công cụ mạnh mẽ cho phép kết nối với nhiều nền tảng như Google Assistant, Facebook, Twitter, và nhiều hơn nữa Ứng dụng này rất hữu ích trong các lĩnh vực như Marketing và Tự động hoá, đặc biệt là việc tuỳ chỉnh Google Assistant, một tính năng được nhiều người yêu thích.

ATmega328P

ATmega328P là một bộ vi điều khiển tiên tiến, nổi bật với nhiều tính năng vượt trội Đây là một trong những vi điều khiển phổ biến nhất của Atmel, thường được sử dụng trong các bo mạch điện tử.

Arduino UNO là một bộ vi điều khiển thuộc họ vi điều khiển megaMVR của Atmel, công ty đã được Microchip Technology Inc mua lại vào cuối năm 2016 Các vi điều khiển trong họ megaMVR được thiết kế để xử lý các bộ nhớ chương trình lớn, với mỗi vi điều khiển có lượng ROM, RAM, chân I/O và các tính năng khác nhau Hệ thống này cung cấp các chân đầu ra đa dạng, từ 8 chân cho đến hàng trăm chân, đáp ứng nhu cầu của nhiều ứng dụng khác nhau.

• Mạch bên trong của ATmega328P được thiết kế với tính năng tiêu thụ dòng điện thấp Con chip này chứa 32 kilobyte bộ nhớ flash trong, 1 kilobyte EEPROM và

SRAM 2 kilobyte là loại bộ nhớ chỉ lưu trữ thông tin khi có nguồn điện Khác với EEPROM và bộ nhớ flash, thông tin trong SRAM sẽ bị xóa hoàn toàn khi nguồn điện bị ngắt.

ATmega328P là một vi điều khiển hiệu suất cao với tiêu thụ điện năng thấp, bao gồm 6 chân ngõ vào Analog và 14 chân I/O kỹ thuật số, tổng cộng 23 chân I/O Nó được trang bị 32 KB bộ nhớ flash, 2 KB SRAM và 1 KB EEPROM, với tốc độ xung nhịp đạt 16MHz ATmega328P hoạt động trong dải nhiệt độ từ -40 độ C đến 105 độ C và hỗ trợ điện áp hoạt động từ 1.8V DC đến 5.5V DC Vi điều khiển này sử dụng kiến trúc RISC tiên tiến, có khóa chức năng chương trình để bảo mật mã lập trình, và bao gồm ba bộ định thời (hai 8 bit và một 16 bit) cùng với 6 kênh PWM.

Blynk

Blynk là nền tảng lý tưởng cho Internet of Things, cho phép người dùng điều khiển thiết bị phần cứng từ xa, hiển thị dữ liệu cảm biến và lưu trữ thông tin một cách hiệu quả.

Cách thức giao tiếp Blynk

Nền tảng này bao gồm ba thành phần chính, trong đó Blynk App cho phép người dùng tạo giao diện sản phẩm một cách dễ dàng bằng cách kéo và thả các widget được thiết kế sẵn bởi nhà cung cấp.

Blynk Server chịu trách nhiệm xử lý dữ liệu trung tâm giữa điện thoại, máy tính bảng và phần cứng Người dùng có thể lựa chọn sử dụng Blynk Cloud hoặc tự tạo máy chủ Blynk riêng Với mã nguồn mở, Blynk dễ dàng tích hợp vào các thiết bị, bao gồm cả việc sử dụng Raspberry Pi làm máy chủ Thư viện Blynk hỗ trợ hầu hết các nền tảng phần cứng phổ biến.

- cho phép giao tiếp với máy chủ và xử lý tất cả các lệnh đến và đi.

Cảm Biến Nhiệt Độ Độ Ẩm

Cảm biến độ ẩm và nhiệt độ DHT11 là một trong những cảm biến phổ biến hiện nay nhờ vào chi phí thấp và khả năng thu thập dữ liệu dễ dàng qua giao tiếp 1 wire Với bộ tiền xử lý tín hiệu tích hợp, DHT11 cung cấp dữ liệu chính xác mà không cần tính toán phức tạp Tuy nhiên, so với DHT22, cảm biến DHT11 có khoảng đo và độ chính xác kém hơn.

Cảm Biến Nhiệt Độ Độ Ẩm DHT11

• DHT11 có cấu tạo 4 chân như hình Nó sử dụng giao tiếp số theo chuẩn 1 dây

• Thông số kỹ thuật: o Đo độ ẩm: 20%-95% o Nhiệt độ: 0-50ºC

8 o Sai số độ ẩm ±5% o Sai số nhiệt độ: ±2ºC.

Module I2C giao tiếp với LCD

• Module I2C LCD: là module chuyển đổi từ giao tiếp song song sang giao tiếp

Giao tiếp LCD 1602 và LCD 2004 với Arduino thường yêu cầu tới 7 chân IO, nhưng khi sử dụng Module I2C, chỉ cần 4 chân kết nối Việc này không chỉ giúp tiết kiệm pin mà còn mang lại sự tiện lợi trong quá trình thực hành giao tiếp LCD với Arduino và Raspberry.

Module I2C LCD có các thông số kỹ thuật nổi bật như tương thích với màn hình LCD 1602 và LCD 2004, cung cấp nguồn 5V DC, hỗ trợ giao thức I2C, và cho phép điều chỉnh độ sáng đèn nền cũng như độ tương phản thông qua biến trở Module này được trang bị các chân kết nối SDA, SCL, VCC và GND, với kích thước nhỏ gọn 41.5mm x 19mm x 16mm.

Keypad 4x4

• Gồm 8 pin out trong đó 4 pin đầu là hàng (R1 R2 R3 R4) và 4 pin sau là cột (C1 C2 C3 C4)

• Nguồn đi qua tối đa là 24V và dòng tối đa là 30mA

• Nhiệt độ hoạt động từ 0 đến 50 độ C.

Bước đầu tiên là đặt pin tất cả hàng thành output và cung cấp điện áp dương cho chúng Sau đó, đặt pin ở tất cả các cột làm input Khi một nút ở cột x được nhấn, giá trị tại đó sẽ được xác định.

Cx sẽ sẽ mang mức logic cao (do thông mạch), khi đó ta xác định được cột được bấm

Để xác định hàng được bấm, bước đầu tiên là đặt pin tất cả các cột thành chế độ output và cung cấp điện áp dương Sau đó, cần đặt pin ở tất cả các hàng làm input Khi một nút ở hàng x được nhấn, giá trị tại Rx sẽ đạt mức logic cao do thông mạch, từ đó xác định được hàng đã được bấm.

Mạch nguyên lý của keypad

3 THIẾT KẾ VÀ THỰC HIỆN PHẦN CỨNG

Hệ thống thiết kế yêu cầu mở và khóa cửa điện từ bằng Passwords có thể dễ dàng thay đổi mà không cần mã code, với tối đa 8 kí tự số và sử dụng nút để chọn chế độ Người dùng có thể điều khiển đèn thông qua ứng dụng Blynk bằng nút nhấn và giọng nói, đảm bảo tốc độ cập nhật không dưới 2 giây cho mọi thay đổi Hệ thống cần hoạt động chính xác và ổn định, đồng thời điện áp hoạt động phải an toàn cho người sử dụng.

Để đáp ứng các yêu cầu thiết kế, cần lựa chọn sơ đồ và linh kiện phù hợp Đối với việc nhập và hiển thị mật khẩu, với mật khẩu tối đa 8 ký tự, cần sử dụng bàn phím có ít nhất 8 nút Linh kiện lý tưởng cho việc này là Keypad 4x4, bao gồm các số từ 0-9, hai ký tự * và #, cùng với 4 phím A, B, C, D Keypad 4x4 có hai loại là cảm ứng và bấm, tuy nhiên, sau khi thử nghiệm, bàn phím cảm ứng điện dung được xem là lựa chọn tốt nhất để đáp ứng yêu cầu.

Kết quả từ thẩm mỹ có thể gây nhầm lẫn, vì vậy chọn phương pháp bấm sẽ là lựa chọn tốt hơn Để bảo vệ nhà cửa khỏi cháy nổ, hệ thống cảm biến khí gas thường được sử dụng, nhưng nếu cảm biến không phát hiện kịp thời thì sẽ gặp rủi ro Do đó, việc lắp đặt cảm biến nhiệt độ bên ngoài phòng khách là cần thiết Cảm biến này không chỉ đo nhiệt độ để phòng ngừa cháy nổ mà còn giúp theo dõi điều kiện môi trường trong nhà, từ đó cho phép điều chỉnh hệ thống điều hòa không khí từ xa để tạo ra môi trường sống tốt nhất Các loại cảm biến nhiệt độ phổ biến như DHT 11, DHT 22 và AM2302, trong đó DHT 22 có dải đo rộng hơn, nhưng sự khác biệt này không cần thiết vì khó có thể đạt được mức tối đa.

Dự án này sử dụng DHT 11 do nguyên vật liệu có sẵn, mặc dù DHT 22 có giá thành cao hơn nhiều Chức năng chính của dự án là điều khiển đèn bằng điện thoại và giọng nói, yêu cầu tín hiệu từ vi xử lý để bật tắt đèn thông qua một công tắc Cần lưu ý rằng nguồn cấp cho thiết bị phải được cung cấp từ một đường dây riêng, không lấy từ vi xử lý Do hạn chế về thời gian và kinh phí, dự án chỉ sử dụng LED đơn với điện áp 5V Cuối cùng, việc lựa chọn linh kiện cơ bản như LCD, đèn và nút bấm là rất quan trọng, và cần phải chọn bộ nguồn phù hợp để cấp điện cho toàn bộ hệ thống.

LCD chỉ cần hiển thị hai dòng: một dòng cho đề mục và một dòng cho mật khẩu nhập vào Do đó, việc sử dụng LCD 16x02 là hợp lý Tuy nhiên, để điều khiển LCD này cần ít nhất 8 chân Để giảm thiểu số chân sử dụng, dự án quyết định áp dụng module I2C chuyên dụng cho LCD.

Đèn hiển thị có thể sử dụng đèn 3.3V để giả lập, nhưng trong thực tế, cần sử dụng đèn có nguồn vào 220V Để đảm bảo độ rõ ràng, nên chọn đèn siêu sáng.

Nút bấm nên được sử dụng loại công tắc (SWITCH) để mô phỏng thực tế một cách tốt nhất Tuy nhiên, do sự hạn chế về linh kiện có sẵn, đồ án sẽ sử dụng loại nút bấm bình thường (PUSH) Thứ năm, việc chọn vi xử lý phù hợp là rất quan trọng; từ các linh kiện đã nêu, chúng ta có thể xác định các loại kết nối cần thiết.

• 1 linh kiện sử dụng I2C là module I2C cho LCD

• 1 chân Digital cảm biến nhiệt độ, độ ẩm

• 3 Digital Output là đèn, khóa mở cổng tự động

Chúng tôi đã quyết định chọn vi xử lý ESP8266 cho đồ án của mình nhằm tiết kiệm chi phí và đáp ứng các yêu cầu cần thiết Vấn đề cấp nguồn cũng được xem xét kỹ lưỡng dựa trên các linh kiện đã sử dụng trong dự án.

• Cảm biến nhiệt độ, độ ẩm và đèn led siêu sáng được cấp điện 3.3 VDC

• I2C, LCD, nút nhấn, được cấp nguồn 5VDC

Từ đó ta xác các nguồn sử dụng gồm loại 3.3V, 5V Do đó vấn đề về nguồn trong đồ án này khá đơn giản

• Sơ đồ khối chi tiết:

Khối nguồn cung cấp điện áp 5V và 3.3V cho hệ thống Kit NodeMCU-32s ESP32 xử lý và nhận dữ liệu từ ứng dụng Blynk trên điện thoại qua giao tiếp WIFI, đóng vai trò trung gian giữa ATmega328P và mạng WIFI Cảm biến nhiệt độ và độ ẩm đọc giá trị và truyền vào MCU MCU ATmega328P tiếp nhận và xử lý dữ liệu từ cảm biến, giao tiếp với ESP8266 qua chuẩn UART Nút nhấn được sử dụng để điều khiển bật tắt đèn phòng khách, trong khi keypad cho phép nhập mật khẩu Cửa điện tử hoạt động bằng động cơ servo, và đèn LED siêu sáng mô phỏng ánh sáng thực tế Màn hình LCD 16x2 hiển thị hướng dẫn nhập mật khẩu cùng với thông tin về nhiệt độ và độ ẩm Cuối cùng, module I2C giúp giảm số chân cần thiết cho việc giao tiếp với vi xử lý.

ATMEGA328P ĐÈN LED CỬA ĐIỆN TỬ

CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM (DHT11)

4 THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM:

Yêu cầu thiết kế

• Phải có app để điều khiển thiết bị, và có app để điều khiển bằng giọng nói

• Các cảm biến không cần đọc giá trị một cách liên tục nên cần có thời gian giãn cách giữa giữa các lần đọc

• Password khi nhập được hiển thị giá trị lên màn hình vì nếu có người lạ ở đó nhìn thấy được thì sẽ vào nhà được

• Trạng thái đèn được điều khiển bằng nút nhấn hoặc giọng nói phải đồng bộ với

Cần có hai chế độ cài đặt cho việc đóng mở cửa: chế độ mở khóa cửa cho phép mở cửa khi nhập đúng mật khẩu, và chế độ thay đổi mật khẩu, cho phép người dùng đổi mật khẩu sau khi nhập mật khẩu cũ.

Việc điều khiển thiết bị qua ứng dụng di động là một thách thức lớn, do đó, lựa chọn sử dụng các ứng dụng tạo giao diện sẵn có là giải pháp hợp lý Sau quá trình nghiên cứu, đồ án quyết định sử dụng ứng dụng Blynk, nhờ vào tính năng mã nguồn mở, cộng đồng hỗ trợ rộng rãi và khả năng dễ dàng trong việc tạo giao diện người dùng.

Vấn đề điều khiển bằng giọng nói yêu cầu tính dễ sử dụng và khả năng kết nối với hệ thống Đồ án quyết định sử dụng Google Assistant để thực hiện điều này, kết nối với Blynk thông qua IFTTT IFTTT đóng vai trò như cầu nối, cho phép nhận diện các câu lệnh đã được cài đặt sẵn và truyền lệnh xuống Blynk khi câu lệnh đúng cấu trúc.

Để đồng bộ hóa đèn và trạng thái Blynk, khi nút nhấn được kích hoạt, trạng thái của Blynk và đèn sẽ được thay đổi đồng thời Ngược lại, khi Blynk được nhấn, trạng thái của đèn cũng sẽ được điều chỉnh theo trạng thái thiết bị trên Blynk.

Trong chế độ đóng mở cửa, việc nhập Passwords cần được thực hiện thông qua một phím xác nhận để bắt đầu và ba phím để kết thúc quá trình nhập Cụ thể, phím A sẽ được sử dụng để bắt đầu nhập Passwords, trong khi ba phím B, C và D sẽ không chỉ kết thúc quá trình nhập mà còn cho phép người dùng chọn chế độ hoạt động.

• Thứ tư là giải quyết việc đọc nút nhấn, cần phải có thủ thuật chống rung nút nhấn Đồ án sử dụng chống rung nút nhấn bằng phần mềm

5.1 Kết quả tạo app bằng Blynk:

Hình 5.1: Giao diện trên app và web của ứng dụng Blynk

Hình 5.2: Giảo tiếp LCD với Keypad

Hình 5.3: Giao tiếp với đèn Led

Nhóm ba thành viên đã nỗ lực hoàn thành bài tập lớn, với mục tiêu kết nối Google Assistant với module ESP8266 Tuy nhiên, khi thử kết nối với ứng dụng IFTTT, nhóm gặp phải lỗi và không thể cài đặt thành công.

6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

• Xây dựng được mô hình để ứng dụng điều khiển các thiết bị điện trong nhà bằng công tắc cảm ứng

• Hệ thống có thể điều khiển được thiết bị điện từ xa thông qua wifi bằng phần mềm Blynk, bằng giọng nói với Google Assistant

Điều khiển thiết bị điện trong nhà đã được đồng bộ hóa với công tắc cảm ứng thông qua ứng dụng Blynk và Google Assistant, cho phép người dùng giám sát các thiết bị một cách dễ dàng qua giao diện của Blynk.

Khuyết điểm của thiết bị bao gồm việc chưa liên kết phần cứng một cách hiệu quả, dẫn đến việc tốn nhiều chân kết nối cho keypad và các thiết bị ngoại vi đơn giản Thời gian phản hồi của thiết bị hơi chậm do sử dụng giao thức UART Việc thay đổi password trên phần cứng chưa thể đồng bộ hóa với ứng dụng Blynk Ngoài ra, thiết bị còn phụ thuộc vào Wifi, do đó sẽ không hoạt động khi mất điện và khoảng cách kết nối cũng bị hạn chế.

• Tự phát triển app Android, IOS để điều khiển thiết bị qua wifi

• Sử dụng mạng ZIGBEE để có thể truyền xa, đỡ hao tốn năng lượng và không nhiễu

• Phát triển thêm các hệ thống khác cho phòng ngủ, nhà bếp, sân vườn, được hoạt động điều khiển qua lại với nhau

• Phát triển thêm các thiết bị có thể điều khiển trong nông nghiệp

• Áp dụng trí thông minh nhân tạo vào hệ thống

[1] Thông tin về NodeMCU ESP8266: https://components101.com/development- boards/nodemcu-esp8266-pinout-features-and-datasheet

[2] Atmega328P datasheet: https://datasheet.octopart.com/ATMEGA328P-MU- Microchip-datasheet-65729177.pdf

[3] Blynk: https://tapit.vn/huong-dan-cai-dat-server-blynk-tren-windows-khong- gioi-han-energy/

[4] Arduino for ESP8266: https://arduino.esp8266.vn/

Servo myservo; int pos = 0; boolean buttonstate = 1; boolean ledstate = 0; void setup() {

Serial.begin(9600); pinMode(button,INPUT_PULLUP); pinMode(LED,OUTPUT); myservo.attach(13);

} void loop() { if(digitalRead(button) == 0) { if(buttonstate != 0) { if(ledstate == 0) { digitalWrite(LED,LOW);

String RxBuffer = ""; while(Serial.available()) {

} if(RxBuffer == "ledon"){ digitalWrite(LED,HIGH);

Serial.println("Led đã on!");

} else if(RxBuffer == "ledoff"){ digitalWrite(LED,LOW);

Serial.println("Led đã off!");

} if(RxBuffer == "closed") { for(pos = 90; pos >= 1; pos -= 1) { myservo.write(pos); delay(15);

} else if(RxBuffer=="opened"){ for(pos = 0; pos < 90; pos += 1) { myservo.write(pos); delay(15);

Servo myservo; char password[4]; char initial_password[4], new_password[4]; int pos = 90; int i = 0; char key_pressed = 0; const byte rows = 4; const byte columns = 4; char keys[rows][columns] = { {'1','2','3','A'},

{'*','0','#','D'} ; byte rowPins[rows] = {5,6,7,8}; byte columnPins[columns] = {9,10,11,12};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns); void setup() {

Serial.begin(9600); myservo.attach(13); lcd.init(); lcd.backlight(); lcd.setCursor(2,0); lcd.print("Enter Password"); lcd.setCursor(0,1); initialpassword();

{ key_pressed = keypad.getKey(); if(key_pressed == '#') change(); if(key_pressed) { password[i++]=key_pressed; lcd.print(key_pressed);

} if(i == 4) { delay(200); for(int j = 0; j < 4; j++) initial_password[j] = EEPROM.read(j); if(!(strncmp(password, initial_password,4))) { lcd.clear(); lcd.print("Pass Accepted"); for(pos = 90; pos >= 1; pos -= 1) { myservo.write(pos); delay(15);

} delay(2000); lcd.setCursor(0,1); lcd.print("Pres # to change"); delay(2000); lcd.clear(); lcd.print("Enter Password:"); lcd.setCursor(0,1); i = 0;

} else { lcd.clear(); lcd.print("Wrong Password"); lcd.setCursor(0,1); lcd.print("Pres # to Change"); delay(2000); lcd.clear(); lcd.print("Enter Password"); lcd.setCursor(0,1); i = 0;

} void change() { int j = 0; lcd.clear(); lcd.print("Current Password"); lcd.setCursor(0,1); while(j < 4) { char key = keypad.getKey(); if(key) { new_password[j++] = key; lcd.print(key);

} delay(500); if((strncmp(new_password, initial_password, 4))) { lcd.clear(); lcd.print("Wrong Password"); lcd.setCursor(0,1); lcd.print("Try Again"); delay(1000);

} else { j = 0; lcd.clear(); lcd.print("New Password:"); lcd.setCursor(0,1); while(j < 4) { char key = keypad.getKey(); if(key) { initial_password[j] = key; lcd.print(key);

} lcd.print("Pass Changed"); delay(1000);

} lcd.clear(); lcd.print("Enter Password"); lcd.setCursor(0,1); key_pressed = 0;

EEPROM.write(j, j+49); for(int j = 0; j < 4; j++) initial_password[j] = EEPROM.read(j);

#define BLYNK_TEMPLATE_ID "TMPL0RFDbHm3"

#define BLYNK_DEVICE_NAME "Tester"

#define BLYNK_AUTH_TOKEN "h7pZlOXJOCkUfmFKs81nwgqJQiKURQ59"

#include boolean led = 0; boolean door = 0; char auth[] = BLYNK_AUTH_TOKEN;

WidgetLED led_connect(V0); char ssid[] = "PHONGTRO 30.42 L6-3"; char pass[] = "dinhthong@123"; void setup()

Blynk.begin(auth, ssid, pass);

Blynk.run(); if(Serial.available()){

String RxBuffer=""; while(Serial.available()) {

Kết quả tạo app bằng Blynk

Hình 5.1: Giao diện trên app và web của ứng dụng Blynk

Kết quả

Hình 5.2: Giảo tiếp LCD với Keypad

Hình 5.3: Giao tiếp với đèn Led

Nhóm gồm ba thành viên đã nỗ lực hoàn thành bài tập lớn với mục tiêu kết nối Google Assistant với module ESP8266 Tuy nhiên, khi thực hiện kết nối qua ứng dụng IFTTT, nhóm gặp phải lỗi và không thể cài đặt thành công.

6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Kết luận

• Xây dựng được mô hình để ứng dụng điều khiển các thiết bị điện trong nhà bằng công tắc cảm ứng

• Hệ thống có thể điều khiển được thiết bị điện từ xa thông qua wifi bằng phần mềm Blynk, bằng giọng nói với Google Assistant

Đã tích hợp thành công điều khiển thiết bị điện trong nhà thông qua công tắc cảm ứng với ứng dụng Blynk và Google Assistant, cho phép người dùng dễ dàng giám sát và quản lý các thiết bị trong nhà thông qua giao diện thân thiện của Blynk.

Thiết bị gặp một số khuyết điểm như chưa liên kết phần cứng hiệu quả, dẫn đến việc tốn nhiều chân khi kết nối keypad hoặc các thiết bị ngoại vi đơn giản Thời gian phản hồi của thiết bị hơi chậm do sử dụng giao thức UART Việc thay đổi password trên phần cứng chưa thể đồng bộ hóa với ứng dụng Blynk Hơn nữa, thiết bị phụ thuộc vào kết nối Wifi, nên khi mất điện, nó sẽ không hoạt động và khoảng cách kết nối cũng còn hạn chế.

• Tự phát triển app Android, IOS để điều khiển thiết bị qua wifi

• Sử dụng mạng ZIGBEE để có thể truyền xa, đỡ hao tốn năng lượng và không nhiễu

• Phát triển thêm các hệ thống khác cho phòng ngủ, nhà bếp, sân vườn, được hoạt động điều khiển qua lại với nhau

• Phát triển thêm các thiết bị có thể điều khiển trong nông nghiệp

• Áp dụng trí thông minh nhân tạo vào hệ thống

[1] Thông tin về NodeMCU ESP8266: https://components101.com/development- boards/nodemcu-esp8266-pinout-features-and-datasheet

[2] Atmega328P datasheet: https://datasheet.octopart.com/ATMEGA328P-MU- Microchip-datasheet-65729177.pdf

[3] Blynk: https://tapit.vn/huong-dan-cai-dat-server-blynk-tren-windows-khong- gioi-han-energy/

[4] Arduino for ESP8266: https://arduino.esp8266.vn/

Servo myservo; int pos = 0; boolean buttonstate = 1; boolean ledstate = 0; void setup() {

Serial.begin(9600); pinMode(button,INPUT_PULLUP); pinMode(LED,OUTPUT); myservo.attach(13);

} void loop() { if(digitalRead(button) == 0) { if(buttonstate != 0) { if(ledstate == 0) { digitalWrite(LED,LOW);

String RxBuffer = ""; while(Serial.available()) {

} if(RxBuffer == "ledon"){ digitalWrite(LED,HIGH);

Serial.println("Led đã on!");

} else if(RxBuffer == "ledoff"){ digitalWrite(LED,LOW);

Serial.println("Led đã off!");

} if(RxBuffer == "closed") { for(pos = 90; pos >= 1; pos -= 1) { myservo.write(pos); delay(15);

} else if(RxBuffer=="opened"){ for(pos = 0; pos < 90; pos += 1) { myservo.write(pos); delay(15);

Servo myservo; char password[4]; char initial_password[4], new_password[4]; int pos = 90; int i = 0; char key_pressed = 0; const byte rows = 4; const byte columns = 4; char keys[rows][columns] = { {'1','2','3','A'},

{'*','0','#','D'} ; byte rowPins[rows] = {5,6,7,8}; byte columnPins[columns] = {9,10,11,12};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns); void setup() {

Serial.begin(9600); myservo.attach(13); lcd.init(); lcd.backlight(); lcd.setCursor(2,0); lcd.print("Enter Password"); lcd.setCursor(0,1); initialpassword();

{ key_pressed = keypad.getKey(); if(key_pressed == '#') change(); if(key_pressed) { password[i++]=key_pressed; lcd.print(key_pressed);

} if(i == 4) { delay(200); for(int j = 0; j < 4; j++) initial_password[j] = EEPROM.read(j); if(!(strncmp(password, initial_password,4))) { lcd.clear(); lcd.print("Pass Accepted"); for(pos = 90; pos >= 1; pos -= 1) { myservo.write(pos); delay(15);

} delay(2000); lcd.setCursor(0,1); lcd.print("Pres # to change"); delay(2000); lcd.clear(); lcd.print("Enter Password:"); lcd.setCursor(0,1); i = 0;

} else { lcd.clear(); lcd.print("Wrong Password"); lcd.setCursor(0,1); lcd.print("Pres # to Change"); delay(2000); lcd.clear(); lcd.print("Enter Password"); lcd.setCursor(0,1); i = 0;

} void change() { int j = 0; lcd.clear(); lcd.print("Current Password"); lcd.setCursor(0,1); while(j < 4) { char key = keypad.getKey(); if(key) { new_password[j++] = key; lcd.print(key);

} delay(500); if((strncmp(new_password, initial_password, 4))) { lcd.clear(); lcd.print("Wrong Password"); lcd.setCursor(0,1); lcd.print("Try Again"); delay(1000);

} else { j = 0; lcd.clear(); lcd.print("New Password:"); lcd.setCursor(0,1); while(j < 4) { char key = keypad.getKey(); if(key) { initial_password[j] = key; lcd.print(key);

} lcd.print("Pass Changed"); delay(1000);

} lcd.clear(); lcd.print("Enter Password"); lcd.setCursor(0,1); key_pressed = 0;

EEPROM.write(j, j+49); for(int j = 0; j < 4; j++) initial_password[j] = EEPROM.read(j);

#define BLYNK_TEMPLATE_ID "TMPL0RFDbHm3"

#define BLYNK_DEVICE_NAME "Tester"

#define BLYNK_AUTH_TOKEN "h7pZlOXJOCkUfmFKs81nwgqJQiKURQ59"

#include boolean led = 0; boolean door = 0; char auth[] = BLYNK_AUTH_TOKEN;

WidgetLED led_connect(V0); char ssid[] = "PHONGTRO 30.42 L6-3"; char pass[] = "dinhthong@123"; void setup()

Blynk.begin(auth, ssid, pass);

Blynk.run(); if(Serial.available()){

String RxBuffer=""; while(Serial.available()) {

Ngày đăng: 26/06/2022, 12:30

HÌNH ẢNH LIÊN QUAN

• NodeMCU là một phần mềm nguồn mở dựa trên Lua và bảng phát triển được - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
ode MCU là một phần mềm nguồn mở dựa trên Lua và bảng phát triển được (Trang 9)
• DHT11 có cấu tạo 4 chân như hình. Nó sử dụng giao tiếp số theo chuẩn 1 dây. •Thông số kỹ thuật: - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
11 có cấu tạo 4 chân như hình. Nó sử dụng giao tiếp số theo chuẩn 1 dây. •Thông số kỹ thuật: (Trang 13)
o Tương thích với màn hình: LCD 1602, LCD2004. - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
o Tương thích với màn hình: LCD 1602, LCD2004 (Trang 14)
• Password khi nhập được hiển thị giá trị lên màn hình vì nếu có người lạ ở đó nhìn thấy được thì sẽ vào nhà được - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
assword khi nhập được hiển thị giá trị lên màn hình vì nếu có người lạ ở đó nhìn thấy được thì sẽ vào nhà được (Trang 20)
Hình 5.1: Giao diện trên app và web của ứng dụng Blynk. - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
Hình 5.1 Giao diện trên app và web của ứng dụng Blynk (Trang 23)
Hình 5.2: Giảo tiếp LCD với Keypad. - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
Hình 5.2 Giảo tiếp LCD với Keypad (Trang 24)
Hình 5.3: Giao tiếp với đèn Led. - BÁO CÁO BÀI TẬP LỚN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ ĐIỆN THÔNG QUA TRỢ LÝ ẢO GOOGLE ASSISTANT
Hình 5.3 Giao tiếp với đèn Led (Trang 26)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w