基于STM32单片机的安检场所智能人流量统计系统设计
项目开发背景
随着社会的发展和城市化进程的加快,各类公共场所的安全管理显得尤为重要。特别是在机场、火车站、商场、医院等场所,如何在保证安全的前提下,提高通行效率,减少排队等待时间,成为了智能化安检系统的重要课题。人流量统计系统作为现代智能安检系统的重要组成部分,能够实时掌握场所内的人员流动情况,提供更加精确的流量预测,帮助安保人员做出快速响应。利用物联网技术、传感器技术、数据存储与分析技术,能够为人流量的实时监控与预警提供有力支持。
本项目设计一个基于STM32单片机的智能人流量统计系统,通过高效的传感器数据采集和智能化分析,实现场所内人员流动的实时监控、体温检测、队列时间预测等功能,确保安全的同时提升通行效率,并通过物联网平台实现数据存储与远程监控。
设计实现的功能
该智能人流量统计系统设计实现的功能如下:
- 1. 入场与出场人数统计:利用红外激光传感器,分别在入口和出口处检测并统计人员的流入和流出数量。
- 2. 队列通过时间统计:根据每个人经过时间(30秒)和队列人数,估算队列通过所需的总时间,提供给工作人员进行动态调度。
- 3. 液晶屏显示:通过LCD液晶显示屏实时显示当前场所内的人员数量以及预计的排队时间。
- 4. 体温检测与报警:通过非接触式红外测温传感器检测进入人员的体温,当体温超过37.3°C时,启用蜂鸣器进行报警,并显示体温信息。
- 5. 语音播报:检测到人员进入时,系统自动启用语音播报模块,提示“请拿好随身包裹排队过安检”;当无人员时,自动关闭播报功能,避免噪音干扰。
- 6. 数据上传与云存储:通过WIFI模块与华为云物联网平台进行连接,利用MQTT协议将数据上传至云端,支持数据存储、分析及历史数据回溯。
- 7. 网页端展示:后端服务器通过Python技术实现数据拉取,设计HTML前端页面,以可视化的形式展示实时数据,支持浏览器访问。
项目硬件模块组成
1. 主控芯片:STM32F103
- • STM32F103单片机作为主控芯片,具有高性能、低功耗的特点,内置多种外设接口,能够灵活地连接各类传感器和模块,处理复杂的传感数据并进行控制操作。
2. 红外激光传感器
- • 用于检测进出场所的人流量,红外激光传感器具备较高的精度和响应速度,适合安检场所的高密度人员检测。
3. 非接触式红外测温传感器
- • 用于检测进场人员的体温,及时发现体温异常的人员。该传感器具备非接触式、高精度、快速响应等优点。
4. LCD液晶显示屏
- • 用于实时显示当前的人员流动情况,包括当前人数、队列通过时间、人员体温等信息,简洁直观地展示关键信息。
5. 蜂鸣器
- • 用于体温异常报警,发出警示音提示工作人员。
6. 语音播报模块
- • 用于人员进入时自动播报语音提示,提高通行效率,避免人工干预。
7. WIFI模块(ESP8266)
- • 用于与云平台连接,通过MQTT协议上传实时数据,支持物联网云平台的数据存储和分析。
8. 华为云物联网平台
- • 提供数据存储与云端展示,用户可以通过PC端或手机端进行实时查看和远程管理。
9. 电源管理模块
- • 提供5V稳定电源,为系统的所有模块供电。
设计思路
1. 硬件设计
本系统的硬件设计以STM32F103为主控芯片,其他各类传感器和模块通过SPI、I2C、UART等通信方式与STM32单片机连接。主要模块的接口和工作原理如下:
- • 红外激光传感器:分别安装在入口和出口处,通过检测激光束的中断情况来统计入场与出场人员的数量。
- • 非接触式红外测温传感器:连接至STM32的ADC接口,用于检测人员体温,超标时触发蜂鸣器报警。
- • LCD液晶显示屏:通过SPI接口与STM32连接,用于显示当前人员统计信息和预计排队时间。
- • 语音播报模块:采用GPIO控制,通过播放预设的语音提示来引导进入人员。
- • WIFI模块:通过UART与STM32连接,用于与华为云物联网平台通信,将数据实时上传到云端。
- • 蜂鸣器:连接到STM32的GPIO口,当体温超标时,蜂鸣器发出报警声。
2. 软件设计
软件设计分为以下几个模块:
- • 传感器数据采集模块:定期读取红外激光传感器、体温传感器等数据,并进行数据处理与分析。
- • 队列时间计算模块:根据已知的每人通行时间(30秒),结合当前队列人数,计算预计的队列通过时间。
- • 数据上传模块:通过WIFI模块,将采集的数据(包括入场、出场人数、体温、预计排队时间等)上传到华为云物联网平台。
- • 显示模块:实时更新液晶显示屏,显示当前场内人数、体温等信息,并根据传感器反馈的信息动态显示。
- • 报警模块:当体温超标时,启用蜂鸣器报警,并通过语音播报模块播报提示语。
3. 云平台数据管理
通过物联网平台实现数据的存储和分析。设备将实时采集的数据上传到云端,云端服务器通过API接口获取数据并存储。用户可以通过浏览器访问前端页面,查看当前场所的人员流动情况、体温异常警报、历史数据分析等。
4. 网页展示与远程监控
通过Python开发后端服务器,利用HTML、CSS和JavaScript技术设计前端展示页面,实时展示各项数据,并支持报警提示。用户可以通过电脑或手机访问网页,查看场所的实时数据并进行远程监控。
系统功能总结
功能编号 | 功能描述 | 技术实现 |
1 | 入场与出场人数统计 | 红外激光传感器检测入口与出口处的人员进出情况 |
2 | 队列通过时间统计 | 根据队列人数与每人通过的时间进行预测 |
3 | 实时显示人流量数据 | LCD液晶显示屏显示当前人数、预计排队时间等信息 |
4 | 体温检测与报警 | 非接触式红外测温传感器检测体温,超过37.3°C报警 |
5 | 语音播报模块 | 语音播报提示入场人员,检测到无人时自动关闭 |
6 | 数据上传与云存储 | 通过WIFI模块连接华为云物联网平台上传数据 |
7 | 数据可视化展示 | 后端Python服务器拉取云端数据,HTML前端展示 |
使用的模块的技术详情介绍
1. STM32F103
STM32F103系列单片机基于ARM Cortex-M3内核,具有丰富的外设接口,适用于各种实时性要求高的应用。其工作频率最高可达到72MHz,具有较强的计算能力和较低的功耗,非常适合本项目中的多任务并行处理需求。
2. 红外激光传感器
红外激光传感器通过发射和接收红外激光束来检测物体的穿越。当有物体穿越激光束时,传感器会检测到光的中断,从而实现人员的统计。该传感器具有较高的精度和响应速度,适合高密度环境中的实时检测。
3. 非接触式红外测温传感器
该传感器通过红外线探测物体(如人体)的温度,具有非接触式、高精度和快速响应的特点,非常适合公共场所的体温筛查。
4. ESP8266 WIFI模块
ESP8266是一个低成本的WIFI模块,集成了完整的TCP/IP协议栈,可通过AT指令控制,方便与STM32进行通信。通过WIFI,ESP8266能够将采集到的数据上传到云端,实现远程监控。
总结
本项目基于STM32单片机开发的智能人流量统计系统,成功集成了红外激光传感器、红外测温传感器、语音播报模块、WIFI模块等多种硬件模块,结合物联网技术,实现了实时数据采集、云存储和可视化展示功能。该系统不仅能够实时监控安检场所的人流量,还能有效预警体温异常,为安检人员提供及时的处理信息,确保公共安全和流通效率。
通过本项目的设计与实现,体现了STM32单片机在智能安检系统中的强大功能,同时也展示了物联网技术在实际应用中的巨大潜力。
STM32代码设计
下面是基于STM32单片机的安检场所智能人流量统计系统的main.c
代码示例。在本代码中,重点是如何将这些模块结合起来,处理数据,显示信息并上传到物联网平台。
#include "stm32f10x.h"
#include "lcd.h"
#include "temperature_sensor.h" // 非接触式红外测温传感器接口
#include "infrared_sensor.h" // 红外激光传感器接口
#include "wifi.h" // WIFI模块接口
#include "buzzer.h" // 蜂鸣器接口
#include "voice_prompt.h" // 语音播报接口
#include "mqtt.h" // MQTT接口
#define MAX_PEOPLE_IN 100 // 最大允许人数
#define MAX_PEOPLE_OUT 100 // 最大允许人数
uint16_t people_in_count = 0; // 当前进入人数
uint16_t people_out_count = 0; // 当前离开人数
uint16_t current_people_count = 0; // 当前场内人数
float current_temperature = 0.0; // 当前体温
uint16_t queue_time = 0; // 队列通过时间(秒)
// 外部函数声明
extern void InfraredSensor_Init(void);
extern uint8_t Read_InfraredSensor_Entrance(void);
extern uint8_t Read_InfraredSensor_Exit(void);
extern void TemperatureSensor_Init(void);
extern float Read_Temperature(void);
extern void LCD_Init(void);
extern void LCD_Display_Info(uint16_t people_count, uint16_t time, float temp);
extern void Buzzer_Alert(void);
extern void Voice_Prompt_Init(void);
extern void Voice_Prompt_Say(char *message);
extern void WiFi_Init(void);
extern void MQTT_Init(void);
extern void MQTT_Send_Data(char *topic, char *data);
void System_Init(void) {
// 初始化硬件模块
LCD_Init();
InfraredSensor_Init();
TemperatureSensor_Init();
Voice_Prompt_Init();
WiFi_Init();
MQTT_Init();
}
void Display_Info(void) {
// 更新LCD显示
LCD_Display_Info(current_people_count, queue_time, current_temperature);
}
void Update_Queue_Time(void) {
// 计算队列通过时间(假设每人通过时间为30秒)
queue_time = current_people_count * 30;
}
void Handle_People_In(void) {
if (people_in_count < MAX_PEOPLE_IN) {
people_in_count++;
current_people_count = people_in_count - people_out_count;
Update_Queue_Time();
// 检测体温
current_temperature = Read_Temperature();
if (current_temperature > 37.3) {
Buzzer_Alert(); // 体温异常,触发蜂鸣器
Voice_Prompt_Say("体温异常,请注意!");
} else {
Voice_Prompt_Say("请拿好随身包裹排队过安检");
}
// 上传数据到云
char data[100];
snprintf(data, sizeof(data), "{\"people_in\":%d, \"people_out\":%d, \"temperature\":%.2f}", people_in_count, people_out_count, current_temperature);
MQTT_Send_Data("security/people_count", data);
}
}
void Handle_People_Out(void) {
if (people_out_count < people_in_count) {
people_out_count++;
current_people_count = people_in_count - people_out_count;
Update_Queue_Time();
}
}
int main(void) {
// 系统初始化
System_Init();
// 主循环
while (1) {
// 检测入口
if (Read_InfraredSensor_Entrance()) {
Handle_People_In();
}
// 检测出口
if (Read_InfraredSensor_Exit()) {
Handle_People_Out();
}
// 更新信息显示
Display_Info();
}
}
主要模块功能说明:
- 1. 红外激光传感器模块(入口与出口检测):
- • 通过
InfraredSensor_Init
初始化红外传感器。 - • 使用
Read_InfraredSensor_Entrance
和Read_InfraredSensor_Exit
函数分别读取入口和出口的红外传感器信号,从而判断人员的进入和离开。 - 2. 非接触式红外测温传感器:
- • 通过
TemperatureSensor_Init
初始化红外测温传感器。 - • 使用
Read_Temperature
函数获取当前检测人员的体温,如果体温超过37.3度,则触发蜂鸣器警报和语音提示。 - 3. LCD显示模块:
- • 通过
LCD_Init
初始化LCD显示屏。 - • 使用
LCD_Display_Info
函数实时显示当前场内人数、预计队列通过时间和检测到的体温。 - 4. 蜂鸣器模块:
- • 通过
Buzzer_Alert
触发蜂鸣器报警,提醒工作人员体温异常。 - 5. 语音播报模块:
- • 通过
Voice_Prompt_Init
初始化语音播报模块。 - • 使用
Voice_Prompt_Say
函数进行语音提示,检测到人员进入时播放“请拿好随身包裹排队过安检”,体温异常时播放“体温异常,请注意!”。 - 6. WIFI和MQTT模块:
- • 通过
WiFi_Init
初始化WIFI模块。 - • 通过
MQTT_Init
初始化MQTT客户端,连接到物联网服务器。 - • 使用
MQTT_Send_Data
函数将实时数据(如入场人数、出场人数、体温等)上传到华为云物联网平台。 - 7. 队列时间统计:
- • 每当人员进场或离场时,计算队列通过的时间。每个进场人员假定通过时间为30秒,计算并更新预计的队列通过时间。
函数说明:
- •
System_Init
: 初始化所有硬件模块,包括LCD、传感器、语音播报、WIFI、MQTT等。 - •
Display_Info
: 更新LCD显示,显示当前场内人数、队列时间和体温信息。 - •
Update_Queue_Time
: 更新队列通过的时间(假设每个人通过时间为30秒)。 - •
Handle_People_In
: 处理进入人员的统计,检测体温,上传数据到物联网云端。 - •
Handle_People_Out
: 处理离开人员的统计,更新当前场内人数。 - •
main
: 主函数,控制整个系统的运行,定期读取传感器数据并处理。
结束语:
这段代码为安检场所智能人流量统计系统提供了核心功能的实现,包括人员流动统计、体温检测、实时显示、语音播报、数据上传等。各子模块已经假设是独立实现并正常工作的,系统通过STM32单片机进行高效的控制与数据处理。
- 点赞
- 收藏
- 关注作者
评论(0)