Giới thiệu dự án

Trong bối cảnh chuyển đổi số và tự động hóa ngành bán lẻ (Retail Automation), trải nghiệm thanh toán tại điểm bán (POS - Point of Sale) đóng vai trò quyết định đến sự hài lòng của khách hàng và hiệu quả vận hành của doanh nghiệp. Theo các khảo sát thị trường bán lẻ, hơn 65% khách hàng cảm thấy phiền toái khi phải xếp hàng chờ đợi thanh toán vào giờ cao điểm. Đồng thời, vào khung giờ thấp điểm, các siêu thị thường cắt giảm tối đa nhân viên thu ngân nhằm tối ưu hóa chi phí nhân sự, dẫn đến tình trạng dù lượng khách không quá đông nhưng thời gian chờ đợi vẫn bị kéo dài.

Đối với các mặt hàng nông sản tươi sống (rau, củ, quả), việc thanh toán gặp trở ngại lớn do sản phẩm không có mã vạch cố định (Barcode), đòi hỏi thu ngân phải thực hiện thủ công các thao tác: phân loại sản phẩm, tra mã SKU trên hệ thống POS, cân trọng lượng và in nhãn tính tiền. Quy trình thủ công này không chỉ làm tăng độ trễ giao dịch (trung bình 25–40 giây/sản phẩm) mà còn dễ phát sinh sai sót do nhầm lẫn mã hàng hoặc gian lận cân nặng.

Đề tài "Thiết kế và thi công hệ thống máy thanh toán tự động" do sinh viên ngành Công nghệ Kỹ thuật Điện tử - Viễn thông (Trường Đại học Sư phạm Kỹ thuật TP.HCM) thực hiện nhằm giải quyết triệt để bài toán tự phục vụ (Self-Checkout) cho các mặt hàng nông sản không mã vạch. Hệ thống tích hợp thị giác máy tính (Computer Vision) kết hợp cảm biến trọng lượng để nhận diện sản phẩm trong thời gian thực, tự động tính toán giá tiền và cung cấp phương thức thanh toán không tiền mặt qua mã QR.

+-------------------------------------------------------------------------+
|                  MỤC TIÊU CỐT LÕI CỦA HỆ THỐNG                         |
+-------------------------------------------------------------------------+
| 1. Xây dựng trạm thanh toán tự phục vụ (Self-Checkout Kiosk) độc lập.  |
| 2. Nhận diện thời gian thực 3 loại quả (Táo, Chanh, Lê) qua Camera Pi.  |
| 3. Đo lường chính xác khối lượng hàng hóa với độ phân giải cao (HX711).|
| 4. Đồng bộ dữ liệu lên máy chủ Django REST Framework qua mạng không dây.|
| 5. Tự động sinh mã VietQR thanh toán liên ngân hàng không dùng tiền mặt.|
+-------------------------------------------------------------------------+

Mục tiêu kỹ thuật và kết quả đo lường kỳ vọng

  1. Thiết kế phần cứng nhúng phân tán: Tích hợp bộ xử lý trung tâm Raspberry Pi 4 (xử lý ảnh và giao tiếp máy chủ) và vi điều khiển ESP32 (thu thập tín hiệu cảm biến Loadcell và điều khiển màn hình Liquid Crystal Display - LCD).
  2. Xây dựng thuật toán nhận diện màu sắc: Ứng dụng không gian màu HSV (Hue - Saturation - Value) trên thư viện OpenCV để phân loại chính xác các loại quả với các dải sắc độ khác nhau.
  3. Độ chính xác và độ trễ: Đạt tỷ lệ nhận diện đúng $\ge 90%$, sai số cân nặng $\le \pm 2\text{ g}$ trên dải tải trọng 0–5 kg, thời gian phản hồi toàn trình từ lúc đặt hàng đến khi xuất mã thanh toán $\le 3\text{ giây}$.
  4. Phạm vi nghiên cứu: Mô hình thử nghiệm trong môi trường ánh sáng kiểm soát, nhận diện 3 nhóm nông sản tiêu biểu (Táo, Chanh, Lê) với các sắc độ vỏ tự nhiên.

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

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

