Giới thiệu dự án

Ùn tắc giao thông tại các đô thị lớn như TP. Hồ Chí Minh và Hà Nội đang gây ra những tổn thất kinh tế nghiêm trọng, làm sụt giảm năng suất lao động và gia tăng phát thải ô nhiễm môi trường. Theo thống kê hạ tầng giao thông đô thị, tổn thất kinh tế do ùn tắc tại các đô thị đặc biệt có thể lên tới hàng ngàn tỷ đồng mỗi năm do lãng phí nhiên liệu và thời gian di chuyển. Một trong những nguyên nhân cốt lõi dẫn đến tình trạng này là hệ thống điều khiển đèn tín hiệu tại các nút giao cắt vẫn vận hành theo chu kỳ thời gian cố định (Fixed-time Control). Việc phân bổ thời gian đèn xanh – đỏ tĩnh, không phụ thuộc vào lưu lượng phương tiện thực tế, khiến các làn đường vắng xe vẫn phải chờ đèn đỏ trong khi các làn đường quá tải bị dồn ứ cục bộ.

Vấn đề đặt ra là phải phát triển một giải pháp điều tiết giao thông thích ứng (Adaptive Traffic Control) có khả năng tự động nhận diện mật độ phương tiện theo thời gian thực để phân bổ chu kỳ đèn xanh tương ứng một cách linh hoạt, tối ưu hóa lưu lượng thông hành qua nút giao.

+------------------+      UART (9600 bps)      +-------------------+
|  Camera / Video  |                           | Arduino Mega 2560 |
|    (Làn 1 & 2)   |                           |  (ATmega2560 16M) |
+--------+---------+                           +---------+---------+
         |                                               |
         v                                               v
+------------------+                           +-------------------+
| Matlab R2017a CV |                           | 2x LED 7-Segment  |
| Image Processing |                           | 6x Signal LEDs    |
+------------------+                           +-------------------+

Mục tiêu dự án

  1. Nghiên cứu và xây dựng giải thuật xử lý ảnh trên nền tảng MATLAB R2017a nhằm phát hiện, tách biên, lọc nhiễu và đếm chính xác số lượng phương tiện giao thông trên từng làn đường từ luồng dữ liệu video/hình ảnh.
  2. Thiết kế giao thức truyền thông dữ liệu nối tiếp bất đồng bộ qua chuẩn UART (tốc độ baud 9600 bps) để truyền số liệu lưu lượng đếm được từ máy tính xử lý trung tâm xuống bo mạch điều khiển nhúng.
  3. Thiết kế và thi công phần cứng hoàn chỉnh sử dụng vi điều khiển Arduino Mega 2560 (ATmega2560), điều khiển trực tiếp 2 cụm module LED 7 đoạn 2 digit (Anode chung) hiển thị thời gian đếm lùi và 6 đèn LED đơn công suất biểu diễn trạng thái tín hiệu Xanh - Vàng - Đỏ cho 2 làn đường.
  4. Xây dựng thuật toán phân bổ thời gian chu kỳ đèn động: làn đường nào có mật độ phương tiện cao hơn sẽ được ưu tiên cấp thời gian đèn xanh dài hơn và ngược lại.

Giải pháp và phạm vi thực hiện

  • Phương pháp tiếp cận: Kết hợp công nghệ thị giác máy tính (Computer Vision) với hệ thống nhúng phân tán. Máy tính PC đóng vai trò là trạm xử lý ảnh bậc cao (tách nền, nhị phân hóa theo ngưỡng Otsu, biến đổi hình thái học Morphology, dán nhãn Connected Components), còn bo mạch vi điều khiển đảm nhận việc thực thi thời gian thực độc lập, quét LED và điều khiển rơ-le tín hiệu đèn.
  • Kết quả kỳ vọng: Hệ thống đếm xe đạt độ chính xác trên 90% trong điều kiện ánh sáng ban ngày, thời gian tính toán và gửi dữ liệu dưới 100ms, tự động điều chỉnh dải thời gian đèn xanh linh hoạt từ 15 giây đến 60 giây.
  • Phạm vi và giới hạn: Mô hình tập trung vào nút giao 2 làn đường giao nhau vuông góc; dữ liệu thử nghiệm gồm 6 tập video mô phỏng các kịch bản lưu lượng (ít xe, vừa xe, đông xe) được ghi hình ban ngày với góc nhìn bao quát từ trên cao.

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

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

