新思维软件头像
关注
基于STM32的车位引导系统的设计与实现 | STM32+ESP32-CAM+车牌识别 | X504201项目编号 X504201 | 主控 STM32F103C8T6 核心板 |封面图

基于STM32的车位引导系统的设计与实现 | STM32+ESP32-CAM+车牌识别 | X504201项目编号 X504201 | 主控 STM32F103C8T6 核心板 |

项目编号 X504201 | 主控 STM32F103C8T6 核心板 | 视觉采集 ESP32-CAM + OV2640 | 到位检测 四路红外感应模块 | 闸机执行 SG90 舵机 | 本地显示 OLED12864(I2C) | 通信 HTTP POST + TCP Socket | 车牌识别 服务端调用百度在线车牌识别接口 | 服务端 jeesite + SpringBoot + MySQL

摘要:本文介绍一套以服务端车牌识别做决策的车位引导系统。硬件侧以 STM32F103C8T6 为核心板,三路红外感应模块分别盯着车位 1 / 2 / 3,另有一路负责出入感应;车辆到达时 ESP32-CAM 抓拍号牌,JPEG 由模组自己以 HTTP POST 直接上传服务端,图像不经过主控;服务端调用百度在线车牌识别接口返回号牌字符串,主控把识别结论与车位占用状态合并,驱动 SG90 舵机控制闸机放行,OLED12864 就地显示车位总数、剩余车位与收费单价。服务端基于 jeesite 平台与 SpringBoot 框架构建,以 MySQL 完成数据持久化,网页端提供用户管理、车场闸机管理、系统配置、实时数据展示与进出记录查询。


一、项目概述

车位引导的难点不在「数出还剩几个位」,而在「把车、车位与计费对上」。人工发卡只记入口一笔,场内哪些位空着、放行谁说了算、停车费怎么算,往往各管一段。本项目把三件事分到三个位置:红外感应负责「车什么时候到、停在哪个位」,服务端的车牌识别负责「认出这是哪辆车」,主控只负责「汇总状态、驱动闸机与就地显示」。

本文所述系统以 STM32F103C8T6 为主控,四路红外感应模块分别检测三个车位与车辆出入场,红绿 LED 指示车位占用、SG90 舵机做入场方向引导、OLED12864 显示车位概况、蜂鸣器在车位已满时提示,ESP32-CAM 采集现场图像;车牌识别由服务端调用百度在线车牌识别接口完成,服务端基于 jeesite 平台与 SpringBoot 框架构建并以 MySQL 持久化,网页端负责闸机与用户管理、收费标准配置、实时车位数据展示与停车记录查询,把车位检测、图像采集、号牌识别与收费记录整合进同一套可远程查看的闭环。

系统在 2025 年 4 月 完成整机联调,进出记录页存下的 13 条实测记录与五张车牌抓拍样本,就是这条链路真实跑过的痕迹。

1.1 系统技术架构

系统自上而下划分成应用层、服务层、网络层、控制层与感知执行层五个层次。

图 1 系统总体架构图

五层的关键分工是:相机只负责按快门与上传,主控只负责汇总车位状态与驱动舵机,车牌识别始终在服务端完成。这也意味着换一家识别服务、改一条计费规则,硬件侧一行代码都不用动。

1.2 系统功能结构

按部署位置划分为硬件系统、软件系统与交付服务三列。

图 2 系统功能结构图

三列之间只有一条边界:设备侧只做「检测 + 采集 + 执行」,号牌识别、计费规则与记录留存全部放在服务端。


二、硬件系统设计

2.1 硬件系统原理框图

整块板子的中心是 STM32F103C8T6 核心板模块,一侧是输入与采集:四路红外感应模块与 ESP32-CAM 摄像头模组,另一侧是输出与执行:SG90 舵机、OLED12864、蜂鸣器与三组车位指示灯,整机由 TYPE-C 取电口单口供电。

图 3 硬件系统原理框图

