一、实验简介
1.公交站人流检测是一项重要的城市交通管理任务,它不仅关系到公交服务的效率和质量,还与城市交通规划和公共安全紧密相关。首先,公交站人流检测可以实时反馈乘客流量情况,帮助公交公司了解各线路、各站点的客流需求。其次,公交站人流检测可以为公交公司制定和优化运营策略提供数据支持。再次,公交站人流检测可以及时发现拥挤、拥堵等情况,提醒调度中心及时采取措施,保障乘客安全。基于此背景,我们以CW32单片机为核心,采用公交站人流检测中常见的红外线检测技术,设计了一个公交站人流检测系统,该系统可以连接到网络获取当前时间,并将人流数据实时上传到OneNET云平台进行远程监控。
二、实验器材
本实验使用到了CW32-48F大学计划开发板、ESP8266WIFI模块、E18-D80NK红外光电开关及Keil5开发环境。
|
CW32-48F大学计划板
ESP8266WIFI模块
E18-D80NK红外光电开关
E18-D80NK红外光电开关
实物图
开发板上预留了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;
}
}
}
```审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
检测系统
+关注
关注
3文章
896浏览量
42410 -
单片机
+关注
关注
0文章
156浏览量
16658 -
CW32
+关注
关注
1文章
82浏览量
123
发布评论请先 登录
相关推荐
湘潭大学-基于Dragonboard 410c的实时公交站牌系统设计(二)
实现及原理(1)公交总站通过日常积累的数据,在PC端可统计出各个站的客流高峰时间段,再发送到各个站显示。进行有效的预测。这种情况主要适应于该线路有学校,上下班人多的情况。(2)公交站台
发表于 09-25 16:45
基于LABVIEW的公交站点显示系统的设计
设计基于 LABVIEW 的公交站点显示系统。方法 运用图像化编程语言 LABVIEW 设计。结果 设计出来的公交站点显示系统实现了预定的功能。结论 运用 LABVIEW 设计
发表于 04-09 13:08
Moxa嵌入式计算机在公交站信息显示系统中有哪些应用?
为什么要在公交站信息显示系统中应用Moxa嵌入式计算机?公交乘客从不知道为什么公交车还没有到达,也不知道还要等多少时间,这是最困扰乘客的问题之一。现在,借助于智能
发表于 08-08 07:50
公交站预防漏电事故专用监控系统
在公交候车亭等车时,市民看到的夜间炫彩灯光、电子广告牌、具有来车显示功能的电子站牌都需要电力供应,这些供电设备在为公交站台提供能源的同时,其安全性至关重要,但是公交站漏电事故却时有发生,特别是下雨天
发表于 04-27 14:17
•721次阅读
安科瑞公交站安全用电云平台
一、云平台简介 1.方案背景 在公交候车亭等车时,市民看到的夜间炫彩灯光、电子广告牌、具有来车显示功能的电子站牌都需要电力供应,这些供电设备在为公交站台提供能源的同时,其安全性至关重要,但是公交站
发表于 05-19 16:18
•560次阅读
公交站安全用电云平台的功能
通过在公交站配电箱安装安全用电监测终端,实时监测公交车站配电系统漏电电流及水浸状态,并将监测数据通过移动网络上传至云端服务器。管理人员可通过手机APP、短信及时接收现场的异常报警信息。安全用电监测
发表于 07-12 15:32
•268次阅读
公交站安全用电云平台能实现哪些功能
通过在公交站配电箱安装安全用电监测终端,实时监测公交车站配电系统漏电电流及水浸状态,并将监测数据通过移动网络上传至云端服务器。管理人员可通过手机APP、短信及时接收现场的异常报警信息。安全用电监测
发表于 07-21 11:28
•326次阅读
cw32和stm32的区别
cw32和stm32的区别 CW32和STM32是两种常见的单片机,分别由温州炜信电子和STMicroelectronics公司生产。单片机是一种嵌入式系统,它集成了处理器、内存、输入/输出接口
cw32和gd32的区别
cw32和gd32的区别 CW32和GD32是两种不同的芯片系列,分别由WCH和GigaDevice公司推出,两者有很多不同之处,下面我们来详细介绍。 首先从CW32系列开始,CW32
评论