基于STM32单片机的语音控制智能停车场设计
基于STM32单片机的语音控制智能停车场设计
1. 系统功能介绍
随着智能交通与物联网技术的发展,智能停车系统成为现代智慧城市的重要组成部分。传统停车场需要人工管理和人工判断车位占用情况,效率低且易出错。为了实现停车场的自动化与智能化管理,本设计提出一种基于STM32单片机的语音控制智能停车场系统,可通过语音识别实现车位的自动控制,同时配合红外检测实现车位实时状态显示。
本系统以 STM32F103C8T6 单片机为核心,结合 语音识别模块、红外车位检测模块、OLED显示模块、继电器控制模块 等电路,实现停车场车位占用检测与语音控制开关功能,能够有效提升管理效率与用户体验。
1.1 系统主要功能
-
车位检测功能
系统通过红外对管检测各个车位是否有车辆停放,实时判断车位占用状态。共设置三个车位(车位1、车位2、车位3)。 -
信息显示功能
OLED显示屏实时显示三个车位的状态(占用或空闲)、当前停车总数、剩余空位数,方便用户与管理人员直观了解停车场情况。 -
语音控制功能
用户可通过语音模块发出命令,例如“打开1号车位”或“关闭2号车位”,系统识别语音指令后自动控制对应车位的继电器开关,实现智能语音交互。 -
自动统计功能
当检测到车位变化时,系统自动更新车位统计信息并实时显示。
1.2 系统总体构成
系统由以下几部分组成:
- 主控模块:STM32F103C8T6单片机
- 语音识别模块
- 红外对射检测模块
- OLED显示模块
- 继电器控制模块
- 电源电路模块
- 晶振与复位电路
这些模块共同组成一个完整的嵌入式系统,实现停车场车位检测、显示、控制及语音交互的智能化功能。
2. 系统电路设计
系统的硬件设计是整个智能停车场控制系统的基础,采用模块化结构设计,便于功能扩展和维护。以下分别介绍各个功能模块的设计与作用。
2.1 STM32主控电路设计
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的高性能32位单片机,具有低功耗、高运算速度、丰富的外设接口和较强的扩展能力。
主要特性:
- 主频72MHz,运算速度快;
- 内部带有Flash和SRAM,程序存储方便;
- 拥有丰富的I/O口,可连接多种外设;
- 内置多个定时器、USART接口和I²C接口,方便连接语音模块、显示模块等设备。
主要连接关系:
- PINA~PINB:连接红外检测模块输入;
- USART1:连接语音识别模块;
- I2C接口:连接OLED显示屏;
- GPIO口:控制3个继电器模块;
- 电源引脚:由5V电源模块稳压供电。
系统采用外部12MHz晶振作为主时钟,保证系统稳定运行,同时配置复位电路,以防止单片机运行异常。
2.2 语音识别模块电路设计
语音识别模块是系统的交互核心,用于识别用户的语音指令并转换为串口数据发送给STM32。常用模块为 LD3320 或 AI-Thinker语音识别模块,支持离线语音识别功能。
工作原理:
用户通过语音发出命令,如“打开1号车位”或“关闭3号车位”,语音模块识别关键词后,通过串口将特定数据包(如“OPEN1”、“CLOSE3”)发送给STM32。STM32解析接收到的串口数据后,执行对应的车位控制操作。
主要电气连接:
- 模块TXD → STM32 RXD(USART1)
- 模块RXD → STM32 TXD(USART1)
- VCC → 5V电源
- GND → 公共地
模块波特率设为9600bps,采用标准TTL串口通信方式。
2.3 红外车位检测模块电路设计
车位检测部分采用 红外对管检测模块,用于实时检测车位是否有车辆停放。每个车位配备一对红外发射与接收管,当有车辆进入车位时,红外信号被遮挡,接收端输出低电平,单片机据此判断该车位被占用。
模块特性:
- 检测距离可调;
- 输出为数字信号(高/低电平);
- 抗干扰性能好。
信号接线示意:
- 车位1检测信号 → STM32 GPIO PA0
- 车位2检测信号 → STM32 GPIO PA1
- 车位3检测信号 → STM32 GPIO PA2
通过采集3路信号,单片机可以准确判断停车场内每个车位的状态。
2.4 OLED显示模块电路设计
显示部分采用 0.96英寸OLED显示屏,分辨率为128×64,通信方式为I²C。显示内容包括:
- 三个车位的占用状态;
- 当前已停车数量;
- 空闲车位数量。
模块连接:
- SDA → PB7
- SCL → PB6
- VCC → 3.3V
- GND → 公共地
OLED模块功耗低、对比度高,适合实时数据显示。
2.5 继电器控制模块电路设计
系统采用3个继电器模块分别控制3个车位的“开”与“关”。当用户通过语音发出“打开1号车位”指令时,对应继电器吸合,模拟闸门打开;当发出“关闭1号车位”时,继电器断开,闸门关闭。
控制逻辑:
- 输出高电平 → 继电器吸合(打开车位);
- 输出低电平 → 继电器断开(关闭车位)。
连接方式:
- 继电器1控制线 → STM32 PB0
- 继电器2控制线 → STM32 PB1
- 继电器3控制线 → STM32 PB2
继电器驱动电路中使用NPN三极管(如9013)作为开关管,保护单片机I/O口不被高电流损坏。
2.6 电源及辅助电路设计
系统使用5V直流供电,通过AMS1117-3.3稳压芯片为STM32和OLED提供3.3V电源。电源部分增加滤波电容与反接保护二极管,确保系统在复杂环境下稳定运行。
3. 程序设计
系统软件设计采用 模块化结构,分为以下几个部分:
- 主程序模块
- 红外检测模块
- OLED显示模块
- 语音识别模块
- 继电器控制模块
程序采用C语言编写,使用Keil5进行编译,并通过ST-Link下载到STM32单片机中。
3.1 主程序设计
主程序负责系统初始化与循环任务,包括定时扫描车位状态、接收语音命令、更新显示内容、控制继电器等操作。
#include "stm32f10x.h"
#include "oled.h"
#include "usart.h"
#include "relay.h"
#include "infrared.h"
#include "voice.h"int main(void)
{OLED_Init(); // 初始化OLEDUSART1_Init(9600); // 初始化串口通信Infrared_Init(); // 初始化红外检测Relay_Init(); // 初始化继电器控制Voice_Init(); // 初始化语音识别模块while(1){Check_CarState(); // 检测车位状态Display_Info(); // OLED显示信息Voice_Command(); // 处理语音指令}
}
3.2 红外检测程序设计
红外检测模块用于检测车位占用状态,通过读取GPIO输入状态判断是否有车。
uint8_t car_state[3] = {0, 0, 0}; // 0空闲 1占用void Check_CarState(void)
{car_state[0] = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);car_state[1] = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);car_state[2] = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2);
}
3.3 OLED显示程序设计
OLED显示模块负责将车位状态、已停车数和空车位数显示出来。
void Display_Info(void)
{uint8_t used = car_state[0] + car_state[1] + car_state[2];uint8_t free = 3 - used;OLED_ShowString(0,0,"Parking Info:");OLED_ShowString(0,2,"Slot1:");OLED_ShowString(40,2, car_state[0] ? "Occupied" : "Empty");OLED_ShowString(0,3,"Slot2:");OLED_ShowString(40,3, car_state[1] ? "Occupied" : "Empty");OLED_ShowString(0,4,"Slot3:");OLED_ShowString(40,4, car_state[2] ? "Occupied" : "Empty");OLED_ShowString(0,6,"Used:");OLED_ShowNum(40,6,used,1);OLED_ShowString(60,6,"Free:");OLED_ShowNum(100,6,free,1);
}
3.4 语音识别与命令解析程序设计
当语音识别模块识别到指令时,通过串口发送字符串到STM32,单片机解析指令后执行相应动作。
char voice_cmd[10];void Voice_Command(void)
{if (USART1_ReceiveString(voice_cmd)){if (strcmp(voice_cmd,"OPEN1")==0) Relay_On(1);else if (strcmp(voice_cmd,"OPEN2")==0) Relay_On(2);else if (strcmp(voice_cmd,"OPEN3")==0) Relay_On(3);else if (strcmp(voice_cmd,"CLOSE1")==0) Relay_Off(1);else if (strcmp(voice_cmd,"CLOSE2")==0) Relay_Off(2);else if (strcmp(voice_cmd,"CLOSE3")==0) Relay_Off(3);}
}
3.5 继电器控制程序设计
继电器控制函数根据语音指令开关指定车位。
void Relay_On(uint8_t num)
{switch(num){case 1: GPIO_SetBits(GPIOB, GPIO_Pin_0); break;case 2: GPIO_SetBits(GPIOB, GPIO_Pin_1); break;case 3: GPIO_SetBits(GPIOB, GPIO_Pin_2); break;}
}void Relay_Off(uint8_t num)
{switch(num){case 1: GPIO_ResetBits(GPIOB, GPIO_Pin_0); break;case 2: GPIO_ResetBits(GPIOB, GPIO_Pin_1); break;case 3: GPIO_ResetBits(GPIOB, GPIO_Pin_2); break;}
}
4. 系统运行与调试说明
-
语音控制测试
打开语音识别模块电源,确保波特率匹配后,通过语音说出指令,如“打开1号车位”,系统应响应继电器动作。 -
红外检测测试
在车位前放置障碍物或车辆模型,OLED显示应实时变化,反映车位占用状态。 -
显示测试
系统上电后OLED应显示当前停车信息,随着车位状态变化实时更新。 -
综合调试
通过语音命令与红外检测相结合,实现车位自动控制与语音交互,验证系统功能的完整性与可靠性。
5. 总结
本系统实现了语音识别与车位检测相结合的智能停车场控制系统,具有操作直观、功能全面、响应迅速的特点。通过STM32单片机作为主控核心,系统能够稳定地实现车位检测、语音控制、继电器驱动及信息显示。该设计不仅提升了停车场的智能化水平,还具有良好的可扩展性,可进一步拓展为手机APP远程控制或云端停车数据管理系统,为智能交通提供有力的技术支持。