Bối cảnh và vấn đề nghiên cứu

Đồ án môn học này được thực hiện trong bối cảnh LED ngày càng hiện diện rộng rãi trong đời sống — từ đèn đường, đèn xe cho đến thiết bị điều khiển điện tử tiêu dùng. Nhóm tác giả nhận thấy nhu cầu thực tế về một đồng hồ trang trí để bàn có khả năng hiển thị thời gian linh hoạt thông qua màn hình LED matrix, từ đó đề xuất thiết kế hệ thống kết hợp LED Panel P10 và vi điều khiển ESP32.

Mục tiêu đề tài:

  1. Tạo một mạch LED đồng hồ hoàn chỉnh, sử dụng LED Panel P10 kết nối với ESP32 để hiển thị thời gian.
  2. Viết và nạp code điều khiển LED P10 phát sáng theo ý muốn thông qua nền tảng Blynk qua kết nối Wi-Fi.
  3. Thiết kế, mô phỏng và thi công mô hình phần cứng thực tế.

Nội dung nhiệm vụ cụ thể:

  1. Thiết kế sơ đồ khối và sơ đồ nguyên lý chi tiết cho mạch.
  2. Tính toán giá trị, lựa chọn linh kiện phù hợp.
  3. Mô phỏng nguyên lý hoạt động trên phần mềm Proteus.
  4. Thi công mô hình phần cứng và đo kiểm tra.
  5. Hoàn thiện báo cáo đồ án.

Đối tượng nghiên cứu: Vi điều khiển ESP32 (DevKit V1), LED Panel P10 (LED matrix 32×16 pixel), giao diện điều khiển Blynk, và phần mềm lập trình Arduino IDE.

Phạm vi: Đồ án giới hạn ở mô hình một module LED Panel P10 kết nối với một board ESP32, thực hiện tại Trường Đại học Công nghệ TP. Hồ Chí Minh (HUTECH), thời gian từ tháng 9 đến tháng 12 năm 2024.


Cơ sở lý thuyết và phương pháp

Khung lý thuyết và linh kiện sử dụng

Đồ án xây dựng trên nền tảng lý thuyết điều khiển ma trận LED (LED matrix control) và kỹ thuật điều chế độ rộng xung (PWM — Pulse Width Modulation). Hai linh kiện cốt lõi được nghiên cứu chi tiết qua datasheet:

Linh kiện Thông số chính
LED Panel P10 Kích thước module: 16cm × 32cm; khoảng cách điểm ảnh: 10mm; điện áp: 5V DC; dòng tối đa: 2–3A/module; công suất tối đa: 10–15W/module; cường độ sáng: 6.500 mcd; tuổi thọ: 100.000 giờ; chống nước IP65
ESP32 DevKit V1 CPU: Xtensa Dual-Core LX6, 32-bit, 160–240 MHz; RAM: 520 Kb SRAM; ROM: 448 Kb; Wi-Fi 802.11 b/g/n; Bluetooth 4.2 BR/EDR và BLE; 18 kênh ADC 12-bit; 2 kênh DAC 8-bit; 16 kênh PWM; điện áp hoạt động: 2,2–3,6V; sản xuất bằng công nghệ TSMC 40 nm

Giao tiếp giữa ESP32 và LED Panel P10 sử dụng chuẩn Hub75, bao gồm các tín hiệu: dữ liệu (D0–D3), đồng hồ (CLK), chọn hàng (A, B, C, D), chốt dữ liệu (LAT/STB), và kích hoạt hiển thị (OE). IC driver tích hợp trong module P10 bao gồm các dòng 74HC595, MBI5124, hoặc MBI5024.

Nguyên lý quét hàng (row scanning / multiplexing) được áp dụng: tại mỗi thời điểm chỉ một nhóm hàng được kích hoạt, các hàng được quét luân phiên với tần số refresh từ 1.920 Hz trở lên để mắt người không nhận ra hiện tượng nhấp nháy.

