Giới thiệu dự án

Sự phát triển mạnh mẽ của khoa học kỹ thuật và tự động hóa trong kỷ nguyên công nghiệp 4.0 đã đưa các hệ thống giám sát an ninh trở thành thành phần cốt lõi trong cơ sở hạ tầng của doanh nghiệp, trường học và nhà máy. Lịch sử phát triển của hệ thống camera giám sát đã trải qua ba thế hệ công nghệ chính:

  1. Thế hệ thứ nhất (Analog CCTV): Sử dụng cáp đồng trục truyền tín hiệu tương tự trực tiếp về đầu ghi băng từ (VCR) hoặc màn hình chuyên dụng; độ linh hoạt kém, suy hao tín hiệu lớn khi truyền xa (>300m cần bộ khuếch đại) và không có khả năng phân tích tự động.
  2. Thế hệ thứ hai (Hybrid Digital CCTV): Tích hợp đầu ghi kỹ thuật số (DVR), cho phép số hóa dòng video tại trung tâm, phân tích thời gian thực và lưu trữ trên ổ cứng, tuy nhiên vẫn phụ thuộc lớn vào hệ thống cáp vật lý phức tạp.
  3. Thế hệ thứ ba (IP Network Surveillance): Số hóa và nén trực tiếp dữ liệu hình ảnh ngay tại thiết bị đầu cuối, truyền tải qua hạ tầng mạng IP (Ethernet/Wireless LAN) dựa trên bộ giao thức TCP/IP, cho phép phân phối và quản lý tập trung từ xa không giới hạn địa lý.
timeline
    title Tiến trình phát triển công nghệ Camera Giám sát
    Thế hệ 1 (Analog CCTV) : Tín hiệu Analog : Cáp đồng trục 75Ω : Lưu trữ băng từ (VCR)
    Thế hệ 2 (Digital/DVR) : Số hóa tại trung tâm : Đầu ghi DVR : Phân tích thời gian thực
    Thế hệ 3 (IP Surveillance) : Số hóa tại camera : Nén & Stream qua LAN/IP : Quản lý đa điểm & PTZ

Vấn đề thực tiễn (Problem Statement)

Các giải pháp camera IP và PTZ (Pan-Tilt-Zoom) thương mại trên thị trường thời điểm thực hiện đề tài thường có chi phí đắt đỏ ($500 - $5,000 cho các hệ thống chuyên dụng), sử dụng giao thức đóng và khó tùy biến linh hoạt theo yêu cầu nghiên cứu hoặc triển khai quy mô vừa và nhỏ. Ngược lại, các webcam cố định giá rẻ lại thiếu tính năng điều khiển hướng nhìn, khiến góc quan sát bị giới hạn nghiêm trọng (thường chỉ 60°), tạo ra các điểm mù an ninh.

Mục tiêu đề tài

Đề tài "Xây dựng hệ thống Camera giám sát" được thực hiện bởi nhóm sinh viên ngành Công nghệ Kỹ thuật Máy tính - Trường Đại học Sư phạm Kỹ thuật TP.HCM nhằm giải quyết các thách thức trên với 5 mục tiêu cụ thể:

  1. Thiết kế và chế tạo hoàn chỉnh mô hình phần cứng gồm 02 trạm Camera IP độc lập dựa trên nền tảng máy tính nhúng đơn bo (Single-Board Computer).
  2. Xây dựng cơ cấu xoay cơ khí điều khiển góc quét linh hoạt từ $0^\circ$ đến $180^\circ$ sử dụng động cơ servo và mạch triệt tiêu rung nhiễu chuyên dụng.
  3. Phát triển phần mềm phía máy chủ (Central Server) có khả năng kết nối đồng thời 02 Camera qua môi trường mạng LAN/IP, hiển thị luồng dữ liệu thời gian thực.
  4. Tích hợp chức năng chụp ảnh tĩnh (Snapshot) và ghi hình video (Video Recording) trực tiếp từ giao diện điều khiển trung tâm.
  5. Triển khai giao thức truyền thông socket hướng kết nối (TCP Socket) bảo đảm toàn vẹn gói tin và đồng bộ hóa điều khiển đa luồng.

