• 方案介紹
    • 基于STM32單片機的安檢場所智能人流量統(tǒng)計系統(tǒng)設計
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

基于STM32單片機大型消費場所人流監(jiān)控系統(tǒng)

01/20 13:55
2810
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細資料請聯系.docx

共1個文件

基于STM32單片機的安檢場所智能人流量統(tǒng)計系統(tǒng)設計

項目開發(fā)背景

隨著社會的發(fā)展和城市化進程的加快,各類公共場所的安全管理顯得尤為重要。特別是在機場、火車站、商場、醫(yī)院等場所,如何在保證安全的前提下,提高通行效率,減少排隊等待時間,成為了智能化安檢系統(tǒng)的重要課題。人流量統(tǒng)計系統(tǒng)作為現代智能安檢系統(tǒng)的重要組成部分,能夠實時掌握場所內的人員流動情況,提供更加精確的流量預測,幫助安保人員做出快速響應。利用物聯網技術、傳感器技術、數據存儲與分析技術,能夠為人流量的實時監(jiān)控與預警提供有力支持。

本項目旨在設計一個基于STM32單片機的智能人流量統(tǒng)計系統(tǒng),通過高效的傳感器數據采集和智能化分析,實現場所內人員流動的實時監(jiān)控、體溫檢測、隊列時間預測等功能,確保安全的同時提升通行效率,并通過物聯網平臺實現數據存儲與遠程監(jiān)控。

image-20241225145402358

設計實現的功能

該智能人流量統(tǒng)計系統(tǒng)設計實現的功能如下:

  1. 入場與出場人數統(tǒng)計:利用紅外激光傳感器,分別在入口和出口處檢測并統(tǒng)計人員的流入和流出數量。
  2. 隊列通過時間統(tǒng)計:根據每個人經過時間(30秒)和隊列人數,估算隊列通過所需的總時間,提供給工作人員進行動態(tài)調度。
  3. 液晶屏顯示:通過LCD液晶顯示屏實時顯示當前場所內的人員數量以及預計的排隊時間。
  4. 體溫檢測與報警:通過非接觸式紅外測溫傳感器檢測進入人員的體溫,當體溫超過37.3°C時,啟用蜂鳴器進行報警,并顯示體溫信息。
  5. 語音播報:檢測到人員進入時,系統(tǒng)自動啟用語音播報模塊,提示“請拿好隨身包裹排隊過安檢”;當無人員時,自動關閉播報功能,避免噪音干擾。
  6. 數據上傳與云存儲:通過WIFI模塊與華為云物聯網平臺進行連接,利用MQTT協(xié)議將數據上傳至云端,支持數據存儲、分析及歷史數據回溯。
  7. 網頁端展示:后端服務器通過Python技術實現數據拉取,設計HTML前端頁面,以可視化的形式展示實時數據,支持瀏覽器訪問。

項目硬件模塊組成

1. 主控芯片:STM32F103

  • STM32F103單片機作為主控芯片,具有高性能、低功耗的特點,內置多種外設接口,能夠靈活地連接各類傳感器和模塊,處理復雜的傳感數據并進行控制操作。

2. 紅外激光傳感器

  • 用于檢測進出場所的人流量,紅外激光傳感器具備較高的精度和響應速度,適合安檢場所的高密度人員檢測。

3. 非接觸式紅外測溫傳感器

  • 用于檢測進場人員的體溫,及時發(fā)現體溫異常的人員。該傳感器具備非接觸式、高精度、快速響應等優(yōu)點。

4. LCD液晶顯示屏

  • 用于實時顯示當前的人員流動情況,包括當前人數、隊列通過時間、人員體溫等信息,簡潔直觀地展示關鍵信息。

5. 蜂鳴器

  • 用于體溫異常報警,發(fā)出警示音提示工作人員。

6. 語音播報模塊

  • 用于人員進入時自動播報語音提示,提高通行效率,避免人工干預。

7. WIFI模塊(ESP8266)

  • 用于與云平臺連接,通過MQTT協(xié)議上傳實時數據,支持物聯網云平臺的數據存儲和分析。

8. 華為云物聯網平臺

  • 提供數據存儲與云端展示,用戶可以通過PC端或手機端進行實時查看和遠程管理。

9. 電源管理模塊

設計思路

