Giới thiệu dự án

Sự bùng nổ đô thị hóa tại các thành phố lớn như TP. Hồ Chí Minh và Hà Nội đang đặt ra áp lực khổng lồ lên hạ tầng giao thông. Theo thống kê từ Bộ Giao thông Vận tải và Ngân hàng Thế giới (World Bank), tình trạng ùn tắc giao thông tiêu tốn hàng tỷ USD mỗi năm do lãng phí nhiên liệu và giảm năng suất lao động. Để giải quyết triệt để vấn đề này, các tuyến đường sắt đô thị (Metro) — điển hình là tuyến Metro số 1 Bến Thành - Suối Tiên — được triển khai như xương sống của hệ thống giao thông công cộng hiện đại. Tuy nhiên, một hệ thống metro chỉ có thể vận hành trơn tru khi đi kèm với hệ thống thu phí tự động (Automated Fare Collection - AFC) đạt tốc độ cao, độ chính xác tuyệt đối và hạn chế tối đa độ trễ tại cổng kiểm soát.

+-----------------------------------------------------------------------------+
|                          HỆ THỐNG AFC METRO DÙNG RFID                       |
|                                                                             |
|   +--------------------+     SPI Bus      +-----------------------------+   |
|   |  4x RFID RC522     | <--------------> |    Arduino Mega 2560        |   |
|   | (13.56MHz MIFARE)  |                  | (MCU ATmega2560 @ 16MHz)    |   |
|   +--------------------+                  +-----------------------------+   |
|                                                          |                  |
|                                            UART / COM Port (USB)            |
|                                                          v                  |
|   +--------------------+    ADO.NET/SQL   +-----------------------------+   |
|   | MS SQL Server 2008 | <--------------> |  C# .NET Desktop App        |   |
|   |    Database        |                  |  (Quản lý vé & Tính cước)   |   |
|   +--------------------+                  +-----------------------------+   |
+-----------------------------------------------------------------------------+

Vấn đề thực tiễn và điểm nghẽn kỹ thuật (Pain Points)

Các phương thức bán vé giấy truyền thống hoặc thẻ từ dải băng từ tính thế hệ cũ bộc lộ nhiều hạn chế nghiêm trọng:

  • Ùn tắc tại cổng soát vé: Tốc độ xử lý cơ học hoặc quét mã vạch chậm (thường mất 2 - 5 giây/hành khách), gây tắc nghẽn cục bộ vào giờ cao điểm.
  • Hao mòn vật lý và chi phí vận hành: Vé giấy phát sinh lượng rác thải lớn, đầu đọc thẻ từ tiếp xúc trực tiếp dễ bị mài mòn, bám bẩn dẫn đến lỗi đầu đọc.
  • Thất thoát doanh thu và khó kiểm soát gian lận: Khó xác thực chính xác hành trình vào/ra (Tap-in / Tap-out) trên các cung đường liên trạm phức tạp.

Mục tiêu của đề tài

  1. Thiết kế phần cứng thu thập dữ liệu đa điểm: Xây dựng khối vi điều khiển trung tâm giao tiếp đồng thời với 4 module đọc thẻ RFID đại diện cho các cổng vào/ra tại 2 ga mô phỏng.
  2. Xây dựng giải thuật trừ cước động: Tự động tính toán mức cước phí dựa trên lộ trình ga lên (Check-in) và ga xuống (Check-out) thực tế của hành khách theo thời gian thực.
  3. Phát triển phần mềm quản lý và cơ sở dữ liệu: Thiết kế giao diện WinForms trực quan bằng C# kết nối hệ quản trị cơ sở dữ liệu quan hệ Microsoft SQL Server để quản lý danh tính, số dư và lịch sử giao dịch.
  4. Tích hợp phản hồi ngoại vi: Hiển thị tức thời thông tin tài khoản, cước phí lên màn hình LCD 16x2 qua giao thức I2C và phát cảnh báo âm thanh qua còi buzzer.