Hiện nay, các hệ thống thanh toán tại chuỗi bán lẻ phân chia thành ba mô hình chính: quầy thu ngân truyền thống, quầy quét mã vạch tự động (Barcode Self-Checkout), và hệ thống thị giác thông minh ứng dụng Trí tuệ nhân tạo (AI-Vision Checkout).

Tiêu chí đánh giá Quầy thu ngân truyền thống Quầy Self-Checkout mã vạch Hệ thống đề xuất (Vision + Loadcell)
Nhân sự vận hành Bắt buộc 1 thu ngân/quầy 1 giám sát cho 4–6 quầy Tự động hóa hoàn toàn 100%
Xử lý hàng tươi sống Thủ công (tra mã SKU + cân) Khách tự tìm tên quả trên màn hình Camera tự động nhận diện và tính tiền
Thời gian xử lý/món 15 – 30 giây 20 – 45 giây (tìm kiếm lâu) 1.5 – 3.0 giây
Rủi ro gian lận Thấp (nhân viên kiểm soát) Cao (chọn sai loại quả giá rẻ) Thấp (đối chiếu camera + trọng lượng)
Chi phí đầu tư thiết bị Trung bình ($800 - $1,500) Cao ($3,000 - $6,000) Tối ưu/Thấp (< $150 cho bản mẫu nhúng)

Yêu cầu người dùng theo mô hình MoSCoW

  • Must Have (Bắt buộc): Nhận diện chính xác 3 loại quả thử nghiệm; đọc giá trị cảm biến trọng lượng qua bộ biến đổi tương tự - số (Analog-to-Digital Converter - ADC) HX711; giao tiếp truyền thông nối tiếp UART và I2C ổn định; tạo mã QR thanh toán động.
  • Should Have (Nên có): Giao diện quản trị Web (Admin Dashboard) quản lý danh mục sản phẩm, biến động giá, và lịch sử đơn hàng theo thời gian thực.
  • Could Have (Có thể có): Màn hình hiển thị song song LCD 16x2 tại chỗ và giao diện Responsive Web trên thiết bị di động của khách hàng.
  • Won't Have (Chưa thực hiện): Tích hợp Deep Learning nhận dạng hàng trăm mặt hàng bị che khuất một phần trong phiên bản phần cứng hiện tại.

Thiết kế hệ thống

Kiến trúc hệ thống được chia thành 3 tầng: Tầng cảm biến & thu thập tín hiệu (Sensing Layer), Tầng xử lý biên (Edge Processing Layer), và Tầng ứng dụng & dịch vụ (Application & Cloud Layer).

       +-------------------------------------------------------+
       |                  NGƯỜI DÙNG / KHÁCH HÀNG              |
       +-------------------------------------------------------+
                 |                                  ^
         Đặt sản phẩm / Nút bấm            Hiển thị Web / Mã QR
                 v                                  |
+---------------------------------+   +---------------------------------+
|     KHỐI XỬ LÝ 2 (ESP32)        |   |   KHỐI XỬ LÝ 1 (RASPBERRY PI 4) |
|  - Tensilica Dual-Core 240MHz   |   |  - Broadcom BCM2711 Quad-Core   |
|  - Đọc Loadcell 5kg qua HX711   |   |  - Camera Pi (MIPI CSI-2)       |
|  - Xuất LCD 16x2 qua I2C        |   |  - OpenCV HSV Image Processing  |
+---------------------------------+   +---------------------------------+
                 \                                  /
                  \-------- Giao thức UART --------/
                          (Baudrate: 115200)
                                   |
                                   v  (HTTP / REST API qua Wi-Fi)
       +-------------------------------------------------------+
       |           MÁY CHỦ QUẢN TRỊ (DJANGO REST FRAMEWORK)    |
       |  - Cơ sở dữ liệu SQLite/PostgreSQL (Sản phẩm, Đơn hàng)|
       |  - Dynamic VietQR Payment Gateway Generator           |
       |  - Web UI Dashboard cho Quản lý & Khách hàng          |
       +-------------------------------------------------------+

