基于Arduino UNO人流量统计DIY

DIY图片

在这里插入图片描述

一、 电路设计与程序调试

(1)Arduino UNO
Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字
输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个
16MHz晶体振荡器,一个USB口,一个电源插座,一个
ICSP header和一个复位按钮。

(2)Arduino UNO与E18-D80NK的电路设计
E18-D80NK具有3个引脚,分别为棕色正极,蓝色负极,黑色信号输出,发射器对准检测到的目标不间断地发射红外线光束,接收器把检测物反射回来的光束转换为电流传输给后面的集成电路,经集成电路处理后再经放大器后输出,是一种集发射与接收于一体的光电传感器。检测距离可以根据要求进行调节。

E18-D80NK的线棕色为正极,接Arduino UNO的5V,蓝色为负极,接Arduino UNO GND,黑色为信号输出,两个E18-D80NK信号输出端分别连接Arduino UNO A5和A4引脚引脚。

(3)连接上OLED
OLED显示屏为E18-D80NK检测到的人数实时检测进行显示,4针OLED的四个引脚分别为VCC、GND、SCL和SDA,分别与在Arduino UNO上的3V、GND、D2、D11相连接。

(4)电路原理图如图所示
在这里插入图片描述
(5)、结构框图
在这里插入图片描述

二、接线

2.人流量统计系统的组装
人流量统计系统的线路连接如下:
Arduino UNO 与光电传感器1的线路连接:
A5——(黑色线)信号输出
5V——(棕色线)正极
GND——(蓝色线)负极
Arduino UNO 与光电传感器2的线路连接:
A4——(黑色线)信号输出
5V——(棕色线)正极
GND——(蓝色线)负极
Arduino UNO与OLED显示屏的连接:
3.3V——VCC
GND——GND
2 ——SCL
11 ——SDA

三、代码

#include <U8g2lib.h>//oled相关头文件

U8G2_SH1106_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,2,11,U8X8_PIN_NONE);

int Sensor_pin = A5;
int Sensor_pin0 = A4;
u8 ID_NUM=0,ID_NUM0=0;
char str2[10];
char str1[10];
void setup() 
{    
    pinMode(Sensor_pin,INPUT); //设置人体红外接口为输入状态
    pinMode(Sensor_pin0,INPUT); //设置人体红外接口为输入状态
    Serial.begin(9600);
    u8g2.begin();//oled初始化    
    u8g2.clearBuffer();//清屏
    u8g2.setFont(u8g2_font_gb16st_t_2); // 选择字体
    sprintf(str2,"IN=0%d",ID_NUM);
    u8g2.drawStr(20,20,str2);
    sprintf(str1,"OUT=0%d",ID_NUM0);
    u8g2.drawStr(20,40,str1);
    u8g2.sendBuffer();
}

void loop() 
{
    int val=digitalRead(Sensor_pin); //定义参数存储人体红外传感器读到的状态 
    int val0=digitalRead(Sensor_pin0); //定义参数存储人体红外传感器读到的状态 
    Serial.println(val);
    if(val == 0) //如果检测到有人(在检测范围内)
    {
        ID_NUM++;
           if(ID_NUM==100)
           {
               ID_NUM = 0;
           }
            if(ID_NUM<10)
              sprintf(str2,"IN=0%d",ID_NUM);
            else
              sprintf(str2,"IN=%d",ID_NUM);
            u8g2.drawStr(20,20,str2);
            u8g2.sendBuffer();
        
    }
     if(val0 == 1) //如果检测到有人(在检测范围内)
    {
        ID_NUM0++;
           if(ID_NUM0==100)
           {
               ID_NUM0 = 0;
           }
            if(ID_NUM0<10)
              sprintf(str1,"OUT=0%d",ID_NUM0);
            else
              sprintf(str1,"OUT=%d",ID_NUM0);
            u8g2.drawStr(20,40,str1);
            u8g2.sendBuffer();
        
    }
    delay(100); //延时100毫秒
        
       
}





  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值