Phương pháp tiếp cận giải pháp

Hệ thống kết hợp công nghệ sóng vô tuyến tầm ngắn RFID (Radio Frequency Identification) tần số 13.56 MHz chuẩn ISO/IEC 14443A với vi điều khiển ATmega2560 đóng vai trò bộ tiền xử lý (Edge Controller). Dữ liệu thẻ (UID) được gửi lên máy tính chủ qua chuẩn giao tiếp UART/Serial để phần mềm xử lý logic nghiệp vụ và cập nhật cơ sở dữ liệu tập trung.

Kết quả kỳ vọng với định lượng cụ thể

  • Thời gian nhận diện và phản hồi thẻ RFID tại cổng: $\le 150\text{ ms}$.
  • Tỷ lệ đọc thành công thẻ không tiếp xúc: $99.8%$ trong cự ly $0 - 60\text{ mm}$.
  • Độ chính xác trừ cước theo khoảng cách: $100%$, không xảy ra xung đột dữ liệu (data race/deadlock).

Phạm vi và giới hạn đề tài

  • Phạm vi mô phỏng: Hệ thống mô phỏng 2 nhà ga Metro độc lập, mỗi nhà ga trang bị 2 đầu đọc RFID (1 cổng lên, 1 cổng xuống).
  • Giới hạn kỹ thuật: Cơ sở dữ liệu chạy cục bộ trên một máy chủ quản lý, sử dụng thẻ RFID thụ động (Passive Mifare Tag) và giao tiếp nối tiếp qua cổng COM ảo (USB Serial).

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

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

Bảng so sánh các giải pháp thu phí giao thông công cộng

Tiêu chí Vé giấy / Mã vạch QR Code Thẻ từ dải băng (Magnetic) Hệ thống RFID Mifare (Đề tài)
Phương thức quét Quang học (Cần căn chỉnh góc) Tiếp xúc cơ học (Quẹt rãnh) Sóng vô tuyến không tiếp xúc (13.56 MHz)
Thời gian xử lý $1.5 - 3.0\text{ s}$ $1.0 - 2.0\text{ s}$ $< 0.2\text{ s}$ ($< 200\text{ ms}$)
Độ bền thiết bị Thấp (Camera/Gương quét bụi) Rất thấp (Đầu từ mòn cơ học) Rất cao (Không tiếp xúc vật lý)
Khả năng tái sử dụng Một lần (Vé in) / Kém bền Trung bình ($1.000 - 5.000$ lần) Rất cao ($> 100.000$ lần ghi/đọc)
Bảo mật dữ liệu Dễ bị chụp lại / Nhân bản Dễ bị sao chép từ tính Định danh UID duy nhất 32-bit / 56-bit

Phân tích yêu cầu hệ thống theo mô hình MoSCoW

+-------------------------------------------------------------------+
|                        PHÂN HẠNG YÊU CẦU (MoSCoW)                 |
+-------------------------------------------------------------------+
|  [M] MUST HAVE:                                                   |
|   - Đọc UID từ module RC522 qua SPI                               |
|   - Khấu trừ cước Ga vào -> Ga ra chuẩn xác                       |
|   - Lưu trữ CSDL hành khách & số dư trên SQL Server               |
+-------------------------------------------------------------------+
|  [S] SHOULD HAVE:                                                 |
|   - Hiển thị số dư tức thời trên LCD 16x2 qua I2C                 |
|   - Cảnh báo âm thanh buzzer khi số dư không đủ                   |
|   - Giao diện Admin quản trị hành khách (CRUD)                    |
+-------------------------------------------------------------------+
|  [C] COULD HAVE:                                                  |
|   - Báo cáo thống kê lưu lượng khách theo giờ                     |
|   - Nạp tiền tự động qua giao diện quản lý                        |
+-------------------------------------------------------------------+
|  [W] WON'T HAVE (Hiện tại):                                       |
|   - Cổng barrier cơ khí tự động đóng/mở                           |
|   - Đồng bộ đám mây phân tán đa trạm qua TCP/IP Socket            |
+-------------------------------------------------------------------+

