Giới thiệu dự án

Thị trường thiết bị hiển thị LED toàn cầu đang chứng kiến sự tăng trưởng vượt bậc. Theo báo cáo từ Grand View Research, quy mô thị trường module LED đạt khoảng 5,49 tỷ USD và duy trì tốc độ tăng trưởng kép hàng năm (CAGR) 13,2%. Tuy nhiên, các giải pháp hiển thị dạng phẳng truyền thống (như bảng ma trận LED P3, P5, P10 hoặc màn hình hộp cố định) đang bộc lộ nhiều điểm nghẽn: góc nhìn bị giới hạn (dưới 160 độ), chiếm nhiều diện tích không gian, chi phí lắp đặt trên diện tích lớn cao và thiếu sự đột phá về mặt trải nghiệm thị giác đa chiều.

Đồ án "Xây dựng mô hình cầu LED hiển thị hình ảnh, video đa sắc" giải quyết triệt để bài toán này bằng cách ứng dụng hiện tượng lưu ảnh trên võng mạc (Persistence of Vision - POV). Bằng việc quay các thanh LED RGB dạng vòng tròn với vận tốc góc cao kết hợp thuật toán đồng bộ thời gian quét cực kỳ chính xác, hệ thống tái tạo không gian hiển thị 3D hình cầu 360 độ từ mọi hướng quan sát chỉ với một lượng bóng LED tối thiểu.

                  +-----------------------------------+
                  |   Mobile App (React Native/Expo)  |
                  +-----------------+-----------------+
                                    | HTTP / JSON (Wi-Fi)
                                    v
+-----------------------------------------------------------------------+
| Cầu LED (Phần quay)                                                   |
|  +-------------------------+          SPI Bus   +------------------+  |
|  |  Raspberry Pi Zero W    | -----------------> | IC TLC5947 (xN)  |  |
|  |  (Xử lý ảnh/video, web) |                    | (24-ch, 12b PWM) |  |
|  +------------+------------+                    +--------+---------+  |
|               ^                                          |            |
|               | GPIO Interrupt                           v            |
|       +-------+--------+                        +------------------+  |
|       | Optical Sensor |                        | Thanh LED RGB    |  |
|       | (Encoder mốc)  |                        | (Cánh cầu LED)   |  |
|       +----------------+                        +------------------+  |
+-----------------------------------------------------------------------+
                                    ^ Nguồn qua Cổ góp (Slip Ring)
+-----------------------------------+-----------------------------------+
| Phần khung tĩnh                                                       |
|  [Nguồn 12V 10A] -> [Hạ áp XL4015/MP1584EN] -> [Arduino Nano / PWM]   |
|                                            -> [Động cơ GA25 1900RPM] |
+-----------------------------------------------------------------------+

Mục tiêu kỹ thuật cốt lõi của đề tài

  1. Nghiên cứu và hiện thực hóa nguyên lý POV: Thiết kế cấu trúc quay cơ khí cân bằng động, đạt tốc độ quét quang học cho mắt người nhận diện liên tục mà không bị giật/nhấp nháy ($\ge 10$ vòng/giây).
  2. Xây dựng hệ thống điều khiển nhúng thời gian thực: Sử dụng máy tính nhúng Raspberry Pi Zero W làm trung tâm xử lý dữ liệu ma trận điểm, tính toán thời gian trễ theo từng góc quay $\Delta\theta$.
  3. Phát triển thuật toán giải mã đa phương tiện: Chuyển đổi và ánh xạ dữ liệu chuỗi ký tự, hình ảnh tĩnh (BMP/PNG/JPEG) và chuỗi khung hình video sang hệ tọa độ cầu phân giải tương thích với cánh LED.
  4. Tích hợp giao thức điều khiển không dây: Xây dựng ứng dụng di động đa nền tảng (React Native) giao tiếp với vi xử lý qua Wi-Fi (giao thức HTTP RESTful API / JSON).
  5. Thiết kế phần cứng công nghiệp & mạch in (PCB): Thiết kế khung nhôm định hình $20 \times 20\text{ mm}$, mạch điều khiển trung tâm, cánh LED quét bán nguyệt và cơ cấu cấp nguồn liên tục qua cổ góp điện (Slip Ring).

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

Phân tích hiện trạng và giải pháp cạnh tranh