1. 硬件設計

本系統(tǒng)的硬件設計以STM32F103為主控芯片,其他各類傳感器和模塊通過SPII2C、UART通信方式與STM32單片機連接。主要模塊的接口和工作原理如下:

  • 紅外激光傳感器:分別安裝在入口和出口處,通過檢測激光束的中斷情況來統(tǒng)計入場與出場人員的數量。
  • 非接觸式紅外測溫傳感器:連接至STM32的ADC接口,用于檢測人員體溫,超標時觸發(fā)蜂鳴器報警。
  • LCD液晶顯示屏:通過SPI接口與STM32連接,用于顯示當前人員統(tǒng)計信息和預計排隊時間。
  • 語音播報模塊:采用GPIO控制,通過播放預設的語音提示來引導進入人員。
  • WIFI模塊:通過UART與STM32連接,用于與華為云物聯網平臺通信,將數據實時上傳到云端。
  • 蜂鳴器:連接到STM32的GPIO口,當體溫超標時,蜂鳴器發(fā)出報警聲。

2. 軟件設計

軟件設計分為以下幾個模塊:

  • 傳感器數據采集模塊:定期讀取紅外激光傳感器、體溫傳感器等數據,并進行數據處理與分析。
  • 隊列時間計算模塊:根據已知的每人通行時間(30秒),結合當前隊列人數,計算預計的隊列通過時間。
  • 數據上傳模塊:通過WIFI模塊,將采集的數據(包括入場、出場人數、體溫、預計排隊時間等)上傳到華為云物聯網平臺。
  • 顯示模塊:實時更新液晶顯示屏,顯示當前場內人數、體溫等信息,并根據傳感器反饋的信息動態(tài)顯示。
  • 報警模塊:當體溫超標時,啟用蜂鳴器報警,并通過語音播報模塊播報提示語。

3. 云平臺數據管理

通過物聯網平臺實現數據的存儲和分析。設備將實時采集的數據上傳到云端,云端服務器通過API接口獲取數據并存儲。用戶可以通過瀏覽器訪問前端頁面,查看當前場所的人員流動情況、體溫異常警報、歷史數據分析等。

4. 網頁展示與遠程監(jiān)控

通過Python開發(fā)后端服務器,利用HTML、CSS和JavaScript技術設計前端展示頁面,實時展示各項數據,并支持報警提示。用戶可以通過電腦或手機訪問網頁,查看場所的實時數據并進行遠程監(jiān)控。

系統(tǒng)功能總結

功能編號 功能描述 技術實現
1 入場與出場人數統(tǒng)計 紅外激光傳感器檢測入口與出口處的人員進出情況
2 隊列通過時間統(tǒng)計 根據隊列人數與每人通過的時間進行預測
3 實時顯示人流量數據 LCD液晶顯示屏顯示當前人數、預計排隊時間等信息
4 體溫檢測與報警 非接觸式紅外測溫傳感器檢測體溫,超過37.3°C報警
5 語音播報模塊 語音播報提示入場人員,檢測到無人時自動關閉
6 數據上傳與云存儲 通過WIFI模塊連接華為云物聯網平臺上傳數據
7 數據可視化展示 后端Python服務器拉取云端數據,HTML前端展示

使用的模塊的技術詳情介紹

1. STM32F103

STM32F103系列單片機基于ARM Cortex-M3內核,具有豐富的外設接口,適用于各種實時性要求高的應用。其工作頻率最高可達到72MHz,具有較強的計算能力和較低的功耗,非常適合本項目中的多任務并行處理需求。

2. 紅外激光傳感器

紅外激光傳感器通過發(fā)射和接收紅外激光束來檢測物體的穿越。當有物體穿越激光束時,傳感器會檢測到光的中斷,從而實現人員的統(tǒng)計。該傳感器具有較高的精度和響應速度,適合高密度環(huán)境中的實時檢測。

3. 非接觸式紅外測溫傳感器

該傳感器通過紅外線探測物體(如人體)的溫度,具有非接觸式、高精度和快速響應的特點,非常適合公共場所的體溫篩查。

4. ESP8266 WIFI模塊

ESP8266是一個低成本的WIFI模塊,集成了完整的TCP/IP協(xié)議棧,可通過AT指令控制,方便與STM32進行通信。通過WIFI,ESP8266能夠將采集到的數據上傳到云端,實現遠程監(jiān)控。