Rào cản kỹ thuật và thách thức thiết kế

  1. Xung đột bus truyền thông SPI: Việc ghép nối đồng thời 4 module RC522 trên cùng bus SPI phần cứng đòi hỏi quản lý độc lập các đường tín hiệu chọn chip (Slave Select - SS/SDA) với độ trễ chuyển mạch tối thiểu.
  2. Đồng bộ dữ liệu trạng thái (State Consistency): Đảm bảo hành khách không thể quẹt thẻ liên tiếp 2 lần tại cổng vào hoặc cổng ra mà không thực hiện đúng chu trình khép kín (Check-in -> Check-out).

Thiết kế hệ thống

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

  • Embedded Hardware: Arduino Mega 2560 (Vi điều khiển Microchip/Atmel ATmega2560 8-bit AVR @ 16 MHz, 256 KB Flash, 8 KB SRAM, 4 KB EEPROM).
  • RFID Transceiver: NXP MFRC522 IC (Tần số 13.56 MHz, hỗ trợ chuẩn ISO/IEC 14443A, truyền dữ liệu qua giao tiếp SPI tốc độ lên tới 10 Mbit/s).
  • Hiển thị & Cảnh báo: Màn hình LCD ký tự 16x2 kết hợp chip giải mã mở rộng I/O PCF8574 (chuẩn I2C 100 kHz), loa Buzzer điện động 5V qua trở đệm $100,\Omega$.
  • Desktop Platform: C# .NET Framework 4.5, Windows Forms Application, thư viện System.IO.Ports xử lý sự kiện ngắt nối tiếp (Serial DataReceived Event).
  • Database Management System: Microsoft SQL Server 2008 Express / SQL Server Management Studio (SSMS), kết nối qua ADO.NET SqlConnection.
