Giới thiệu dự án

Sự bùng nổ của cuộc Cách mạng Công nghiệp 4.0 và kỷ nguyên Internet of Things (IoT) đã đưa thị trường thiết bị điều khiển thông minh toàn cầu vượt mốc 4 tỷ USD từ năm 2022 và tiếp tục tăng trưởng kép hàng năm. Tuy nhiên, giao tiếp giữa con người và máy tính (Human-Computer Interaction - HCI) hiện vẫn phụ thuộc chủ yếu vào các phương thức truyền thống (nút bấm cơ học, công tắc) hoặc giọng nói (Voice Control). Các giải pháp này bộc lộ nhiều điểm nghẽn: nút bấm cơ học giới hạn về tuổi thọ (thường suy giảm sau $10^5$ lần bấm), phân mảnh thiết bị điều khiển từ xa (Remote IR riêng lẻ cho TV, điều hòa, quạt); trong khi điều khiển giọng nói bị suy giảm độ chính xác nghiêm trọng do phương ngữ, tiếng ồn môi trường và tiềm ẩn rủi ro xâm phạm quyền riêng tư.

Đồ án khóa luận "Thiết kế thiết bị nhận dạng bàn tay hỗ trợ phát triển các giải pháp điều khiển tự động" (ngành Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin - ĐHQG-HCM) được thực hiện bởi sinh viên Ngô Lê Tuyết Hoa và Nguyễn Hữu Nam, dưới sự hướng dẫn của TS. Đoàn Duy. Đề tài tập trung giải quyết bài toán giao tiếp tự nhiên không tiếp xúc (Contactless HCI) và chuẩn hóa điều khiển đa thiết bị nhúng độc lập.

                  +-------------------------------------------------+
                  |      HỆ THỐNG ĐIỀU KHIỂN BẰNG CỬ CHỈ TAY        |
                  +-------------------------------------------------+
                                           |
                 +-------------------------+-------------------------+
                 |                                                   |
                 v                                                   v
+---------------------------------+                 +---------------------------------+
|  THIẾT BỊ THU NHẬN & XỬ LÝ AI   |                 |      GATEWAY & THIẾT BỊ ĐÍCH    |
| - Raspberry Pi 4 Model B        |  UART (8-bit)   | - ESP32-S (WiFi Gateway Server) |
| - Camera IMX219 8MP (CSI)       | --------------> | - MQTT Broker (flespi.io)       |
| - MediaPipe Hands (21 3D Points)|                 | - Target: LED WS2812B, OLED, Xe |
+---------------------------------+                 +---------------------------------+

Mục tiêu của dự án

  1. Mục tiêu 1: Nghiên cứu và xây dựng giải thuật nhận diện cử chỉ bàn tay thời gian thực dựa trên luồng ảnh 2D từ Camera CSI, trích xuất 21 điểm mốc (Hand Landmarks) mà không cần huấn luyện lại toàn bộ mô hình học sâu từ đầu.
  2. Mục tiêu 2: Thiết kế, đóng gói phần cứng thiết bị nhận dạng (Edge AI Box) sử dụng máy tính nhúng Raspberry Pi 4 kết hợp module truyền thông trung gian ESP32-S.
  3. Mục tiêu 3: Xây dựng giao thức đóng gói dữ liệu 8-bit chuẩn hóa và tích hợp điều khiển thành công 03 mô hình thiết bị IoT độc lập: Hệ thống đèn dải RGB WS2812B, màn hình hiển thị OLED SSD1306 và Xe Robot điều hướng thông minh.

Phạm vi và giới hạn đề tài

  • Phạm vi nhận diện: Nhận diện đơn bàn tay (Single-hand tracking) tại một thời điểm dưới dạng hình ảnh cử chỉ tĩnh 2D.
  • Không gian cử chỉ: Định nghĩa tập lệnh gồm tối đa 09 cử chỉ bàn tay chuẩn hóa tương ứng với các mã điều khiển 8-bit.
  • Hệ thống chấp hành: Tích hợp thực nghiệm với 03 thiết bị ngoại vi IoT độc lập thông qua giao thức truyền thông không dây MQTT.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các phương thức điều khiển thiết bị hiện nay trên thị trường tồn tại nhiều ưu và nhược điểm khi so sánh trực tiếp:

Phương thức điều khiển Ưu điểm Nhược điểm Chi phí & Độ phức tạp
Nút bấm / Remote cơ học Đơn giản, độ trễ thấp (<10ms), chi phí sản xuất thấp. Phân mảnh thiết bị (mỗi thiết bị 1 remote), tiếp điểm bị oxy hóa, thiếu linh hoạt. Thấp / Thấp
Nhận diện giọng nói (Voice) Rảnh tay, tự nhiên, hỗ trợ nhiều câu lệnh phức tạp. Bị ảnh hưởng bởi tiếng ồn, rào cản phương ngữ/ngôn ngữ, phụ thuộc Cloud Server, trễ cao (>1500ms). Trung bình / Cao
Găng tay cảm biến (Data Glove) Độ chính xác cao, không phụ thuộc điều kiện ánh sáng. Vướng víu, cồng kềnh, độ bền cơ học kém, người dùng phải đeo trực tiếp. Cao / Phức tạp
Vision-based Gesture (Đề xuất) Hoàn toàn không tiếp xúc, tự nhiên, một bộ điều khiển dùng cho đa thiết bị, bảo mật cao. Yêu cầu xử lý thị giác máy tính tại biên (Edge AI), nhạy cảm với điều kiện thiếu sáng (đã khắc phục bằng Camera hồng ngoại). Tối ưu / Trung bình

Phân tích yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc): Nhận diện chính xác 21 khớp bàn tay với FPS $\ge 20$; truyền dữ liệu qua UART 115200 baud; kết nối MQTT Broker điều khiển 3 node IoT.
  • Should have (Nên có): Cơ chế Multi-threading tách biệt tác vụ Computer Vision và I/O; phản hồi LED trạng thái nhận diện tay trái/phải; nút bấm phần cứng Enable/Disable nhận lệnh tại node đích.
  • Could have (Có thể có): Giao diện ứng dụng di động (MIT App Inventor) cấu hình và giám sát trạng thái thiết bị thời gian thực.
  • Won't have (Chưa thực hiện): Nhận diện cử chỉ động 3D phức tạp (Dynamic gesture trajectory); nhận diện đồng thời cả hai bàn tay trong cùng một khung hình.

Thiết kế hệ thống

Kiến trúc hệ thống được phân lớp rõ ràng nhằm đảm bảo tính độc lập và khả năng mở rộng:

+-----------------------------------------------------------------------------------+
| LAYER 1: SENSING & EDGE AI PROCESSING (Raspberry Pi 4 Model B - 4GB LPDDR4)       |
| [Sony IMX219 8MP Camera] ---> [OpenCV Capture] ---> [MediaPipe Hands Pipeline]     |
| [Heuristic Gesture Classifier (hand.py)] ---> [Multi-threading I/O Dispatcher]   |
+-----------------------------------------------------------------------------------+
                                          | UART Interface (115200 bps, 8N1)
                                          v
+-----------------------------------------------------------------------------------+
| LAYER 2: GATEWAY COMMUNICATION (ESP32-S AI-Thinker Module)                        |
| [UART Rx Buffer] ---> [Payload Encoder (8-bit)] ---> [FreeRTOS Task]              |
| [WiFi Station Mode] ---> [MQTT Client Publisher (flespi.io / Port 1883)]         |
+-----------------------------------------------------------------------------------+
                                          | MQTT Publish/Subscribe via Topics
                                          v
+-----------------------------------------------------------------------------------+
| LAYER 3: TARGET ACTUATORS & APPLICATIONS (ESP32-WROOM NodeMCU Nodes)              |
| Node 1: RGB WS2812B (RMT/GPIO2) | Node 2: OLED SSD1306 (I2C) | Node 3: Robot Car  |
+-----------------------------------------------------------------------------------+

