基于STM32单片机的语音控制智能停车场设计
本文介绍了一种基于STM32F103C8T6单片机的语音控制智能停车场系统。该系统通过红外对管检测车位状态,OLED屏幕实时显示车位信息,并支持语音控制车位开关。系统核心功能包括:1)3个车位的红外检测;2)OLED显示车位状态;3)语音识别控制(如"打开1号车位");4)继电器模拟车位闸机控制。采用STM32最小系统作为主控,配合红外对管、OLED、继电器和语音识别模块实现智
1 系统功能介绍
本系统是一个基于 STM32F103C8T6 单片机 的语音控制智能停车场设计。其主要特点是将 红外对管车位检测、OLED 屏幕显示、继电器车位控制、语音识别指令 等功能结合在一起,形成一个小型智能化停车场管理与控制系统。
在传统的停车场中,车位的占用情况往往需要通过人工巡查或摄像头识别,系统复杂且成本较高。而本设计通过 红外对管检测模块 来判断车位是否被占用,并实时将状态显示在 OLED 屏幕 上。同时,用户可以通过 语音识别模块 下达指令,例如“打开 1 号车位”或“关闭 2 号车位”,单片机解析语音信号后通过继电器执行开关操作,模拟车位闸机的开启与关闭。
系统的主要功能包括:
- 车位占用检测:利用红外对管实时检测车位状态,支持 3 个车位的管理;
- 信息显示:OLED 实时显示车位状态、已占用车位数、剩余空车位数;
- 语音控制:通过语音识别模块识别用户指令,控制相应车位开关;
- 继电器模拟车位开关:通过继电器驱动车位栏杆,实现车位开闭控制。
该设计简化了停车场管理逻辑,适合中小型停车区域使用,也为进一步的智能化停车场系统提供了基础。
2 系统电路设计
2.1 STM32F103C8T6 最小系统
核心控制器为 STM32F103C8T6,其内部搭载 ARM Cortex-M3 内核,主频 72MHz,Flash 64KB,RAM 20KB,拥有丰富的 GPIO、串口、I2C、ADC 接口。
- 复位电路:采用上电自动复位和手动复位按钮;
- 晶振电路:外部 8MHz 晶振,内部倍频到 72MHz,确保系统运行稳定;
- 电源电路:系统由 5V 电源供电,经 AMS1117 稳压至 3.3V,为单片机及其他外设供电。
2.2 车位检测电路(红外对管模块)
红外对管由发射管和接收管组成,发射端持续发射红外光,当有车辆停入时,光路被遮挡,接收管无法接收红外信号,从而输出电平变化。
- 输出信号:通常为数字电平,高电平表示车位空闲,低电平表示车位被占用;
- 接口方式:每个车位的红外对管输出接入 STM32 的 GPIO 输入端口;
- 应用逻辑:系统通过检测 3 个 GPIO 状态判断 1、2、3 号车位的占用情况。
2.3 OLED 显示电路
采用 0.96 英寸 OLED 显示屏,分辨率 128x64,通信接口为 I2C。
-
显示内容:
- 每个车位的状态(占用/空闲);
- 总车位数;
- 已占用车位数;
- 空闲车位数。
-
作用:方便管理员与用户实时查看停车情况。
2.4 继电器控制电路
继电器在系统中模拟车位栏杆的开关:
- 输入:由 STM32 GPIO 提供高低电平控制信号;
- 驱动电路:采用三极管放大电路驱动继电器;
- 功能:当语音指令要求开启某个车位时,对应继电器闭合,相当于打开车位闸机;当语音指令要求关闭时,继电器断开,车位关闭。
2.5 语音识别电路
语音识别模块负责将用户的语音指令转换为串口数据传输给 STM32。
-
常用模块:LD3320、Elechouse 语音识别模块等;
-
通信接口:通过 UART 串口与 STM32 通信,波特率 9600bps;
-
识别内容:
- “打开 1 号车位” → 控制继电器 1 动作;
- “关闭 2 号车位” → 控制继电器 2 动作;
- “打开 3 号车位” → 控制继电器 3 动作。
-
应用逻辑:STM32 接收字符串并进行解析,根据关键字执行车位控制。
3 程序设计
3.1 主程序框架
系统运行流程:
初始化 → 检测车位状态 → 更新 OLED 显示 → 接收语音指令 → 控制继电器动作。
#include "stm32f10x.h"
#include "oled.h"
#include "usart.h"
#include "delay.h"
#include "relay.h"
uint8_t carStatus[3] = {0}; // 0表示空闲,1表示占用
uint8_t usedCount = 0;
uint8_t freeCount = 3;
int main(void)
{
SystemInit();
OLED_Init();
USART1_Init(9600);
Relay_Init();
GPIO_Init_All();
OLED_ShowString(0,0,"Smart Parking");
while(1)
{
// 检测车位
carStatus[0] = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
carStatus[1] = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);
carStatus[2] = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2);
usedCount = carStatus[0] + carStatus[1] + carStatus[2];
freeCount = 3 - usedCount;
OLED_ShowString(0,2,"Used:");
OLED_ShowNum(40,2,usedCount,1);
OLED_ShowString(0,4,"Free:");
OLED_ShowNum(40,4,freeCount,1);
// 语音指令接收与处理
USART1_ReceiveCommand();
delay_ms(200);
}
}
3.2 OLED 显示程序
void OLED_Update(uint8_t *status)
{
OLED_ShowString(0,0,"Parking Status:");
for(int i=0;i<3;i++)
{
if(status[i] == 1)
OLED_ShowString(0,2+i*2,"Car"+i+" Used");
else
OLED_ShowString(0,2+i*2,"Car"+i+" Free");
}
}
说明:该函数实时更新车位状态,分别显示三个车位是否被占用。
3.3 继电器控制程序
void Relay_Control(uint8_t num, uint8_t state)
{
switch(num)
{
case 1:
if(state) GPIO_SetBits(GPIOB, GPIO_Pin_0);
else GPIO_ResetBits(GPIOB, GPIO_Pin_0);
break;
case 2:
if(state) GPIO_SetBits(GPIOB, GPIO_Pin_1);
else GPIO_ResetBits(GPIOB, GPIO_Pin_1);
break;
case 3:
if(state) GPIO_SetBits(GPIOB, GPIO_Pin_2);
else GPIO_ResetBits(GPIOB, GPIO_Pin_2);
break;
}
}
说明:通过控制 GPIO 高低电平,实现继电器的闭合与断开。
3.4 语音识别串口解析程序
void USART1_ReceiveCommand(void)
{
char buffer[20];
USART_ReadLine(buffer);
if(strstr(buffer,"open1")) Relay_Control(1,1);
if(strstr(buffer,"close1")) Relay_Control(1,0);
if(strstr(buffer,"open2")) Relay_Control(2,1);
if(strstr(buffer,"close2")) Relay_Control(2,0);
if(strstr(buffer,"open3")) Relay_Control(3,1);
if(strstr(buffer,"close3")) Relay_Control(3,0);
}
说明:语音识别模块识别用户的语音命令后,将对应的文本通过串口发送到单片机。单片机解析字符串,提取关键字,控制相应继电器。
4 总结
本系统基于 STM32F103 单片机,集成了 车位检测、OLED 显示、语音识别控制与继电器驱动 四大功能模块,实现了一个小型智能停车场的雏形。
与传统停车场相比,本系统具有以下优势:
- 实时车位检测:红外对管模块能够快速检测车位是否被占用;
- 直观信息显示:OLED 屏幕实时显示车位状态和空闲数量,方便使用者查看;
- 语音控制交互:用户可通过语音直接控制车位闸机,提高智能化程度;
- 系统扩展性强:未来可增加更多车位模块、接入 GSM 短信报警、手机 APP 联动,实现远程停车管理。
该设计在功能完整性和实用性上具有很高的应用价值,同时也为后续研究 智能交通、物联网停车场 提供了良好的实验平台。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)