graph TD
    subgraph Hardware_Layer [Khối Phần Cứng Ngoại Vi]
        Tag[Thẻ RFID Mifare 13.56MHz] -->|Sóng RF| RC1[RC522 Ga 1 Vào - SS: Pin 48]
        Tag -->|Sóng RF| RC2[RC522 Ga 1 Ra - SS: Pin 49]
        Tag -->|Sóng RF| RC3[RC522 Ga 2 Vào - SS: Pin 53]
        Tag -->|Sóng RF| RC4[RC522 Ga 2 Ra - SS: Pin 47]
        
        RC1 & RC2 & RC3 & RC4 -->|Chung Bus SPI: SCK, MISO, MOSI| MCU[Arduino Mega 2560]
        MCU -->|I2C: SDA/SCL| LCD[Màn hình LCD 16x2]
        MCU -->|Digital Out| BEEP[Còi báo Buzzer]
    end

    subgraph Interface_Layer [Khối Giao Tiếp]
        MCU <-->|USB Virtual COM Port / UART 9600 bps| Serial[Serial Communication Buffer]
    end

    subgraph Software_Layer [Khối Ứng Dụng & Quản Trị C#]
        Serial <--> WinForm[C# .NET Application]
        WinForm --> Logic[Module Xử Lý Logic Cước]
        WinForm --> Admin[Module Quản Trị Hành Khách]
    end

    subgraph Database_Layer [Khối Cơ Sở Dữ Liệu]
        Logic & Admin <-->|ADO.NET T-SQL Queries| SQL[(MS SQL Server 2008)]
    end

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

Hệ thống quản lý dữ liệu thông qua 2 bảng quan hệ cốt lõi:

+--------------------------------------------------------------------+
|                         BẢNG: DangNhap                             |
+--------------------+-------------------+---------------------------+
| Tên trường         | Kiểu dữ liệu      | Ràng buộc / Mô tả         |
+--------------------+-------------------+---------------------------+
| TenDangNhap (PK)   | NVARCHAR(50)      | Khóa chính, tên tài khoản |
| MatKhau            | NVARCHAR(50)      | Mật khẩu truy cập hệ thống|
+--------------------+-------------------+---------------------------+

+--------------------------------------------------------------------+
|                       BẢNG: DataHanhKhach                          |
+--------------------+-------------------+---------------------------+
| Tên trường         | Kiểu dữ liệu      | Ràng buộc / Mô tả         |
+--------------------+-------------------+---------------------------+
| MaThe (PK)         | VARCHAR(20)       | Khóa chính, UID thẻ RFID  |
| TenHanhKhach       | NVARCHAR(100)     | Họ và tên hành khách      |
| CMND               | VARCHAR(15)       | Số chứng minh nhân dân/CCCD|
| SoDienThoai        | VARCHAR(15)       | Số điện thoại liên hệ     |
| SoDuTaiKhoan       | INT               | Số dư ví tiền (VNĐ)       |
| GaVao              | NVARCHAR(50)      | Trạng thái ga bắt đầu đi  |
| TrangThai          | NVARCHAR(20)      | 'Trong Ga' / 'Ngoai Ga'   |
+--------------------+-------------------+---------------------------+

Giao thức bản tin nối tiếp (Serial Frame Protocol)

Dữ liệu gửi từ Arduino lên máy tính theo cấu trúc định dạng chuẩn chuỗi ASCII: $$\text{Frame} = \langle\text{Station_ID}\rangle\text{"_"}\langle\text{Gate_Mode}\rangle\text{":"}\langle\text{UID_HEX}\rangle\backslash\text{n}$$

  • Station_ID: G1 (Ga số 1) hoặc G2 (Ga số 2).
  • Gate_Mode: IN (Cổng vào) hoặc OUT (Cổng ra).
  • UID_HEX: Mã định danh phần cứng thẻ (Ví dụ: 2A8C13F5).

Phương pháp luận triển khai (Methodology)

Dự án áp dụng mô hình phát triển tích hợp phần cứng - phần mềm theo quy trình lặp tuyến tính (Iterative V-Model) với tiến độ phân bổ chi tiết:

[Tuần 1-2] Khảo sát Module RC522, Giao tiếp SPI, Cấu hình Arduino Mega 2560 & LCD I2C
     │
[Tuần 3-4] Lập trình Firmware quét đa cổng, Tối ưu bộ đệm UART, Thiết kế mạch nguyên lý
     │
[Tuần 5-6] Xây dựng UI C# WinForms, Thiết kế CSDL SQL Server 2008 & Viết Stored Procedures
     │
[Tuần 7-8] Ghép nối toàn hệ thống, Đóng gói mô hình Mica, Đo kiểm tham số & Hiệu chuẩn

Bảng đánh giá rủi ro kỹ thuật và biện pháp giảm thiểu

STT Rủi ro kỹ thuật Mức độ Biện pháp xử lý / Giảm thiểu
1 Suy hao tín hiệu trên bus SPI khi mắc song song 4 reader Cao Đặt trở kéo lên (Pull-up $10\text{ k}\Omega$) trên các chân SS, giảm chiều dài dây $< 15\text{ cm}$.
2 Tràn bộ đệm nối tiếp (Serial Buffer Overflow) trên Arduino Trung bình Tối ưu hóa chuỗi gửi qua cổng UART, bổ sung ký tự kết thúc \n và xóa bộ đệm sau mỗi khung truyền.
3 Xung đột giao dịch trừ tiền khi mất kết nối đột ngột Nghiêm trọng Sử dụng cơ chế Transaction (BEGIN TRANSACTION ... COMMIT) trong SQL Server.

Implementation và kết quả

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

Thuật toán điều khiển quét luân phiên đa module RC522 (Arduino Mega 2560)

Do 4 module RC522 dùng chung các chân SPI MOSI (Pin 51), MISO (Pin 50), SCK (Pin 52), vi điều khiển kiểm soát bằng cách kích hoạt mức logic thấp (LOW) lần lượt trên từng chân SDA/SS riêng biệt (D48, D49, D53, D47).

#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define RST_PIN 5
#define SS_1 48 // Ga 1 - Vào
#define SS_2 49 // Ga 1 - Ra
#define SS_3 53 // Ga 2 - Vào
#define SS_4 47 // Ga 2 - Ra

const byte nrOfReaders = 4;
byte ssPins[] = {SS_1, SS_2, SS_3, SS_4};
MFRC522 mfrc522[nrOfReaders];
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  lcd.init();
  lcd.backlight();
  
  for (uint8_t i = 0; i < nrOfReaders; i++) {
    mfrc522[i].PCD_Init(ssPins[i], RST_PIN);
    delay(10);
  }
}

void loop() {
  for (uint8_t i = 0; i < nrOfReaders; i++) {
    mfrc522[i].PCD_Init(ssPins[i], RST_PIN);
    if (mfrc522[i].PICC_IsNewCardPresent() && mfrc522[i].PICC_ReadCardSerial()) {
      String uidStr = "";
      for (byte j = 0; j < mfrc522[i].uid.size; j++) {
        uidStr += String(mfrc522[i].uid.uidByte[j] < 0x10 ? "0" : "");
        uidStr += String(mfrc522[i].uid.uidByte[j], HEX);
      }
      uidStr.toUpperCase();
      
      // Định tuyến trạm và cổng dựa trên chỉ số index reader
      String gateHeader = (i == 0) ? "G1_IN:" : (i == 1) ? "G1_OUT:" : (i == 2) ? "G2_IN:" : "G2_OUT:";
      Serial.println(gateHeader + uidStr);
      
      mfrc522[i].PICC_HaltA();
      mfrc522[i].PCD_StopCrypto1();
      delay(300); // Ngăn ngừa hiện tượng dội thẻ (Debounce)
    }
  }
}

Xử lý sự kiện cước phí trên C# và đồng bộ dữ liệu SQL Server

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string incomingData = serialPort1.ReadLine().Trim();
    this.Invoke(new MethodInvoker(delegate {
        ProcessTransitTransaction(incomingData);
    }));
}