Phạm vi và kết quả kỳ vọng

  • Phạm vi nghiên cứu: Thiết kế trạm camera nhúng sử dụng kit vi xử lý Broadcom SoC BCM2835 (Raspberry Pi), động cơ servo SG90, webcam CMOS chuẩn USB 2.0; giao tiếp với PC Master qua mạng cục bộ LAN Star Topology.
  • Chỉ số kỳ vọng: Tốc độ khung hình đạt 25–30 FPS ở độ phân giải $320 \times 240$ và 15–20 FPS ở $640 \times 480$; độ trễ truyền dữ liệu mạng LAN $<200\text{ms}$; góc quay đáp ứng chính xác sai số $<2^\circ$.

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

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

Tiêu chí kỹ thuật Hệ thống Analog CCTV truyền thống Camera IP thương mại cao cấp Hệ thống giám sát nhúng (Đề tài)
Kiến trúc mạng Điểm - Điểm (Point-to-Point qua cáp đồng trục) Mạng IP (Ethernet/Wi-Fi) Mạng IP Client-Server phân tán
Góc quét (FOV) Cố định ($60^\circ - 75^\circ$) PTZ $360^\circ$ (Chi phí rất cao) Điều khiển Pan $0^\circ - 180^\circ$ linh hoạt
Khả năng tùy biến Hầu như không thể can thiệp Hạn chế (Firmware đóng của hãng) Mã nguồn mở 100% (Python/Linux)
Mức độ tiêu thụ điện Trung bình ($12\text{V} - 1\text{A}$ mỗi camera) Cao ($12\text{V} - 2\text{A}$, PoE $15.4\text{W}$) Rất thấp ($5\text{V} - 0.7\text{A}$ qua MicroUSB)
Chi phí triển khai/trạm Trung bình ($80 - $150) Đắt đỏ ($200 - $600) Tối ưu (~$45 - $55)

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

  • Must Have (Bắt buộc): Truyền nhận luồng video qua giao thức TCP; điều khiển động cơ quay $0^\circ - 180^\circ$; chụp ảnh và lưu trữ video trên PC trung tâm; kết nối tối thiểu 2 trạm camera độc lập.
  • Should Have (Nên có): Cơ chế chống nhiễu rung lắc camera khi không điều khiển servo; giao diện đồ họa trực quan hiển thị đa kênh; phục hồi kết nối tự động khi mất tín hiệu.
  • Could Have (Có thể mở rộng): Nhận dạng chuyển động bằng OpenCV; điều khiển 2 trục Pan-Tilt; tích hợp cảm biến nhiệt độ/khí gas.
  • Won't Have (Chưa thực hiện trong phạm vi đồ án): Truyền dữ liệu qua mạng diện rộng WAN không cần cấu hình NAT; nén chuẩn H.264 phần cứng thời gian thực.

Thiết kế hệ thống

Kiến trúc tổng thể của hệ thống hoạt động theo mô hình Khách - Chủ (Client-Server), trong đó mỗi trạm Camera (Kit Raspberry Pi + Ngoại vi) đóng vai trò là một Server cục bộ cung cấp hai dịch vụ (Video Stream Server & Pan Control Server), còn máy tính trung tâm (PC) đóng vai trò Client/Master điều phối toàn bộ luồng dữ liệu.

graph TD
    subgraph "Trạm Giám Sát 1 (Node 1 - IP: 192.168.1.101)"
        Cam1[Webcam CMOS PK635E] -->|USB 2.0| RPi1[Raspberry Pi B+ SoC BCM2835]
        RPi1 -->|GPIO PWM Pin 18| HBridge1[Module Mạch Cầu H]
        HBridge1 -->|Isolated 5V Pulse| Servo1[Servo SG90 - Trục Pan]
        RPi1 -->|Port 8000: Video Stream<br/>Port 8001: Servo Control| NetInterface1[NIC 10/100 Ethernet]
    end

    subgraph "Trạm Giám Sát 2 (Node 2 - IP: 192.168.1.102)"
        Cam2[Webcam CMOS PK635E] -->|USB 2.0| RPi2[Raspberry Pi B+ SoC BCM2835]
        RPi2 -->|GPIO PWM Pin 18| HBridge2[Module Mạch Cầu H]
        HBridge2 -->|Isolated 5V Pulse| Servo2[Servo SG90 - Trục Pan]
        RPi2 -->|Port 8000: Video Stream<br/>Port 8001: Servo Control| NetInterface2[NIC 10/100 Ethernet]
    end

    subgraph "Hạ Tầng Mạng (Star Topology)"
        Switch[Network Switch / Router LAN]
    end

    subgraph "Máy Tính Quản Trị Trung Tâm (Master Client - IP: 192.168.1.10)"
        UI[Giao Diện Điều Khiển Python GUI]
        Decoder[Bộ Giải Mã Frame & Render]
        Storage[(Lưu Trữ Ảnh / Video File System)]
        UI --> Decoder
        UI --> Storage
    end

    NetInterface1 <-->|TCP/IP Socket| Switch
    NetInterface2 <-->|TCP/IP Socket| Switch
    Switch <-->|TCP/IP Socket| UI