Tiêu chí kỹ thuật Màn hình LED ma trận phẳng (P3/P5) Quạt LED 2D Hologram (POV Fan) Cầu LED POV 360 độ (Đề tài)
Góc nhìn (Viewing Angle) Giới hạn $120^\circ - 160^\circ$, 1 mặt phẳng Góc phẳng $180^\circ$, dạng đĩa 2D Toàn hướng $360^\circ \times 360^\circ$ (Khối cầu)
Số lượng bóng LED Cực lớn ($> 40.000$ bóng/m²) Trung bình ($256 - 1024$ bóng) Tối ưu ($< 100$ bóng trên 1 cánh cung)
Tiêu thụ điện năng Rất cao ($300\text{W} - 1500\text{W}$) Trung bình ($30\text{W} - 65\text{W}$) Tiết kiệm ($< 35\text{W}$)
Độ phức tạp cơ khí Thấp (Khung cố định) Trung bình (Quay trục đơn) Cao (Cần cân bằng động & cổ góp điện)
Hiệu ứng thị giác 2D truyền thống 2D lơ lửng không gian 3D hình cầu lập thể hoàn chỉnh

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc): Đồng bộ quét LED theo góc quay thời gian thực bằng cảm biến quang; hiển thị văn bản và ảnh tĩnh đa sắc không bị biến dạng góc; ứng dụng điều khiển qua smartphone.
  • Should have (Nên có): Khả năng phát video đa sắc với tốc độ $\ge 5\text{ FPS}$; điều chỉnh độ sáng 12-bit PWM qua IC chuyên dụng; khung kim loại chống rung lắc ở tốc độ $> 600\text{ RPM}$.
  • Could have (Có thể có): Màn hình LCD 16x4 $I^2C$ hiển thị trạng thái IP, tốc độ quay và duty cycle động cơ tại chân đế.
  • Won't have (Chưa hỗ trợ): Khả năng dựng hình 3D khối đặc volumetric bên trong lõi cầu (giới hạn ở bề mặt cầu).

Kiến trúc phần cứng và công nghệ sử dụng

  • Bộ xử lý trung tâm (Phần quay): Raspberry Pi Zero W (SoC Broadcom BCM2835 ARM11 @ 1GHz, 512MB RAM, Wi-Fi 802.11n, Raspbian OS).
  • Bộ điều khiển công suất & động cơ (Phần tĩnh): Arduino Nano v3.0 (ATmega328P @ 16MHz, 5V Logic).
  • Driver điều khiển LED: Adafruit TLC5947 (24 kênh dòng không đổi, điều chế 12-bit PWM tương đương 4096 mức độ sáng, xung nhịp SPI lên đến 30MHz).
  • Động cơ chấp hành: Động cơ giảm tốc kim loại GA25-1900 (12V DC, tốc độ không tải 1900 RPM).
  • Mạch công suất & nguồn: Module MOSFET PWM 15A 400W; Mạch hạ áp XL4015 (5A) và MP1584EN (3A); Bộ nguồn xung tổ ong 12V 10A (120W).
  • Cảm biến: Optical Slot Sensor (Encoder hồng ngoại khe 5mm phát hiện điểm mốc $0^\circ$), Rotary Encoder điều chỉnh tốc độ tại chỗ.
  • Phần mềm & Thư viện: Python 3.x, OpenCV 4.x (imgproc), React Native 0.6x, Expo SDK, Dassault Systèmes SolidWorks 2020.

Implementation và kết quả

Quy trình giải mã và xử lý thuật toán POV

Hệ thống tính toán thời gian quét dựa trên tín hiệu ngắt nhận được từ cảm biến quang mỗi khi cánh LED đi qua điểm mốc zero.

       1 Vòng quay = T_rot (us)
 |<--------------------------------->|
 +---------+---------+-----+---------+
 | Slice 0 | Slice 1 | ... | Slice N |  (N = Số lát cắt góc)
 +---------+---------+-----+---------+
 |<-T_step>|
 T_step = T_rot / N

Thuật toán xác định thời gian hiển thị cho mỗi phân đoạn góc $\Delta\theta$:

$$\Delta t = \frac{T_{\text{revolution}}}{N_{\text{slices}}}$$

Trong đó $T_{\text{revolution}}$ là chu kỳ quay một vòng (tính bằng microsecond) và $N_{\text{slices}}$ là số lượng góc hiển thị trên bề mặt cầu (thường chia từ 60 đến 120 góc).