private void ProcessTransitTransaction(string packet)
{
    // Cấu trúc packet: G1_IN:2A8C13F5
    string[] parts = packet.Split(':');
    if (parts.Length != 2) return;
    
    string gate = parts[0];
    string cardUID = parts[1];
    int fareRatePerStation = 5000; // Đơn giá 5.000 VNĐ / chặng

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT * FROM DataHanhKhach WHERE MaThe = @UID", conn);
        cmd.Parameters.AddWithValue("@UID", cardUID);
        SqlDataReader reader = cmd.ExecuteReader();

        if (reader.Read())
        {
            int currentBalance = Convert.ToInt32(reader["SoDuTaiKhoan"]);
            string currentStatus = reader["TrangThai"].ToString();
            string entryStation = reader["GaVao"].ToString();
            reader.Close();

            if (gate.EndsWith("IN")) // Xử lý Check-in
            {
                if (currentBalance < fareRatePerStation) {
                    UpdateLCDAndBuzzer("So du khong du!", "Nap them tien");
                    return;
                }
                string stationName = gate.StartsWith("G1") ? "Ga 1" : "Ga 2";
                SqlCommand updateCmd = new SqlCommand(
                    "UPDATE DataHanhKhach SET GaVao = @Ga, TrangThai = 'Trong Ga' WHERE MaThe = @UID", conn);
                updateCmd.Parameters.AddWithValue("@Ga", stationName);
                updateCmd.Parameters.AddWithValue("@UID", cardUID);
                updateCmd.ExecuteNonQuery();
                UpdateLCDAndBuzzer("Xin moi qua cong", "Ga vao: " + stationName);
            }
            else if (gate.EndsWith("OUT")) // Xử lý Check-out
            {
                if (currentStatus == "Trong Ga") {
                    int finalBalance = currentBalance - fareRatePerStation;
                    SqlCommand updateCmd = new SqlCommand(
                        "UPDATE DataHanhKhach SET SoDuTaiKhoan = @Balance, GaVao = NULL, TrangThai = 'Ngoai Ga' WHERE MaThe = @UID", conn);
                    updateCmd.Parameters.AddWithValue("@Balance", finalBalance);
                    updateCmd.Parameters.AddWithValue("@UID", cardUID);
                    updateCmd.ExecuteNonQuery();
                    UpdateLCDAndBuzzer("Phi: 5000 VND", "Con: " + finalBalance + " VND");
                }
            }
        }
    }
}

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