Technology Stack & Hardware Specifications

  1. Bộ xử lý trung tâm (Edge Processing Unit):
    • Hardware: Raspberry Pi 4 Model B (Broadcom BCM2711, Quad-core Cortex-A72 64-bit @ 1.5GHz, 4GB LPDDR4).
    • Camera Module: Raspberry Pi Camera V2 IMX219 (8 Megapixel, góc nhìn FoV 62.2°, hỗ trợ CSI-2 Bus, chụp đêm NoIR).
    • Software: Raspberry Pi OS (Debian Linux kernel), Python 3.9, OpenCV 4.8.x, Google MediaPipe 0.10.x.
  2. Bộ truyền thông Gateway (Communication Gateway):
    • Hardware: ESP32-S AI-Thinker (Xtensa Dual-Core 32-bit LX6, 520 KB SRAM, tích hợp 2.4 GHz Wi-Fi & Bluetooth 4.2 BR/EDR/BLE).
    • Firmware: ESP-IDF / Arduino Core for ESP32 với FreeRTOS tích hợp.
  3. Bộ điều khiển thiết bị đích (Target Actuator Nodes):
    • Hardware: 03 Kit NodeMCU ESP32-WROOM-32.
    • Giao thức ngoại vi: One-Wire RMT điều khiển LED WS2812B; chuẩn giao tiếp nối tiếp I2C điều khiển màn hình OLED SSD1306 (Địa chỉ $0\times3C$); Cầu H L298N điều khiển động cơ DC giảm tốc Dual PWM.
    • Giao thức mạng: MQTT qua Broker flespi.io, hỗ trợ QoS 0/1.

Chuẩn mã hóa tập lệnh điều khiển (8-Bit Control Protocol)

Dữ liệu nhận diện được đóng gói thành các frame nhị phân 8-bit chuẩn hóa:

Mã Hex / Nhị phân Cử chỉ bàn tay nhận diện Lệnh điều khiển Đèn RGB Lệnh hiển thị OLED Lệnh điều khiển Xe Robot
0x00 (00000000) Nắm tay (Fist - 0 ngón) Kích hoạt bộ chọn màu Tắt màn hình Dừng xe (STOP)
0x01 (00000001) Chỉ 1 ngón trỏ (Index) Màu Đỏ (Red) Chế độ Đồng hồ Tiến thẳng (FORWARD)
0x02 (00000010) Chỉ 2 ngón (Trỏ + Giữa) Màu Xanh lá (Green) Chế độ Nhiệt độ/Ẩm Lùi sau (BACKWARD)
0x03 (00000011) Chỉ 3 ngón (Trỏ, Giữa, Nhẫn) Màu Xanh biển (Blue) Chế độ Tin nhắn Rẽ trái (TURN LEFT)
0x04 (00000100) Chỉ 4 ngón (Trừ ngón cái) Màu Vàng (Yellow) Chế độ Thông tin hệ thống Rẽ phải (TURN RIGHT)
0x05 (00000101) Chỉ ngón cái (Thumb Up) Màu Xanh lam (Cyan) Hiển thị Icon mặt cười Xoay 360 độ
0x06 (00000110) Xòe cả 5 ngón tay (Open Hand) Màu Tím (Magenta) Hiển thị Logo UIT Bật còi / Đèn pha
0x07 (00000111) Ngón cái + Ngón trỏ (Gun sign) Màu Cam (Orange) Tăng độ sáng Tăng tốc độ
0x08 (00001000) Ngón cái + Trỏ + Giữa Quay về trạng thái Idle Reset Dashboard Giảm tốc độ

Methodology

  • Phương pháp phát triển: Tiếp cận theo mô hình Agile/Scrum rút gọn với các vòng lặp 2 tuần (Sprint), chia thành 4 giai đoạn chính: Thiết kế kiến trúc -> Hiện thực thuật toán Edge AI -> Tích hợp giao tiếp nhúng & MQTT -> Đóng gói & Thực nghiệm tải.
  • Quản lý rủi ro:
    • Nhiễu tín hiệu UART: Khắc phục bằng việc nối chung chân Mass (Common GND) giữa Raspberry Pi 4 và ESP32-S, thiết lập điện trở kéo chuẩn và kiểm soát độ dài dây $<15\text{ cm}$.
    • Nghẽn tác vụ (I/O Blocking): Khắc phục bằng mô hình đa luồng (Python Multi-threading) trên Pi 4 và cơ chế Hàng đợi tác vụ (FreeRTOS Queue) trên ESP32.
  • Đảm bảo chất lượng (QA): Kiểm thử hộp đen chức năng cử chỉ với hơn 500 mẫu thử trên 5 người dùng khác nhau ở các điều kiện ánh sáng từ 100 Lux đến 800 Lux.