Ngăn xếp công nghệ (Technology Stack)

  • Khối điều khiển cảm biến: Vi điều khiển ESP32 SoC (Tensilica Xtensa Dual-Core 32-bit LX6 @ 240 MHz, 520 KB SRAM).
  • Khối thị giác máy tính & Xử lý trung tâm: Raspberry Pi 4 Model B (Broadcom BCM2711, Quad-core Cortex-A72 ARM v8 64-bit @ 1.5 GHz, 4GB LPDDR4 RAM, Raspberry Pi OS Linux Kernel 5.15).
  • Cảm biến & Ngoại vi: Loadcell thanh nhôm 5 kg (Mạch cầu Wheatstone 4 dây), Module ADC 24-bit HX711, Màn hình LCD 16x2 giao tiếp I2C qua chip mở rộng PCF8574, Camera Pi Module v1.3 (5MP OmniVision OV5647 qua cổng MIPI CSI-2).
  • Phần mềm & Thư viện: Python 3.9+, OpenCV (Open Source Computer Vision Library) v4.5.x, Django Framework v4.2+, Django REST Framework (DRF) v3.14+, Arduino IDE v2.x, Proteus Design Suite v8.13.

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống sử dụng hệ thống ánh xạ đối tượng - quan hệ (Object-Relational Mapping - Django ORM) với các thực thể cốt lõi:

# models.py - Thiết kế cơ sở dữ liệu trên Django Server
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100, unique=True, verbose_name="Tên sản phẩm")
    code = models.CharField(max_length=20, unique=True, verbose_name="Mã SKU")
    unit_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Đơn giá (VNĐ/kg)")
    hsv_lower_bound = models.CharField(max_length=50, help_text="H_min,S_min,V_min")
    hsv_upper_bound = models.CharField(max_length=50, help_text="H_max,S_max,V_max")
    is_active = models.BooleanField(default=True)

