电子说
相关知识
**红外计数测速传感器:**一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。
其工作原理为通过对红外发射光的阻断和导通,在红外接收管感应出的电流变化来实现开和关的判断。有遮挡,输出高电平;无遮挡,输出低电平。
TM1637四位数码管模块: 是一个12脚的带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,只需2根信号线即可使单片机控制4位8段数码管。可以免去我们前面繁琐的接线。
电路搭建
所需材料
ArduinoUno * 1
红外计数测速传感器 * 1
TM1637四位数码管模块 * 1
电路连接
红外计数测速传感器接线:
VCC------>Arduino的+5V
GND------>Arduino的GND
DO------>Arduino的信号端
TM1637四位数码管模块接线:
CLK------>Arduino的信号端
DIO----->Arduino的信号端
VCC------>Arduino的+5V
GND------>Arduino的GND
程序编写
练习一:计数储钱罐
使用红外计数测速传感器制作一个能够计数的储蓄罐。
图形化****方式:
代码方式:
在使用代码编程之前,我们需要先添加TM1637四位数码管模块的库文件。
点击arduinoIDLE中的工具-->库文件管理,在列表中选择SevenSegmentTM1637进行安装。
/* 项目名称:计数储蓄罐
* 项目时间:2022.03.02
* 项目作者:MRX
*/
#include < SevenSegmentTM1637.h >
int count = 0;
int sensor_Pin = 6;
SevenSegmentTM1637 display(2,3);
void setup(){
count = 0;
display.begin();
display.setBacklight(20);
display.clear();
pinMode(sensor_Pin, INPUT);
}
void loop(){
display.print(count);
if (digitalRead(sensor_Pin)) {
delay(1000);
count = count + 1;
}
}
练习二:断电保留计数的储蓄罐
在练习一的基础上,实现断电后,能够记住之前统计的数量。并在这个数量基础上继续计数。
图形化方式:
代码方式:
/* 项目名称:断电保留计数储蓄罐
* 项目时间:2022.03.02
* 项目作者:MRX
*/
#include < SevenSegmentTM1637.h >
#include < EEPROM.h >
int count = 0;
int sensor_Pin = 6;
SevenSegmentTM1637 display(2,3);
void setup(){
count = 0;
display.begin();
display.setBacklight(20);
display.clear();
EEPROM.get(0, count);
pinMode(sensor_Pin, INPUT);
}
void loop(){
display.print(count);
if (digitalRead(sensor_Pin)) {
delay(1000);
count = count + 1;
EEPROM.put(0, count);
}
}
相关知识:
**EEPROM Get: **从EEPROM获得一个值,表达式为EEPROM.get(address, a)
**EEPROM Put: **用变量来把一些数值放到EEPROM里,表达式为EEPROM.put(address, a)
**EEPROM Write: **保存对应的值到EEPROM,表达式为EEPROM.write(address, a);
EEPROM Clear: 清除EEPROM的内容,其实就是把EEPROM中每一个字节写入0,表达式为EEPROM.write(address, 0);
EEPROM Read: 读取EEPROM,表达式为EEPROM.read(address);
全部0条评论
快来发表一下你的评论吧 !