Nền tảng lập trình sử dụng Arduino IDE với ngôn ngữ C/C++, thư viện PxMATRIX để điều khiển LED matrix, và thư viện Adafruit GFX (bao gồm các font chữ FreeMonoBold9pt7b, FreeSansBold9pt7b, FreeSerifBold9pt7b). Kết nối điều khiển từ xa thực hiện qua nền tảng Blynk thông qua Wi-Fi tích hợp của ESP32.

Phương pháp nghiên cứu

  • Thu thập thông tin: Tìm kiếm tài liệu trên internet, đọc datasheet linh kiện, tham khảo sách điện tử và tài liệu kỹ thuật.
  • Thiết kế và mô phỏng: Sử dụng phần mềm Proteus để vẽ sơ đồ nguyên lý và mô phỏng hoạt động mạch trước khi thi công.
  • Thiết kế PCB: Vẽ mạch layout (PCB) để chuẩn bị in mạch.
  • Thi công thực nghiệm: Lắp ráp mạch trên test board, nạp chương trình, đo kiểm tra và chỉnh sửa các thông số.
  • Phương pháp tính toán: Tính toán thông số mạch (điện áp, dòng điện) bằng máy tính.

Nguồn dữ liệu

Datasheet của LED Panel P10 và ESP32 DevKit V1; tài liệu kỹ thuật của thư viện PxMATRIX và Adafruit GFX; tài nguyên lập trình Arduino IDE.


Nội dung chính theo từng chương

Chương 1: Tổng quan

Chương này trình bày lý do chọn đề tài dựa trên sự phổ biến của LED trong đời sống, đặt ra mục tiêu tạo đồng hồ trang trí để bàn dùng LED Panel P10 và ESP32. Tác giả xác định phương pháp nghiên cứu (thu thập thông tin, mô phỏng Proteus, tính toán bằng máy tính) và phác thảo kết cấu tổng thể đồ án gồm 6 chương.

Chương 2: Giới thiệu linh kiện quan trọng và lý thuyết liên quan

Chương này chiếm khối lượng lý thuyết lớn nhất, chia thành hai phần:

Phần linh kiện: Trình bày chi tiết LED Panel P10 (cấu trúc ma trận 32 cột × 16 hàng = 512 điểm ảnh/module, ba loại: đơn sắc, ba màu, full màu với 16.216 màu; nguyên lý quét hàng và điều khiển PWM; giao diện Hub75) và ESP32 DevKit V1 (cấu hình CPU, bộ nhớ, các chuẩn giao tiếp, sơ đồ chân, phân loại chân GPIO theo chức năng).

Phần lý thuyết lập trình: Giới thiệu Arduino IDE (cơ chế biên dịch sang file .hex, cấu trúc chương trình gồm hai hàm setup() và loop(), cách sử dụng thanh công cụ và cách đổi đường dẫn biên dịch). Giải thích kỹ thuật PWM trong bối cảnh điều chỉnh độ sáng LED và điều khiển tốc độ.

Chương 3: Thiết kế

Chương trình bày sơ đồ khối của hệ thống gồm bốn khối chức năng:

  • Khối nguồn: Cấp 5V DC cho toàn mạch; dùng mạch hạ áp cấp điện áp thấp hơn riêng cho ESP32 (hoạt động ở mức 2,2–3,6V).
  • Khối vi điều khiển (ESP32): Xử lý tín hiệu từ khối điều khiển, chạy code file HEX, điều khiển khối hiển thị.
  • Khối hiển thị (LED Panel P10): Hiển thị nội dung theo lệnh từ vi điều khiển.
  • Khối điều khiển (Blynk): Nhận và truyền tín hiệu từ người dùng đến ESP32 qua Wi-Fi.

Nguyên lý hoạt động: Khi người dùng tương tác qua Blynk, tín hiệu được truyền đến ESP32 thông qua kết nối Wi-Fi; ESP32 xử lý và xuất dữ liệu điều khiển đến LED Panel P10 để hiển thị theo yêu cầu.