从框图可以看出本项目在硬件上的一个关键取舍:图像数据完全不经过主控。红外感应的 DO 只给主控一个边沿事件,真正触发拍照与上传的是模组自己 —— 收到指令后取景,把 JPEG 经 Wi-Fi 以 HTTP POST 直达服务端。主控既不是数据通道,也不需要在固件里解析图像。

2.2 硬件原理图

原理图用嘉立创 EDA 绘制,同时提供 pdf、png、json 与 schdoc 四种格式。本文的接线描述以 json 源文件中的网络标号为准。

图 4 硬件原理图

提示:解析原理图时建议直接读嘉立创 EDA 的 json 源文件。导出的 PDF 文字层只会包含已经连线的部分,而源文件里能取出「引出但未连接」的悬空网络标号。提取方式是从 schematics[0].dataStr.shape 这组字符串里,用 \^\^([\d.\-]+)~([\d.\-]+)\^\^(\S+?)~ 取网络标号坐标,用 spiceSymbolName\([^\]*)\` 取元件型号。

2.3 硬件实物

实物装配以洞洞板(万用板)作底板、杜邦线互连,核心板压在板面中部,四路红外感应模块经排针引出,OLED12864 挂在板面一侧,摄像头模组立在板上,整机由一根 USB 线供电与下载。

图 5 硬件实物总览

OLED 上实测显示四行:车位引导系统、车位总数:35个、剩余车位:33个、收费单价:4元。车位统计与费率是就地可见的,不需要打开网页也能看出车场当前的状态。

图 6 板载器件与 OLED 读数特写

车牌识别的输入是五张车头实拍样本:浙A·X7U36、闽F·UE988、川A·Y17J5、皖F·66666 与 京A·00000,全部为蓝底白字燃油车号牌,与网页端用户管理和进出记录里的牌照数据一一对应 —— 实时图像区里那些识别结果,就是从这类照片里认出来的。

2.4 引脚分配

连接对象信号引脚说明
红外感应·车位 1(U5)DOPA1恰好是 EXTI 第 1 号外部中断线
红外感应·车位 2(U6)DOPA2恰好是 EXTI 第 2 号外部中断线
红外感应·车位 3(U7)DOPA3恰好是 EXTI 第 3 号外部中断线
红外感应·出入场(U8)DOPA4恰好是 EXTI 第 4 号外部中断线
SG90 舵机(U4)SIGNALPA8即 TIM1_CH1,高级定时器通道
OLED12864(U3)SCL / SDAPB6 / PB7与硬件 I2C1 的默认分配完全一致
OLED12864(U3)VCC / GND5V / GND模块由 5 V 供电
ESP32-CAM(U2)IO1(TX) / IO3(RX)PA10 / PA9对应 USART1;模组 5V、GND 另行供电
有源蜂鸣器(BUZZER1)信号端PB15另一端接地;PB15 是 SPI2_MOSI,本设计按普通 GPIO 驱动
车位 1 指示灯红 / 绿PC14 / PC15这两脚同时是外部 32.768 kHz 低速晶振的 OSC32_IN / OSC32_OUT
车位 2 指示灯红 / 黄PB0 / PB1图纸 COLOR 标为 R / Y,实物为红绿双色(见缺口说明)
车位 3 指示灯红 / 黄PB10 / PB11图纸 COLOR 标为 R / Y;这两脚同时是 USART3 的默认 TX / RX

把这几根线排开来看,落点并不随意:

· 四路红外分别落在 PA1 / PA2 / PA3 / PA4,恰好是 EXTI 的 1~4 号中断线,四路互不冲突

· 显示屏 SCL / SDA 落在 PB6 / PB7,正是 硬件 I2C1 的默认分配

· 舵机信号 PA8 恰好是 TIM1_CH1,50 Hz、脉宽 0.5~2.5 ms 的周期信号可用硬件 PWM 直接产生

· 摄像头两线落在 PA9 / PA10,正是 USART1 的收发脚

· 六只指示灯分三组:车位1 用 PC14/PC15(兼作 32.768 kHz 晶振脚)、车位2 用 PB0/PB1、车位3 用 PB10/PB11(兼作 USART3 默认收发)

各路外设各归其位,主控这一侧的负担非常轻。


三、逐线核对原理图得到的四处判断

把嘉立创 EDA 源文件里的网络标号提取出来、与 PDF 文字层逐条对照后,有四处值得单独说明。

3.1 四路红外各自占一条外部中断线,互不冲突

四个红外感应模块的 DO 分别落在 PA1、PA2、PA3 与 PA4,而这四个脚恰好是 STM32F103 的 EXTI 第 1、2、3、4 号外部中断线 —— 四路各占一条,既不需要像引脚号撞车的方案那样牺牲其中一路改走轮询,也不会有两路共用一个中断入口时「一次触发分不清是谁」的问题。车位占用与车辆出入场都是「来了就要立刻记账」的事件,四路各自独占一条中断线,意味着任何一路的状态变化都不会被漏采。

3.2 显示屏的接线与硬件 I2C1 的默认分配完全吻合

OLED12864 的 SCL 接 PB6、SDA 接 PB7,而 STM32F103 的硬件 I2C1 默认功能分配正是 SCL = PB6、SDA = PB7,两者完全一致。这块屏因此具备直接调用片上 I2C1 外设的条件,不必再用通用 IO 去模拟时序 —— 对一块需要持续刷新车位数的屏来说,硬件外设的稳定性比软件模拟省心得多。

3.3 舵机刚好落在高级定时器的通道上

SG90 的信号线接在 PA8 上,也就是 TIM1_CH1。舵机要求的是 50 Hz、脉宽 0.5 ~ 2.5 ms 的周期信号,用一路高级定时器的通道直接产生最直接,不必额外占用通用定时器去凑节拍。本设计用舵机做入场方向引导,转动角度与车位状态绑定。

3.4 六只指示灯分在三组引脚上,其中两只兼作晶振脚

车位 1 用 PC14 / PC15,车位 2 用 PB0 / PB1,车位 3 用 PB10 / PB11。值得注意的是:PC14 与 PC15 同时是外部 32.768 kHz 低速晶振的 OSC32_IN / OSC32_OUT,PB10 与 PB11 同时是 USART3 的默认 TX / RX。本设计把这三组都当普通 GPIO 用,因此若将来要启用外部低速晶振或 USART3,需要重新分配这三组灯脚。蜂鸣器所在的 PB15 是 SPI2_MOSI,同样按普通 GPIO 驱动 —— 有源蜂鸣器只需高低电平,本来也不需要用 PWM。

以上四条并非对设计的质疑,而是对既有连线的如实描述 —— 本文只记录原理图上真实存在的连接,不对作者的意图作推测。

四、通信链路与数据交互

4.1 通信参数

链路协议 / 方式说明
无线承载Wi-Fi 2.4 GHz(STA 模式)默认热点名 8266wifi、密码 123456789;说明文件里特别注明需使用电脑开热点
图像上传HTTP POST(REST 方式)相机端把拍到的 JPEG 直接 POST 到服务端的上传接口,不经过主控转发
指令通道TCP Socket服务端实现 tcpsocket 服务端,与硬件周期性同步数据、下发指令
车牌识别服务端调用百度在线车牌识别接口号牌识别在服务端完成,识别结果回写停车记录;硬件侧不做识别
服务端技术栈jeesite 平台 + Java / SpringBoot / MySQL / Bootstrap网页端与管理接口都构建在这一套框架上,数据以 MySQL 持久化
固件开发Keil 5STM32F103C8T6 固件工程在 Keil 5 下编译并烧录
缴费入口网页端弹出的缴费图形码说明文件写明缴费时手机需连上同一个 8266wifi 热点,因此该入口只在同一局域网内可用

相机端保存的配置原文如下(局域网地址,仅供同网段调试参考):

ssid:8266wifi
pass:123456789
server IP:192.168.137.250
server port:19214
rest url:http://192.168.137.250:8889/f/esp32/upload
debug mode:false
word mode: Periodic photo taking

抓拍模式默认为周期拍照(Periodic photo taking),也可由红外感应触发单次抓拍。

4.2 数据交互时序

以「一辆车驶向出入口」为例,整个过程分成十二步:出入感应检测到车辆、边沿事件进主控、发出拍照指令、图像以 HTTP POST 直传服务端、服务端建立进出记录、调用百度在线车牌识别接口、号牌结论写入记录、结论经 TCP Socket 回传、主控合并车位占用状态判定、驱动舵机控制闸机、OLED 与指示灯刷新、记录落库。

图 7 系统数据交互时序图

这张图里有两处值得展开。第一处是「主控全程不搬运图像数据」:JPEG 从模组直接进网络,主控只是事件的触发者,采集链路在主控这一侧非常轻。第二处是「认车结论不依赖硬件」:识别接口的调用发生在服务端,硬件侧既没有模型也没有号牌库。


五、软件系统与界面功能

5.1 界面字段

界面分组字段与说明
用户管理姓名 / 电话 / 车辆牌照 / 更新时间 / 操作 — 按姓名与电话检索,右上角另有「+新增」;「车辆牌照」一栏把车主与车牌绑定起来
编辑用户姓名 / 电话 / 车辆牌照 — 弹层页头写着「基本信息【手机号码将作为登录的账户信息】」,提交前为「保存」「关闭」两个按钮
车场闸机管理终端编号 / 终端名称 / 安装地址 / 车位 1 / 车位 2 / 车位 3 / online / 更新时间 / 操作 — 登记每一台闸机终端的编号、名称、安装地址与三个车位的实时占用情况
系统配置参数名称 / 类型 / 参数项 / 参数值 / 备注 / 更新时间 / 操作 — 以「参数名称 / 类型 / 参数项 / 参数值」四列维护收费单价与各停车场编号
实时数据展示车位总数 / 空闲车位 / 闸机状态 / 收费价格 + 三个车位卡 + 车场参数设定 + 实时图像 — 顶端给出更新时间与车场编号下拉,其后是四张统计卡、三张车位卡与车场参数设定区
进出记录查询车牌 / 类型 / 用户 / 电话 / 入库照片 / 入库时间 / 出库照片 / 出库时间 / 停车时长(分钟) / 单价(元/小时) / 收费金额(元) / 闸机编号 / 备注 / 操作 — 一次进出留一条记录,同时带出车辆信息与收费信息,查询条件为车牌号码

侧边菜单共五项:用户管理 / 车场闸机管理 / 系统配置 / 实时数据展示 / 进出记录查询。其中「系统配置」只有 4 条记录,却决定了费率与车场规模。

5.2 登录页与实时数据展示

登录页标题「车位引导系统」,字段只有「登录账号」「登录密码」两项。

图 8 登录页与实时数据展示页

实时数据展示页顶端给出更新时间与车场编号,中部是四张状态卡与三个车位卡,下面依次是车场参数设定区与实时图像区。实测这一帧为:更新时间 2025-04-22 20:22:48、车场编号 停车场出入闸A、车位总数 3、空闲车位 0、闸机状态 关闭、收费价格 3元/小时,三个车位卡均为空闲。

必须说明:网页端「车位总数 3」是演示环境按三个模拟车位登记的口径,而终端 OLED 实拍的「车位总数 35个 / 剩余车位 33个」是屏幕固化的演示画面,两处口径不一致,本文如实并列、不作统一。

车场参数设定区共三组:收费价格填入数值后点确定即生效;远程开闸提供「每次开闸 / 常开 / 关闭」三档;缴费入口一栏提供「显示缴费码」按钮。实时图像区按时间横向排出最近五张车牌抓拍:皖F·66666、京A·00000、苏A·X7U34、闽F·UE988 与一张空位。

5.3 用户管理与车场闸机管理

图 9 用户管理页与车场闸机管理页

用户管理页实测注册了 5 条记录,车辆牌照依次为 陕A00000、川AY17J5、浙AX7U36、浙D88888 与未填写。编辑用户弹层的页头写着 基本信息【手机号码将作为登录的账户信息】,也就是说手机号同时承担账号与联系方式两个角色;「车辆牌照」一栏则把车牌与人绑定,供进出记录按「内部 / 访客」归类。

车场闸机管理页实测只有 1 台:终端编号 ZDBH01、终端名称 停车场出入闸A、安装地址 xxx广场、车位 1 / 2 / 3 均为 空闲、online 状态 在线、更新时间 2025-04-22 20:22:13。表格把三个车位的占用状态直接铺进列里 —— 加装第二台闸机时,后台不需要改代码,登记一条即可。

5.4 系统配置与缴费入口

图 10 系统配置页与缴费入口弹层

系统配置页共 4 条,逐条列出如下:

单价      tcs1  sfdj  3      <- 收费单价
停车场A   tcs1  tc1   1      <- 车位数配置
停车场B   tcs1  tc2   1
停车场C   tcs1  tc3   1

费率与车场规模都以配置项形式落库 —— 改单价是改一条记录,加一个停车场是再加一条。

缴费入口弹层的结构是:顶部一行红字提示「请先连接电脑热点后再支付」,标题「支付停车费」,副标题「提前支付,出口不排队」,图形码下方注明支持的支付渠道(支付宝、APP 等)。把它与实时数据展示页的「显示缴费码」按钮连起来看,缴费这条支路的设计意图就清楚了 —— 局域网环境里车辆端要先连上热点,才能访问到支付页。

5.5 进出记录查询

图 11 进出记录查询页

实测该查询共 13 条记录,每页显示 20 条。可见样本里既有访客也有内部车辆:

京A00000   访客   (无用户无电话)
浙AX7U36   内部   萧萌萌
闽FUE988   访客
川AY17J5   内部   罗建政

其中一条出库于 2025-04-22 的记录完整走完了计费:停车 1 分钟、单价 4、收费金额 4、闸机编号 ZDBH01、备注「已缴费」;其余多数条目停车 0 分钟、单价 4、收费 0。

这张表有两处值得留意。一是「类型」一栏把车分成了「内部」与「访客」两类:内部车能在用户管理页找到车牌与人的绑定,访客车则只有车牌没有用户 —— 计费规则由此分岔。二是「入库照片 / 出库照片」两列都是缩略图,说明每一次进出都留了影像。

说明:本项目界面截图含真实手机号,已在交付前统一作不可逆遮蔽(马赛克 + 高斯模糊)。遮蔽后经高频细节能量自校验,各遮蔽区域降至原值的 0.1% 以下。

六、终端屏幕与车牌识别样本

硬件实拍里 OLED 读数清晰可辨,车牌样本与后台数据一一对应。

图 12 终端 OLED 读数与车牌识别样本

把这两组证据放在一起看,可以说清楚一件事:屏幕上的车位统计是主控写上去的实时状态,而识别样本里的号牌与进出记录页、用户管理页里的牌照字段完全一致 —— 整条「抓拍—识别—落库」链路的输入与输出都对上了。


七、系统视频展示

演示视频完整记录了系统从登录、查看车位状态,到车辆到达、触发拍照、服务端识别、闸机放行的全过程。

图 13 演示视频封面

视频里可以重点看三处:一是车辆到达检测位到屏幕出现识别结果之间的停顿,这段时间正是图像上传与车牌识别在服务端跑;二是实时数据展示页状态卡与车位卡的刷新,占用与空闲一目了然;三是 OLED 上车位总数与剩余车位的变化,它与网页端实时数据展示页是同一份状态的两种呈现。


八、交付内容

交付项形式
硬件实物已装配并完成联调的整机(洞洞板 + 杜邦线)
程序源码STM32F103C8T6 固件工程与 Java 服务端 + 网页端工程
硬件原理图嘉立创 EDA 源文件(json / schdoc)及导出的图像与文档
演示视频系统完整运行的演示录像
技术支持远程协助环境搭建、程序调试与小规模修改答疑

项目编号 X504201。本文所述系统已完成实测验证,相关技术问题可在评论区交流。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/flyaimo/article/details/166991877

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--