Implementation và kết quả

Development process

1. Thuật toán trích xuất mốc bàn tay và phân loại cử chỉ

Thuật toán kết hợp mô hình Single Shot MultiBox Detector (SSD) của MediaPipe để phát hiện bàn tay (Palm Detector), sau đó trích xuất 21 tọa độ 3D ($x, y, z$) của các khớp xương bàn tay (Hand Landmarks).

Module hand.py thực hiện phân loại cử chỉ dựa trên tương quan tọa độ không gian Euclidean giữa đỉnh ngón tay (FINGERTIP: indices 4, 8, 12, 16, 20) và khớp nối trung gian (DIP/PIP: indices 3, 6, 10, 14, 18):

# Trích đoạn giải thuật phân loại cử chỉ bàn tay từ module hand.py
import cv2
import mediapipe as mp

class HandDetector:
    def __init__(self, mode=False, max_hands=1, detection_con=0.7, track_con=0.5):
        self.mp_hands = mp.solutions.hands
        self.hands = self.mp_hands.Hands(
            static_image_mode=mode,
            max_num_hands=max_hands,
            min_detection_confidence=detection_con,
            min_tracking_confidence=track_con
        )
        self.mp_draw = mp.solutions.drawing_utils
        self.tip_ids = [4, 8, 12, 16, 20]

    def find_finger_status(self, lm_list):
        """
        Quy tắc phân loại:
        - 4 ngón dài (Trỏ, Giữa, Nhẫn, Út): Gập khi y_tip > y_pip (trục y hướng xuống)
        - Ngón cái: So sánh tọa độ trục x đối với bàn tay tương ứng
        """
        fingers = []
        if len(lm_list) != 21:
            return fingers

        # Kiểm tra ngón cái (Thumb) - So sánh theo trục hoành X
        if lm_list[self.tip_ids[0]][1] > lm_list[self.tip_ids[0] - 1][1]:
            fingers.append(1)  # Mở
        else:
            fingers.append(0)  # Gập

        # Kiểm tra 4 ngón dài (Index, Middle, Ring, Pinky) - So sánh theo trục tung Y
        for id in range(1, 5):
            if lm_list[self.tip_ids[id]][2] < lm_list[self.tip_ids[id] - 2][2]:
                fingers.append(1)  # Ngón mở
            else:
                fingers.append(0)  # Ngón gập

        return fingers  # Trả về mảng nhị phân 5 phần tử [Thumb, Index, Middle, Ring, Pinky]

2. Xử lý đa luồng (Multi-threading) và truyền thông nối tiếp

Nhằm giải phóng Main Thread (chuyên trách xử lý MediaPipe và OpenCV Render với chu kỳ ~33ms/frame), hệ thống phân tách việc xuất tín hiệu UART sang các Thread phụ:

import threading
import serial
import time

# Khởi tạo giao tiếp Serial với Module ESP32-S Gateway
ser = serial.Serial(port='/dev/ttyS0', baudrate=115200, timeout=1)

def uart_dispatch_task(gesture_opcode):
    """Worker thread truyền mã điều khiển qua UART chống chặn luồng video"""
    try:
        payload = bytes([gesture_opcode])
        ser.write(payload)
    except Exception as e:
        print(f"UART Transmission Error: {e}")

def process_gesture_pipeline(detected_gesture):
    # Kích hoạt worker thread độc lập
    dispatch_thread = threading.Thread(target=uart_dispatch_task, args=(detected_gesture,))
    dispatch_thread.daemon = True
    dispatch_thread.start()