Trước khi đề xuất giải pháp xử lý ảnh, nhiều công nghệ điều khiển giao thông đã được áp dụng trên thế giới và tại Việt Nam nhưng đều bộc lộ những nhược điểm lớn về chi phí và tính khả thi:

Tiêu chí Đèn hẹn giờ cố định Cảm biến vòng từ (Inductive Loop) Hệ thống IPC cao cấp (Advantech / ODA) Giải pháp đề xuất (Matlab + Arduino)
Khả năng thích nghi Không (Cố định theo giờ) Có (Nhận diện kim loại) Rất cao (AI/Fuzzy Control) Cao (Xử lý ảnh thích nghi)
Chi phí triển khai Rất thấp Trung bình - Cao Rất cao (Hàng tỷ đồng/nút) Thấp (Tận dụng linh kiện mở)
Bảo trì & Lắp đặt Đơn giản Phức tạp (Cắt xẻ mặt đường) Phức tạp (Cần chuyên gia) Rất linh hoạt, không phá hủy mặt đường
Độ bền thực tế Bền Dễ hỏng do lún nứt đường Dễ phát sinh lỗi thiết bị ngoại nhập Dễ làm chủ, thay thế linh kiện sẵn có

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc phải có): Nhận diện phương tiện qua ảnh, chuyển đổi ảnh xám, nhị phân hóa, thuật toán bwlabel đếm số lượng xe; truyền thông UART 8-bit không lỗi; vi điều khiển điều khiển chính xác chu kỳ Xanh - Vàng - Đỏ và quét LED 7 đoạn hiển thị đếm ngược.
  • Should have (Nên có): Giao diện đồ họa (GUI) trên Matlab hiển thị trạng thái xử lý từng bước (ảnh gốc, ảnh nhị phân, ảnh sau xói mòn/giãn nở, số lượng xe đếm được); chế độ chuyển đổi linh hoạt giữa điều khiển tự động và điều khiển bằng tay.
  • Could have (Có thể có): Khả năng lọc bóng xe (Shadow removal) và thích nghi tự động với các điều kiện thay đổi độ sáng đột ngột.
  • Won't have (Chưa thực hiện trong phạm vi đồ án): Nhận dạng biển số xe, phân loại chi tiết từng chủng loại phương tiện (xe bus, ô tô con, xe máy), xử lý video ban đêm trong điều kiện thiếu sáng nghiêm trọng.

Thiết kế hệ thống

Hệ thống điều khiển giao thông thông minh gồm 4 khối chức năng chính liên kết chặt chẽ với nhau:

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

  • Nền tảng máy tính (High-level CV Processing): MATLAB R2017a (64-bit), Image Processing Toolbox.
  • Nền tảng nhúng (Low-level Controller): Arduino IDE v1.8.5, ngôn ngữ C/C++ nhúng.
  • Phần cứng điều khiển trung tâm: Bo mạch Arduino Mega 2560 tích hợp vi điều khiển ATmega2560 (8-bit AVR RISC, xung nhịp 16 MHz, bộ nhớ Flash 256 KB, SRAM 8 KB, EEPROM 4 KB, 54 chân Digital I/O, 4 bộ UART phần cứng).
  • Phần cứng hiển thị & ngoại vi:
    • 2 Module LED 7 đoạn loại 2 digit Anode chung (hiển thị đếm lùi thời gian từ 00 đến 99).
    • 6 LED đơn sắc siêu sáng (2 Đỏ, 2 Vàng, 2 Xanh) với điện áp phân cực thuận $V_F$: Đỏ/Vàng = 1.8V - 2.2V, Xanh lục = 3.0V - 3.2V.
    • Điện trở hạn dòng tính toán $R = \frac{V_{CC} - V_F}{I_F}$ đảm bảo dòng định mức $I_F \approx 10\text{mA} - 15\text{mA}$ bảo vệ ngõ ra vi điều khiển.
    • Mạch dao động thạch anh ngoài 16 MHz kết hợp 2 tụ gốm ổn định nhiệt 22 pF.

