基于STM32的RFID高速收费系统
本文提出了一种基于STM32单片机的高速公路智能收费系统设计方案。系统融合高精度称重、RFID识别、自动计费控制与物联网技术,实现车辆称重分类、自动计费和安全控制。硬件采用STM32F103C8T6主控,集成HX711称重模块、RC522读卡模块、红外传感器等,软件通过HAL库实现称重滤波、RFID识别、云端通信(MQTT)等功能。系统支持车型分类、防超载报警、时长计费等功能,并通过Wi-Fi模块
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
高速公路收费系统是智能交通系统(ITS)的核心组成部分,其效率、准确性和可靠性直接关系到道路的通行效率、运营收益和交通安全。传统收费系统存在称重不准、缴费效率低、无法有效防作弊、管理成本高等问题。将高精度称重、RFID身份识别、自动计费控制与物联网云平台技术深度融合,构建一个集车辆称重分类、自动计费、安全控制、远程监管于一体的高速收费系统,具有重大的现实意义。本项目基于STM32单片机,旨在实现车辆的快速、准确称重与分类,实现按车型和通行时长精准计费,并通过联动道闸和云平台,杜绝超载车辆上路、防止收费漏洞,极大提升高速公路的运营管理现代化水平。
(二)国内外研究现状
目前,国内外高速收费系统已普遍采用ETC(电子不停车收费)技术,但其核心是DSRC通信,与RFID技术同属射频范畴。本设计提出的“称重+RFID+计时”模式,更侧重于入口预检、计重防超、时长计费的综合管理,常用于停车场、物流园区或特定路段的收费场景,是对传统ETC和人工收费模式的一种有效补充和创新。现有方案多将称重、读卡、控制分立,系统集成度低。本研究旨在提供一个高度集成、智能决策的一体化终端解决方案。
二、系统总体设计
(一)系统架构
本系统采用“前端精准感知与控制 - 云端集中管理”的架构。
-
感知控制层(收费亭终端):以STM32为核心,负责车辆称重、车型判断、RFID身份识别、计时计费、道闸控制和异常报警,是所有业务的执行终端。
-
网络传输层:ESP8266 Wi-Fi模块,负责将交易记录、报警信息等数据上传至云平台,并接收云端下发的费率、黑名单等配置信息。
-
云端应用层:云服务器负责车辆档案管理、费率策略制定、财务对账、数据统计分析,并为运营人员提供集中监控平台。
核心业务流程:
-
入口流程:
车辆驶上秤台 -> 称重并判断车型(小车/货车) -> 司机刷卡 -> 系统记录车型、卡号、入口时间 -> 抬杆放行
-
计费逻辑:
(出口) 司机再次刷卡 -> 系统计算通行时长 -> 根据车型单价计算费用 -> (可选:显示费用并确认) -> 抬杆放行
-
安全逻辑:
称重超限 -> 声光报警,道闸绝不抬杆
;车辆长时间未出 -> 向云端发送报警信息
(二)功能模块划分
-
车辆称重与分类模块:称重传感器 + 信号调理电路。
-
身份识别与计费模块:RFID读卡器 + STM32(计时器)。
-
道闸安全控制模块:舵机/继电器 + 红外对射传感器(防追尾)。
-
人机交互模块:OLED显示屏 + 按键 + 声光报警器。
-
数据通信模块:ESP8266 Wi-Fi模块。
-
主控模块:STM32单片机。
三、硬件设计与实现
(一)系统硬件框架图
-
STM32F103C8T6 (主控核心)
-
HX711称重模块 (24位ADC):DT接
PA4
, SCK接PA5
-
称重传感器 (如电阻应变式):接HX711模块
-
RFID读卡模块 (RC522, SPI):SDA接
PA15
, SCK接PB3
, MOSI接PB5
, MISO接PB4
, RST接PB6
-
红外对射传感器 (防追尾):接收端输出接
PA0
-
SG90舵机 (道闸控制):信号线接
PA1
(TIM2_CH2 PWM) -
OLED (SSD1306) : I2C接口,接
PB7
(SCL),PB8
(SDA) -
按键 x 4:车型选择(小车/货车)、设置、确认、手动抬杆 接至
PC13
,PC14
,PC15
,PA8
-
有源蜂鸣器:接
PA9
-
RGB LED:R、G、B引脚接
PA10
,PA11
,PA12
(PWM调色) -
ESP-01S (ESP8266) : 接USART2
PA2
(TX),PA3
(RX)
(二)主控模块选型及介绍
主控芯片选用STM32F103C8T6。其资源丰富:
-
高速SPI:用于与RFID模块通信。
-
多路GPIO:用于控制HX711、按键、指示灯等。
-
定时器:用于产生PWM控制舵机和LED,以及高精度计时。
-
UART:用于与Wi-Fi模块通信。
(三)传感器模块选型及电路设计
-
称重模块:
-
核心:选用HX711专用24位高精度ADC芯片,专为称重传感器设计,内部集成放大器,可直接连接应变片。
-
传感器:选用电阻应变式称重传感器,通常为4线制(E+, E-, S+, S-),形成惠斯通电桥。量程需覆盖预期最大车重(如2吨)。
-
安装:秤台需有足够的机械结构支撑,确保车辆压上时力能准确传递到传感器上。
-
-
RFID读卡模块 (RC522):用于识别车辆身份。SPI接口,通信速率快。
-
红外对射传感器:安装于道闸栏杆后方,用于检测车辆是否完全通过。必须选用抗强光型,以适应室外环境。
(四)通信模块选型及配置
选用ESP-01S模块。配置其连接收费站的Wi-Fi网络,通过MQTT协议与云平台通信。MQTT的发布/订阅模式非常适合本系统的报警推送和数据上报。
(五)执行模块选型及驱动电路
-
道闸控制:选用大力矩舵机(如MG996R) 或通过继电器控制专业的220VAC道闸机。后者更可靠,但需强电隔离设计。
-
声光报警器:蜂鸣器用于声音提示,RGB LED用于视觉状态指示(绿灯:正常;红灯:超重/报警;蓝灯:读卡;黄灯:等待)。
四、软件设计与实现
(一)开发环境搭建
-
IDE: Keil uVision5
-
库: STM32HAL库 + HX711驱动 + RC522驱动
-
协议: cJSON库,MQTT协议
(二)系统初始化
// main.c
#include "hx711.h"
#include "rc522.h"
#include "servo.h"
#include "ssd1306.h"
#include "esp8266_mqtt.h"
// 全局变量
VehicleType_TypeDef current_vehicle_type = TYPE_CAR;
float current_weight = 0.0;
uint32_t entry_time = 0;
uint32_t vehicle_presence_timer = 0;
int main(void) {
// ... HAL初始化与外设初始化
MX_GPIO_Init();
MX_SPI1_Init();
MX_USART2_UART_Init();
MX_I2C1_Init();
MX_TIM2_Init(); // For Servo PWM
HX711_Init();
RC522_Init();
SERVO_Init(&htim2);
SERVO_SetAngle(0); // 初始落杆
OLED_Init();
ESP8266_MQTT_Init();
while (1) {
Main_Task();
HAL_Delay(100);
}
}
(三)核心功能实现
void Main_Task(void) {
// 1. 称重与车型判断
if (HX711_IsReady()) {
current_weight = HX711_GetWeight(); // 获取重量,已去皮
OLED_ShowWeight(current_weight);
// 判断是否超重 (货车阈值更高)
float weight_limit = (current_vehicle_type == TYPE_CAR) ? CAR_WEIGHT_LIMIT : TRUCK_WEIGHT_LIMIT;
if (current_weight > weight_limit) {
RGBLED_SetColor(RED);
Buzzer_Beep(2);
OLED_ShowMessage("Overweight! Forbidden!");
return; // 阻塞在此,禁止后续流程
} else {
RGBLED_SetColor(BLUE); // 重量正常,蓝灯提示刷卡
OLED_ShowMessage("Weight OK. Please Scan Card.");
}
}
// 2. RFID刷卡入口
uint8_t card_id[4];
if (RC522_FindCard(card_id) == MI_OK) {
// 转换卡号为字符串
char card_str[9];
sprintf(card_str, "%02X%02X%02X%02X", card_id[0], card_id[1], card_id[2], card_id[3]);
// 记录入口信息
entry_time = HAL_GetTick();
// 上传入口记录到云端
Cloud_UploadEntryRecord(card_str, current_vehicle_type, entry_time);
// 抬杆
SERVO_SetAngle(90);
RGBLED_SetColor(GREEN);
Buzzer_Beep(1);
OLED_ShowMessage("Welcome! Gate Open.");
// 启动车辆在位计时器
vehicle_presence_timer = HAL_GetTick();
}
// 3. 防追尾与落杆逻辑
static uint8_t last_ir_state = 1;
uint8_t ir_state = HAL_GPIO_ReadPin(IR_BARRIER_GPIO_Port, IR_BARRIER_Pin);
if (last_ir_state == 0 && ir_state == 1) { // 检测到上升沿,车辆已完全通过
HAL_Delay(2000); // 安全延时,确保车辆尾部也通过
SERVO_SetAngle(0); // 落杆
vehicle_presence_timer = 0; // 停止计时
}
last_ir_state = ir_state;
// 4. 车辆滞留检测
if (vehicle_presence_timer != 0) {
if (HAL_GetTick() - vehicle_presence_timer > MAX_STAY_TIME) {
Buzzer_Beep(3);
RGBLED_SetColor(RED);
Cloud_SendAlarm("Vehicle滞留警报!", card_str);
vehicle_presence_timer = 0; // 避免重复报警
}
}
// 5. 出口计费逻辑 (在另一个状态中,例如通过按键或再次刷卡触发)
if (is_exit_mode) {
uint32_t exit_time = HAL_GetTick();
uint32_t duration_minutes = (exit_time - entry_time) / 60000; // 计算分钟数
float unit_price = (current_vehicle_type == TYPE_CAR) ? CAR_PRICE_PER_MIN : TRUCK_PRICE_PER_MIN;
float fee = duration_minutes * unit_price;
OLED_ShowFee(fee, duration_minutes);
// ... 等待确认或直接扣费
Cloud_UploadExitRecord(card_str, exit_time, fee);
SERVO_SetAngle(90); // 抬杆放行
}
}
(四)云端通信实现
// 上传入口记录
void Cloud_UploadEntryRecord(char* card_id, VehicleType_TypeDef type, uint32_t entry_ticks) {
cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "event", "entry");
cJSON_AddStringToObject(root, "card_id", card_id);
cJSON_AddStringToObject(root, "type", (type == TYPE_CAR) ? "car" : "truck");
cJSON_AddNumberToObject(root, "weight", current_weight);
cJSON_AddNumberToObject(root, "entry_time", entry_ticks);
char *json_str = cJSON_Print(root);
ESP8266_MQTT_Publish("highway/entry", json_str);
cJSON_Delete(root);
free(json_str);
}
// 接收云端配置(MQTT订阅回调)
void MQTT_Callback(char* topic, char* payload) {
cJSON *root = cJSON_Parse(payload);
if (root) {
cJSON *cmd = cJSON_GetObjectItem(root, "command");
if (cmd && strcmp(cmd->valuestring, "update_config") == 0) {
cJSON *car_weight = cJSON_GetObjectItem(root, "car_weight_limit");
cJSON *truck_weight = cJSON_GetObjectItem(root, "truck_weight_limit");
cJSON *car_price = cJSON_GetObjectItem(root, "car_price");
cJSON *truck_price = cJSON_GetObjectItem(root, "truck_price");
// ... 更新STM内存中的阈值
}
}
}
五、系统测试与优化
(一)测试方案
-
精度测试:使用标准砝码对称重系统进行校准和精度测试,确保小车和货车的分类准确。
-
场景测试:
-
正常流程:模拟小车/货车正常称重、刷卡、通行、计费。
-
异常流程:测试超重车辆的处理、车辆滞留报警、网络中断时的数据缓存与重传。
-
压力测试:模拟连续车辆通行,测试系统响应速度和稳定性。
-
-
环境测试:在室外环境下测试称重传感器的温漂、红外传感器的抗干扰能力。
(二)测试结果与分析
预计测试中,称重系统的长期稳定性与抗干扰能力(如风、震动)是最大挑战。防追尾逻辑的可靠性也需大量测试,确保绝不砸车。不同车型的轴重分布可能影响称重准确性,需要在算法或机械结构上加以考虑。
(三)系统优化
-
算法优化:
-
称重滤波:采用滑动平均滤波或卡尔曼滤波,有效抑制称重数据的抖动。
-
动态去皮:在无车时自动监测重量零点,消除温度等环境因素引起的漂移。
-
-
可靠性优化:
-
看门狗:启用STM32的独立看门狗(IWDG),防止程序死机。
-
本地存储:使用EEPROM存储关键阈值和交易记录,网络中断时不丢失数据。
-
-
功能增强:
-
车牌识别辅助:增加摄像头,在出口处通过车牌号与RFID信息进行复核,防止“换卡”作弊。
-
语音播报:增加语音模块,播报重量、车型、费用等信息,提升用户体验。
-
六、结论与展望
(一)未来展望
-
AI车型识别:融合摄像头和AI图像识别技术,自动识别车辆类型(小客车、货车、拖挂车),与称重结果交叉验证,杜绝人工选择车型可能带来的作弊行为。
-
信用支付与无感支付:与信用系统或银行账户绑定,实现先通行后扣费,甚至全程无感支付,进一步提升通行效率。
-
大数据分析:云平台对海量通行数据(车流量、车型分布、重量、通行时间)进行分析,为道路规划、养护、运营策略提供数据支撑。
-
L4级自动驾驶集成:为未来的智能网联汽车提供标准化的车路通信接口,车辆可自动完成缴费流程。
如有侵权,或需要完整代码,请及时联系博主。
更多推荐
所有评论(0)