Technology Stack và Thông số kỹ thuật chi tiết

  1. Bộ xử lý trung tâm (SBC):
    • Raspberry Pi Model B+: Broadcom BCM2835 SoC (Single Core ARM1176JZF-S 700MHz, GPU Dual Core VideoCore IV Multimedia Co-Processor, 512MB SDRAM, 4 cổng USB 2.0, 40 chân GPIO mở rộng, Ethernet RJ45 10/100Mbps).
    • Hệ điều hành: Linux Raspbian OS (nhân Debian Linux tối ưu hóa cho ARM).
  2. Cảm biến hình ảnh:
    • A4-TECH PK635E: Cảm biến 1/6" CMOS, độ phân giải phần cứng $640 \times 480\text{ pixels}$, tốc độ $30\text{ FPS}$, góc quan sát $60^\circ$, kết nối USB 2.0.
  3. Cơ cấu truyền động và công suất:
    • Động cơ Servo SG90: Trọng lượng 9g, momen xoắn $1.8\text{ kg}\cdot\text{cm}$ ($4.8\text{V}$), tốc độ $0.1\text{s}/60^\circ$, góc quay cơ học $0^\circ - 180^\circ$.
    • Mạch điều khiển công suất: Mạch cầu H (H-Bridge) đảm nhận cách ly nguồn và cấp dòng độc lập cho servo, giải quyết triệt để giới hạn dòng tải $16\text{mA}$ của chân GPIO Raspberry Pi.
  4. Môi trường và ngôn ngữ phát triển:
    • Ngôn ngữ: Python 2.7 / Python 3.x với các thư viện cốt lõi socket, threading, RPi.GPIO, pygame/Tkinter và các mô-đun xử lý chuỗi nhị phân ảnh.

Thiết kế giao thức truyền thông TCP Socket

Giao thức TCP (Transmission Control Protocol) được lựa chọn nhờ cơ chế bắt tay 3 bước (3-way handshake: SYN $\to$ SYN-ACK $\to$ ACK), tính năng kiểm tra lỗi (Checksum 16-bit), tự động đánh số thứ tự gói tin (Sequence Number) và truyền lại khi mất gói (Retransmission). Dữ liệu điều khiển và video được tách biệt qua 2 cổng riêng biệt:

  • Port 8000 (Video Data Channel): Luồng stream hình ảnh nhị phân được đóng gói theo định dạng [Length (4 bytes)][Raw JPEG Data].
  • Port 8001 (PTZ Control Channel): Gói tin điều khiển độ dài cố định dạng mã byte command: 0x01 (Quay trái $10^\circ$), 0x02 (Quay phải $10^\circ$), 0x03 (Chụp ảnh), 0x04 (Ghi video).

Phương pháp nghiên cứu và quản lý dự án (Methodology)

Đề tài áp dụng quy trình phát triển theo mô hình lặp kết hợp chữ V (Iterative V-Model), phân tách rõ ràng giữa thiết kế phần cứng, lập trình phần mềm nhúng và kiểm thử tích hợp hệ thống.

gantt
    title Tiến độ thực hiện dự án (18/03/2015 - 20/07/2015)
    dateFormat  YYYY-MM-DD
    section Khảo sát & Thiết kế
    Nghiên cứu tài liệu & khảo sát phần cứng    :done, des1, 2015-03-18, 2015-04-10
    Thiết kế sơ đồ khối & chọn linh kiện       :done, des2, 2015-04-11, 2015-04-30
    section Phần cứng & Driver
    Lắp ráp khung cơ khí Pan & Mạch cầu H      :done, hw1, 2015-05-01, 2015-05-20
    Lập trình điều khiển PWM Servo trên Pi     :done, hw2, 2015-05-21, 2015-06-05
    section Phần mềm & Hệ thống
    Xây dựng Server stream TCP trên Pi         :done, sw1, 2015-06-01, 2015-06-25
    Phát triển Client Master UI trên PC        :done, sw2, 2015-06-15, 2015-07-05
    Kiểm thử tích hợp & Tối ưu hóa             :done, test1, 2015-07-06, 2015-07-20