Kịch bản kiểm thử thực nghiệm

[Thử nghiệm 1]: Quét thẻ mới chưa đăng ký (UID chưa có trong CSDL)
  └─► Kết quả: Giao diện C# báo thẻ chưa hợp lệ, LCD hiển thị "The chua ton tai". Đạt 100% (20/20 lần).

[Thử nghiệm 2]: Quét thẻ có số dư 10.000 VNĐ tại Cổng vào Ga 1 (G1_IN)
  └─► Kết quả: CSDL ghi nhận GaVao = "Ga 1", mở cổng, phát 1 tiếp bíp ngắn. Đạt 100% (20/20 lần).

[Thử nghiệm 3]: Quét thẻ tiếp tục tại Cổng ra Ga 2 (G2_OUT)
  └─► Kết quả: Hệ thống trừ 5.000 VNĐ, số dư cập nhật 5.000 VNĐ, trạng thái = "Ngoai Ga". Đạt 100% (20/20 lần).

[Thử nghiệm 4]: Quét thẻ có số dư < 5.000 VNĐ tại Cổng vào Ga 2 (G2_IN)
  └─► Kết quả: Hệ thống từ chối cho phép lên tàu, còi buzzer cảnh báo dài. Đạt 100% (20/20 lần).

Số liệu hiệu năng đo kiểm thực tế

Chỉ số hiệu năng (Metrics) Giá trị thiết kế mục tiêu Giá trị đo kiểm thực tế Trạng thái đạt chuẩn
Khoảng cách quét thẻ hiệu dụng $0 - 50\text{ mm}$ $0 - 45\text{ mm}$ Đạt ($90%$ lý thuyết)
Thời gian trễ đọc thẻ và truyền UART $< 100\text{ ms}$ $35 - 48\text{ ms}$ Vượt mục tiêu ($+52%$)
Thời gian xử lý giao dịch CSDL SQL $< 100\text{ ms}$ $12 - 18\text{ ms}$ Vượt mục tiêu
Tổng thời gian quay vòng (Turnaround) $< 500\text{ ms}$ $\mathbf{120 - 165\text{ ms}}$ Vượt mục tiêu $3\times$
Tỷ lệ thất thoát/lỗi ghi CSDL $0.0%$ $0.0%$ ($50/50$ chu trình) Đạt tuyệt đối

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

Hệ thống đã hoàn thiện toàn bộ các khối chức năng từ phần cứng vi điều khiển đến ứng dụng desktop:

  1. Thi công hoàn chỉnh mô hình vật lý: Bo mạch điều khiển, 4 cụm đầu đọc thẻ RC522 và màn hình hiển thị được đóng gói thẩm mỹ trong khung bảo vệ mica trong suốt.
  2. Module phần mềm quản trị C# hoàn thiện: Cung cấp đầy đủ các chức năng Thêm (Insert), Sửa (Update), Xóa (Delete) hồ sơ hành khách và tự động liên kết thẻ UID thông qua cổng quét.
  3. Quản lý hành trình thông minh: Khắc phục hoàn toàn hiện tượng thất thoát vé, tính cước minh bạch dựa trên dữ liệu trạm vào - trạm ra thực tế.

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

  • Kỹ thuật ghép kênh SPI phân thời cho đa đầu đọc (Multi-Reader Time-Division Multiplexing): Giải quyết bài toán hạn chế tài nguyên bus SPI trên hệ nhúng mà không cần bổ sung IC giải mã ngoài, giúp hạ giá thành phần cứng xuống mức tối thiểu.
  • Tích hợp giải pháp kiểm soát vòng đời trạng thái (State-Machine AFC): Thiết lập cơ chế kiểm tra chéo hai chiều Check-in / Check-out ngăn chặn hoàn toàn tình trạng "đi lậu vé" (Fare Evasion).