3. Điều khiển bộ điều biến từ xa RMT (Remote Control Transceiver) trên ESP32

Để điều khiển chính xác dải LED WS2812B với giao thức One-Wire yêu cầu xung thời gian khắt khe (Bit 0: $T0H = 350\text{ns}, T0L = 800\text{ns}$; Bit 1: $T1H = 700\text{ns}, T1L = 600\text{ns}$), hệ thống cấu hình ngoại vi phần cứng RMT của ESP32 để tạo sóng mang mà không tiêu tốn chu kỳ lệnh CPU.

// Cấu hình Task FreeRTOS nhận lệnh MQTT và xuất xung RMT điều khiển WS2812B
#include "driver/rmt.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

void vLEDControlTask(void *pvParameters) {
    uint8_t received_opcode;
    for(;;) {
        if(xQueueReceive(xMQTTQueue, &received_opcode, portMAX_DELAY) == pdPASS) {
            switch(received_opcode) {
                case 0x01: // Màu đỏ
                    ws2812_set_color(255, 0, 0);
                    break;
                case 0x02: // Màu xanh lá
                    ws2812_set_color(0, 255, 0);
                    break;
                case 0x03: // Màu xanh biển
                    ws2812_set_color(0, 0, 255);
                    break;
                default:
                    break;
            }
        }
    }
}

Testing và validation

1. Đo kiểm hiệu năng xử lý khung hình (FPS Benchmark)

Hệ thống được thử nghiệm trên Raspberry Pi 4 Model B với các độ phân giải và giao diện kết nối camera khác nhau:

Cấu hình Camera Độ phân giải khung hình Xử lý MediaPipe Tốc độ khung hình (FPS) Độ trễ suy luận
USB Webcam Rapoo XW170 $640 \times 480$ 21 Landmarks 5.2 FPS 192 ms
Raspberry Pi Camera V2 (CSI) $1280 \times 720$ 21 Landmarks 18.5 FPS 54 ms
Raspberry Pi Camera V2 (CSI) $640 \times 480$ 21 Landmarks 28.4 FPS 35 ms
Raspberry Pi Camera V2 (CSI) $320 \times 240$ 21 Landmarks 31.2 FPS 32 ms

Nhờ sử dụng giao tiếp MIPI CSI-2 trực tiếp vào GPU VideoCore VI của Broadcom BCM2711, Camera IMX219 cho tốc độ khung hình gấp hơn 5.4 lần so với webcam chuẩn USB thông thường, đạt ngưỡng đáp ứng thời gian thực ($\approx 30\text{ FPS}$).

2. Đánh giá độ trễ toàn trình (End-to-End Latency Breakdown)

[Camera Capture & Inference] ---> [UART Serial to ESP32] ---> [MQTT Publish via WiFi] ---> [Node Actuation]
        (310 ms)                        (10 ms)                     (430 ms)                   (550 ms)
        
Total Round-Trip Time (RTT): ~1300 ms

3. Độ chính xác nhận diện cử chỉ (Gesture Classification Accuracy)

Được đo kiểm qua 500 lần thử nghiệm trên 9 cử chỉ định nghĩa:

+-------------------------------------------------------------+
| TỶ LỆ NHẬN DIỆN CHÍNH XÁC THEO TỪNG CỬ CHỈ (500 LẦN TEST)   |
+-------------------------------------------------------------+
Cử chỉ 0 ngón (Nắm tay) : [====================================] 98.2%
Cử chỉ 1 ngón (Ngón trỏ) : [=================================== ] 96.4%
Cử chỉ 2 ngón (Chữ V)   : [====================================] 97.0%
Cử chỉ 3 ngón           : [=================================  ] 92.6%
Cử chỉ 4 ngón           : [================================   ] 90.8%
Cử chỉ 5 ngón (Bàn tay) : [====================================] 98.8%
Ngón cái (Thumb Up)     : [=================================== ] 95.2%
Ngón cái + Trỏ (Gun)    : [=================================  ] 93.4%
Ngón cái + Trỏ + Giữa   : [================================   ] 89.5%
+-------------------------------------------------------------+
ĐỘ CHÍNH XÁC TRUNG BÌNH TOÀN HỆ THỐNG: 94.65%

