【雕爷学编程】Arduino动手做(78)---槽型光耦红外对射计数传感器模块5

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验七十八:对射光电传感器模块 脉冲计数器 电机马达测速 位置限位槽型光耦

槽型光耦计数测速传感器模块的实验环境
一、槽型光耦计数测速传感器模块实验所需硬件清单
20栅格测速码盘X2
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
LED发光二极管(蓝色)X1
DC3V-6V直流减速TT马达X2
IIC/I2C 1602 LCD液晶屏模块X1
高电平触发有源蜂鸣器模块 X1
高电平触发单路5V继电器模块X1
Proto Shield原型扩展板(带mini面包板)X1

7、程序七:用光耦读取信号并算作孔(累计计数)
(1)参考开源代码(Arduino):
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)程序七:用光耦读取信号并算作孔(累计计数)
*/#include
#include // 将 LCD 地址设置为 0x27 以实现 16 个字符和 2 行显示
LiquidCrystal_I2C lcd(0x27, 16, 2);
float rpm = 0;
int pid;
unsigned long millisBefore;
volatile int holes;void setup() {Serial.begin(9600);lcd.init(); //LCD初始化lcd.backlight();lcd.setCursor(0, 0);lcd.print("Speed Sensor"); //速度传感器测试lcd.setCursor(0, 1);lcd.print("Test");pinMode(2, INPUT);//高电平变为低电平时中断触发attachInterrupt(digitalPinToInterrupt(2), count, FALLING);delay(5000);lcd.clear();//LCD清除
}void loop(){if (millis() - millisBefore > 500) {print_to_LCD();millisBefore = millis();}delay(200);
}void print_to_LCD() {lcd.setCursor(0, 0);lcd.print("Holes : ");//累计计数lcd.print(holes);
}void count() {holes++;
}
(2)实验场景图之一

(3)实验场景图之二

(4)实验场景图之三

8、程序八:用光耦读取信号并算作孔(累计计数)
(1)参考开源代码(Arduino):
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)程序八:用光耦测量旋转/转数
*/#include
#include
// 将 LCD 地址设置为 0x27 以实现 16 个字符和 2 行显示
LiquidCrystal_I2C lcd(0x27, 16, 2);
float rpm, turn = 0;
int pid;
unsigned long millisBefore;
volatile int holes;void setup() {Serial.begin(9600);lcd.init(); //LCD初始化lcd.backlight();lcd.setCursor(0, 0);lcd.print("Speed Sensor");//速度传感器测试lcd.setCursor(0, 1);lcd.print("Test");pinMode(2, INPUT);//高电平变为低电平时中断触发attachInterrupt(digitalPinToInterrupt(2), count, FALLING);delay(1000);lcd.clear();//LCD清除
}void loop() {if (millis() - millisBefore > 500) {turn = (holes / 20.0); //使用20栅格测速码盘print_to_LCD();millisBefore = millis();}
}void print_to_LCD() {lcd.setCursor(0, 0);lcd.print("Holes : ");//累计计数lcd.print(holes);lcd.setCursor(0, 1);lcd.print("Turn : ");//测量转速lcd.print(turn);
}void count() {holes++;
}
(2)实验场景图之一

(3)实验场景图之二

9、程序九:测量 RPM 一分钟
(1)参考开源代码(Arduino):
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)程序九:测量 RPM 一分钟
*/#include
#include
// 将 LCD 地址设置为 0x27 以实现 16 个字符和 2 行显示
LiquidCrystal_I2C lcd(0x27, 16, 2);
float rpm = 0;
int pid;
unsigned long millisBefore;
volatile int holes;void setup(){Serial.begin(9600);lcd.init();lcd.backlight();lcd.setCursor(0, 0);lcd.print("Speed Sensor");//速度传感器测试lcd.setCursor(0, 1);lcd.print("Test");pinMode(2, INPUT);//高电平变为低电平时中断触发attachInterrupt(digitalPinToInterrupt(2), count, FALLING);delay(1000);lcd.clear();//LCD清除
}void loop(){print_to_LCD();if (millis() - millisBefore > 60000) {rpm = holes / 20.0;//使用20栅格测速码盘holes = 0;millisBefore = millis();}delay(200);
}void print_to_LCD() {lcd.setCursor(0, 0);lcd.print("Holes : ");//累计计数lcd.print(holes);lcd.print(" ");lcd.setCursor(0, 1);lcd.print("RPM : ");//测量60秒转速lcd.print(rpm);lcd.print(" ");
}void count() {holes++;
}

10、程序十:用采样法测量实时转速
(1)参考开源代码(Arduino):
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)程序十:用采样法测量实时转速
*/#include
#include
// 将 LCD 地址设置为 0x27 以实现 16 个字符和 2 行显示
LiquidCrystal_I2C lcd(0x27, 16, 2);
float rpm = 0;
int pid;
unsigned long millisBefore;
volatile int holes;void setup() {Serial.begin(9600);lcd.init();lcd.backlight();lcd.setCursor(0, 0);lcd.print("Speed Sensor");//速度传感器测试lcd.setCursor(0, 1);lcd.print("Test");pinMode(2, INPUT);//高电平变为低电平时中断触发attachInterrupt(digitalPinToInterrupt(2), count, FALLING);delay(1000);lcd.clear();
}void loop() {print_to_LCD();if (millis() - millisBefore > 1000) {rpm = (holes / 20.0) * 60; //使用20栅格测速码盘,乘以60秒holes = 0;millisBefore = millis();}delay(100);
}void print_to_LCD() {lcd.setCursor(0, 0);lcd.print("Holes : ");//动态计数lcd.print(holes);lcd.print(" ");lcd.setCursor(0, 1);lcd.print("RPM : "); // 实时测量转速lcd.print(rpm);lcd.print(" ");
}
void count() {holes++;
}
(2)实验场景图


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