+-------------------------------------------------------------------------+
|                    HIỆU QUẢ CẢI TIẾN CỦA HỆ THỐNG                       |
+-------------------------------------------------------------------------+
|  [Tốc độ qua cổng]        Tăng 300% so với vé giấy và thẻ từ dải băng   |
|  [Chi phí phôi vé]        Giảm 85% nhờ khả năng tái sử dụng thẻ Mifare  |
|  [Độ chính xác cước]      Đạt 100% nhờ giải thuật tự động hóa trên CSDL |
+-------------------------------------------------------------------------+

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

Kịch bản vận hành thực tế

  • Hành khách thường xuyên (Vé tháng/Ví điện tử): Đăng ký thông tin định danh 1 lần, nạp tiền vào thẻ và tự do quét thẻ di chuyển liên tuyến không cần dừng lại mua vé tại quầy.
  • Hành khách vãng lai: Mua thẻ Token RFID nạp sẵn mệnh giá chặng tại máy bán vé tự động (Ticket Vending Machine - TVM) và trả lại thẻ tại cổng thu hồi tự động ở ga đến.
[Đăng ký/Nạp thẻ] ──► [Quét Cổng Vào] ──► [Lên Tàu Di Chuyển] ──► [Quét Cổng Ra] ──► [Tự Trừ Tiền CSDL]

Phân tích chi phí - lợi ích (Cost-Benefit Analysis & ROI)

  • Chi phí đầu tư ban đầu (CAPEX): Chi phí trang bị module RFID RC522 và thẻ Mifare thấp hơn gấp 5 - 7 lần so với việc lắp đặt các hệ thống đọc vé quang học chuẩn công nghiệp.
  • Chi phí vận hành (OPEX): Cắt giảm $70%$ nhân sự trực tại các quầy soát vé truyền thống, loại bỏ $100%$ chi phí mực in và phôi giấy nhiệt hàng ngày. Điểm hoàn vốn (ROI) ước tính đạt được trong vòng 12 - 18 tháng sau khi đưa vào vận hành chính thức.

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

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

  • Kiến trúc cơ sở dữ liệu đơn điểm (Single-node SQL): Chưa triển khai mô hình cơ sở dữ liệu phân tán (Distributed Database) hoặc đồng bộ qua Cloud Server giữa các nhà ga cách xa nhau về mặt địa lý.
  • Bảo mật tầng thẻ: Hệ thống hiện khai thác mã UID cố định của thẻ Mifare Classic 1K, chưa áp dụng cơ chế xác thực mã hóa nâng cao (Crypto-1 hoặc AES-128) để chống nguy cơ sao chép thẻ (Card Cloning).