Kết quả đạt được

  • Hoàn thành 100% các tính năng mục tiêu: Đóng gói thành công thiết bị Edge AI Box nhỏ gọn, tích hợp Camera CSI và hệ thống LED báo trạng thái tay nhận diện.
  • Tính độc lập của các Node chấp hành: 3 module (Đèn RGB WS2812B, Màn hình OLED SSD1306, Xe robot L298N) hoạt động hoàn toàn độc lập, có thể thêm hoặc bớt node mà không cần biên dịch lại mã nguồn của thiết bị nhận diện trung tâm.
  • Tiêu thụ năng lượng tối ưu: Toàn bộ trạm nhận diện Edge AI Box chỉ tiêu thụ công suất trung bình từ $3.2\text{W} - 4.1\text{W}$ ở chế độ full-load, cho phép hoạt động liên tục với nguồn cấp dự phòng di động 5V/3A.

Đổi mới và đóng góp

  1. Ứng dụng mô hình Landmark Heuristic thay thế huấn luyện CNN truyền thống: Thay vì thu thập hàng ngàn ảnh và huấn luyện các mạng CNN phân loại nặng nề (như VGG16, ResNet) đòi hỏi GPU rời đắt đỏ, đồ án đã ứng dụng mô hình 21 Hand Landmarks của Google MediaPipe kết hợp với thuật toán giải tích hình học 3D tùy biến (hand.py). Giải pháp này giúp giảm 85% thời gian phát triển và triển khai, đồng thời tiết kiệm $100%$ chi phí gán nhãn tập dữ liệu.
  2. Kiến trúc phân tách Edge AI và IoT Gateway: Sử dụng Raspberry Pi 4 thuần túy cho tác vụ thị giác và ủy nhiệm toàn bộ ngăn xếp giao thức mạng (Network Stack / MQTT) cho vi điều khiển ESP32-S. Kiến trúc này giúp CPU Pi 4 giảm nhiệt độ vận hành từ $68^\circ\text{C}$ xuống $54^\circ\text{C}$ và loại bỏ hiện tượng rớt khung hình (Frame Drop).
  3. Chuẩn hóa giao thức điều khiển nhúng 8-bit: Đóng góp một giải pháp mã hóa tập lệnh nhị phân nhỏ gọn, cho phép một cử chỉ đơn lẻ có thể ánh xạ linh hoạt sang các hàm thực thi đa dạng tùy ngữ cảnh (Context-aware mapping) của từng thiết bị đầu cuối.
Tiêu chí Giải pháp CNN Custom (Cũ) Giải pháp MediaPipe + ESP32 (Đồ án) Mức độ cải thiện
Yêu cầu phần cứng Cần GPU (Jetson Nano / PC) Máy tính nhúng cơ bản (Raspberry Pi 4) Tiết kiệm 60% chi phí phần cứng
Tốc độ xử lý (FPS) 8 - 12 FPS trên CPU nhúng 28.4 FPS Tăng 236% tốc độ
Độ trễ phản hồi > 2000 ms ~1300 ms (toàn trình) Giảm 35% độ trễ
Khả năng mở rộng node Cấu hình cứng theo từng thiết bị Ghép nối linh hoạt qua MQTT Broker Độc lập hoàn toàn

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế (Real-world Use Cases)

  1. Phòng phẫu thuật y tế vô trùng: Bác sĩ phẫu thuật có thể tra cứu bệnh án, chuyển trang phim chụp X-quang/MRI hiển thị trên màn hình OLED/LCD mà không cần chạm tay vào bất kỳ bề mặt vật lý nào, đảm bảo tiêu chuẩn vô trùng nghiêm ngặt.
  2. Nhà máy sản xuất thông minh (Smart Factory): Công nhân vận hành máy dập hoặc dây chuyền hóa chất độc hại có thể kích hoạt dừng khẩn cấp hoặc điều hướng xe tự hành AGV bằng cử chỉ từ xa một cách an toàn.
  3. Hệ thống Nhà thông minh (Smart Home): Thay thế toàn bộ remote điều khiển rời rạc; người dùng chỉ cần đứng trước camera phòng khách để điều chỉnh cường độ sáng của đèn LED WS2812B, bật tắt quạt hoặc mở rèm cửa.
                            SƠ ĐỒ TRIỂN KHAI NHÀ THÔNG MINH
                            
   [ Bàn tay người dùng ]
             |
             v (Góc nhìn FoV 62.2°)
    +------------------+
    |  Edge AI Box     | (Đặt cố định trên bàn / vách tường)
    |  (Pi 4 + ESP32-S)|
    +------------------+
             |
             | Giao thức MQTT (WiFi 2.4GHz)
             +--------------------+--------------------+
             |                    |                    |
             v                    v                    v
    +-----------------+  +-----------------+  +-----------------+
    | Node 1: Đèn RGB |  | Node 2: Màn hình|  | Node 3: Robot   |
    | (WS2812B Decor) |  | (OLED SSD1306)  |  | (Smart Car/AGV) |
    +-----------------+  +-----------------+  +-----------------+