Đánh giá rủi ro kỹ thuật và giải pháp giảm thiểu

  1. Rủi ro quá tải dòng trên chân GPIO Raspberry Pi:
    • Hiện tượng: Động cơ servo SG90 tiêu thụ dòng tức thời lên tới $500\text{mA}$ khi khởi động, vượt quá dòng cực đại cho phép của toàn bộ chân GPIO Raspberry Pi ($50\text{mA}$ tổng, tối đa $16\text{mA}$/pin), gây sụt áp và treo chip BCM2835.
    • Giải pháp: Thiết kế mạch công suất trung gian sử dụng mạch cầu H (H-Bridge) dùng nguồn $5\text{V}$ riêng biệt, chân GPIO chỉ phát tín hiệu xung logic điều khiển.
  2. Rủi ro nhiễu rung lắc camera do tín hiệu PWM liên tục:
    • Hiện tượng: Xung PWM cấp liên tục 50Hz khi servo ở trạng thái nghỉ sinh ra dao động điều hòa vi sai quanh điểm đặt vôn-kế (Potentiometer hunt), làm camera bị rung.
    • Giải pháp: Triển khai thuật toán "Power-gating & Duty Release" – chỉ bật xung và cấp nguồn qua mạch cầu H trong $300\text{ms}$ khi thực thi lệnh quay, sau đó ngắt nguồn và hạ chân PWM về logic 0.
  3. Rủi ro nghẽn luồng dữ liệu (Socket Blocking) trên Client:
    • Hiện tượng: Vòng lặp nhận dữ liệu video làm đóng băng giao diện người dùng (UI Freeze) và cản trở lệnh gửi điều khiển servo.
    • Giải pháp: Tách tác vụ nhận luồng video và xử lý giao diện sang các luồng thực thi song song (Multithreading/Interrupt-driven routines).

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

1. Thuật toán điều biến độ rộng xung (PWM) điều khiển góc quay Servo

Động cơ servo SG90 được điều khiển bằng xung số tần số chuẩn $50\text{Hz}$ (chu kỳ $T = 20\text{ms}$). Góc quay trục ra $\theta \in [0^\circ, 180^\circ]$ tương ứng tuyến tính với độ rộng xung $t_{\text{pulse}} \in [1.0\text{ms}, 2.0\text{ms}]$. Hệ số chu kỳ nhiệm vụ ($D - \text{Duty Cycle}$) được tính toán theo công thức:

$$D(%) = \left( \frac{t_{\text{pulse}}}{T} \right) \times 100 = \left( \frac{1.0 + \frac{\theta}{180.0} \times (2.0 - 1.0)}{20.0} \right) \times 100 = 5.0 + \left( \frac{\theta}{180} \right) \times 5.0$$

Mã nguồn điều khiển servo trên Raspberry Pi (Server Node):

import RPi.GPIO as GPIO
import socket
import time

SERVO_PIN = 18
POWER_ENABLE_PIN = 23  # Điều khiển cấp nguồn qua mạch cầu H

GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
GPIO.setup(POWER_ENABLE_PIN, GPIO.OUT)

# Khởi tạo PWM tần số 50Hz (Chu kỳ 20ms)
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)

def rotate_servo(angle):
    if 0 <= angle <= 180:
        # Bật nguồn servo qua mạch cầu H
        GPIO.output(POWER_ENABLE_PIN, GPIO.HIGH)
        duty_cycle = 2.5 + (float(angle) / 18.0)  # Chuẩn hóa dải duty cycle
        pwm.ChangeDutyCycle(duty_cycle)
        time.sleep(0.3)  # Chờ cơ cấu cơ khí ổn định vị trí (0.1s/60 deg)
        # Ngắt xung và ngắt nguồn để triệt tiêu hiện tượng rung lắc
        pwm.ChangeDutyCycle(0)
        GPIO.output(POWER_ENABLE_PIN, GPIO.LOW)

def start_control_server(port=8001):
    server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_sock.bind(('0.0.0.0', port))
    server_sock.listen(1)
    print("[SERVER] Control socket listening on port {}".format(port))
    
    current_angle = 90
    rotate_servo(current_angle)
    
    while True:
        client_conn, addr = server_sock.accept()
        data = client_conn.recv(1024).decode('utf-8')
        if data == "LEFT" and current_angle > 0:
            current_angle -= 15
            rotate_servo(current_angle)
        elif data == "RIGHT" and current_angle < 180:
            current_angle += 15
            rotate_servo(current_angle)
        client_conn.close()