Tính toán thông số mạch xác định việc dùng nguồn 5V cho LED Panel P10 và mạch hạ áp để cấp nguồn phù hợp cho ESP32.

Chương 4: Thi công

Chương này trình bày toàn bộ quá trình hiện thực hóa phần cứng và phần mềm, được chia thành hai phần lớn.

Phần cứng: Lắp mạch thử nghiệm trên test board theo sơ đồ kết nối đã thiết kế, kiểm tra hoạt động và thực hiện đo đạc các thông số cần thiết.

Phần mềm: Nhóm phát triển và giải thích ba module chương trình chính:

  1. Module 01_Test_P10_RGB_32x16: Kiểm tra cơ bản LED panel — khởi tạo đối tượng PxMATRIX display(32, 16, P_LAT, P_OE, P_A, P_B, P_C), cấu hình hardware timer với chu kỳ 1.500 µs, thiết lập độ sáng display.setBrightness(125), định nghĩa bảng màu color565 cho 8 màu cơ bản (RED, GREEN, BLUE, WHITE, YELLOW, CYAN, MAGENTA, VIOLET) và cấu hình interrupt handler IRAM_ATTR display_updater().

  2. Module 02_P10_RGB_32x16_Adafruit_GFX_SetFont: Tích hợp thư viện Adafruit GFX để thiết lập font chữ tùy chỉnh (FreeMonoBold9pt7b, FreeSansBold9pt7b, FreeSerifBold9pt7b); cấu hình tần số SPI bus PxMATRIX_SPI_FREQUENCY 10.000.000; hỗ trợ xoay màn hình bằng display.setRotation(0).

  3. Module 03_P10_RGB_32x16_Scroll_Text: Hiển thị chữ chạy ngang (scrolling text) — hàm run_Scrolling_Text() nhận tham số vị trí Y, tốc độ cuộn, chuỗi văn bản và màu sắc; hàm getTextWidth() tính chiều rộng chuỗi theo pixel để xác định hành trình cuộn từ matrix_width đến -(matrix_width + text_Length_In_Pixel).

Các chân kết nối cố định được định nghĩa: P_LAT = 5, P_A = 19, P_B = 23, P_C = 18, P_OE = 4.

Chương 5 (tương ứng Chương 6 trong văn bản): Kết luận và hướng phát triển đề tài

Chương tổng kết kết quả đạt được và đề xuất hướng mở rộng đề tài (nội dung chi tiết ở mục Kết quả và Hạn chế bên dưới).


Thiết kế và triển khai

Kiến trúc hệ thống

Hệ thống được tổ chức theo kiến trúc bốn khối nối tiếp: Khối nguồn → Khối vi điều khiển (ESP32) → Khối hiển thị (LED Panel P10), với Khối điều khiển (Blynk/Wi-Fi) gửi tín hiệu không dây đến ESP32.

Khối Linh kiện/Công nghệ Vai trò
Khối nguồn Nguồn 5V DC + mạch hạ áp Cấp điện cho toàn hệ thống
Khối vi điều khiển ESP32 DevKit V1 Xử lý logic, điều khiển hiển thị
Khối hiển thị LED Panel P10 (32×16 pixel) Hiển thị nội dung đồng hồ
Khối điều khiển Blynk + Wi-Fi 802.11 Giao diện điều khiển từ xa

Công nghệ và thư viện

  • Ngôn ngữ lập trình: C/C++ trên Arduino IDE
  • Thư viện chính: PxMATRIX (điều khiển LED matrix), Adafruit GFX (đồ họa và font chữ)
  • Giao thức giao tiếp phần cứng: Hub75 (SPI-based, tần số bus 10.000.000 Hz)
  • Giao tiếp điều khiển: Wi-Fi (Blynk platform)
  • Công cụ mô phỏng: Proteus (thiết kế sơ đồ nguyên lý và mô phỏng mạch)
  • Thiết kế PCB: Phần mềm vẽ mạch layout (PCB)

Cơ chế điều khiển hiển thị