Hướng dẫn triển khai hệ thống (Deployment Guide)

Bước 1: Cài đặt môi trường Edge AI trên Raspberry Pi 4

# Cập nhật hệ thống
sudo apt-get update && sudo apt-get upgrade -y

# Cài đặt các thư viện phụ thuộc cho OpenCV và MediaPipe
sudo apt-get install -y libatlas-base-dev libhdf5-dev libjasper-dev libqtgui4 libqt4-test

# Cài đặt môi trường Python
pip3 install opencv-python==4.8.0.76 mediapipe==0.10.9 pyserial

Bước 2: Nạp Firmware cho ESP32-S Gateway và Target Nodes

  • Mở dự án trong PlatformIO hoặc Arduino IDE.
  • Cài đặt các thư viện: PubSubClient (v2.8), Adafruit_SSD1306, FastLED (v3.6).
  • Cấu hình thông số WiFi SSID, Password và MQTT Server Endpoint (mqtt.flespi.io, Port 1883, Token xác thực).
  • Build và Flash firmware vào ESP32 thông qua cổng USB-to-UART CP2102.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Độ nhạy sáng: Mặc dù sử dụng camera NoIR, môi trường quá tối (<10 Lux) vẫn làm suy giảm độ chính xác nhận diện các điểm mốc (Landmarks) xuống dưới 70%.
  • Nhận diện đơn bàn tay: Hệ thống sẽ phát cảnh báo và tạm dừng xử lý khi có từ 2 bàn tay trở lên xuất hiện đồng thời trong khung hình để tránh xung đột opcode.
  • Độ trễ qua Broker công cộng: Độ trễ toàn trình ~1300ms phần lớn phụ thuộc vào đường truyền Internet tới Broker Cloud (flespi.io).

Hướng phát triển trong tương lai

  1. Triển khai Local MQTT Broker: Cài đặt trực tiếp Mosquitto MQTT Broker lên Raspberry Pi 4 để giảm độ trễ mạng xuống dưới 150ms.
  2. Nâng cấp nhận diện cử chỉ động 3D (3D Dynamic Gestures): Kết hợp mạng nơ-ron hồi quy LSTM (Long Short-Term Memory) hoặc GRU để nhận diện các cử chỉ vuốt (Swipe left/right, Wave, Pinch-to-zoom).
  3. Thu nhỏ phần cứng: Chuyển đổi từ Raspberry Pi 4 sang vi xử lý nhúng chuyên dụng có bộ tăng tốc NPU tích hợp như Raspberry Pi 5 hoặc Kendryte K210 / Luckfox Pico RV1106 để giảm chi phí sản xuất thương mại xuống dưới 30 USD.