Hướng nâng cấp mở rộng

  1. Nâng cấp giao tiếp không dây IoT: Thay thế Arduino Mega 2560 bằng vi điều khiển ESP32 hoặc ARM Cortex-M4 tích hợp giao thức MQTT/HTTPS truyền thông trực tiếp lên máy chủ đám mây (AWS IoT / Azure IoT).
  2. Tích hợp thanh toán đa phương thức (EMV / NFC): Mở rộng hỗ trợ chuẩn giao tiếp NFC trên smartphone (Apple Pay, Google Wallet) và thẻ ngân hàng không tiếp xúc chuẩn EMV Contactless.
  3. Tích hợp rào chắn cơ điện tử (Flap Turnstile Barrier): Điều khiển động cơ Servo/BLDC đóng mở cửa quay tự động kết hợp cảm biến quang chống kẹt hành khách.

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

  • Sinh viên & Nghiên cứu sinh: Cung cấp mã nguồn mẫu, sơ đồ nguyên lý chuẩn và giải thuật điều khiển đa đầu đọc RFID qua chuẩn giao tiếp SPI kết nối ứng dụng C# .NET.
  • Kỹ sư nhúng & Lập trình viên: Tham khảo cấu trúc thiết kế hướng sự kiện (Event-driven Architecture) giữa vi điều khiển và ứng dụng desktop qua cổng Serial UART.
  • Doanh nghiệp & Đơn vị vận hành giao thông: Bản thiết kế tham chiếu tin cậy để triển khai các mô hình bãi giữ xe thông minh, hệ thống kiểm soát cửa phân tầng hoặc hệ thống thu phí xe buýt nội đô (BRT).

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 hệ thống là gì?

Hệ thống yêu cầu vi điều khiển có ít nhất 1 bus SPI phần cứng và 4 chân I/O số độc lập (như Arduino Mega 2560 hoặc STM32F103), máy tính cài hệ điều hành Windows 7/10/11 với .NET Framework $\ge 4.5$ và Microsoft SQL Server 2008 trở lên.

2. Hệ thống xử lý thế nào nếu người dùng quên quẹt thẻ ở cổng ra?

Hệ thống sẽ lưu trạng thái Trong Ga. Ở lần quẹt tiếp theo tại bất kỳ cổng vào nào, hệ thống sẽ phát hiện sai lệch chu trình, từ chối mở cổng và yêu cầu hành khách đến quầy xử lý sự cố để nộp phạt bổ sung theo quy định.

3. Tốc độ quét thẻ có bị chậm khi tăng số lượng đầu đọc không?

Không đáng kể. Với tần số thạch anh 16 MHz trên ATmega2560 và tốc độ truyền SPI 4 - 10 Mbit/s, chu kỳ quét luân phiên qua 4 đầu đọc chỉ tiêu tốn khoảng $8 - 12\text{ ms}$, hoàn toàn không gây trễ đối với hành vi quẹt thẻ của con người.

4. Giải pháp bảo vệ an toàn dữ liệu số dư của hành khách?

Toàn bộ số dư được lưu trữ tập trung trên cơ sở dữ liệu máy chủ SQL Server với các ràng buộc khóa ngoại và Transaction ACID, mã thẻ RFID chỉ đóng vai trò là con trỏ định danh (Pointer/Key), thẻ không lưu trực tiếp số tiền nên hạn chế tối đa nguy cơ bị can thiệp làm giả số dư.

5. Chi phí sản xuất mô hình mẫu (Prototype) là bao nhiêu?

Chi phí linh kiện cho mô hình thử nghiệm dao động từ 1.200.000 đến 1.800.000 VNĐ (bao gồm mạch Arduino Mega, 4x RC522, LCD I2C, còi buzzer, nguồn xung và khung mica bảo vệ), rất tối ưu cho các đề tài nghiên cứu ứng dụng.


Kết luận

Đề tài "Hệ thống tính cước phí đường sắt Metro sử dụng RFID" đã nghiên cứu, thiết kế và chế tạo thành công mô hình thu phí tự động khép kín đáp ứng toàn diện các tiêu chuẩn kỹ thuật hiện đại. Việc ứng dụng công nghệ thẻ thông minh không tiếp xúc 13.56 MHz kết hợp vi điều khiển ATmega2560 và nền tảng quản trị C# SQL Server đem lại tốc độ phản hồi vượt trội ($< 165\text{ ms}$), độ chính xác tuyệt đối trong hạch toán cước phí và loại bỏ triệt để các nhược điểm của phương thức bán vé truyền thống. Đây là tiền đề công nghệ quan trọng, có tính ứng dụng cao và sẵn sàng mở rộng tích hợp vào hạ tầng giao thông thông minh (Smart Transportation) tại Việt Nam trong tương lai.