Timer phần cứng của ESP32 được cấu hình với chu kỳ 1.500 µs, kích hoạt interrupt handler display_updater() liên tục để làm tươi màn hình. Giá trị display_draw_time = 30 (đơn vị µs) quyết định thời gian bật của mỗi hàng LED. Độ sáng được điều chỉnh trong phạm vi 0–255. Kỹ thuật multiplexing quét 8 hàng theo chuẩn 1/8 row scan (display.begin(8)).

Kiểm thử

Quá trình kiểm thử được thực hiện theo từng giai đoạn: mô phỏng trên Proteus trước khi thi công, thử nghiệm trên test board sau khi lắp ráp, đo đạc và hiệu chỉnh thông số trong các tuần 10–11 (từ 20/11/2024 đến 03/12/2024). Giao diện web Blynk được kiểm tra để xác nhận khả năng điều khiển từ xa.


Kết quả và đóng góp

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

  • Hoàn thiện mô hình mạch thi công thực tế: sơ đồ nguyên lý chi tiết, mạch PCB và sản phẩm phần cứng hoàn chỉnh.
  • Hệ thống hiển thị đồng hồ trên LED Panel P10 (module 32×16 pixel) hoạt động ổn định, kết nối và điều khiển được qua nền tảng Blynk thông qua Wi-Fi.
  • Ba module chương trình (kiểm tra cơ bản, thiết lập font, hiển thị chữ cuộn) được viết, giải thích và tích hợp thành công.
  • Nhóm tác giả tích lũy kinh nghiệm thực tế về lập trình ESP32, nguyên lý hoạt động của LED matrix P10, và quy trình thi công mạch điện tử từ thiết kế đến sản phẩm.

Đóng góp:

Đồ án cung cấp một quy trình tích hợp hoàn chỉnh — từ nghiên cứu datasheet linh kiện, thiết kế sơ đồ khối, mô phỏng Proteus, đến thi công và lập trình — cho bài toán hiển thị thông tin trên LED Panel P10 điều khiển bằng ESP32 qua Blynk. Đây là tài liệu thực hành cho sinh viên ngành Kỹ thuật Điện tử tiếp cận hệ thống IoT cơ bản với chi phí thấp.


Hạn chế và hướng nghiên cứu tiếp

Văn bản đề cập trực tiếp một số hạn chế:

  • Nhóm thực hiện thừa nhận lượng kiến thức còn hạn chế và đây là lần đầu thực hiện một mạch phức tạp, dẫn đến một số thiếu sót trong quá trình thi công.
  • Phạm vi hiện tại giới hạn ở một module LED Panel P10 đơn, chưa mở rộng sang ghép nối nhiều module để tạo màn hình lớn hơn.
  • Giao diện điều khiển phụ thuộc vào nền tảng Blynk và kết nối Wi-Fi, chưa có phương án hoạt động độc lập khi mất mạng.

Hướng phát triển tiếp theo (tác giả đề cập trong Chương Kết luận): mở rộng tính năng và nâng cấp hệ thống theo hướng phát triển đề tài, tuy nhiên chi tiết cụ thể không được trình bày đầy đủ trong phần fulltext được cung cấp.


Giá trị tham khảo

Đồ án có giá trị tham khảo chủ yếu cho các đối tượng sau:

  • Sinh viên ngành Kỹ thuật Điện tử, Điện tử - Viễn thông, Cơ điện tử đang tìm hiểu về vi điều khiển ESP32 và LED matrix: phần lý thuyết linh kiện (Chương 2) và phần code mẫu (Chương 4) cung cấp điểm khởi đầu thực tế.
  • Sinh viên làm đồ án tương tự về hệ thống hiển thị thông tin IoT: sơ đồ khối bốn thành phần, cách kết nối Hub75, và ba module chương trình có thể tái sử dụng hoặc mở rộng.
  • Người học Arduino IDE lần đầu tiếp cận: phần hướng dẫn cấu trúc chương trình, cách biên dịch sang file .hex, và cách cấu hình hardware timer của ESP32.
  • Người thiết kế mạch hiển thị LED ngoài trời quy mô nhỏ: thông số kỹ thuật của LED Panel P10 và hướng dẫn tính toán nguồn cấp điện.

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