class Order(models.Model):
    order_code = models.CharField(max_length=50, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    total_amount = models.DecimalField(max_digits=12, decimal_places=2, default=0.0)
    is_paid = models.BooleanField(default=False)
    payment_reference = models.CharField(max_length=100, blank=True, null=True)

class OrderItem(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items')
    product = models.ForeignKey(Product, on_delete=models.RESTRICT)
    weight = models.FloatField(verbose_name="Khối lượng (kg)")
    subtotal = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Thành tiền")

Thiết kế giao diện lập trình ứng dụng (RESTful API Endpoints)

  • POST /api/v1/hardware/sync/: Tiếp nhận gói tin kết hợp từ Raspberry Pi 4 gồm mã nhận diện quả (fruit_id) và trọng lượng (weight_gram).
  • GET /api/v1/order/current/: Truy xuất danh sách mặt hàng đang cân và tổng chi phí tạm tính.
  • POST /api/v1/checkout/generate-qr/: Tạo chuỗi dữ liệu VietQR thanh toán chuẩn EMVCo động dựa trên tổng giá trị đơn hàng và mã giao dịch duy nhất.
  • POST /api/v1/checkout/callback/: Nhận tín hiệu Webhook xác thực trạng thái thanh toán chuyển khoản từ dịch vụ ngân hàng.

Phương pháp nghiên cứu và phát triển (Methodology)

Dự án áp dụng quy trình phát triển lặp kết hợp kiểm thử song song phần cứng - phần mềm (Iterative V-Model):

+-------------------------------------------------------------------------------+
| Giai đoạn | Nội dung thực hiện                           | Sản phẩm bàn giao  |
+-----------+----------------------------------------------+--------------------+
| Sprint 1  | Phân tích giải thuật HSV, lấy mẫu màu quả    | Bộ tham số HSV     |
| Sprint 2  | Thiết kế mạch Proteus, lập trình HX711/ESP32 | Khối cân trọng lượng|
| Sprint 3  | Lập trình nhúng Raspberry Pi 4 & DRF Server  | API & Module Vision|
| Sprint 4  | Tích hợp toàn hệ thống, đóng khung mô hình   | Máy hoàn thiện     |
+-------------------------------------------------------------------------------+
  • Đánh giá rủi ro kỹ thuật: Hiện tượng trôi điểm không (Zero-drift) trên cảm biến trọng lượng được khắc phục bằng thuật toán tự động hiệu chuẩn (Auto-tare) mỗi khi hệ thống khởi động hoặc khi trọng lượng đo được dao động trong ngưỡng $\pm 0.5\text{ g}$ trong 3 giây liên tiếp.

Implementation và kết quả

Quá trình phát triển phần mềm và thuật toán

1. Thuật toán nhận diện vật thể dựa trên phân ngưỡng màu sắc HSV

Ảnh thu nhận từ Camera Pi theo định dạng BGR gốc được chuyển đổi sang không gian màu HSV nhằm tách biệt hoàn toàn thông tin màu sắc (Hue) khỏi cường độ chiếu sáng (Value).

Công thức chuyển đổi chuẩn: $$R' = R/255, \quad G' = G/255, \quad B' = B/255$$ $$C_{max} = \max(R', G', B'), \quad C_{min} = \min(R', G', B'), \quad \Delta = C_{max} - C_{min}$$

Tính toán góc màu sắc $H$ (Hue): $$H = \begin{cases} 0^\circ & \Delta = 0 \ 60^\circ \times \left(\frac{G' - B'}{\Delta} \bmod 6\right) & C_{max} = R' \ 60^\circ \times \left(\frac{B' - R'}{\Delta} + 2\right) & C_{max} = G' \ 60^\circ \times \left(\frac{R' - G'}{\Delta} + 4\right) & C_{max} = B' \end{cases}$$

# vision_processor.py - Thuật toán nhận diện phân ngưỡng HSV trên Raspberry Pi 4
import cv2
import numpy as np

class FruitClassifier:
    def __init__(self):
        # Bảng cấu hình ngưỡng màu HSV cho từng loại quả
        self.HSV_RANGES = {
            'apple_dark_red': (np.array([169, 43, 47]), np.array([180, 235, 127])),
            'apple_bright_red': (np.array([0, 153, 45]), np.array([7, 253, 255])),
            'apple_orange_red': (np.array([8, 185, 120]), np.array([15, 255, 185])),
            'lemon': (np.array([26, 102, 40]), np.array([51, 255, 255])),
            'pear_dark_yellow': (np.array([18, 120, 91]), np.array([20, 233, 185])),
            'pear_bright_yellow': (np.array([21, 150, 126]), np.array([25, 251, 200]))
        }
        self.MIN_CONTOUR_AREA = 3500 # Ngưỡng diện tích lọc nhiễu hạt

    def classify_frame(self, frame):
        hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        
        # Xử lý phân đoạn cho Táo (kết hợp các mặt nạ màu đỏ)
        mask_apple1 = cv2.inRange(hsv_frame, self.HSV_RANGES['apple_dark_red'][0], self.HSV_RANGES['apple_dark_red'][1])
        mask_apple2 = cv2.inRange(hsv_frame, self.HSV_RANGES['apple_bright_red'][0], self.HSV_RANGES['apple_bright_red'][1])
        mask_apple3 = cv2.inRange(hsv_frame, self.HSV_RANGES['apple_orange_red'][0], self.HSV_RANGES['apple_orange_red'][1])
        apple_mask = cv2.bitwise_or(mask_apple1, cv2.bitwise_or(mask_apple2, mask_apple3))

        # Mặt nạ cho Chanh và Lê
        lemon_mask = cv2.inRange(hsv_frame, self.HSV_RANGES['lemon'][0], self.HSV_RANGES['lemon'][1])
        mask_pear1 = cv2.inRange(hsv_frame, self.HSV_RANGES['pear_dark_yellow'][0], self.HSV_RANGES['pear_dark_yellow'][1])
        mask_pear2 = cv2.inRange(hsv_frame, self.HSV_RANGES['pear_bright_yellow'][0], self.HSV_RANGES['pear_bright_yellow'][1])
        pear_mask = cv2.bitwise_or(mask_pear1, mask_pear2)

        masks = {'Tao': apple_mask, 'Chanh': lemon_mask, 'Le': pear_mask}
        detected_fruits = {}

        for fruit_name, mask in masks.items():
            # Áp dụng phép toán hình thái học để lọc nhiễu (Morphological Opening)
            kernel = np.ones((5, 5), np.uint8)
            cleaned_mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
            contours, _ = cv2.findContours(cleaned_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
            
            for cnt in contours:
                area = cv2.contourArea(cnt)
                if area > self.MIN_CONTOUR_AREA:
                    detected_fruits[fruit_name] = area

        if detected_fruits:
            # Chọn loại quả có diện tích vùng màu lớn nhất
            return max(detected_fruits, key=detected_fruits.get)
        return None

2. Lập trình vi điều khiển ESP32 đọc cảm biến Loadcell và xuất LCD

Chương trình trên ESP32 đọc điện áp vi sai khuếch đại từ HX711 thông qua giao thức truyền dữ liệu 2 dây chuyên dụng (PD_SCK và DOUT), chuyển đổi sang đơn vị gram và truyền chuỗi dữ liệu định dạng qua UART (Universal Asynchronous Receiver-Transmitter) với Baudrate 115200 bps lên Raspberry Pi 4.

// main_esp32.ino - Đọc cảm biến trọng lượng và điều khiển ngoại vi
#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int LOADCELL_DOUT_PIN = 16;
const int LOADCELL_SCK_PIN = 4;
HX711 scale;
LiquidCrystal_I2C lcd(0x27, 16, 2);

const float CALIBRATION_FACTOR = 420.5; // Hệ số hiệu chuẩn sau đo thực nghiệm

void setup() {
  Serial.begin(115200);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_scale(CALIBRATION_FACTOR);
  scale.tare(); // Tự động cân chỉnh về 0 khi khởi động

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("HE THONG SAN SANG");
}

void loop() {
  if (scale.is_ready()) {
    float weight = scale.get_units(5); // Lấy giá trị trung bình 5 lần đọc
    if (weight < 0) weight = 0.0;
    
    // Gửi dữ liệu định dạng chuẩn JSON qua UART
    Serial.printf("{\"weight_g\": %.1f}\n", weight);

    lcd.setCursor(0, 1);
    lcd.printf("K.Luong: %.1fg   ", weight);
  }
  delay(200);
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử thực nghiệm với hơn 300 lượt đo lường trên các mẫu quả có kích thước, độ chín và sắc độ vỏ khác nhau trong các điều kiện chiếu sáng giả lập từ 250 đến 600 Lux.

Loại sản phẩm Số mẫu thử nghiệm Số lần nhận diện đúng Tỷ lệ chính xác (%) Thời gian xử lý trung bình
Táo (Apple) 100 94 94.0% 185 ms
Chanh (Lemon) 100 97 97.0% 162 ms
Lê (Pear) 100 93 93.0% 178 ms
Tổng thể 300 284 94.67% 175 ms
+-----------------------------------------------------------------------+
|              KẾT QUẢ ĐO LƯỜNG TẢI TRỌNG TRÊN LOADCELL 5KG             |
+-------------------+--------------------+------------------+-----------+
| Khối lượng chuẩn  | Giá trị đo thực tế | Sai số tuyệt đối | Tỷ lệ lỗi |
+-------------------+--------------------+------------------+-----------+
| 50.0 g            | 50.4 g             | + 0.4 g          | 0.80%     |
| 100.0 g           | 100.2 g            | + 0.2 g          | 0.20%     |
| 250.0 g           | 249.5 g            | - 0.5 g          | 0.20%     |
| 500.0 g           | 500.8 g            | + 0.8 g          | 0.16%     |
| 1000.0 g          | 1001.2 g           | + 1.2 g          | 0.12%     |
| 2000.0 g          | 1998.5 g           | - 1.5 g          | 0.08%     |
+-------------------+--------------------+------------------+-----------+

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

  1. Mô hình phần cứng hoàn chỉnh: Thiết kế cơ khí buồng chụp ảnh và bàn cân tích hợp nhỏ gọn, dây nối tối ưu qua các chuẩn cắm công nghiệp, màn hình LCD hiển thị trạng thái hoạt động tức thời.
  2. Xử lý đa nhiệm ổn định: Sự phân chia tác vụ giữa Raspberry Pi 4 (Vision/Web Client) và ESP32 (Sensor/I2C Controller) giúp hệ thống không bị nghẽn CPU (CPU Load trên Raspberry Pi duy trì ở mức $< 35%$).
  3. Thanh toán QR mượt mà: Khách hàng sau khi đặt sản phẩm lên bàn cân chỉ cần nhấn nút "Bắt đầu", sau 1.5 giây hệ thống nhận diện loại quả và khối lượng, tính toán thành tiền và render mã VietQR trên trang Web giao diện. Thời gian thanh toán qua ứng dụng ngân hàng di động thành công được ghi nhận tự động vào cơ sở dữ liệu.

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

  • Kiến trúc tính toán phân tán biên (Distributed Edge Architecture): Thay vì sử dụng một máy tính cá nhân cồng kềnh (PC/Laptop), đồ án đã tối ưu hóa toàn bộ hệ thống trên các vi mạch nhúng kích thước nhỏ. Việc sử dụng ESP32 làm bộ đệm xử lý tín hiệu analog từ cảm biến HX711 giúp giải phóng Raspberry Pi 4 khỏi các tác vụ ngắt thời gian thực (Real-time hardware interrupts), tránh hiện tượng giật khung hình khi camera hoạt động.
  • Thuật toán phân vùng hợp nhất đa dải màu (Multi-range HSV Union Masking): Khác với các phương pháp phân ngưỡng đơn dải thông thường vốn hay nhận diện sai màu vỏ táo đỏ bị chuyển sang sắc cam hoặc đỏ sẫm do góc chiếu sáng, thuật toán đề xuất sử dụng 3 bộ lọc độc lập kết hợp phép toán logic bitwise_or, nâng độ hội tụ nhận dạng lên hơn $94%$.
  • Tối ưu hóa chi phí sản xuất thiết bị: Tổng chi phí linh kiện phần cứng cho một trạm thanh toán hoàn chỉnh chỉ xấp xỉ 2.800.000 VNĐ (~$115 USD), thấp hơn 90% so với các trạm Self-Checkout chuyên dụng nhập khẩu.

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

Kịch bản ứng dụng thực tế

  1. Quầy nông sản tự phục vụ tại siêu thị Mini (WinMart+, Co.op Food, Bách Hóa Xanh): Khách hàng tự đặt túi trái cây lên cân, màn hình tự động hiển thị tên quả, đơn giá và số tiền; quét mã QR trên điện thoại để hoàn tất mua hàng mà không cần nhân viên đứng quầy.
  2. Căn tin trường học, bệnh viện: Ứng dụng để tự động tính tiền các phần ăn tiêu chuẩn, đĩa trái cây tráng miệng đóng gói sẵn.
+-------------------------------------------------------------------------+
|                  ƯỚC TÍNH CHI PHÍ VÀ HIỆU QUẢ ĐẦU TƯ (ROI)               |
+-------------------------------------------------------------------------+
| - Chi phí phần cứng chế tạo 01 Kiosk:           ~ 2.800.000 VNĐ         |
| - Chi phí bảo trì, điện năng vận hành/tháng:     ~ 100.000 VNĐ          |
| - Lương trung bình 01 nhân viên thu ngân/tháng: ~ 7.500.000 VNĐ         |
| -> Tiết kiệm chi phí vận hành cho siêu thị:     ~ 7.400.000 VNĐ/tháng   |
| -> Thời gian hoàn vốn đầu tư (Payback Period):  ~ 0.38 tháng (12 ngày)  |
+-------------------------------------------------------------------------+

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

Hạn chế kỹ thuật

  1. Độ phụ thuộc vào nguồn sáng môi trường: Phương pháp phân ngưỡng HSV có thể bị suy giảm độ chính xác khi cường độ ánh sáng môi trường thay đổi đột ngột (dưới 150 Lux hoặc ánh sáng vàng phức tạp).
  2. Số lượng lớp nhận diện giới hạn: Hiện tại hệ thống mới định cấu hình nhận diện 3 loại quả đơn lẻ đặt trọn vẹn trong khung hình; chưa hỗ trợ nhận diện đồng thời nhiều loại quả khác nhau trong cùng một giỏ hàng.

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

  • Tích hợp mô hình Học sâu (Deep Learning) dạng siêu nhẹ như YOLOv8-nano hoặc MobileNetV3 được tăng tốc phần cứng bằng USB Neural Compute Stick hoặc chip AI chuyên dụng (Google Coral Edge TPU), mở rộng danh mục nhận diện lên hơn 100 loại nông sản.
  • Bổ sung cảm biến siêu âm phát hiện gian lận (Anti-theft weight verification) và máy in nhiệt (Thermal Printer) để xuất hóa đơn giấy khi khách hàng có yêu cầu.

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

  • Sinh viên & Giảng viên ngành Kỹ thuật: Cung cấp tài liệu tham khảo thực nghiệm hoàn chỉnh về việc tích hợp liên ngành: Vi xử lý, Xử lý ảnh, Hệ thống nhúng IoT và Lập trình Web Fullstack.
  • Kỹ sư phát triển hệ thống nhúng (Embedded Developers): Nắm bắt mô hình giao tiếp phân tán giữa vi điều khiển thời gian thực (ESP32) và máy tính đơn bo chạy Linux (Raspberry Pi 4) qua chuẩn UART/REST API.
  • Doanh nghiệp bán lẻ: Có phương án giải pháp tự động hóa chi phí thấp, rút ngắn thời gian giao dịch tại quầy lên đến 65% và giảm thiểu phụ thuộc vào nhân sự thời vụ.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống máy thanh toán này là gì?

Hệ thống yêu cầu nguồn cấp ổn định 5V-3A cho Raspberry Pi 4 và 5V-1A cho mạch ESP32/Cảm biến. Môi trường mạng Wi-Fi băng tần 2.4GHz/5GHz với độ trễ Ping tới Server nội bộ $< 50\text{ ms}$. Camera Pi cần được lắp đặt cố định vuông góc với bàn cân ở khoảng cách từ 25–35 cm trong buồng chụp có dải đèn LED chiếu sáng trắng đồng đều.

2. Làm thế nào để mở rộng thêm loại quả mới vào hệ thống?

Để thêm một loại quả mới (ví dụ: Thanh long), người quản trị chỉ cần sử dụng công cụ Color Picker để trích xuất dải màu HSV tương ứng của mẫu quả trong cơ sở dữ liệu, sau đó thêm mới một bản ghi trên trang quản trị Django Admin mà không cần biên dịch lại toàn bộ mã nguồn của hệ thống.

3. Hệ thống xử lý thế nào khi mất kết nối mạng Internet?

Trong trường hợp mất kết nối Internet, cụm phần cứng (Raspberry Pi 4 và ESP32) vẫn nhận diện loại quả và đo khối lượng hiển thị trực tiếp lên màn hình LCD 16x2. Dữ liệu đơn hàng được lưu tạm thời vào bộ nhớ đệm cục bộ (SQLite) và tự động đồng bộ lên Server Django ngay khi đường truyền kết nối được phục hồi.

4. Hệ thống có bảo mật thông tin thanh toán của khách hàng không?

Có. Hệ thống chỉ sinh mã VietQR chứa thông tin chuyển khoản (Số tài khoản thụ hưởng của siêu thị, số tiền và nội dung thanh toán tự động). Khách hàng trực tiếp thao tác xác thực bằng FaceID/Vân tay và mã PIN trên ứng dụng ngân hàng số của chính họ, do đó hoàn toàn không lưu trữ thông tin thẻ hay tài khoản nhạy cảm của người mua.

5. Khả năng chống chịu rung động cơ học của bàn cân Loadcell như thế nào?

Module HX711 được lập trình áp dụng thuật toán lấy mẫu trung bình trượt 5 lần đo liên tiếp kết hợp bộ lọc phần mềm loại bỏ giá trị dị biệt (Outliers Removal), giúp triệt tiêu rung chấn cơ học khi khách hàng vừa đặt sản phẩm lên bàn cân.


Kết luận

Đồ án tốt nghiệp "Thiết kế và thi công hệ thống máy thanh toán tự động" đã hiện thực hóa thành công một mô hình trạm tự phục vụ thông minh (Self-Checkout Kiosk) có tính ứng dụng cao. Bằng cách kết hợp linh hoạt giữa vi điều khiển nhúng thời gian thực ESP32, máy tính đơn bo Raspberry Pi 4, thư viện thị giác máy tính OpenCV và nền tảng Django REST Framework, hệ thống đã chứng minh được tính khả thi vượt trội: nhận diện nhanh chóng, cân đo chính xác, giao diện trực quan và tích hợp thanh toán không tiền mặt an toàn. Đây là nền tảng công nghệ vững chắc để tiếp tục phát triển, nâng cấp thành các sản phẩm thương mại phục vụ quá trình chuyển đổi số trong các chuỗi cửa hàng bán lẻ và siêu thị thông minh hiện đại.