基于STM32单片机的安检场所智能人流量统计系统设计

举报
DS小龙哥 发表于 2024/12/25 14:55:53 2024/12/25
【摘要】 本项目设计一个基于STM32单片机的智能人流量统计系统,通过高效的传感器数据采集和智能化分析,实现场所内人员流动的实时监控、体温检测、队列时间预测等功能,确保安全的同时提升通行效率,并通过物联网平台实现数据存储与远程监控。

 

项目开发背景

随着社会的发展和城市化进程的加快,各类公共场所的安全管理显得尤为重要。特别是在机场、火车站、商场、医院等场所,如何在保证安全的前提下,提高通行效率,减少排队等待时间,成为了智能化安检系统的重要课题。人流量统计系统作为现代智能安检系统的重要组成部分,能够实时掌握场所内的人员流动情况,提供更加精确的流量预测,帮助安保人员做出快速响应。利用物联网技术、传感器技术、数据存储与分析技术,能够为人流量的实时监控与预警提供有力支持。

本项目设计一个基于STM32单片机的智能人流量统计系统,通过高效的传感器数据采集和智能化分析,实现场所内人员流动的实时监控、体温检测、队列时间预测等功能,确保安全的同时提升通行效率,并通过物联网平台实现数据存储与远程监控。

image-20241225145402358

设计实现的功能

该智能人流量统计系统设计实现的功能如下:

  1. 1. 入场与出场人数统计:利用红外激光传感器,分别在入口和出口处检测并统计人员的流入和流出数量。
  2. 2. 队列通过时间统计:根据每个人经过时间(30秒)和队列人数,估算队列通过所需的总时间,提供给工作人员进行动态调度。
  3. 3. 液晶屏显示:通过LCD液晶显示屏实时显示当前场所内的人员数量以及预计的排队时间。
  4. 4. 体温检测与报警:通过非接触式红外测温传感器检测进入人员的体温,当体温超过37.3°C时,启用蜂鸣器进行报警,并显示体温信息。
  5. 5. 语音播报:检测到人员进入时,系统自动启用语音播报模块,提示“请拿好随身包裹排队过安检”;当无人员时,自动关闭播报功能,避免噪音干扰。
  6. 6. 数据上传与云存储:通过WIFI模块与华为云物联网平台进行连接,利用MQTT协议将数据上传至云端,支持数据存储、分析及历史数据回溯。
  7. 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. 1. 红外激光传感器模块(入口与出口检测)
    • • 通过InfraredSensor_Init初始化红外传感器。
    • • 使用Read_InfraredSensor_EntranceRead_InfraredSensor_Exit函数分别读取入口和出口的红外传感器信号,从而判断人员的进入和离开。
  2. 2. 非接触式红外测温传感器
    • • 通过TemperatureSensor_Init初始化红外测温传感器。
    • • 使用Read_Temperature函数获取当前检测人员的体温,如果体温超过37.3度,则触发蜂鸣器警报和语音提示。
  3. 3. LCD显示模块
    • • 通过LCD_Init初始化LCD显示屏。
    • • 使用LCD_Display_Info函数实时显示当前场内人数、预计队列通过时间和检测到的体温。
  4. 4. 蜂鸣器模块
    • • 通过Buzzer_Alert触发蜂鸣器报警,提醒工作人员体温异常。
  5. 5. 语音播报模块
    • • 通过Voice_Prompt_Init初始化语音播报模块。
    • • 使用Voice_Prompt_Say函数进行语音提示,检测到人员进入时播放“请拿好随身包裹排队过安检”,体温异常时播放“体温异常,请注意!”。
  6. 6. WIFI和MQTT模块
    • • 通过WiFi_Init初始化WIFI模块。
    • • 通过MQTT_Init初始化MQTT客户端,连接到物联网服务器。
    • • 使用MQTT_Send_Data函数将实时数据(如入场人数、出场人数、体温等)上传到华为云物联网平台。
  7. 7. 队列时间统计
    • • 每当人员进场或离场时,计算队列通过的时间。每个进场人员假定通过时间为30秒,计算并更新预计的队列通过时间。

函数说明:

  •  System_Init: 初始化所有硬件模块,包括LCD、传感器、语音播报、WIFI、MQTT等。
  •  Display_Info: 更新LCD显示,显示当前场内人数、队列时间和体温信息。
  •  Update_Queue_Time: 更新队列通过的时间(假设每个人通过时间为30秒)。
  •  Handle_People_In: 处理进入人员的统计,检测体温,上传数据到物联网云端。
  •  Handle_People_Out: 处理离开人员的统计,更新当前场内人数。
  •  main: 主函数,控制整个系统的运行,定期读取传感器数据并处理。

结束语:

这段代码为安检场所智能人流量统计系统提供了核心功能的实现,包括人员流动统计、体温检测、实时显示、语音播报、数据上传等。各子模块已经假设是独立实现并正常工作的,系统通过STM32单片机进行高效的控制与数据处理。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。