基于STM32的智能车库系统
本文设计了一种基于STM32的智能车库系统,通过集成RFID门禁、超声波车位检测、温湿度光照传感及Wi-Fi远程控制,实现车库管理的自动化和智能化。系统采用四层架构:感知层采集数据,决策层处理逻辑,执行层控制设备,云控层实现远程交互。硬件选用STM32F103C8T6为主控,搭配多种传感器和执行模块;软件采用Keil开发,实现环境联动、权限验证等功能。经测试优化后,系统可提升车库安全性、便捷性和能
若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
随着城市化进程加快和家庭汽车保有量持续增长,“停车难、管理乱、体验差”成为困扰车主的一大痛点。传统车库管理依赖物理钥匙和人工判断,存在便捷性低、安全性不足、无法远程管理等弊端。智能车库系统通过融合射频识别(RFID)、超声波探测、物联网(IoT)和环境传感技术,旨在实现车库管理的无人化、自动化和智能化。本项目基于STM32单片机,构建一个集智能门禁、车位监测、环境调控与远程控制于一体的综合性解决方案,极大提升车辆存取的便捷性、车库空间利用率和安防水平,是现代智慧家庭和物业管理的的重要组成部分。
(二)国内外研究现状
目前,智能车库技术正从单一功能向集成化、平台化方向发展。独立的车牌识别系统、RFID门禁系统已有应用,但多系统间相互独立,形成“数据孤岛”。将身份识别、车位检测、环境感知与设备控制通过一个低成本、高可靠性的主控进行深度融合,并接入统一的云平台实现远程监控,是当前技术应用的前沿。本设计不仅实现了基本功能,更通过传感器联动创造了智能、舒适、安全的车库环境,具有显著的创新性和实用价值。
二、系统总体设计
(一)系统架构
本系统采用“感知-决策-执行-云控”的四层架构。
-
感知层:由RC522(身份识别)、HC-SR04(车位检测)、DHT11(环境温湿度)、BH1750(环境光照)传感器组成,全方位采集车库状态信息。
-
决策层:STM32主控制器作为系统大脑,处理所有传感器数据,执行核心逻辑判断(如权限验证、自动照明),并生成控制指令。
-
执行层:包括继电器(控制门锁/门电机、通风设备、照明灯),负责完成具体的物理操作。
-
云控层:基于ESP8266 Wi-Fi模块与云平台连接,实现手机App远程状态监控和设备控制,打破地域限制。
(二)功能模块划分
-
智能门禁模块:RC522 RFID读卡器 + 继电器(门锁)。
-
车位监测模块:HC-SR04超声波传感器。
-
环境监测与调控模块:DHT11 + BH1750 + 继电器(通风设备、照明灯)。
-
人机交互模块:OLED显示屏。
-
数据通信模块:ESP8266 Wi-Fi模块。
-
主控与电源模块:STM32单片机 + 电源电路。
三、硬件设计与实现
(一)系统硬件框架图
-
STM32F103C8T6 (主控核心)
-
RC522 RFID模块 (SPI接口):SDA接
PA4
, SCK接PA5
, MOSI接PA7
, MISO接PA6
, RST接PC0
-
HC-SR04超声波模块:Trig接
PA1
, Echo接PA0
-
DHT11温湿度传感器:数据线接
PC1
-
BH1750光照传感器 (I2C接口):SCL接
PB6
, SDA接PB7
-
OLED (SSD1306) (I2C接口):与BH1750共享I2C总线,SCL接
PB6
, SDA接PB7
-
继电器模块 x 3:接
PC13
(车库门锁),PC14
(通风设备),PC15
(照明灯) -
ESP-01S (ESP8266):接USART2
PA2
(TX),PA3
(RX)
(二)主控模块选型及介绍
主控芯片选用STM32F103C8T6。其资源丰富且成本低廉:
-
SPI接口:用于驱动RC522 RFID模块。
-
多定时器/GPIO:用于产生超声波模块所需的脉冲和测量回波时间,以及控制继电器。
-
I2C接口:可同时挂载BH1750和OLED显示屏。
-
UART接口:用于与Wi-Fi模块通信。
其性能完全满足多任务处理和外设控制的需求。
(三)传感器模块选型及电路设计
-
RC522 RFID读卡器:13.56MHz频率,用于识别授权的IC卡(M1卡)。安装于车库门外侧,方便车主刷卡。SPI通信方式稳定可靠。
-
HC-SR04超声波传感器:用于检测车库内是否停有车辆。安装于车库内部正中央或对准车位,通过测量传感器到障碍物(车辆)的距离来判断车位状态(例如,距离 < 100cm 有车,距离 > 200cm 无车)。
-
DHT11温湿度传感器:监测车库内部环境。高湿环境易导致车辆和设备受潮锈蚀。
-
BH1750光照传感器:数字型环境光强度传感器,通过I2C直接输出光照度值(lux),比光敏电阻精度更高、更稳定。用于实现照明灯的自动控制。
(四)通信模块选型及配置
选用ESP-01S模块。配置其连接家庭Wi-Fi,并通过MQTT协议与云平台(如Home Assistant、阿里云IoT、涂鸦智能)通信。MQTT的轻量级和发布/订阅模式非常适合本系统的状态上报和远程指令接收。
(五)执行模块选型及驱动电路
(核心:强电控制,安全第一!)
-
继电器模块:用于控制各类220VAC设备。
-
车库门锁/电机:控制车库门升降电机或电插锁的电源。
-
通风设备:控制排风扇或除湿机的电源。
-
照明灯:控制车库顶棚LED灯的电源。
-
重要警告:继电器输出端连接的均为220V强电,必须与STM32的3.3V弱电电路物理隔离,接线需规范并使用绝缘保护。
-
四、软件设计与实现
(一)开发环境搭建
-
IDE: Keil uVision5
-
库: STM32HAL库 + RC522驱动 + BH1750驱动
-
协议: cJSON库(用于MQTT数据打包)
(二)系统软件流程图
(三)系统初始化(代码片段)
// main.c
#include "rc522.h"
#include "hc-sr04.h"
#include "dht11.h"
#include "bh1750.h"
#include "ssd1306.h"
#include "esp8266_mqtt.h"
SPI_HandleTypeDef hspi1;
I2C_HandleTypeDef hi2c1;
UART_HandleTypeDef huart2; // For ESP8266
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
MX_I2C1_Init();
MX_USART2_UART_Init();
OLED_Init();
BH1750_Init();
RC522_Init();
DHT11_Init();
ESP8266_MQTT_Init();
while (1) {
Main_Task();
HAL_Delay(1000); // 主循环周期1秒
}
}
(四)传感器数据采集与处理
void Sensor_ReadTask(void) {
// 1. 读取超声波测距值,判断车位状态
float distance = ULTRASONIC_GetDistance();
is_car_present = (distance < CAR_PRESENCE_THRESHOLD) ? 1 : 0;
// 2. 读取温湿度
DHT11_Read(&temperature, &humidity);
// 3. 读取光照强度
light_level = BH1750_ReadLightLevel();
}
// 超声波测距函数
float ULTRASONIC_GetDistance(void) {
HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET);
HAL_Delay(1); // 持续10us以上高电平
HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET);
// 等待回波引脚变高并计时
while (HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) == GPIO_PIN_RESET);
uint32_t start_time = HAL_GetTick();
while (HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) == GPIO_PIN_SET);
uint32_t end_time = HAL_GetTick();
float time_elapsed = (end_time - start_time) * 1.0; // 单位: ms
// 计算距离 (声音速度 340m/s, 除以2因为是往返距离)
float distance_cm = (time_elapsed * 34000.0) / 2.0 / 1000.0;
return distance_cm;
}
(五)控制功能实现
void Control_Task(void) {
// 1. 环境智能联动 (自动模式)
// 自动照明: 光照暗且有人/车活动(或门打开)时开灯
if (light_level < LIGHT_THRESHOLD_LOW && (is_door_open || is_car_present)) {
HAL_GPIO_WritePin(LIGHT_RELAY_GPIO_Port, LIGHT_RELAY_Pin, GPIO_PIN_SET);
} else if (light_level > LIGHT_THRESHOLD_HIGH || !(is_door_open || is_car_present)) {
// 光照充足或无活动时关灯
HAL_GPIO_WritePin(LIGHT_RELAY_GPIO_Port, LIGHT_RELAY_Pin, GPIO_PIN_RESET);
}
// 自动通风除湿
if (humidity > HUMIDITY_THRESHOLD) {
HAL_GPIO_WritePin(FAN_RELAY_GPIO_Port, FAN_RELAY_Pin, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(FAN_RELAY_GPIO_Port, FAN_RELAY_Pin, GPIO_PIN_RESET);
}
// 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]);
// 检查卡号是否在授权列表中 (列表可存储在STM32 Flash或从云端获取)
if (IsCardAuthorized(card_str)) {
// 执行开门操作
HAL_GPIO_WritePin(DOOR_RELAY_GPIO_Port, DOOR_RELAY_Pin, GPIO_PIN_SET);
HAL_Delay(500); // 维持一段时间高电平以触发开门动作
HAL_GPIO_WritePin(DOOR_RELAY_GPIO_Port, DOOR_RELAY_Pin, GPIO_PIN_RESET);
is_door_open = !is_door_open; // 切换门状态标志
OLED_ShowMessage("Access Granted!");
Buzzer_Beep(1); // 提示音
} else {
OLED_ShowMessage("Access Denied!");
Buzzer_Beep(3); // 错误提示音
}
}
}
五、系统测试与优化
(一)测试方案
-
功能测试:
-
门禁测试:使用授权卡和未授权卡测试开门功能。
-
车位检测测试:将车辆驶入/驶出车库,测试超声波传感器判断是否准确。
-
环境联动测试:遮挡BH1750传感器模拟夜晚,测试灯是否自动打开;向DHT11哈气模拟高湿,测试风扇是否启动。
-
远程控制测试:通过手机App测试远程开门和状态查看功能。
-
-
可靠性测试:
-
压力测试:模拟频繁刷卡开门,测试系统稳定性。
-
网络测试:模拟Wi-Fi中断和恢复,测试系统的重连机制和数据缓存能力。
-
-
环境测试:在真实车库环境中测试,评估超声波传感器对不同车型的适应性,以及环境传感器数据的准确性。
(二)测试结果与分析
预计测试中,超声波车位检测的准确性和抗干扰能力(如车库内杂物、墙壁反射)是主要挑战。RFID读卡距离和角度也需要优化以确保良好的用户体验。强电控制的稳定性和安全性是测试的重中之重。
(三)系统优化
-
算法优化:
-
数据滤波:对超声波测距数据进行中位值平均滤波,剔除偶然误差。
-
防误判逻辑:连续多次检测到有车/无车才改变状态,防止因瞬间干扰导致的误判。
-
-
用户体验优化:
-
语音反馈:增加语音播报模块,在开门、关门、报警时提供语音提示。
-
LED指示灯:在车库内外增加LED状态指示灯,直观显示门状态和车位状态。
-
-
安全性强化:
-
双鉴探测:可增加一个红外热释电传感器(PIR) 与超声波传感器共同判断车位状态,形成“双鉴”探测,极大提高判断准确性,防止误报。
-
开门超时报警:如果门开启超过设定时间(如5分钟),自动报警并通知用户。
-
六、结论与展望
(一)未来展望
-
车牌识别融合:升级为小型摄像头,集成车牌识别(LPR) 功能,实现“RFID + 车牌”双因子认证,安全性更高,并可自动为特定车辆开门。
-
车辆引导系统:增加LED灯带或屏幕指示,引导车主将车辆停入车库最佳位置。
-
能源管理:与家庭光伏系统联动,在阳光充足时自动启动通风设备为车库降温;统计照明和通风能耗。
-
AIoT赋能:在云平台端利用AI分析用户使用习惯,实现预测性控制(如下班前提前开启通风)。
如有侵权,或需要完整代码,请及时联系博主。
更多推荐
所有评论(0)