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毫秒
}