1. Tại sao đồ án dùng nguồn 5V cho LED Panel P10 nhưng cần thêm mạch hạ áp cho ESP32? LED Panel P10 hoạt động ở 5V DC với dòng tiêu thụ tối đa 2–3A/module. ESP32 DevKit V1 yêu cầu điện áp hoạt động trong khoảng 2,2–3,6V, thấp hơn mức 5V của nguồn cấp chính, nên cần mạch hạ áp riêng để cấp điện an toàn cho vi điều khiển.

2. Giá trị display_draw_time = 30 trong code có ý nghĩa gì và ảnh hưởng thế nào đến hoạt động? Giá trị này xác định thời gian bật (on-time) của mỗi hàng LED trong một chu kỳ quét, tính bằng đơn vị µs. Theo tài liệu trong đồ án, khoảng giá trị 30–70 thường hoạt động ổn định; nếu đặt quá lớn, ESP32 có thể bị crash do interrupt handler chiếm dụng quá nhiều thời gian xử lý.

3. Giao diện Hub75 truyền dữ liệu đến LED Panel P10 như thế nào? Hub75 sử dụng tập tín hiệu gồm: đường dữ liệu D0–D3 (pixel data theo từng màu RGB), tín hiệu đồng hồ CLK để đồng bộ, tín hiệu chọn hàng A/B/C/D (tương ứng với GPIO 19, 23, 18 trong code), tín hiệu chốt LAT (GPIO 5) để ghi dữ liệu vào IC driver, và tín hiệu OE (GPIO 4) để bật/tắt LED theo chu kỳ làm tươi.

4. Hàm run_Scrolling_Text() trong Module 03 hoạt động theo cơ chế nào? Hàm nhận bốn tham số: vị trí Y trên màn hình, tốc độ cuộn, chuỗi ký tự, và màu sắc. Trước tiên hàm getTextWidth() tính chiều rộng chuỗi theo pixel. Sau đó vòng lặp dịch chuyển vị trí X từ matrix_width (32) về phía âm đến -(matrix_width + text_Length_In_Pixel), tạo hiệu ứng chữ chạy từ phải sang trái qua toàn bộ màn hình.

5. LED Panel P10 loại nào được sử dụng trong đồ án và có hỗ trợ hiển thị full màu không? Đồ án sử dụng LED Panel P10 với khả năng hiển thị màu sắc qua giao thức RGB (các giá trị màu được định nghĩa bằng hàm color565 với ba tham số R, G, B từ 0–255), tương ứng với loại LED ma trận P10 có khả năng kết hợp ba kênh màu. Văn bản đề cập LED ma trận P10 full màu có thể hiển thị tới 16.216 màu, nhưng không nêu rõ số màu cụ thể của module được thi công trong đồ án này.


Kết luận

Đồ án "Mạch LED Đồng Hồ" của nhóm sinh viên lớp 21DDTA1, Trường Đại học Công nghệ TP. Hồ Chí Minh, trình bày toàn bộ quy trình thiết kế và thi công một hệ thống hiển thị thời gian dùng LED Panel P10 điều khiển bằng ESP32 và Blynk, bao gồm nghiên cứu lý thuyết linh kiện, mô phỏng trên Proteus, lập trình Arduino IDE và thi công phần cứng thực tế. Hệ thống được tổ chức theo kiến trúc bốn khối rõ ràng (nguồn, vi điều khiển, hiển thị, điều khiển) với ba module phần mềm được giải thích chi tiết kèm mã nguồn. Đồ án có giá trị thực hành cho sinh viên ngành Kỹ thuật Điện tử muốn tiếp cận lập trình ESP32 và điều khiển LED matrix P10 qua giao tiếp Hub75 và nền tảng IoT Blynk.