Phương pháp nghiên cứu và quy trình phát triển

Dự án áp dụng mô hình phát triển tích hợp chữ V (V-Model) kết hợp kiểm thử theo từng giai đoạn trong thời gian 12 tuần:

Tuần 01 - 03: Khảo sát lý thuyết, thiết lập môi trường Matlab R2017a & Arduino IDE.
Tuần 04 - 06: Phát triển thuật toán xử lý ảnh, trích xuất đặc trưng & đếm phương tiện.
Tuần 07 - 08: Thiết kế mạch nguyên lý, tính toán công suất tải & lập trình UART.
Tuần 09 - 10: Thi công mô hình sa bàn, tích hợp phần cứng và tối ưu hóa giải thuật.
Tuần 11 - 12: Đo kiểm đánh giá độ chính xác, hiệu chỉnh sai số & nghiệm thu toàn diện.

Implementation và kết quả

Quy trình phát triển giải thuật xử lý ảnh

Quy trình xử lý ảnh trên Matlab thực hiện qua chuỗi các hàm biến đổi hình thái và phân vùng ảnh nối tiếp:

  1. Chuyển đổi không gian màu (Grayscale Conversion): Biến đổi ảnh màu RGB 24-bit ($1280 \times 720 \times 3$) sang ảnh xám 8-bit nhằm giảm độ phức tạp tính toán thông qua trọng số tri giác: $$P(x,y) = 0.2989 \times R(x,y) + 0.5870 \times G(x,y) + 0.1140 \times B(x,y)$$
  2. Cân bằng và tăng cường độ tương phản: Sử dụng hàm imadjust() để giãn dải mức xám, làm nổi bật đường biên giữa phương tiện và mặt đường.
  3. Phân ngưỡng nhị phân tự động (Otsu's Thresholding): Sử dụng hàm graythresh() để tính toán ngưỡng tối ưu $T$ cực tiểu hóa phương sai nội lớp, sau đó tạo ảnh nhị phân với imbinarize(): $$BW(x,y) = \begin{cases} 1 & \text{nếu } P(x,y) \ge T \ 0 & \text{nếu } P(x,y) < T \end{cases}$$
  4. Phép toán hình thái học (Morphological Operations):
    • Giãn nở (imdilate): Kết nối các mảng pixel đứt đoạn của cùng một phương tiện bằng phần tử cấu trúc strel('disk', 3).
    • Lấp lỗ trống (imfill): Điền đầy các vùng rỗng bên trong thân xe.
    • Xói mòn (imerode): Thu nhỏ và tách rời các xe đi sát nhau.
    • Loại bỏ nhiễu diện tích nhỏ (bwareaopen): Xóa bỏ các đốm nhiễu có kích thước nhỏ hơn 50 pixel không phải là phương tiện.
  5. Dán nhãn thành phần liên thông (Connected Component Labeling): Áp dụng hàm bwlabel() với ma trận liên thông 8 hướng để đếm tổng số đối tượng độc lập.
% Đoạn mã xử lý ảnh cốt lõi trên MATLAB R2017a
function vehicle_count = ProcessTrafficImage(input_img, background_img)
    % 1. Chuyển đổi sang không gian mức xám
    gray_input = rgb2gray(input_img);
    gray_bg = rgb2gray(background_img);
    
    % 2. Trừ nền để tách các đối tượng chuyển động
    diff_img = abs(double(gray_input) - double(gray_bg));
    diff_img = uint8(diff_img);
    
    % 3. Cân bằng độ tương phản & tính ngưỡng Otsu
    adj_img = imadjust(diff_img);
    threshold = graythresh(adj_img);
    bw_img = imbinarize(adj_img, threshold);
    
    % 4. Xử lý hình thái học loại bỏ nhiễu
    se = strel('rectangle', [3, 3]);
    dilated_img = imdilate(bw_img, se);
    filled_img = imfill(dilated_img, 'holes');
    eroded_img = imerode(filled_img, se);
    clean_img = bwareaopen(eroded_img, 50); % Xóa đối tượng < 50 pixels
    
    % 5. Dán nhãn đối tượng và đếm tổng số lượng
    [labeled_matrix, vehicle_count] = bwlabel(clean_img, 8);
end
// Đoạn mã điều khiển chu kỳ đèn trên Arduino Mega 2560
#include <Arduino.h>

const int LED_RED_1 = 22, LED_YELLOW_1 = 23, LED_GREEN_1 = 24;
const int LED_RED_2 = 25, LED_YELLOW_2 = 26, LED_GREEN_2 = 27;

int count_lane1 = 0;
int count_lane2 = 0;
int green_time_lane1 = 15;
int green_time_lane2 = 15;

void calculate_green_time() {
    // Tự động phân bổ thời gian đèn xanh dựa trên số xe đếm được
    if (count_lane1 <= 5) green_time_lane1 = 15;
    else if (count_lane1 <= 15) green_time_lane1 = 30;
    else green_time_lane1 = 45;

    if (count_lane2 <= 5) green_time_lane2 = 15;
    else if (count_lane2 <= 15) green_time_lane2 = 30;
    else green_time_lane2 = 45;
}

void setup() {
    Serial.begin(9600); // UART kết nối với MATLAB
    pinMode(LED_RED_1, OUTPUT); pinMode(LED_YELLOW_1, OUTPUT); pinMode(LED_GREEN_1, OUTPUT);
    pinMode(LED_RED_2, OUTPUT); pinMode(LED_YELLOW_2, OUTPUT); pinMode(LED_GREEN_2, OUTPUT);
}

void loop() {
    if (Serial.available() >= 2) {
        count_lane1 = Serial.read();
        count_lane2 = Serial.read();
        calculate_green_time();
    }
    // Thực thi chu kỳ chuyển mạch trạng thái đèn giao thông...
}

Đo kiểm và đánh giá kết quả

Hệ thống được thử nghiệm trên 6 tập dữ liệu video thực tế đại diện cho 3 trạng thái lưu lượng giao thông khác nhau:

Kịch bản thử nghiệm Số xe thực tế (Làn 1 / Làn 2) Số xe đếm được (Matlab) Độ chính xác nhận dạng (%) Thời gian đèn xanh phân bổ (Làn 1 / Làn 2)
Kịch bản 1 (Ít xe) 03 / 02 03 / 02 100.0% 15s / 15s
Kịch bản 2 (Làn 1 vừa, Làn 2 ít) 08 / 03 08 / 03 100.0% 30s / 15s
Kịch bản 3 (Làn 1 đông, Làn 2 vừa) 18 / 09 17 / 08 92.6% 45s / 30s
Kịch bản 4 (Cả 2 làn đều đông) 22 / 20 20 / 19 92.8% 45s / 45s

[!NOTE] Thời gian trễ xử lý toàn chu trình từ khi nhận khung ảnh từ camera, phân tích tách biên nhị phân trên PC cho đến khi cập nhật chu kỳ đếm ngược trên LED 7 đoạn qua UART đạt trung bình 68ms, đáp ứng yêu cầu vận hành thời gian thực của các hệ thống điều khiển hạ tầng.


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

  1. Cơ chế phân bổ thời gian thích nghi tuyến tính theo mật độ: Thay vì chu kỳ cố định, hệ thống tự động gán nhãn ma trận dữ liệu và phân chia 3 bậc thời gian linh hoạt (15s – 30s – 45s) tương ứng với 3 ngưỡng mật độ xe, giúp giảm thiểu thời gian chờ rỗng ở các làn vắng.
  2. Chi phí chế tạo siêu tiết kiệm: Bằng việc tận dụng nền tảng vi điều khiển mã nguồn mở ATmega2560 kết hợp xử lý thuật toán phân đoạn hình thái học cổ điển, hệ thống đạt chi phí phần cứng dưới 2.000.000 VNĐ, rẻ hơn hàng trăm lần so với các giải pháp IPC chuyên dụng nhập khẩu.
  3. Kiến trúc phần mềm phân tầng rõ ràng: Phân lập giữa tầng tính toán thị giác máy tính nặng (Matlab) và tầng điều khiển rơ-le chấp hành tin cậy (Arduino), loại trừ hoàn toàn nguy cơ treo cứng hệ thống đèn tín hiệu khi máy tính gặp sự cố xử lý ảnh.

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

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

  • Nút giao thông đô thị tự động: Thay thế các cụm đèn bấm giờ cơ học tại các giao lộ có lưu lượng xe biến động mạnh giữa các khung giờ trong ngày.
  • Trạm thu phí không dừng & Bãi đỗ xe thông minh: Điều phối lưu lượng xe vào làn và tự động cảnh báo luồng xe quá tải.
  • Cổng phân luồng trong khu công nghiệp: Tự động ưu tiên làn xe tải nặng/xe container xuất hàng trong các khung giờ cao điểm sản xuất.
Lộ trình triển khai 3 giai đoạn:
[Giai đoạn 1: Mô hình thực nghiệm] -> [Giai đoạn 2: Nhúng trên Jetson Nano] -> [Giai đoạn 3: Tích hợp Smart City SCADA]

Phân tích hiệu quả đầu tư (Cost-Benefit Analysis)

  • Chi phí thiết bị dự kiến cho một giao lộ: Khoảng 15.000.000 VNĐ (bao gồm 2 camera IP độ phân giải Full HD, 1 bộ máy tính nhúng biên ARM/Edge Device, 1 cụm điều khiển công suất Arduino và đèn tín hiệu LED).
  • Lợi ích kinh tế: Giảm thời gian chờ trung bình tại nút giao ước tính 25% - 30%, tiết kiệm hàng triệu lít xăng dầu cho người tham gia giao thông và hoàn vốn đầu tư xã hội chỉ trong vòng 3 đến 6 tháng vận hành.

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

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

  • Giải thuật trừ nền và nhị phân hóa Otsu phụ thuộc vào điều kiện chiếu sáng ổn định; dễ bị ảnh hưởng bởi bóng râm của các phương tiện lớn hoặc ánh sáng chói lóa.
  • Hệ thống chưa tách biệt hoàn toàn trong trường hợp các xe máy di chuyển quá sát nhau thành từng cụm lớn (dễ bị gom thành 1 đối tượng duy nhất).

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

  • Ứng dụng Mạng nơ-ron tích chập (CNN - YOLOv8/SSD): Chuyển dịch từ xử lý ảnh hình thái học sang mô hình Deep Learning để nhận diện, phân loại chính xác xe máy, ô tô, xe buýt ngay cả trong điều kiện trời mưa hoặc ban đêm.
  • Chuyển đổi sang phần cứng nhúng biên (Edge AI): Tích hợp toàn bộ giải thuật lên các module như NVIDIA Jetson Nano hoặc Raspberry Pi 4, loại bỏ nhu cầu sử dụng máy tính PC cồng kềnh.
  • Mở rộng thuật toán mờ (Fuzzy Logic): Xây dựng bộ điều khiển mờ đa biến điều chỉnh thời gian đèn xanh mịn màng theo hàm liên tục thay vì các ngưỡng bậc thang cố định.

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

  • Sinh viên & Học viên ngành Điện tử - Viễn thông, Tự động hóa: Tài liệu tham khảo hoàn chỉnh từ thiết kế phần cứng vi điều khiển, tính toán dòng áp LED, lập trình ngắt UART đến quy trình tiền xử lý ảnh trong Matlab.
  • Kỹ sư hệ thống nhúng & IoT: Nắm bắt mô hình giao tiếp thực tế giữa phần mềm xử lý cấp cao trên PC và vi điều khiển điều khiển tải ngoại vi.
  • Nhà quản lý hạ tầng giao thông đô thị: Tiếp cận mô hình phân luồng giao thông thông minh tự động với chi phí đầu tư ban đầu thấp, dễ bảo trì và dễ làm chủ công nghệ.
  • Các nhà nghiên cứu ứng dụng AI: Nền tảng dữ liệu thực nghiệm để phát triển các thuật toán tối ưu hóa lưu lượng giao thông nâng cao.

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

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai giải thuật là gì?

Máy tính chỉ cần CPU Intel Core i3 thế hệ 4 trở lên, 4GB RAM chạy hệ điều hành Windows 7/10 và cài đặt MATLAB R2017a kèm Image Processing Toolbox. Bo mạch nhúng là Arduino Mega 2560 hoạt động ở điện áp nguồn 5V DC/1A hoặc qua adapter 9V DC.

2. Hệ thống xử lý thế nào khi xảy ra mất kết nối UART giữa PC và vi điều khiển?

Trong phần mềm Arduino, một bộ đếm thời gian (Watchdog/Timeout timer) được thiết lập. Nếu sau 3 chu kỳ đèn không nhận được dữ liệu mới từ cổng nối tiếp, vi điều khiển sẽ tự động chuyển sang chế độ dự phòng an toàn (Fail-safe mode) với chu kỳ cố định mặc định 30 giây cho mỗi làn.

3. Tốc độ khung hình (Frame Rate) xử lý của hệ thống đạt bao nhiêu FPS?

Trên môi trường thực nghiệm Matlab R2017a với độ phân giải khung hình $640 \times 480$ pixel, tốc độ xử lý đạt khoảng 15 – 20 FPS, hoàn toàn đủ nhanh để cập nhật lưu lượng xe tại các giao lộ có vận tốc di chuyển đô thị từ 20 – 40 km/h.

4. Tại sao đồ án sử dụng phương pháp quét LED 7 đoạn thay vì dùng IC ghi dịch như 74HC595?

Do bo mạch Arduino Mega 2560 trang bị tới 54 chân Digital I/O, việc điều khiển quét trực tiếp thông qua các chân I/O giúp đơn giản hóa sơ đồ nguyên lý mạch, giảm số lượng linh kiện trung gian và tối ưu hóa thời gian thực thi của vi điều khiển mà vẫn đảm bảo tần số quét trên 50Hz chống giật/nháy mắt.

5. Giải pháp xử lý nhiễu khi thời tiết thay đổi độ sáng đột ngột như thế nào?

Giải thuật tích hợp bước cân bằng lược đồ mức xám bằng imadjust() kết hợp thuật toán tính ngưỡng động Otsu graythresh(), cho phép tự động điều chỉnh ngưỡng nhị phân theo giá trị trung bình mức sáng của toàn khung hình.


Kết luận

Đồ án tốt nghiệp "Thiết kế thi công hệ thống điều khiển tín hiệu đèn giao thông thông qua xử lý ảnh" đã giải quyết thành công bài toán tự động hóa điều tiết giao thông thích ứng dựa trên công nghệ thị giác máy tính kết hợp hệ thống nhúng. Bằng việc kết hợp sức mạnh xử lý ảnh của MATLAB R2017a và khả năng điều khiển ngoại vi thời gian thực bền bỉ của Arduino Mega 2560, hệ thống đã kiểm chứng xuất sắc khả năng tối ưu hóa chu kỳ đèn tín hiệu dựa trên mật độ phương tiện thực tế với độ chính xác cao và thời gian đáp ứng nhanh.

Kết quả nghiên cứu không chỉ khẳng định tính khả thi của việc làm chủ công nghệ điều khiển giao thông thông minh trong nước với chi phí thấp mà còn mở ra tiềm năng lớn cho việc ứng dụng Trí tuệ nhân tạo biên (Edge AI) vào quản trị đô thị thông minh trong tương lai.