2. Xử lý thu nhận và truyền chuỗi dữ liệu ảnh qua TCP Socket

Tại mỗi trạm Raspberry Pi, hình ảnh từ webcam USB được đọc liên tục, mã hóa nhị phân và gửi qua socket hướng kết nối đến máy chủ.

Mã nguồn truyền luồng video từ Raspberry Pi:

import socket
import pygame
import pygame.camera
from pygame.locals import *

pygame.init()
pygame.camera.init()

# Cấu hình webcam độ phân giải 320x240 để tối ưu băng thông mạng LAN
cam = pygame.camera.Camera("/dev/video0", (320, 240))
cam.start()

video_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
video_sock.bind(('0.0.0.0', 8000))
video_sock.listen(1)
print("[SERVER] Video stream ready on port 8000...")

conn, addr = video_sock.accept()

try:
    while True:
        image_surface = cam.get_image()
        # Chuyển đổi surface hình ảnh sang chuỗi nhị phân (String/Bytes)
        image_data = pygame.image.tostring(image_surface, "RGB")
        # Gửi dữ liệu qua kết nối TCP đã thiết lập
        conn.sendall(image_data)
except Exception as e:
    print("[ERROR] Stream interrupted: ", str(e))
finally:
    cam.stop()
    conn.close()
    video_sock.close()

Mã nguồn thu nhận, giải mã và hiển thị đa kênh trên PC Master:

import socket
import pygame
import threading

pygame.init()
SCREEN_WIDTH, SCREEN_HEIGHT = 700, 350
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Hệ Thống Giám Sát Đa Kênh - HCMUTE")

# Kích thước frame chuẩn 320x240 RGB (320 * 240 * 3 = 230,400 bytes)
FRAME_SIZE = 230400 

def receive_stream(ip, port, x_pos, y_pos):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((ip, port))
    buffer = b""
    
    while True:
        while len(buffer) < FRAME_SIZE:
            packet = sock.recv(FRAME_SIZE - len(buffer))
            if not packet:
                break
            buffer += packet
            
        frame_data = buffer[:FRAME_SIZE]
        buffer = buffer[FRAME_SIZE:]
        
        # Tái tạo surface hình ảnh từ chuỗi byte
        img_surface = pygame.image.fromstring(frame_data, (320, 240), "RGB")
        screen.blit(img_surface, (x_pos, y_pos))
        pygame.display.update(pygame.Rect(x_pos, y_pos, 320, 240))

# Khởi tạo hai luồng nhận dữ liệu song song từ 2 Camera Node
t1 = threading.Thread(target=receive_stream, args=('192.168.1.101', 8000, 10, 50))
t2 = threading.Thread(target=receive_stream, args=('192.168.1.102', 8000, 360, 50))
t1.daemon = True
t2.daemon = True
t1.start()
t2.start()

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

Hệ thống được đưa vào kiểm thử thực nghiệm trên hạ tầng mạng LAN Ethernet $100\text{Mbps}$ và Wi-Fi chuẩn $802.11\text{g/n}$ trong môi trường phòng lab thực tế.

[Băng thông truyền tải]
┌─────────────────────────────────────────────────────────────┐
│ Độ phân giải 160x120 @ 30 FPS:   ~13.8 Mbps (LAN Uncompressed)│
│ Độ phân giải 320x240 @ 25 FPS:   ~46.0 Mbps (LAN Uncompressed)│
│ Độ phân giải 640x480 @ 15 FPS:   ~110.5 Mbps (Yêu cầu nén JPEG)│
└─────────────────────────────────────────────────────────────┘

[Độ trễ phản hồi góc quay Servo (Latency Benchmark)]
┌─────────────────────────────────────────────────────────────┐
│ Lệnh Socket PC -> Nhận tín hiệu trên Kit:     ~15ms          │
│ Thời gian đóng mạch công suất H-Bridge:       ~5ms           │
│ Thời gian quay cơ học SG90 (quãng 60°):       ~100ms         │
│ Tổng độ trễ từ lệnh bấm đến đổi góc xong:     ~120ms         │
└─────────────────────────────────────────────────────────────┘