Đối tượng hưởng lợi

  • Sinh viên & Giảng viên ngành Kỹ thuật Máy tính / Điện tử / IoT: Cung cấp tài liệu tham khảo hoàn chỉnh từ thiết kế phần cứng, giao tiếp bus nhúng (UART, I2C, One-Wire RMT) đến ứng dụng thị giác máy tính tại biên.
  • Kỹ sư phát triển hệ thống nhúng (Embedded Developers): Mẫu kiến trúc phân luồng (Threading), điều phối tác vụ FreeRTOS và giao thức đóng gói dữ liệu 8-bit chuẩn hóa có thể tái sử dụng ngay trong các dự án công nghiệp.
  • Doanh nghiệp sản xuất thiết bị Smart Home / Healthcare: Giải pháp tham khảo tin cậy để tích hợp tính năng điều khiển không tiếp xúc vào các thiết bị gia dụng hiện có với chi phí R&D tối thiểu.

Câu hỏi thường gặp

1. Yêu cầu phần cứng tối thiểu để triển khai thiết bị nhận diện cử chỉ là gì?

Hệ thống yêu cầu tối thiểu một bo mạch Raspberry Pi 4 Model B (khuyến nghị bản RAM 2GB hoặc 4GB), một Camera Raspberry Pi V2 cảm biến Sony IMX219 (giao tiếp qua cổng CSI) và nguồn cấp DC 5V/3A chuẩn Type-C.

2. Tại sao hệ thống sử dụng kết hợp cả Raspberry Pi 4 và ESP32 thay vì chạy tất cả trên Pi?

Việc sử dụng ESP32 làm gateway chuyên trách quản lý WiFi và MQTT giúp giảm tải cho Raspberry Pi 4, giải phóng hoàn toàn tài nguyên CPU/GPU cho tác vụ tính toán thị giác máy tính, đồng thời tận dụng ngoại vi chuyên dụng RMT trên ESP32 để điều khiển các thiết bị có yêu cầu khắt khe về định thời gian thực như LED WS2812B.

3. Làm thế nào để mở rộng thêm một thiết bị điều khiển mới vào hệ thống?

Người dùng chỉ cần lập trình một kit ESP32 mới kết nối vào cùng mạng WiFi, đăng ký (Subscribe) vào topic MQTT chung trên Broker flespi.io và ánh xạ mã byte nhị phân 8-bit nhận được sang hàm điều khiển phần cứng tương ứng mà không cần sửa đổi bất kỳ dòng code nào trên thiết bị nhận diện trung tâm.

4. Hệ thống có bảo mật không khi sử dụng giao thức MQTT?

Hệ thống sử dụng cơ chế xác thực Token riêng biệt trên nền tảng flespi.io. Trong các môi trường triển khai thực tế đòi hỏi an ninh cao, hệ thống hoàn toàn có thể kích hoạt giao thức bảo mật tầng truyền tải MQTTS (Port 8883) mã hóa SSL/TLS và chuyển sang mạng cục bộ khép kín (Local Intranet).

5. Chi phí ước tính để chế tạo một bộ sản phẩm hoàn chỉnh là bao nhiêu?

Tổng chi phí linh kiện phần cứng để hiện thực trọn vẹn mô hình (gồm 1 Edge AI Box, 1 Gateway ESP32, 3 Node IoT chấp hành, Camera IMX219 và phụ kiện nguồn) dao động khoảng 2.500.000 VNĐ - 3.200.000 VNĐ, thấp hơn rất nhiều so với các giải pháp camera chuyên dụng công nghiệp.


Kết luận

Đề tài khóa luận "Thiết kế thiết bị nhận dạng bàn tay hỗ trợ phát triển các giải pháp điều khiển tự động" đã giải quyết thành công bài toán điều khiển không tiếp xúc bằng cách kết hợp sức mạnh của thị giác máy tính tại biên (MediaPipe trên Raspberry Pi 4) với tính linh hoạt của mạng truyền thông không dây IoT (ESP32 & MQTT). Với độ chính xác nhận diện cử chỉ đạt 94.65%, tốc độ khung hình 28.4 FPS và khả năng điều khiển mở rộng độc lập đa thiết bị, đồ án đã chứng minh tính khả thi cao và tiềm năng ứng dụng sâu rộng trong các lĩnh vực Nhà thông minh, Y tế và Tự động hóa công nghiệp.