0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CW32的公交站人流检测系统

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2023-11-17 17:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、实验简介

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

    文章

    1002

    浏览量

    45553
  • CW32
    +关注

    关注

    1

    文章

    323

    浏览量

    1953
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问CW32中的CW是啥意思?

    CW32中的CW是啥意思?
    发表于 02-02 07:10

    CW32仿真器是什么?

    CW32仿真器是什么
    发表于 01-05 08:04

    CW32芯片有哪些外设接口?

    CW32芯片有哪些外设接口
    发表于 12-29 07:23

    CW32系统发启动过程

    CW32支持 2 种不同的启动模式,通过 BOOT 引脚状态进行选择,启动模式选择电路只在芯片解复位时刻采样 BOOT 引脚状态,因此在芯片解复位前用户必须根据需要设置好BOOT 引脚的电平状态,以
    发表于 12-15 07:54

    请问CW32的SPI时钟频率可调吗?

    CW32的SPI时钟频率可调吗?
    发表于 12-15 06:03

    CW32单片机如何让生活更便捷

    这是一种全新的生活方式,它通过接收并处理传感器的数据,以控制智能马桶的所有功能。感谢CW32单片机,我们可以在日常生活中无缝地融入这种新的科技。 决定我们如何生活的,已经不再只是我们的选择,更是我们
    发表于 12-11 06:11

    CW32时钟运行中失效检测的流程是什么?CW32时钟运行中失效检测注意事项有哪些呢?

    CW32时钟运行中失效检测的流程是什么?CW32时钟运行中失效检测注意事项有哪些?
    发表于 12-10 07:22

    CW32 MCU在高频率运行下的系统稳定性的提升方案

    在嵌入式系统中,CW32 MCU的高频率运行能够显著提高系统的处理速度和响应能力,但也伴随着系统稳定性问题的挑战,特别是跑飞现象的出现。本文将深入探讨
    发表于 12-04 08:04

    CW32 MCU温度监测应用

    最近,我在项目中使用CW32 MCU,来实现一个简单的温度监测系统CW32的灵活性和性能让我在这个应用中得心应手。以下是我的实现过程和代码示例。 应用简介本项目通过连接一个温度传感器LM35来实时
    发表于 12-03 08:03

    基于芯源CW32 MCU智能家居照明控制系统设计与实现

    随着智能家居的快速发展,照明控制系统成为了其重要组成部分。基于芯源CW32 MCU的智能家居照明控制系统,能够通过无线控制、自动调节亮度、定时开关等方式,提升用户的生**验。CW32
    发表于 12-03 06:06

    cw32 systick怎么用?

    cw32 systick怎么用
    发表于 12-01 08:10

    如何在CW32 MCU上优化I2C通信

    在嵌入式系统中,CW32 MCU的I2C接口通常用于与各种外设(如EEPROM、传感器等)进行数据通信。为了实现高效、稳定的I2C通信,必须考虑频率调节和数据完整性的问题。本文将聚焦于如何在CW32
    发表于 11-27 06:25

    CW32 MCU用什么IDE开发?

    推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM则需要安装CW
    发表于 11-12 07:52

    CW32 MCU有哪些系列?

    目前CW32 MCU有通用高性能MCU、安全低功耗MCU、无线射频MCU等3个系列。其中射频MCU集成了无线收发器,主要包括CW32R031(2.4GHz BLE-Lite)系列和CW32W031(Sub-1G)系列。
    发表于 11-12 07:34

    工业4G路由器IR5000公交站台物联网应用解决方案

    随着城市化进程的加速,公共交通是智慧城市的重要枢纽。城市公共交通由无数的公交站台作作为节点组合而成,其智能化升级成为提升城市出行效率与服务质量的关键。传统公交站台信息发布滞后、缺乏实时性,难以满足
    的头像 发表于 05-13 11:52 720次阅读
    工业4G路由器IR5000<b class='flag-5'>公交站</b>台物联网应用解决方案