Kết quả đo kiểm chi tiết

  1. Hiệu suất luồng truyền video:
    • Tại cấu hình $320 \times 240\text{ pixels}$, tốc độ truyền hình ảnh thực tế đạt $24 - 28\text{ FPS}$ ổn định, không xuất hiện hiện tượng rách hình (tearing) hay trôi khung hình.
    • Khi kích hoạt đồng thời 02 Camera, tải CPU trên máy chủ Raspberry Pi Model B+ dao động ở mức $42% - 58%$, nhiệt độ chip BCM2835 duy trì ở ngưỡng $48^\circ\text{C}$ (hoạt động an toàn không cần quạt tản nhiệt chủ động).
  2. Độ chính xác và tuổi thọ cơ cấu quay:
    • Cơ cấu quay Pan đáp ứng dải góc quét $0^\circ - 180^\circ$ hoàn chỉnh với bước điều khiển $15^\circ/\text{lần nhấn}$.
    • Giải pháp ngắt nguồn qua mạch cầu H giúp loại bỏ hoàn toàn $100%$ hiện tượng giật rung cơ khí khi camera ở trạng thái dừng, giảm thiểu sự mài mòn bánh răng nhựa bên trong hộp số servo SG90.
  3. Thử nghiệm chức năng chụp ảnh và lưu trữ video:
    • Ảnh chụp snapshot lưu dưới định dạng bitmap/JPEG đạt chất lượng chi tiết tương đương hình ảnh thực tế từ cảm biến webcam.
    • Video ghi hình thời gian thực trên PC lưu trữ với tốc độ $25\text{ FPS}$, đồng bộ tốt giữa luồng video nhận được và thời gian hệ thống.

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

Đề tài mang lại nhiều giá trị thực tiễn và giải pháp kỹ thuật có tính ứng dụng cao trong lĩnh vực kỹ thuật máy tính và hệ thống nhúng:

  • Thiết kế phần cứng tối ưu chi phí (Cost-effective Edge Architecture): Thay vì sử dụng các hệ thống máy tính công nghiệp cồng kềnh, đề tài chứng minh khả năng biến các kit máy tính nhúng giá rẻ (Raspberry Pi B+) kết hợp các linh kiện phổ thông (Webcam USB, Servo mini SG90) thành một trạm Camera IP PTZ thông minh hoàn chỉnh với tổng chi phí giảm hơn $70%$ so với thiết bị thương mại cùng tính năng.
  • Giải pháp triệt tiêu nhiễu phần cứng độc đáo (Power-gating H-Bridge Isolation): Đưa ra phương pháp kết hợp mạch cầu H để đóng cắt nguồn động cơ đồng bộ với chu kỳ xung PWM, giải quyết thành công bài toán xung đột dòng tải và nhiễu rung lắc camera vốn là điểm yếu cố hữu của các mô hình PTZ DIY.
  • Kiến trúc phân tách kênh điều khiển và luồng dữ liệu (Dual-port Decoupled Sockets): Thiết kế hệ thống mạng 2 cổng riêng biệt (Port 8000 cho Video, Port 8001 cho Control) giúp ngăn chặn hiện tượng tắc nghẽn đường truyền (Head-of-line blocking), bảo đảm lệnh điều khiển góc quay luôn được thực thi tức thời ngay cả khi đường truyền video đạt tải tối đa.

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

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

  1. Giám sát an ninh phòng học và văn phòng làm việc: Lắp đặt tại các góc trần nhà trong trường học, cho phép nhân viên bảo vệ quét toàn cảnh góc rộng $180^\circ$ chỉ với 01 camera duy nhất thay vì phải bố trí 2-3 camera góc cố định.
  2. Giám sát dây chuyền sản xuất tự động: Đặt tại các vị trí kiểm soát trọng yếu trong nhà xưởng, người quản lý tại phòng điều khiển trung tâm có thể chủ động chuyển hướng quan sát vào các vị trí phát sinh sự cố máy móc.
  3. Quan sát kho bãi thông minh: Kết hợp giám sát ban đêm và ghi lại hình ảnh khi có đối tượng xâm nhập.

Hướng dẫn triển khai từng bước (Deployment Guide)

┌─────────────────────────────────────────────────────────────┐
│                  QUY TRÌNH TRIỂN KHAI TRẠM                   │
│                                                             │
│ 1. Cài đặt HĐH Raspbian Linux lên thẻ nhớ MicroSD (>=8GB)   │
│ 2. Cài đặt thư viện: sudo apt-get install python-pygame     │
│ 3. Kết nối phần cứng:                                       │
│    - Webcam A4-TECH PK635E -> Cổng USB 2.0                 │
│    - Chân tín hiệu Servo SG90 -> GPIO 18 (PWM)              │
│    - Chân điều khiển Mạch cầu H -> GPIO 23                  │
│    - Nguồn 5V/2A cấp riêng cho mạch cầu H và Servo          │
│ 4. Thiết lập IP tĩnh trên Kit: /etc/network/interfaces       │
│    - Node 1: 192.168.1.101 | Node 2: 192.168.1.102          │
│ 5. Chạy Service ngầm: python server_stream.py &             │
│ 6. Khởi động phần mềm Client trên PC Master                 │
└─────────────────────────────────────────────────────────────┘

