Vận dụng những kiến thức về tín hiệu, thiết kế mạch và thiết lập server, ứng dụng di động, đồ án này sẽ đưa ra giải pháp để những sản phẩm thuần về hồng ngoại trở nên như một thiết bị Io
TỔNG QUAN
GIỚI THIỆU
Năm 2022, Amazon, Google, Samsung và Zigbee đã ra mắt giao thức Matter, cho phép các thiết bị từ các hệ sinh thái khác nhau giao tiếp và gia nhập vào mạng lưới IoT Sự kiện này đánh dấu bước ngoặt quan trọng trong công nghệ, thúc đẩy các thương hiệu phát triển sản phẩm tích hợp công nghệ IoT Các thiết bị điều khiển bằng sóng IR đang dần bị thay thế bởi các thiết bị IoT, đặc biệt trong các ngôi nhà thông minh Tuy nhiên, sự đa dạng mẫu mã máy lạnh và các thiết bị smarthome hiện nay vẫn thiếu một giao thức thống nhất để điều khiển, dẫn đến khó khăn trong việc kết nối và sử dụng.
Đồ án này nhằm thiết kế hệ thống tích hợp cho phép người dùng điều khiển nhiều loại máy lạnh trong cùng một môi trường, mang lại sự thuận tiện và tiết kiệm năng lượng Hệ thống sẽ thu thập dữ liệu từ môi trường, giúp người dùng giám sát và điều chỉnh máy lạnh một cách hợp lý và hiệu quả.
MỤC TIÊU ĐỀ TÀI
Trong đề tài này, sinh viên thực hiện đề tài đặt ra những mục tiêu như sau:
- Thiết kế hệ thống có khả năng điều khiển máy lạnh bằng tín hiệu IR
- Hệ thống có thể bật và tắt máy lạnh, đổi chế độ, thay đổi nhiệt độ và điều khiển hướng gió tự động hoặc cố định
- Ứng dụng di động để giám sát điều kiện môi trường và điều khiển thiết bị
- Ứng dụng di động có thể kết nối bluetooth đến phần cứng và thiết lập wifi cho phần cứng
- Thiết kế và xây dựng server theo kiến trúc serverless, sử dụng các dịch vụ AWS
- Server phải lưu trữ và quản lý được dữ liệu xác thực của người dùng, trạng thái tài khoản của người dùng
- Cơ sở dữ liệu gồm các bảng:
+ Dữ liệu của phần cứng sau khi đã thiếp lập wifi
+ Dữ liệu về quyền của người dùng đối với phần cứng
+ Dữ liệu của các tín hiệu IR từ các remote máy lạnh
- Ứng dụng giao tiếp được với server qua các API
- Server và phần cứng giao tiếp được với nhau qua giao thức MQTT
GIỚI HẠN ĐỀ TÀI
Chúng tôi đang phát triển một thiết bị có khả năng đọc dữ liệu nhiệt độ và độ ẩm thực tế trong căn phòng Bên cạnh đó, chúng tôi cũng xây dựng một ứng dụng giúp người dùng theo dõi thông tin về điều kiện môi trường và căn phòng, đồng thời điều khiển máy lạnh Hệ thống sẽ được hỗ trợ bởi một server serverless, cho phép lưu trữ, xử lý dữ liệu và giao tiếp hiệu quả với phần cứng.
BỐ CỤC ĐỀ TÀI
Nội dung chính của đề tài được trình bày với 5 chương chính:
- Chương 1: TỔNG QUAN: Khái quát vấn đề, mục tiêu đề tài
- Chương 2: CƠ SỞ LÝ THUYẾT: Giới thiệu về IR, giới thiệu các dịch vụ và nền tảng để xây dựng server và ứng dụng di động
- Chương 3: THIẾT KẾ HỆ THỐNG: Sơ đồ khối, sơ đồ nguyên lý, lưu đồ hoạt động của hệ thống
- Chương 4: KẾT QUẢ: Kết quả hoạt động của hệ thống và nhận xét kết quả đạt được
Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN tổng kết mức độ hoàn thiện của hệ thống so với các mục tiêu đã đề ra, đồng thời đề xuất các hướng phát triển tiềm năng cho đề tài trong tương lai Các kết quả đạt được cho thấy hệ thống đã đáp ứng được yêu cầu ban đầu, mở ra cơ hội nghiên cứu và cải tiến thêm để nâng cao hiệu quả và tính ứng dụng Hướng phát triển tiếp theo sẽ tập trung vào việc tối ưu hóa quy trình và mở rộng tính năng để phù hợp với nhu cầu thực tiễn.
LÝ THUYẾT
GIỚI THIỆU LINH KIỆN
Hệ thống điều khiển thiết bị bằng tín hiệu IR giúp người dùng giám sát và điều khiển từ xa các thiết bị, đồng thời hiển thị chính xác nhiệt độ và độ ẩm của căn phòng Các linh kiện cần thiết để xây dựng phần cứng của hệ thống là rất quan trọng.
Module ESP32-C3 DevKit M-1: module sử dụng dòng chip ESP32-C3 giá rẻ của
Espressif Tuy nhiên, dòng chip này đang khá phổ biến trong tới gian gần đây bởi những ưu điểm của nó Có thể kể tới như:
Bộ vi điều khiển này hỗ trợ mạnh mẽ các giao tiếp ngoại vi với khả năng thiết lập các bộ UART, I2C và ADC trên bất kỳ chân GPIO nào Đặc biệt, số lượng chân GPIO cũng vượt trội hơn so với ESP8266, mang lại nhiều lựa chọn linh hoạt cho người dùng.
- Chip còn hỗ trợ BLE 5.0 với phạm vi khá rộng, cùng với đó là Wifi 802.11 b/g/n hỗ trợ kết nối các mạng wifi 2.4GHz [5]
Bảng 2.1: Bảng thống số kỹ thuật Kit ESP32-C3 DevKit M-1 Đặc tính Thông số
CPU 32-bit RISC-V single core processor, 160 MHz
Cảm biến SHT3x là thiết bị đo nhiệt độ và độ ẩm nhỏ gọn nhưng mang lại độ chính xác và ổn định cao với sai số dữ liệu thấp Với giao diện I2C, cảm biến này rất phù hợp cho việc sử dụng với ESP32-C3 SHT3x được ứng dụng rộng rãi trong các lĩnh vực công nghiệp, y tế và nhiều lĩnh vực khác.
Hình 2.2: Ngoại hình của SHT3x [6]
Bảng 2.2: Bảng thống số kỹ thuật SHT30 Đặc tính Thông số Điện áp sử dụng 2.15 V ~ 5.5 V
Khoảng nhiệt độ -40 độ C – 125 độ C
Sai số nhiệt độ 0.2 độ C
Sai số độ ẩm 2% RH
Cảm biến TSOP38438: Cảm biến thu tín hiệu IR nhỏ gọn nhưng hoạt động hiệu quả Cảm biến sẽ nhận biết các tín hiệu IR ở tần số 38kHz [7]
Hình 2.3: Ngoại hình của TSOP38438 [7]
Bảng 2.3: Bảng thông số kỹ thuật TSOP38438 Đặc tính Thông số Điện áp sử dụng -0.3 V – 6 V
Dòng điện sử dụng 3mA
Tần số thu được 38kHz
TỔNG QUAN VỀ TÍN HIỆU IR
2.1.1 Giới thiệu về tín hiệu IR
Tín hiệu IR, hay tia hồng ngoại, là bức xạ sóng điện từ trong quang phổ điện từ và là phương thức giao tiếp phổ biến, dễ sử dụng Với bước sóng dài hơn ánh sáng khả kiến, tia hồng ngoại không thể được mắt người nhìn thấy.
Giao tiếp bằng tia hồng ngoại là một phương thức hiệu quả vì không bị nhiễu điện từ Bước sóng hồng ngoại nằm trong khoảng 870nm đến 950nm, nhưng tín hiệu này dễ bị ảnh hưởng bởi đèn, nhiệt độ và các vật thể khác Do đó, cách điều chế tín hiệu là rất quan trọng để giảm thiểu nhiễu Để thiết bị nhận tín hiệu hoạt động hiệu quả, cần có một bộ phát tín hiệu nhấp nháy với tần số cố định, thường là từ 35kHz đến 40kHz, phổ biến nhất là 38kHz Nếu bộ nhận được lập trình đúng, nó sẽ có khả năng loại bỏ nhiễu từ các tần số khác.
Khi đề cập đến IR, hai thuật ngữ quan trọng là “mark” và “space”, trong đó “mark” biểu thị tín hiệu mức cao 1 và “space” là tín hiệu mức thấp 0 Để hiểu rõ hơn về cách hoạt động của IR, sinh viên đã chọn giao thức NEC làm ví dụ minh họa.
Hình 2.4: Cấu trúc của một tín hiệu IR theo giao thức NEC [3]
Tất cả gói tin IR bao gồm các thành phần chính như header mark, header space và dữ liệu truyền đi Các header này thông báo cho thiết bị nhận IR biết rằng dữ liệu sắp được truyền, giúp thiết bị chuẩn bị để đọc dữ liệu Cụ thể, header của gói tin IR có 9 mili giây mark, 4.5 mili giây space, và kết thúc bằng 560 micro giây mark.
Trong giao thức NEC, mỗi bit được đại diện bằng tín hiệu khác nhau, với bit 1 có độ dài 2.25 mili giây, bao gồm mark 560 micro giây và space 1690 micro giây, trong khi bit 0 có độ dài 1.12 mili giây với cả mark và space đều kéo dài 560 micro giây Khi giải mã tín hiệu IR, dữ liệu thô nhận được sẽ là một chuỗi số, mỗi số biểu trưng cho thời gian của mark và space.
Hình 2.5: Dữ liệu thô sau khi giải mã IR
Tín hiệu IR, như minh họa trong hình 2.4, bao gồm một chuỗi các dấu hiệu mark và space xen kẽ Trong dữ liệu thô, các dãy số sẽ tương ứng với độ dài của các mark và space này.
Ngoài giao thức NEC, các tín hiệu IR cho máy lạnh còn bao gồm nhiều giao thức khác Hầu hết các hãng máy lạnh thường phát triển giao thức riêng biệt cho từng dòng sản phẩm của mình.
TỔNG QUAN VỀ AWS
AWS (viết tắt cho Amazon Web Service) là nền tảng điện toán đoán mây được
Amazon Web Services (AWS) đã phát triển và cung cấp từ tháng 7 năm 2022, mang đến cho doanh nghiệp và dự án các dịch vụ lưu trữ, tính toán, cơ sở dữ liệu, phân tích dữ liệu và trí tuệ nhân tạo với chi phí linh hoạt Hiện tại, AWS cung cấp hơn 200 dịch vụ, trong đó 5 dịch vụ chính được sử dụng cho backend bao gồm Cognito, DynamoDB, Lambda, API Gateway và IoT Core.
AWS đang được nhiều thương hiệu tin tưởng, trong đó có Netflix, nền tảng phim trực tuyến hàng đầu Netflix sử dụng Amazon S3 và Amazon Redshift để lưu trữ dữ liệu, đồng thời vận hành dịch vụ video streaming thông qua Amazon S3 và Amazon CloudFront Do đó, sinh viên đã quyết định sử dụng các dịch vụ từ AWS để xây dựng server cho hệ thống của mình.
Hình 2.6: Kiến trúc của Netflix [15]
Cognito là dịch vụ lưu trữ thông tin tài khoản và quản lý xác thực người dùng Nó cho phép người dùng đăng nhập bằng tên người dùng, email và mật khẩu, hoặc thông qua các nền tảng như Facebook, Apple và Google.
Cognito giúp tôi quản lý luồng truy cập vào cơ sở dữ liệu một cách an toàn Mỗi người dùng nhận được một token khi đăng nhập, và để truy cập cơ sở dữ liệu, họ cần gửi token này lên AWS AWS sẽ xác thực token và quyết định quyền truy cập của người dùng.
Hình 2.7: Bảng quản lý thông tin người dùng trên AWS Cognito
Đồ án này áp dụng kiến trúc serverless cho backend, với AWS Lambda là dịch vụ lý tưởng Lambda tận dụng tài nguyên có sẵn để triển khai mã và thực hiện các thuật toán, giúp sinh viên không cần lo lắng về việc xây dựng hạ tầng server, một nhiệm vụ thường thuộc về DevOps Dịch vụ này cũng hỗ trợ quản lý CPU, bộ nhớ và các tài nguyên khác, cho phép tôi tập trung vào phát triển server và ứng dụng Hơn nữa, Lambda có khả năng tích hợp với nhiều dịch vụ khác như Cognito, DynamoDB và IoT Core.
Mặc dù Lambda có nhiều ưu điểm, nhưng cũng tồn tại một số hạn chế đáng chú ý Dung lượng bộ nhớ mà Lambda hỗ trợ chỉ từ 128 MB đến 10240 MB, điều này có thể gây khó khăn khi phát triển trên các hệ thống lớn Hơn nữa, Lambda không thể xử lý các yêu cầu có dung lượng vượt quá 128 kB Ngoài ra, log chỉ được ghi vào dịch vụ CloudWatch của AWS, dịch vụ này có chi phí không hề rẻ.
Mặc dù có một số hạn chế, AWS Lambda là dịch vụ lý tưởng cho việc xây dựng hệ thống IoT với kiến trúc serverless Lambda hoạt động như trung tâm của backend, đảm nhiệm việc xử lý toàn bộ thuật toán và cung cấp phản hồi cho ứng dụng cũng như thiết bị IoT.
Hình 2.8: Giao diện làm việc trên Lambda
DynamoDB là dịch vụ cơ sở dữ liệu NoSQL nổi bật với hiệu suất cao và tốc độ nhanh, phù hợp cho mọi quy mô hệ thống Người quản trị có thể dễ dàng truy xuất lượng dữ liệu lớn với nhiều yêu cầu khác nhau Tuy nhiên, cần lưu ý rằng mỗi item dữ liệu trong DynamoDB có dung lượng tối đa là 400kB.
Hình 2.9: Bảng dữ liệu trên DynamoDB
Sinh viên đã sử dụng Lambda để thực hiện thuật toán logic và DynamoDB để truy xuất dữ liệu Để tăng cường khả năng truy cập vào các dịch vụ AWS, API Gateway sẽ đóng vai trò là "cánh cửa" cho ứng dụng API Gateway hỗ trợ hai loại API: HTTP/REST và Websocket, đồng thời cung cấp tính năng xác thực bằng token, nâng cao tính bảo mật cho backend Nó cũng cho phép truy xuất dữ liệu từ query string, header và body request Khi nhận yêu cầu truy xuất kèm theo các biến này, API Gateway sẽ chuyển chúng đến Lambda để xử lý và trả dữ liệu về cho ứng dụng.
Hình 2.10: Giao diện quản lý và phát triển API Gateway
Giao thức MQTT là một phương thức truyền tải thông tin theo mô hình publish-subscribe, rất phổ biến trong các thiết bị IoT và thích hợp cho môi trường mạng không ổn định Các thông điệp (message) được gửi đến một máy chủ trung gian, gọi là broker, và mỗi thông điệp phải thuộc ít nhất một chủ đề (topic) trên broker Sau khi nhận được, broker sẽ xếp các thông điệp vào hàng đợi và phân phối chúng đến các client đã đăng ký theo chủ đề tương ứng.
Hình 2.11: Ví dụ minh họa về MQTT 2.2.7 IoT Core Service
IoT Core cung cấp dịch vụ kết nối cho các thiết bị IoT với các thiết bị và dịch vụ khác của AWS Nó cũng đi kèm với phần mềm hỗ trợ kết nối, cho phép các thiết bị liên lạc hiệu quả Khi kết nối thành công với IoT Core, các thiết bị có thể tích hợp với nhiều dịch vụ khác của AWS.
IoT Core sử dụng giao thức MQTT để giao tiếp với thiết bị, mang lại tính linh hoạt và hiệu quả cao Khi thiết bị đã kết nối với IoT Core, người dùng có thể nhanh chóng nhận dữ liệu từ cảm biến và lưu trữ vào cơ sở dữ liệu, hoặc điều khiển thiết bị thông qua ứng dụng Để thiết lập kết nối với IoT Core, thiết bị cần có các chứng nhận và chìa khóa, được cấp quyền kết nối sau khi nhà phát triển tạo thành công thiết bị trên IoT Core.
Hình 2.12: Bảng quản lý thiết bị trên IoT Core
IoT Core cung cấp phần mềm hỗ trợ quản lý tin nhắn đã gửi và nhận, giúp các nhà phát triển và kỹ sư dễ dàng gửi tin nhắn trực tiếp trên giao diện.
Hình 2.13: Giao diện phần mềm test giao thức MQTT trên IoT Core
TỔNG QUAN VỀ FLUTTER FRAMEWORK
2.4.1 Giới thiệu về Flutter framework
Flutter là framework mã nguồn mở do Google phát triển, cho phép xây dựng ứng dụng đa nền tảng từ một mã nguồn duy nhất Ra mắt vào năm 2018, Flutter nhanh chóng thu hút sự chú ý của các kỹ sư và nhà phát triển Hiện tại, Flutter hỗ trợ phát triển giao diện ứng dụng trên 6 nền tảng: Android, iOS, web, MacOS, Windows và Linux, sử dụng ngôn ngữ lập trình Dart.
Hình 2.14: Logo của Flutter và Dart
2.4.2 Ưu điểm và nhược điểm
Tôi sẽ so sánh Dart của Flutter với Java hoặc Kotlin của Android, hoặc, Swift của iOS
Flutter là một framework mạnh mẽ cho việc phát triển giao diện người dùng, cho phép tạo ra các giao diện chất lượng cao và hài hòa Quá trình xây dựng giao diện bằng Flutter không chỉ dễ dàng mà còn mang lại hiệu quả cao.
Flutter, với mã nguồn mở, cung cấp một kho tàng thư viện phong phú từ các nhà phát triển toàn cầu, bao gồm cả thư viện giao diện và các thư viện chức năng cho IoT.
Flutter sở hữu tính năng "hot reload", cho phép nhà phát triển nhanh chóng tải lại màn hình đang xây dựng mà không cần phải khởi động lại ứng dụng như trong Java và Swift.
Flutter, ra mắt vào năm 2018, vẫn chưa hoàn thiện bằng Java/Kotlin và Swift, dẫn đến việc các thư viện IoT chưa hỗ trợ tốt các chức năng chuyên sâu.
Các ứng dụng Flutter tiêu tốn nhiều tài nguyên hơn so với các ứng dụng được phát triển từ các framework chính thống Hơn nữa, việc tối ưu hóa hiệu suất cho ứng dụng Flutter cũng gặp nhiều khó khăn.
Flutter là một framework đáng tin cậy cho các nhà phát triển nhờ tính đa nền tảng của nó Mặc dù còn nhiều nhược điểm do là một ngôn ngữ lập trình mới, Google luôn nỗ lực sửa chữa và cải tiến Flutter để nâng cao hiệu suất và tính năng theo thời gian.
XÂY DỰNG VÀ THIẾT KẾ HỆ THỐNG
YÊU CẦU HỆ THỐNG
Hệ thống điều khiển máy lạnh bằng sóng IR cung cấp giải pháp điều khiển từ xa qua ứng dụng di động, yêu cầu đọc chính xác nhiệt độ và độ ẩm trong phòng Để điều khiển máy lạnh, hệ thống cần thu thập tín hiệu IR ở tần số 38kHz và phát ra tín hiệu này một cách mạnh mẽ để máy lạnh nhận diện Sự ổn định của nguồn thu và phát là rất quan trọng Đồng thời, hệ thống cần cập nhật dữ liệu từ cảm biến theo thời gian thực để hiển thị nhiệt độ phòng, giúp người dùng theo dõi và điều chỉnh máy lạnh dễ dàng Hiện tại, chưa có chuẩn thiết kế cụ thể cho hệ thống này, do đó sinh viên phải lựa chọn các thông số phù hợp.
Hình 3.1: Mô hình hệ thống điều khiển thiết bị qua ứng dụng di động
Hệ thống điều khiển máy lạnh từ xa cho phép người dùng quản lý nhiều thiết bị mà không cần lo lắng về loại máy lạnh đang sử dụng Hệ thống sử dụng ESP32 để thiết lập kết nối wifi qua Bluetooth thông qua ứng dụng di động Sau khi kết nối, phần cứng sẽ thu thập dữ liệu nhiệt độ và độ ẩm từ cảm biến và gửi lên server qua giao thức MQTT, sử dụng dịch vụ AWS IoT Core để lưu trữ Ngoài ra, phần cứng cũng có khả năng đọc và giải mã tín hiệu IR từ remote để thu thập dữ liệu Cuối cùng, phần cứng sẽ nhận tín hiệu IR từ server và phát lại chính xác để điều khiển máy lạnh.
Như đã đề cập tại phần Mục tiêu đề tài Hệ thống phải điều khiển được các chức năng cơ bản của máy lạnh bao gồm:
- Điều khiển tắt và mở máy lạnh
- Chuyển chế độ máy lạnh, các chế độ máy lạnh thường có như cool, fan và dry
- Điều chỉnh được nhiệt độ của máy lạnh
- Điều khiển được hướng gió của máy lạnh
Hệ thống có khả năng điều khiển nhiều loại máy lạnh khác nhau sau khi đã học các tín hiệu từ remote của chúng Để minh họa cụ thể, sinh viên đã chọn máy lạnh LG Inverter 1.5 HP V13WIN1 và sử dụng remote đi kèm.
LG AKB75075801 để làm đối tượng điều khiển cho hệ thống
Ứng dụng cần hiển thị và thực hiện chức năng xác thực, đồng thời cung cấp giao diện chính để giám sát và điều khiển máy lạnh Từ giao diện chính, người dùng có thể dễ dàng đăng xuất tài khoản và truy cập các màn hình thiết lập wifi cho phần cứng cũng như màn hình điều khiển máy lạnh chi tiết, bao gồm các chế độ, nhiệt độ và các tính năng khác Hơn nữa, dữ liệu trên ứng dụng được cập nhật liên tục để đảm bảo người dùng luôn nhận được thông tin mới nhất.
3.2 SƠ ĐỒ KHỐI HỆ THỐNG
3.2.1 Sơ đồ khối tổng quan
Trước tiên, để có cái nhìn tổng quát, sinh viên thực hiện đề tài đi vào thiết kế sơ đồ khối tổng quan của hệ thống:
Hình 3.2: Sơ đồ khối hệ thống
Hệ thống gồm 3 khối chính, các khối này sẽ giao tiếp với nhau để mang lại tính ổn định và hiệu quả cho hệ thống:
Khối server đóng vai trò trung gian quan trọng, giúp ứng dụng di động và phần cứng giao tiếp hiệu quả Ngoài ra, khối server còn lưu trữ dữ liệu người dùng từ ứng dụng di động cùng với thông tin từ cảm biến của phần cứng.
Khối phần cứng đóng vai trò quan trọng trong việc điều khiển máy lạnh, hoạt động dưới sự chỉ đạo của khối server Nó có nhiệm vụ cập nhật dữ liệu nhiệt độ và độ ẩm từ cảm biến, đồng thời truyền tải thông tin này lên khối server Ngoài ra, khối phần cứng cũng thu thập tín hiệu hồng ngoại từ các remote điều khiển máy lạnh.
Khối ứng dụng di động sẽ hiển thị nhiệt độ môi trường và các dữ liệu từ phần cứng Đồng thời, khối này cũng đóng vai trò giao tiếp với phần cứng qua BLE, giúp kết nối phần cứng với wifi.
Khối server được thiết kế dựa trên các dịch vụ AWS
Hình 3.3: Sơ đồ khối server
Khối server được thiết kế với 5 khối chính tương ứng với 5 dịch vụ AWS
Khối Cognito đảm nhận việc lưu trữ thông tin xác thực của người dùng và bảo mật API thông qua token Ngoài ra, quản trị viên có khả năng giám sát và quản lý hoạt động cũng như thông tin của người dùng một cách hiệu quả.
Khối API Gateway đóng vai trò quan trọng như “cánh cổng” kết nối giữa ứng dụng di động và server Nó thực hiện việc kiểm tra các yêu cầu từ ứng dụng, xác minh token được sinh ra bởi Cognito và đưa ra quyết định chấp nhận hoặc từ chối yêu cầu đó.
Khối Lambda là trung tâm của server, chịu trách nhiệm truy xuất dữ liệu và thực hiện các phép toán logic trước khi trả kết quả về cho ứng dụng Ngoài ra, Lambda còn có khả năng gửi và nhận các thông điệp với phần cứng thông qua IoT Core.
Khối DynamoDB, hay còn gọi là khối cơ sở dữ liệu, là nơi lưu trữ tất cả thông tin liên quan đến phần cứng, bao gồm dữ liệu về remote và quyền truy cập của người dùng Tất cả dữ liệu này luôn sẵn sàng để được Lambda truy xuất bất kỳ lúc nào.
Khối IoT Core đóng vai trò trung gian giữa Lambda và phần cứng, sử dụng giao thức MQTT để nhận dữ liệu nhiệt độ và độ ẩm từ cảm biến Dữ liệu này sẽ được gửi đến Lambda và cập nhật vào DynamoDB Đồng thời, khi người dùng thực hiện điều chỉnh trên ứng dụng, Lambda sẽ yêu cầu IoT Core gửi thông điệp đến phần cứng, kích hoạt tín hiệu IR cho máy lạnh.
Khối phần cứng được thiết kế gồm 4 khối chính
Hình 3.4: Sơ đồ khối phần cứng
Khối cảm biến đóng vai trò quan trọng trong việc thu thập dữ liệu về nhiệt độ, độ ẩm và tín hiệu hồng ngoại (IR) để gửi về khối điều khiển Trong đồ án, sinh viên sử dụng cảm biến SHT3x để đo lường nhiệt độ và độ ẩm của môi trường, đảm bảo tính chính xác và hiệu quả trong việc giám sát điều kiện môi trường.
Khối điều khiển là trung tâm của hệ thống phần cứng, nơi sinh viên sử dụng ESP32-C3-Mini-1 để thực hiện đề tài Đồng thời, khối này cũng đảm nhiệm vai trò giao tiếp với khối server, đảm bảo sự kết nối và truyền tải dữ liệu hiệu quả.
- Khối chấp hành: được xây dựng bởi led phát hồng ngoại 3.3V Khối sẽ mang nhiệm vụ phát tín hiệu IR đến máy lạnh
Sinh viên sử dụng khối thu TSOP38438 để thu tín hiệu IR, nhằm mục đích thu thập và lưu trữ các tín hiệu này vào cơ sở dữ liệu.
* Khối ứng dụng di động
Khối ứng dụng được thiết kế với 4 khối ứng với 4 chức năng chính của ứng dụng
Hình 3.5: Sơ đồ khối ứng dụng di động
THIẾT KẾ HỆ THỐNG
Ứng dụng di động gửi yêu cầu đăng nhập và đăng ký đến Cognito thông qua giao thức Amplify Auth của AWS Thông tin đăng ký bao gồm tên, email và mật khẩu Sau khi hoàn tất đăng ký, Cognito gửi mã xác nhận đến email của người dùng, yêu cầu người dùng nhập mã này để kích hoạt tài khoản và có quyền đăng nhập Thông tin đăng nhập bao gồm email và mật khẩu Khi đăng nhập thành công, Cognito cung cấp JWT token cho ứng dụng, token này sẽ được sử dụng trong các yêu cầu API.
* Thiết kế và thiết lập AWS Cognito service
Hệ thống yêu cầu người dùng đăng nhập bằng email, do đó, AWS Cognito cần được cấu hình để quản lý thông tin qua email Bước đầu trong quá trình cấu hình, tôi sẽ thiết lập email mà người dùng sẽ sử dụng để đăng nhập.
Hệ thống cần ngăn chặn người dùng chọn mật khẩu đơn giản như “12345678” hay “abcxyz”, vì những mật khẩu này dễ đoán và có thể dẫn đến mất tài khoản, ảnh hưởng đến bảo mật của server Để tăng cường bảo mật, sinh viên đã đề xuất yêu cầu mật khẩu phải có ít nhất 8 ký tự, bao gồm ít nhất 1 chữ số, 1 ký tự đặc biệt, 1 chữ viết hoa và 1 chữ viết thường.
Sau khi thiết lập AWS Cognito thành công, AWS sẽ cung cấp một giao diện mà admin có thể quản lý tài khoản người dùng như hình 3.7
Hình 3.7: Giao diện quản lý tài khoản trên AWS Cognito service
* Thiết kế và thiết lập AWS Lambda service
Để khởi tạo API trên dịch vụ AWS Lambda, trước tiên cần thiết lập một hàm để server sẵn sàng hoạt động Sinh viên đã chọn NodeJS làm SDK chính cho việc xây dựng Lambda, nhờ vào tốc độ phản hồi nhanh, khả năng mở rộng dễ dàng và sự hỗ trợ mạnh mẽ từ các thư viện của NodeJS.
Để tối ưu hóa AWS Lambda, sinh viên đã quyết định tạo một function Lambda duy nhất thay vì nhiều function riêng lẻ, nhằm giảm thiểu tài nguyên sử dụng và chi phí duy trì Cách tiếp cận này cũng giúp quy trình sửa chữa và bảo trì trở nên đơn giản hơn Trong function duy nhất này, sinh viên đã xây dựng các function nhỏ hơn để xử lý từng tác vụ cụ thể, theo cấu trúc code đơn giản như hình 3.8.
Hình 3.8: Cấu trúc code trên AWS Lambda service
Khi hoạt động, AWS Lambda bắt đầu thực thi mã trong file index.js, sau đó gọi các function trong các file phụ như get.js hoặc post.js để truy xuất hoặc tạo dữ liệu phần cứng theo yêu cầu của người dùng Ngoài ra, Lambda cũng có thể gửi lệnh đến IoT Core thông qua sendCommand.js Trong quá trình thực hiện, sinh viên đã tích hợp các dòng code kiểm tra các tham số mà người dùng gửi lên; chỉ khi các tham số này đầy đủ và hợp lệ, yêu cầu truy xuất hoặc cập nhật cơ sở dữ liệu mới được thực hiện Cuối cùng, dữ liệu sẽ được trả về cho ứng dụng di động để xác nhận rằng tác vụ đã hoàn thành thành công.
Thiết kế và thiết lập dịch vụ AWS API Gateway là bước quan trọng để ứng dụng di động và server giao tiếp hiệu quả qua API Các yêu cầu từ ứng dụng cần có token và các tham số truy vấn (query param) để Lambda có thể truy xuất và cập nhật chính xác dữ liệu trong cơ sở dữ liệu Tất cả các yêu cầu này sẽ được gửi đến API Gateway thông qua giao thức HTTPS, đảm bảo tính bảo mật và hiệu suất cao trong quá trình truyền tải dữ liệu.
Gateway sẽ kiểm tra token với Cognito rồi mới chấp nhận request và gửi qua cho Lambda Trong API Gateway, cần phân rõ:
- API sẽ thực hiện các yêu cầu liên quan tới truy xuất, tạo dữ liệu của phần cứng trên cơ sở dữ liệu
- API thực hiện điều khiển phần cứng và cập nhật trạng thái phần cứng lên cơ sở dữ liệu
- API thực hiện truy xuất danh sách remote
- API thực hiện liên kết dữ liệu người dùng và dữ liệu phần cứng, cấp quyền cho người dùng đối với phần cứng
Khi khởi tạo API, API Gateway cho phép các nhà phát triển tạo ra nhiều loại API như HTTP API, Websocket API, REST API và Private REST API Để tiết kiệm chi phí và đảm bảo khả năng giao tiếp với các dịch vụ AWS, đặc biệt là Lambda, ứng dụng có thể gọi API một cách dễ dàng mà không cần sử dụng VPN Do đó, sinh viên quyết định xây dựng REST API cho đề tài của mình.
Sau khi khởi tạo thành công dịch vụ API, bước tiếp theo là tạo các đường dẫn để triển khai API Như đã đề cập trước đó, API cần được thiết kế rõ ràng và phân biệt để xử lý các nhiệm vụ khác nhau, do đó, các đường dẫn sẽ được phân loại như hình 3.9.
Hình 3.9: Cấu trúc API gồm các path để thực hiện các tác vụ khác nhau
Các path sẽ thực hiện các tác vụ liên quan tới những đối tượng khác nhau:
- controls: thực thi tác vụ điều khiển máy lạnh, cập nhật cài đặt của máy lạnh sau khi điều khiển vào cơ sở dữ liệu
- devices: thực thi các tác vụ liên quan tới thông tin phần cứng như truy xuất, tạo dữ liệu phần cứng trên cơ sở dữ liệu
- remote: truy xuất thông tin về tín hiệu remote
Trong việc truy xuất mối tương quan giữa tài khoản người dùng và phần cứng, mỗi path đi kèm với các method thực hiện các tác vụ cụ thể Một path không thể hoạt động mà không có method Cụ thể, method “get” được sử dụng để truy xuất dữ liệu, “post” để tạo dữ liệu mới, và “put” để cập nhật dữ liệu trên cơ sở dữ liệu Ứng dụng cũng sẽ sử dụng query params để đảm bảo việc truy xuất và cập nhật dữ liệu diễn ra chính xác hơn.
Hình 3.10: Query params được kèm theo request
* Thiết kế và thiết lập AWS DynamoDB service
Khi nhận yêu cầu từ API Gateway, Lambda sẽ thực hiện các phép toán logic để cập nhật và xử lý dữ liệu cảm biến từ IoT Core, nhằm phản hồi về ứng dụng và phần cứng Để Lambda hoạt động hiệu quả, cần đảm bảo giao tiếp tốt với DynamoDB và IoT Core, đồng thời tối ưu hóa dung lượng sử dụng DynamoDB cần được cấu trúc rõ ràng, với một bảng lưu trữ thông tin phần cứng, một bảng kết nối giữa người dùng và phần cứng, và một bảng chứa dữ liệu của các remote.
Người dùng cần kèm theo token khi gửi yêu cầu lên server, do đó API phải liên kết với user pool trên dịch vụ AWS Cognito Khi người dùng gửi yêu cầu kèm token, API Gateway sẽ gửi token này đến Cognito để xác thực Nếu xác thực thành công, yêu cầu của người dùng sẽ được chuyển tiếp đến AWS Lambda.
Hệ thống yêu cầu một cơ sở dữ liệu để lưu trữ thông tin, và sinh viên đã chọn dịch vụ AWS DynamoDB vì tính năng NoSQL, giúp quy trình truy xuất và cập nhật dữ liệu đơn giản và nhanh chóng Để lưu trữ hiệu quả, cấu trúc dữ liệu cần được thiết kế phù hợp cho từng loại đối tượng mà hệ thống muốn lưu trữ, bắt đầu từ dữ liệu của phần cứng.
Hình 3.11: Cấu trúc dữ liệu dành cho dữ liệu phần cứng
Dữ liệu phần cứng yêu cầu có primary key là “id”, được tạo ngẫu nhiên bởi dịch vụ AWS Lambda Các trường dữ liệu bao gồm “current_control” để cài đặt chế độ máy lạnh, “name” để xác định tên thiết bị, và “sensor_data” để lưu trữ dữ liệu môi trường từ cảm biến SHT3x Ngoài ra, thông tin giao tiếp giữa server và phần cứng cũng được lưu trữ, bao gồm số seri của thiết bị và các topic trên AWS IoT Core Cuối cùng, tên remote được sử dụng để điều khiển máy lạnh cùng với tín hiệu IR của remote được thiết kế dễ dàng truy xuất.
Hình 3.12a: Cấu trúc dữ liệu dành cho dữ liệu tín hiệu IR của remote
Các tín hiệu IR được lưu dưới dạng chuỗi, trong đó mỗi tín hiệu điều khiển là một phần tử của chuỗi Ví dụ, hình 3.12b minh họa dữ liệu tín hiệu điều khiển máy lạnh tắt từ remote LG AKB75075801 Trường "control" chứa thông tin về chức năng điều khiển, trong khi trường "signal" lưu trữ chuỗi số biểu thị tín hiệu IR mà phần cứng phát ra Mỗi số đại diện cho độ dài của mark và space, tính bằng micro giây, và được phân cách bởi ký hiệu \n để phần cứng nhận diện và phát tín hiệu chính xác.
Hình 3.12b: Cấu trúc dữ liệu tín hiệu IR từ remote LG AKB75075801
Cuối cùng, sinh viên thực hiện đồ án đã thiết kế cấu trúc dữ liệu cho quyền của tài khoản với phần cứng
Hình 3.13: Cấu trúc dữ liệu dành cho dữ liệu quyền của tài khoản người dùng và phần cứng
Cấu trúc dữ liệu cho quyền của người dùng sẽ gồm các trường chính như
THU THẬP TÍN HIỆU IR
Thị trường máy lạnh hiện nay đa dạng với nhiều nhãn hàng khác nhau, mỗi nhãn hàng đều có chuẩn tín hiệu IR và cấu trúc riêng Chẳng hạn, máy lạnh Samsung sử dụng chuẩn tín hiệu IR độc quyền và remote do chính hãng sản xuất, tương tự như các nhãn hàng khác như LG.
Toshiba và Panasonic sẽ không công bố rộng rãi dữ liệu do tính bảo mật; thông tin chỉ được chia sẻ với các đối tác của nhãn hàng máy lạnh Do đó, sinh viên thực hiện đã lựa chọn phương pháp thu thập từng tín hiệu bằng TSOP38438 và lưu trữ vào cơ sở dữ liệu.
Hình 3.33: Lưu đồ thu thập tín hiệu IR
Hình 3.33 là lưu đồ tiến trình thu thập và lưu trữ tín hiệu IR vào cơ sở dữ liệu:
Để bắt đầu, bạn cần thiết lập cảm biến TSOP38438 nhằm thu tín hiệu hồng ngoại (IR) Tiếp theo, hãy kết nối chân nhận tín hiệu từ TSOP38438 với ESP32, cụ thể là chân GPIO3 Khi quá trình thiết lập hoàn tất, phần cứng của bạn sẽ sẵn sàng để nhận tín hiệu IR.
Sinh viên cần tạo bảng dữ liệu có tên "remote" trên AWS DynamoDB Tiếp theo, họ sẽ tạo một item đại diện cho remote và thêm vào trường “ir” một item để lưu tín hiệu IR.
Hình 3.34: Các bảng dữ liệu trên AWS DynamoDB
Sinh viên cần đưa remote gần phần cứng để phần cứng học các tín hiệu điều khiển từ remote Sau khi nhận tín hiệu IR, phần cứng sẽ xử lý tín hiệu thô thành dãy số tương ứng với độ dài của mark và space xen kẽ Quá trình này sẽ diễn ra trong thời gian tối đa 2 giây.
Sau khi ESP32 in log trên Arduino, sinh viên sẽ lấy chuỗi số và lưu vào bảng “remote”, đồng thời lưu trữ thông tin điều khiển vào AWS DynamoDB.
Trong bài báo cáo này, sinh viên đã tiến hành thu thập tín hiệu hồng ngoại từ remote LG AKB75075801 Do hạn chế về thời gian và khả năng, sinh viên chỉ thực hiện việc thu thập một phần tín hiệu.
5 tín hiệu để điều khiển và xây dựng để hệ thống có thể hoạt động với 5 tín hiệu này Các tín hiệu được trình bày như bảng 3.1
Bảng 3.1: Tín hiệu IR của remote LG AKB75075801 sau khi được lưu vào AWS
Tắt máy lạnh “power”: false
Bật máy lạnh ở chế độ cool, 18 độ, hướng gió tự động
Tăng nhiệt độ từ 18 lên 24 độ
Chuyển chế độ dry, 18 độ, hướng gió tự động
Các số trong tín hiệu điều khiển sẽ được phân cách bằng kí tự “\n” để phần cứng có thể xử lý tín hiệu khi nhận message từ AWS IoT Core Khi nhận được message chứa tín hiệu IR, phần cứng sẽ đọc và dịch từng kí tự cho đến khi gặp kí tự “\n”, lúc này phần cứng sẽ phát tín hiệu và thay đổi trạng thái Ví dụ, khi tín hiệu điều khiển là “Tắt máy lạnh”, phần cứng đọc số đầu tiên là 3154, sau đó là kí tự “\n”, dẫn đến việc phát một mark dài 3154 μs Tiếp theo, phần cứng sẽ đọc số 9924 và phát một space dài 9924 μs Quá trình này sẽ tiếp tục xen kẽ giữa mark và space cho đến khi hoàn thành chuỗi số, và máy lạnh sẽ nhận biết tín hiệu từ cặp mark và space đầu tiên, cụ thể là mark 3154 μs và space 9924 μs.
9924 μs và sẽ nhận biết tín hiệu kết thúc bằng một mark 478 μs
Tín hiệu khi được truyền từ remote đến phần cứng sẽ có sự chênh lệch nhất định
Sự chênh lệch này xảy ra vì 2 nguyên nhân chính:
- Sai số của cảm biến TSOP38438 là ±5% [7]
Khi tín hiệu được truyền trong môi trường, nó có thể gặp phải các vật cản hoặc bị nhiễu Tuy nhiên, sự chênh lệch này sẽ không ảnh hưởng quá nhiều đến hiệu suất của phần cứng phát.
IR đến máy lạnh Các nhãn hàng cũng đã thiết lập các sai số để máy lạnh có thể đọc được tín hiệu trong nhiều điều kiện môi trường.
KẾT QUẢ
KẾT QUẢ MÔ HÌNH THI CÔNG
Sau khi hoàn tất thiết kế hệ thống, sinh viên tiến hành thiết kế mạch với kích thước nền 68x49mm, bao gồm 1 lớp và các linh kiện đã được đề cập trong quá trình thiết kế.
Hình 4.1: Bản vẽ PCB được vẽ trên phần mềm KiCad
Nhằm mục đích bảo vệ mạch điện tử, sinh viên thực hiện tiến hành đóng hộp phần cứng
Hình 4.2: Phần cứng đang hoạt động sau khi đóng hộp
Dữ liệu thực từ cảm biến SHT3x được thu thập bởi ESP32 và gửi lên máy chủ, cho phép ứng dụng truy xuất dữ liệu và hiển thị trên màn hình.
Hình 4.3: Dữ liệu cảm biến được đồng bộ từ phần cứng đến ứng dụng
Khi người dùng bấm các nút điều khiển trên ứng dụng, server gửi thông điệp tới phần cứng, dẫn đến việc phát tín hiệu hồng ngoại (IR) Để xác minh tín hiệu IR, sinh viên đã sử dụng máy hiện sóng (oscilloscope) để đo tín hiệu đầu ra tại chân GPIO7 của ESP32, và kết quả cho thấy có hai sóng như hình 4.4.
Hình 4.4: Tín hiệu đo được tại chân GPIO7 của module ESP32
Khi nút điều khiển được bấm, server truy xuất tín hiệu IR từ cơ sở dữ liệu và gửi tín hiệu này đến ESP32 qua IoT Core, được bọc trong chuỗi JSON Các kí tự “\n” trong dữ liệu tín hiệu IR giúp thực hiện các phép logic trên ESP32 Tín hiệu IR hoạt động hiệu quả nhất ở khoảng cách 3m với máy lạnh; ngoài khoảng cách này, tín hiệu sẽ dần mất ổn định.
Hình 4.5: Dữ liệu của tín hiệu IR được gửi qua IoT Core
AWS API Gateway cho phép ứng dụng di động gửi yêu cầu tới API, với khả năng truyền các tham số truy vấn thành công đến AWS Lambda và nhận phản hồi trong thời gian dưới 500ms khi sử dụng mạng ổn định Sinh viên đã sử dụng phần mềm Postman để thực hiện 10 lần gọi đến mỗi đường dẫn với từng phương thức, từ đó ghi nhận thời gian phản hồi trung bình như thể hiện trong bảng 4.1.
The average response times for the AWS API Gateway service are as follows: the 'get' method for devices has an average response time of 118 ms, while the 'post' method averages 63 ms The 'put' method for controls shows a significantly higher average response time of 296.4 ms Additionally, the 'get' method for remote access averages 48.8 ms, the 'get' method for roles averages 30.2 ms, and the 'put' method averages 24.6 ms.
- AWS DynamoDB: Hệ thống hiện tại có 3 bảng trong cơ sở dữ liệu như hình 4.6 dưới đây
Hình 4.6: Cơ sở dữ liệu của hệ thống
Bảng “devices-dev” lưu trữ thông tin về phần cứng mà người dùng đã thiết lập, trong khi bảng “remote” chứa các tín hiệu hồng ngoại từ các remote điều khiển Bảng “users_devices” quản lý quyền truy cập của tài khoản người dùng đối với phần cứng Mỗi mục trong các bảng dữ liệu này có dung lượng khác nhau, được trình bày cụ thể trong bảng 4.2.
Bảng 4.2: Dung lượng trung bình của một item trong các bảng dữ liệu
Tên bảng Dung lượng trung bình một item (bytes) devices-dev 242 remote 15143 users_devices 131
Do thời gian và điều kiện hạn hẹp, sinh viên thực hiện đề tài chỉ thu thập được tín hiệu IR của 5 remote, mỗi remote 5 tín hiệu
Ứng dụng di động có dung lượng ban đầu 446MB và tiêu tốn ổn định 220MB bộ nhớ RAM khi hoạt động trên điện thoại Samsung A34 Mức tiêu thụ này được xem là trung bình cho các ứng dụng được phát triển bằng Flutter framework Ứng dụng hoạt động hiệu quả với các chức năng của mình.
Để sử dụng ứng dụng, người dùng cần xác thực tài khoản, vì đây là yêu cầu bắt buộc Nếu chưa có tài khoản, người dùng phải tiến hành đăng ký Sau khi hoàn tất đăng ký, người dùng sẽ nhận được một email xác nhận đến địa chỉ đã đăng ký.
Hình 4.7: Email chứa mã xác thực
Tại màn hình đăng ký, các bộ “xác minh” của email và mật khẩu hoạt động tốt và báo lỗi ngay cho người dùng khi vừa nhập xong
Hình 4.8: Các lỗi được báo trên màn hình đăng ký
Màn hình chính hiển thị như hình 3.26, cho phép người dùng vuốt từ trên xuống để tải lại dữ liệu nhanh chóng Từ đây, người dùng có thể đăng xuất tài khoản, truy cập màn hình quét QR để thiết lập wifi, và di chuyển đến màn hình điều khiển chi tiết như hình 3.31 Để tránh xung đột khi ứng dụng gửi quá nhiều yêu cầu điều khiển mà hệ thống chưa xử lý xong, sinh viên đã thêm biểu tượng loading và vô hiệu hóa các nút điều khiển từ khi người dùng bấm cho đến khi server xác nhận hoàn tất yêu cầu.
Hình 4.9: Ký hiệu loading được thêm vào khi server thực hiện yêu cầu điều khiển
Màn hình điều khiển chi tiết của ứng dụng cung cấp thông tin đầy đủ về tên thiết bị, điều khiển nguồn, chế độ, nhiệt độ, quạt và hướng gió Khi người dùng tương tác với bất kỳ nút nào trên màn hình này, ký hiệu loading sẽ xuất hiện và toàn bộ màn hình sẽ bị chặn cho đến khi server hoàn tất yêu cầu.
Hình 4.10: Màn hình điều khiển loading sau khi tương tác
Màn hình thiết lập phần cứng cho phép quét mã QR để đọc và giải mã dữ liệu Nếu mã QR chứa chuỗi JSON thông tin Bluetooth, ứng dụng sẽ kết nối với ESP32 Sau khi kết nối thành công, ứng dụng sẽ chuyển sang các màn hình tiếp theo.
Hình 4.11: Mã QR chứa json thông tin bluetooth được tạo bởi công cụ của
ĐÁNH GIÁ HỆ THỐNG
Hệ thống điều khiển thiết bị IR qua ứng dụng di động cho phép người dùng kết nối phần cứng với wifi và hiển thị dữ liệu nhiệt độ, độ ẩm môi trường một cách rõ ràng Hệ thống giám sát và điều khiển thiết bị từ xa, đồng thời cập nhật dữ liệu mỗi 30 giây để đảm bảo thông tin chính xác và tối ưu hóa server Bộ thu IR giúp đọc và giải mã tín hiệu IR thành tín hiệu thô, cho phép hệ thống thu thập và học các tín hiệu khi cần Bộ phát tín hiệu IR hoàn thiện hệ thống, cho phép server gửi tín hiệu xuống phần cứng để điều khiển máy lạnh, với khả năng phát tín hiệu ổn định trong bán kính 3m mà không có chướng ngại vật.
Máy chủ có tốc độ phản hồi nhanh khi thời gian trung bình của API không vượt quá 500ms, giúp cải thiện trải nghiệm người dùng bằng cách giảm thiểu độ trễ giữa ứng dụng và phần cứng.
Hệ thống yêu cầu người dùng tạo tài khoản cá nhân để nâng cao tính bảo mật và phân quyền, giúp giám sát thiết bị mà không lo bị xung đột với tài khoản lạ Tuy nhiên, hệ thống vẫn chưa thu thập đầy đủ tín hiệu IR từ remote và chưa có nhiều mẫu mã remote do một số lý do Ngoài ra, server của hệ thống cũng chưa tích hợp chức năng quản lý và cập nhật firmware cho phần cứng.