總結

本項目基于STM32單片機開發(fā)的智能人流量統(tǒng)計系統(tǒng),成功集成了紅外激光傳感器、紅外測溫傳感器、語音播報模塊、WIFI模塊等多種硬件模塊,結合物聯網技術,實現了實時數據采集、云存儲和可視化展示功能。該系統(tǒng)不僅能夠實時監(jiān)控安檢場所的人流量,還能有效預警體溫異常,為安檢人員提供及時的處理信息,確保公共安全和流通效率。

通過本項目的設計與實現,體現了STM32單片機在智能安檢系統(tǒng)中的強大功能,同時也展示了物聯網技術在實際應用中的巨大潛力。

STM32代碼設計

下面是基于STM32單片機的安檢場所智能人流量統(tǒng)計系統(tǒng)的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();  // 體溫異常,觸發(fā)蜂鳴器
            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) {
    // 系統(tǒng)初始化
    System_Init();
    
    // 主循環(huán)
    while (1) {
        // 檢測入口
        if (Read_InfraredSensor_Entrance()) {
            Handle_People_In();
        }
        
        // 檢測出口
        if (Read_InfraredSensor_Exit()) {
            Handle_People_Out();
        }
        
        // 更新信息顯示
        Display_Info();

    }
}

主要模塊功能說明:

  1. 紅外激光傳感器模塊(入口與出口檢測)
    • 通過InfraredSensor_Init初始化紅外傳感器。
    • 使用Read_InfraredSensor_EntranceRead_InfraredSensor_Exit函數分別讀取入口和出口的紅外傳感器信號,從而判斷人員的進入和離開。
  2. 非接觸式紅外測溫傳感器
    • 通過TemperatureSensor_Init初始化紅外測溫傳感器。
    • 使用Read_Temperature函數獲取當前檢測人員的體溫,如果體溫超過37.3度,則觸發(fā)蜂鳴器警報和語音提示。
  3. LCD顯示模塊
    • 通過LCD_Init初始化LCD顯示屏。
    • 使用LCD_Display_Info函數實時顯示當前場內人數、預計隊列通過時間和檢測到的體溫。
  4. 蜂鳴器模塊
    • 通過Buzzer_Alert觸發(fā)蜂鳴器報警,提醒工作人員體溫異常。
  5. 語音播報模塊
    • 通過Voice_Prompt_Init初始化語音播報模塊。
    • 使用Voice_Prompt_Say函數進行語音提示,檢測到人員進入時播放“請拿好隨身包裹排隊過安檢”,體溫異常時播放“體溫異常,請注意!”。
  6. WIFI和MQTT模塊
    • 通過WiFi_Init初始化WIFI模塊。
    • 通過MQTT_Init初始化MQTT客戶端,連接到物聯網服務器。
    • 使用MQTT_Send_Data函數將實時數據(如入場人數、出場人數、體溫等)上傳到華為云物聯網平臺。
  7. 隊列時間統(tǒng)計
    • 每當人員進場或離場時,計算隊列通過的時間。每個進場人員假定通過時間為30秒,計算并更新預計的隊列通過時間。

函數說明:

  • System_Init: 初始化所有硬件模塊,包括LCD、傳感器、語音播報、WIFI、MQTT等。
  • Display_Info: 更新LCD顯示,顯示當前場內人數、隊列時間和體溫信息。
  • Update_Queue_Time: 更新隊列通過的時間(假設每個人通過時間為30秒)。
  • Handle_People_In: 處理進入人員的統(tǒng)計,檢測體溫,上傳數據到物聯網云端。
  • Handle_People_Out: 處理離開人員的統(tǒng)計,更新當前場內人數。
  • main: 主函數,控制整個系統(tǒng)的運行,定期讀取傳感器數據并處理。

結束語:

這段代碼為安檢場所智能人流量統(tǒng)計系統(tǒng)提供了核心功能的實現,包括人員流動統(tǒng)計、體溫檢測、實時顯示、語音播報、數據上傳等。各子模塊已經假設是獨立實現并正常工作的,系統(tǒng)通過STM32單片機進行高效的控制與數據處理。

  • 更多詳細資料請聯系.docx
    下載

相關推薦