一、實驗簡介
公交站人流檢測是一項重要的城市交通管理任務,它不僅關系到公交服務的效率和質量,還與城市交通規劃和公共安全緊密相關。首先,公交站人流檢測可以實時反饋乘客流量情況,幫助公交公司了解各線路、各站點的客流需求。其次,公交站人流檢測可以為公交公司制定和優化運營策略提供數據支持。再次,公交站人流檢測可以及時發現擁擠、擁堵等情況,提醒調度中心及時采取措施,保障乘客安全。基于此背景,我們以CW32單片機為核心,采用公交站人流檢測中常見的紅外線檢測技術,設計了一個公交站人流檢測系統,該系統可以連接到網絡獲取當前時間,并將人流數據實時上傳到OneNET云平臺進行遠程監控。
二、實驗器材
本實驗使用到了CW32-48F大學計劃開發板、ESP8266WIFI模塊、E18-D80NK紅外光電開關及Keil5開發環境。
開發板上預留了ESP8266WIFI模塊接口,通過串口與ESP8266通信。
【兩個紅外光電開關與單片機接線】:
藍線 -- GND
棕線 -- 3.3V
黑線 -- PA0、PA4
三、核心代碼
main.c: //單片機頭文件 #include "main.h" //網絡設備 #include "esp8266.h" //網絡協議層 #include "onenet.h" //OneNET //硬件驅動 #include "RTC.h" //CW32RTC #include "BTIM.h" #include "usart.h" #include "Buzzer.h" //板載蜂鳴器 #include "Infrared.h" //紅外光電開關 #include "Lcd_Driver.h" #include "LCD_calculate.h" uint8_t send_flag=0; //數據上云控制位 uint16_t count=0,accumulation=0; //count--當前站內人數,accumulation--累計人數 enum State{ STATE_A, STATE_B, STATE_C, STATE_D, }; //枚舉數據類型,包含四個狀態 void System_Init(void) { Lcd_Init(); //LCD屏初始化 BTIM_Init(); //基本定時器初始化,調控數據上云頻率 Buzzer_Init(); //蜂鳴器初始化,兩個紅外光電開關同時被遮擋時發出聲響警告 Infrared_Init(); //紅外光電開關初始化 Usart1_Init(115200); //串口1,用于串口調試助手打印調試信息 Usart2_Init(115200); //串口2,與ESP8266進行通信 TFT_Welcome(); //開機界面顯示 Gui_DrawFont_GBK16(0,128,GRAY1,WHITE," 網絡連接中 "); ESP8266_Init();//聯網,獲取當前時間,接入OneNET云平臺 RTC_ITConfig(RTC_IT_INTERVAL,ENABLE); //開啟RTC周期中斷(RTC中斷開啟的時機要在esp8266連接到onenet平后之后) Gui_DrawFont_GBK16(0,8,WHITE,BLUE," 公交站人流檢測 "); Gui_DrawLine(0,32,128,32,GRAY1); Gui_DrawFont_GBK16(0,64,WHITE,BLUE," 站內人數:"); TFTShowNumber(4,12,count); Gui_DrawFont_GBK16(0,96,WHITE,BLUE," 累計人數:"); TFTShowNumber(6,12,accumulation); NVIC_EnableIRQ(BTIM1_IRQn); //開啟定時器中斷,中斷周期10ms } int main(void) { uint16_t state=0xffff; //紅外光電開關當前狀態 enum State currentState=STATE_A; //開機為狀態A System_Init(); //系統初始化 while(1) { /*模擬乘客進站的過程: 1.裝置安裝位置:兩紅外光電傳開關一前一后安裝在站口 2.假設站口只允許乘客排隊依次進出 3.乘客進站先遮擋紅外光電開關1 4.乘客繼續前進,離開紅外光電開關1,遮擋紅外光電開關2 5.站內人數+1,累計人數+1 (若過程4中同時遮擋兩個紅外光電開關則蜂鳴器發出警報,等待工作人員解決故障,不計數) */ /*模擬乘客出站的過程: 1.裝置安裝位置:兩紅外光電傳開關一前一后安裝在站口 2.假設站口只允許乘客排隊依次進出 3.乘客出站先遮擋紅外光電開關2 4.乘客繼續前進,離開紅外光電開關2,遮擋紅外光電開關1 5.站內人數-1 (若過程4中同時遮擋兩個紅外光電開關則蜂鳴器發出警報,等待工作人員解決故障,不計數) */ state=CW_GPIOA->IDR & 0x0011; //獲取兩個紅外光電開關數據IO當前狀態 if(state==0x0000) Buzzer_RING; //控制蜂鳴器 else Buzzer_OFF; switch(currentState) //初步模仿狀態機編程模式 { case STATE_A: if(state==0x0011) currentState=STATE_B; break; case STATE_B: if(state==0x0001) currentState=STATE_C; else if(state==0x0010) currentState=STATE_D; break; case STATE_C: if(state==0x0010) {count++;accumulation++;currentState=STATE_A;TFTShowNumber(4,12,count);TFTShowNumber(6,12,accumulation);} break; case STATE_D: if(state==0x0001) {if(count!=0) count--; currentState=STATE_A;TFTShowNumber(4,12,count);} break; } if(send_flag) { OneNet_SendData(); //數據上傳到OneNET ESP8266_Clear(); //清除緩存 send_flag=0; } } }
四、效果演示
連接網絡
審核編輯:湯梓紅
-
單片機
+關注
關注
6065文章
44940瀏覽量
647963 -
檢測系統
+關注
關注
3文章
973瀏覽量
43766 -
串口
+關注
關注
14文章
1586瀏覽量
79247 -
開發板
+關注
關注
25文章
5576瀏覽量
103001 -
CW32
+關注
關注
1文章
242瀏覽量
1133
原文標題:基于CW32的公交站人流檢測系統
文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
基于CW32的門禁綜合系統

基于LABVIEW的公交站點顯示系統的設計
Moxa嵌入式計算機在公交站信息顯示系統中有哪些應用?
CW32單片機在智能馬桶的應用介紹
基于CC1110單片機公交報站系統的設計
公交站預防漏電事故專用監控系統
(畢業設計資料)基于51單片機的公交自動報站系統

評論