Phân tích chi phí BOM (Bill of Materials)

Linh kiện / Thiết bị Số lượng Đơn giá ước tính (VND) Thành tiền (VND)
Kit máy tính nhúng Raspberry Pi Model B+ 02 850,000 1,700,000
Webcam A4-TECH PK635E CMOS USB 02 180,000 360,000
Động cơ Micro Servo TowerPro SG90 02 45,000 90,000
Module mạch công suất cầu H / Driver 02 35,000 70,000
Nguồn Adapter $5\text{V} - 2\text{A}$ & Thẻ nhớ MicroSD 8GB 02 bộ 150,000 300,000
Khung gá cơ khí & dây nối - 50,000 50,000
TỔNG CHI PHÍ PHẦN CỨNG CHO 02 TRẠM 2,570,000 VND

Hiệu quả đầu tư (ROI): So với việc trang bị 02 camera IP PTZ chuyên dụng thương mại (chi phí tối thiểu 4,500,000 - 8,000,000 VND), hệ thống giúp tiết kiệm hơn $50% - 65%$ tổng vốn đầu tư ban đầu, đồng thời miễn phí hoàn toàn chi phí bản quyền phần mềm quản lý.


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

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

  • Bậc tự do chuyển động cơ học: Hệ thống mới chỉ hỗ trợ 1 bậc tự do (Trục Pan quay ngang $0^\circ - 180^\circ$), chưa có trục Tilt (quay dọc lên xuống).
  • Chuẩn nén dữ liệu: Hình ảnh truyền tải dạng frame thô hoặc nén nhẹ qua Pygame, chưa tích hợp chuẩn nén video nâng cao H.264/H.265 bằng phần cứng GPU VideoCore IV, dẫn đến chiếm dụng băng thông đáng kể nếu nâng lên độ phân giải Full HD.
  • Tính năng phân tích thông minh: Chưa có khả năng tự động bám theo đối tượng (Auto-tracking) hoặc phát hiện chuyển động dựa trên thị giác máy tính.

Hướng phát triển mở rộng

  1. Nâng cấp phần cứng:
    • Chuyển đổi sang Raspberry Pi 2 / Pi 3 với vi xử lý Quad-core ARM Cortex-A7/A53 mạnh mẽ hơn.
    • Nâng cấp cơ cấu cơ khí lên Pan-Tilt 2 trục ($360^\circ \times 90^\circ$) sử dụng servo bánh răng kim loại MG996R chịu tải lớn.
  2. Tối ưu hóa giao thức và thuật toán:
    • Triển khai giao thức RTSP (Real-Time Streaming Protocol) kết hợp bộ mã hóa H.264 phần cứng trên chip BCM2835 để giảm băng thông xuống $<2\text{Mbps}$ cho video $720\text{p}/1080\text{p}$.
    • Tích hợp thư viện xử lý ảnh OpenCV để tự động phát hiện chuyển động (Background Subtraction / Optical Flow), nhận diện khuôn mặt người xâm nhập và gửi cảnh báo qua Email/SMS.
  3. Mở rộng giao diện nền tảng Web & Di động:
    • Xây dựng Web Dashboard trên nền tảng Flask/Django hoặc NodeJS, cho phép người dùng theo dõi và xoay camera từ trình duyệt trên Smartphone qua mạng 3G/4G/Internet.

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

  • Sinh viên & Nghiên cứu sinh ngành Máy tính / Điện tử: Nguồn tài liệu tham khảo thực tế về lập trình giao tiếp Socket đa luồng trên Python, kỹ thuật lập trình ngoại vi GPIO/PWM trên nhân Linux và kiến trúc máy tính nhúng.
  • Kỹ sư phát triển hệ thống IoT & Embedded: Mô hình kiến trúc mẫu về việc kết hợp vi điều khiển/SBC giá rẻ với cơ cấu truyền động công suất nhỏ, áp dụng kỹ thuật cách ly nguồn và triệt tiêu rung nhiễu cơ học.
  • Doanh nghiệp vừa và nhỏ / Hộ gia đình: Giải pháp tự triển khai hệ thống an ninh nội bộ chi phí siêu thấp, có khả năng mở rộng không giới hạn số lượng mắt camera mà không phụ thuộc vào dịch vụ đám mây (Cloud) thuê bao hàng tháng của bên thứ ba.

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