import time
import spidev
import cv2
import numpy as np

class POVDisplayController:
    def __init__(self, num_leds=24, slices=90):
        self.num_leds = num_leds
        self.slices = slices
        self.spi = spidev.SpiDev()
        self.spi.open(0, 0)
        self.spi.max_speed_hz = 15000000  # 15 MHz clock for TLC5947
        self.frame_buffer = np.zeros((self.slices, self.num_leds, 3), dtype=np.uint16)
        self.last_sync_time = time.time()
        self.time_per_slice = 0.001  # Default 1ms

    def on_index_trigger(self):
        """Ngắt cảm biến hồng ngoại xác định chu kỳ 1 vòng"""
        current_time = time.time()
        revolution_period = current_time - self.last_sync_time
        self.last_sync_time = current_time
        # Tính toán thời gian hiển thị cho mỗi lát cắt góc
        self.time_per_slice = revolution_period / self.slices

    def encode_image(self, image_path):
        """Mã hóa hình ảnh phẳng sang hệ tọa độ cầu bán nguyệt"""
        src = cv2.imread(image_path)
        resized = cv2.resize(src, (self.slices, self.num_leds))
        # Chuẩn hóa giá trị 8-bit lên 12-bit PWM (0 - 4095) cho TLC5947
        scaled = (resized.astype(np.float32) * (4095.0 / 255.0)).astype(np.uint16)
        self.frame_buffer = scaled

    def render_loop(self):
        """Vòng lặp quét LED đồng bộ thời gian thực"""
        while True:
            for angle_idx in range(self.slices):
                slice_data = self.frame_buffer[angle_idx]
                raw_bytes = self.pack_tlc5947_12bit(slice_data)
                self.spi.writebytes2(raw_bytes)
                time.sleep(self.time_per_slice)

    @staticmethod
    def pack_tlc5947_12bit(channels_data):
        """Đóng gói dữ liệu 12-bit PWM cho thanh ghi dịch TLC5947"""
        packed = bytearray()
        # Đóng gói 2 kênh 12-bit vào 3 bytes chuẩn SPI
        for i in range(0, len(channels_data), 2):
            ch1 = channels_data[i][0] & 0x0FFF
            ch2 = channels_data[i+1][0] & 0x0FFF if (i+1) < len(channels_data) else 0
            packed.append((ch1 >> 4) & 0xFF)
            packed.append(((ch1 & 0x0F) << 4) | ((ch2 >> 8) & 0x0F))
            packed.append(ch2 & 0xFF)
        return packed

Cấu trúc dữ liệu điều khiển qua giao thức JSON

Ứng dụng React Native gửi yêu cầu điều khiển tới RESTful server chạy trên Raspberry Pi Zero W theo lược đồ:

{
  "controller": {
    "mode": "video",
    "type": "loop",
    "brightness": 2048,
    "source": "/media/storage/globe_animation.mp4",
    "color_tint": {
      "r": 255,
      "g": 128,
      "b": 0
    },
    "rotation_offset": 45,
    "fps_target": 5
  }
}

Kết quả thực nghiệm và hiệu năng hệ thống

  1. Đặc tính cơ khí & Tốc độ quay:
    • Khung sườn kim loại kích thước $290 \times 290 \times 360\text{ mm}$ triệt tiêu rung chấn hiệu quả nhờ cấu trúc 12 thanh nhôm định hình kết hợp gối kê vuông $90^\circ$.
    • Tốc độ quay ổn định đạt 11 vòng/giây (khoảng 660 RPM) dưới sự điều chế xung PWM từ module MOSFET 15A.
Duty Cycle PWM (%) Tốc độ động cơ (RPM) Tốc độ quét (Vòng/giây) Trạng thái hiển thị POV
20% 150 2.5 Nhấp nháy mạnh, không nhận diện được ảnh
40% 320 5.3 Xuất hiện vệt sáng, hình ảnh rời rạc
60% 480 8.0 Lưu ảnh bắt đầu hình thành, chữ hơi rung
80% 660 11.0 Ổn định hoàn hảo, màu sắc rõ nét, không rung
100% 820 13.6 Bề mặt hiển thị mịn, biên độ ồn tăng nhẹ
  1. Khả năng hiển thị:
    • Chế độ văn bản (Text scrolling) & Hình ảnh tĩnh (Static Graphic): Tái hiện rõ ràng với 90 điểm góc ($\Delta\theta = 4^\circ$), cập nhật mảng dữ liệu 1 lần vào bộ nhớ đệm RAM.
    • Chế độ Video: Giải mã chuỗi khung hình qua OpenCV đạt tốc độ phát thực tế 5 FPS mượt mà trên nền tảng vi xử lý đơn nhân của Raspberry Pi Zero W.

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

  • Cơ chế đồng bộ góc thích ứng (Dynamic Adaptive Timing): Tự động đo đạc chu kỳ quay của vòng trước để cập nhật thời gian trễ cho từng góc hiển thị của vòng tiếp theo, giúp hình ảnh cố định không bị trôi (drift) ngay cả khi động cơ có sự thay đổi tốc độ do sụt áp hay tải cơ khí.
  • Hệ thống cấp nguồn trục quay thông minh: Ứng dụng cụm cổ góp điện (Slip Ring) tích hợp trực tiếp vào trục chính kim loại, đảm bảo cấp nguồn liên tục 12V/5V cho Raspberry Pi và cánh LED mà không gặp hiện tượng xoắn đứt dây dẫn.
  • Kiến trúc điều khiển tách biệt: Arduino Nano đảm nhiệm tải PWM động cơ và an toàn phần cứng; Raspberry Pi Zero W tập trung toàn bộ tài nguyên cho giải mã hình ảnh/video và xử lý mạng Wi-Fi.
  • Tối ưu hóa phần cứng hiển thị: Sử dụng IC TLC5947 nối tiếp giảm thiểu số chân GPIO điều khiển từ Raspberry Pi từ hàng chục chân xuống chỉ còn chuẩn giao tiếp 3 dây SPI, mở rộng độ phân giải màu lên 12-bit (4096 mức độ sáng mỗi kênh).

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

Kịch bản ứng dụng

  • Quảng cáo tại điểm bán (POS/Retail Displays): Đặt tại trung tâm sảnh trung tâm thương mại, showroom ô tô, sân bay, ngân hàng nhằm tạo điểm nhấn nhận diện thương hiệu 360 độ từ mọi hướng đi lại.
  • Bảo tàng & Giáo dục trực quan: Trình chiếu mô phỏng bản đồ địa cầu, hải lưu, các hành tinh trong hệ mặt trời với hiệu ứng quả cầu 3D sinh động.
  • Sự kiện & Triển lãm công nghệ: Cho thuê trình diễn logo động, đồng hồ không gian, biểu đồ tương tác thời gian thực.

Hướng dẫn triển khai kỹ thuật

  1. Yêu cầu hệ thống:
    • Nguồn cấp: $220\text{V AC} \rightarrow$ Nguồn tổ ong 12V 10A DC.
    • Mạng: Wi-Fi Access Point băng tần 2.4GHz để kết nối app với thiết bị.
  2. Khởi động:
    • Cấp nguồn cho mạch động cơ $\rightarrow$ Điều chỉnh núm xoay Encoder để đưa tốc độ vòng quay đạt ngưỡng ổn định $\ge 600\text{ RPM}$ (hiển thị trên LCD 16x4).
    • Raspberry Pi khởi động hệ thống nhúng trong 25 giây, tự động chạy tiến trình pov_server.service.
    • Mở app di động React Native, quét địa chỉ IP của cầu LED và chọn tệp media cần hiển thị.

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

Hạn chế hiện tại

  • Tốc độ khung hình video: Do năng lực tính toán của CPU ARM đơn nhân 1GHz trên Raspberry Pi Zero W bị chia sẻ cho việc quét SPI, tốc độ hiển thị video dừng lại ở mức 5 FPS.
  • Độ phân giải dọc: Bị giới hạn bởi số lượng bóng LED gắn trên một cánh cung PCB (24 bóng/kênh màu).
  • Tiếng ồn cơ khí: Ở tốc độ cao ($> 800\text{ RPM}$), luồng gió do cánh LED tạo ra phát sinh tiếng rít khí động học.