1. Yêu cầu kỹ thuật phần cứng và phần mềm để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu mỗi trạm 01 kit Raspberry Pi (Model B+, Pi 2 hoặc mới hơn) chạy hệ điều hành Raspbian Linux, thẻ nhớ MicroSD $\ge 8\text{GB}$ Class 10, webcam hỗ trợ chuẩn UVC (USB Video Class), động cơ servo SG90 kèm module cấp nguồn cách ly $5\text{V} - 2\text{A}$. Phía máy chủ trung tâm chỉ cần PC chạy hệ điều hành Windows/Linux có cài đặt Python và kết nối cùng lớp mạng LAN.

2. Giới hạn mở rộng (Scalability) của hệ thống là bao nhiêu camera?

Trong mô hình mạng hình sao (Star Topology) sử dụng switch $100\text{Mbps}$, với độ phân giải $320 \times 240$ không nén (~$23\text{Mbps}$/trạm), hệ thống hỗ trợ tối đa 3-4 camera đồng thời mà không bị trễ. Để mở rộng lên hàng chục trạm camera, cần áp dụng nén JPEG/H.264 tại mỗi trạm Raspberry Pi trước khi truyền qua mạng, khi đó băng thông mỗi trạm chỉ còn $1 - 2\text{Mbps}$, cho phép một PC trung tâm quản lý 32-64 camera dễ dàng.

3. Hệ thống có thể tích hợp với các đầu ghi CCTV hoặc phần mềm VMS hiện có không?

Có thể tích hợp bằng cách cài đặt gói dịch vụ motion hoặc mjpg-streamer trên Raspberry Pi để phát luồng video dưới dạng chuẩn HTTP MJPEG hoặc RTSP stream. Khi đó, các phần mềm quản lý video chuyên nghiệp (như Milestone, iSpy, Zoneminder) hoặc đầu ghi NVR hỗ trợ chuẩn ONVIF có thể kết nối và ghi hình trực tiếp.

4. Quy trình bảo trì và độ bền của cơ cấu cơ khí Servo SG90 ra sao?

Nhờ giải pháp ngắt nguồn và xung PWM qua mạch cầu H khi không có lệnh quay, động cơ servo không phải chịu lực giữ liên tục, triệt tiêu hiện tượng sinh nhiệt và trượt bánh răng. Định kỳ 6 tháng chỉ cần kiểm tra độ rơ của ốc vít trục quay và vệ sinh bụi bẩn bám trên thấu kính webcam.

5. Chi phí đầu tư chi tiết và thời gian hoàn vốn (ROI) được tính toán như thế nào?

Tổng chi phí chế tạo 02 trạm camera giám sát hoàn chỉnh khoảng 2.57 triệu VND (tương đương ~$115$). So với việc đầu tư hệ thống 02 camera PTZ IP thương mại có giá từ 6 - 10 triệu VND cộng với chi phí đầu ghi, hệ thống mang lại hiệu quả kinh tế ngay lập tức với thời gian thu hồi giá trị đầu tư chỉ trong vòng 1-2 tháng vận hành.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống Camera giám sát" đã hoàn thành toàn diện các mục tiêu đặt ra: từ việc nghiên cứu lý thuyết vi xử lý SoC Broadcom BCM2835, thiết kế phần cứng điều khiển công suất với mạch cầu H, đến việc phát triển phần mềm truyền nhận video thời gian thực đa luồng qua giao thức mạng TCP Socket trên nền tảng ngôn ngữ Python.

Hệ thống đã chứng minh tính khả thi vượt trội của việc ứng dụng máy tính nhúng giá rẻ vào các bài toán an ninh giám sát thực tế, khắc phục được nhược điểm góc nhìn hạn hẹp của webcam cố định và loại bỏ rào cản chi phí đắt đỏ của các camera PTZ thương mại. Kết quả thực nghiệm đạt độ ổn định cao, luồng hình ảnh mượt mà ở $25 - 30\text{ FPS}$, góc quay $180^\circ$ chuẩn xác và cơ chế lưu trữ ảnh/video hoàn chỉnh. Đây là nền tảng vững chắc để tiếp tục mở rộng các tính năng phân tích trí tuệ nhân tạo (AI Edge Computing) và truyền thông diện rộng trong tương lai.