Hướng phát triển tiếp theo

  • Nâng cấp phần cứng xử lý: Chuyển đổi vi xử lý sang Raspberry Pi 4 hoặc sử dụng chip FPGA/STM32F4/H7 kết hợp bộ nhớ DMA để đẩy tốc độ video lên chuẩn 30 - 60 FPS.
  • Cải tiến cơ khí khí động học: Thiết kế vỏ bảo vệ dạng cầu mica/acrylic trong suốt chống bụi, giảm lực cản không khí và triệt tiêu tiếng ồn.
  • Gia tăng mật độ điểm ảnh: Thiết kế cánh LED đôi đối xứng 2 bên trục với bóng LED chuẩn kích thước 0805 hoặc 0603 để nâng độ phân giải lên gấp 4 lần.

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

  • Sinh viên ngành Kỹ thuật Máy tính & Điện tử - Viễn thông: Nắm vững phương pháp thiết kế hệ thống nhúng thời gian thực, lập trình giao tiếp ngoại vi SPI/$I^2C$, và ứng dụng hiện tượng vật lý quang học vào kỹ thuật số.
  • Kỹ sư phát triển IoT / Lập trình viên nhúng: Tham khảo mô hình kiến trúc kết hợp vi điều khiển (Arduino) và máy tính nhúng (Raspberry Pi) chạy Linux, cùng mô hình đa luồng kết hợp RESTful API.
  • Doanh nghiệp & Đơn vị quảng cáo: Sở hữu giải pháp hiển thị độc quyền với chi phí sản xuất phần cứng thấp hơn 60% so với việc nhập khẩu màn hình LED cầu ma trận khối chuyên dụng.
  • Nhà nghiên cứu: Cung cấp bộ thông số thực nghiệm về cân bằng động học, tần số quét quang học và giải thuật mã hóa tọa độ cực (Polar Coordinate Mapping).

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

1. Cầu LED có tiêu thụ nhiều điện năng khi quay liên tục không?

Hệ thống tiêu thụ trung bình chỉ từ 20W đến 35W ở tốc độ tối đa 660 RPM, thấp hơn nhiều so với màn hình LED ma trận cùng kích thước (thường tiêu tốn từ 150W đến 300W).

2. Làm thế nào để hình ảnh không bị nhòe khi vận tốc quay của động cơ bị dao động?

Hệ thống sử dụng cảm biến ngắt hồng ngoại đọc xung mốc tại mỗi vòng quay. Thời gian quét của từng góc ($\Delta t$) được tính toán lại liên tục theo thời gian thực ($T_{\text{revolution}} / N$), do đó hình ảnh luôn đứng yên cố định tại vị trí góc đã định.

3. Cổ góp điện (Slip Ring) có bị mòn hoặc nhiễu tín hiệu theo thời gian không?

Đề tài sử dụng cổ góp chuyên dụng cho truyền tải điện áp 12V DC. Để chống nhiễu tuyệt đối, toàn bộ dữ liệu điều khiển đều được truyền không dây qua Wi-Fi tới Raspberry Pi (nằm trực tiếp trên trục quay), cổ góp chỉ đóng vai trò duy nhất là truyền dẫn nguồn điện một chiều.

4. Thiết bị có thể hiển thị được định dạng video nào?

Thông qua thư viện OpenCV trên Raspberry Pi, hệ thống hỗ trợ giải mã hầu hết các định dạng video thông dụng như .mp4, .avi, .mkv và định dạng ảnh động .gif.

5. Chi phí gia công một mô hình cầu LED hoàn chỉnh là bao nhiêu?

Tổng chi phí linh kiện phần cứng (khung nhôm, Raspberry Pi, Arduino, động cơ, LED PCB, nguồn xung) ước tính dao động trong khoảng 2.500.000 - 3.500.000 VNĐ, hoàn toàn tối ưu cho việc sản xuất thương mại và triển lãm.


Kết luận

Đồ án tốt nghiệp "Xây dựng mô hình cầu LED hiển thị hình ảnh, video đa sắc" đã nghiên cứu, chế tạo và vận hành thành công một thiết bị hiển thị POV 3D 360 độ hoàn chỉnh. Sự kết hợp giữa kỹ thuật cơ khí chính xác, thiết kế mạch nhúng nhiều tầng và thuật toán quét thích ứng theo thời gian thực đã chứng minh tính khả thi vượt trội của công nghệ POV trong ngành quảng cáo hiện đại. Đề tài mở ra hướng tiếp cận mới mẻ, hiệu quả và giàu tiềm năng ứng dụng thực tế trong thời đại số hóa trải nghiệm người dùng.