槽型光耦(计数传感器)

Posted

篇首语:少年恃险若平地,独倚长剑凌清秋。本文由小常识网(cha138.com)小编为大家整理,主要介绍了槽型光耦(计数传感器)相关的知识,希望对你有一定的参考价值。

槽型光耦(计数传感器)

接线图

VCC 5V

GND GND

OUT D3

==接线示意图==

==例子程序==

Int speedPin=3;//定义数字3接口 int cntValue=0;void setup ()  pinMode(speedPin,INPUT);//3号数字口设置为输入状态Serial.begin(9600);Serial.println("Speed Count\\n");void loop() //判断是否被遮挡if(digitalRead(speedPin)==0)cntValue++;//计数增加Serial.println(cntValue);//串口输出计数值while(digitalRead(speedPin)==0);//等待遮挡结束

==程序效果==

通过遮挡槽型光耦传感器,不断计数。

实际应用

U型测速模块的使用

U型测速模块

TT马达和测速码盘

标准电源(3V和6V)

下图为TT马达的几个基本参数:

我本次使用的是1:48的减速比电机,其他两个都没有测试~~~

下面是U型测速模块图片:

电路:(电路图就不画了,接线很简单)

将上面的U型测速模块接好,G接GND、V接5V、S接数字引脚2或者3(使用中断,只能接这两个脚),

然后将码盘和TT马达安装在一起,就可以试验了。

接好后,用一个遮挡物放在U型开关之间,模块上的LED点亮,无遮挡物时,LED不亮;

利用这一原理,当信号输出变化一次就计数一次,再经过一些列的换算就可以得到转速了~~

下面我们看下程序,将其复制到Arduino IDE中,烧写入UNO中:

/************************************************************************ 电机测速* 使用millis()函数,记录时间,单位为毫秒* 使用中断函数,当引脚电平改变时触发,计数一次* 以1:48减速电机、20孔的码盘为例* 将得到的值Val除以40,得到转动圈数* 除以当时的时间,因为时间单位为毫秒,除以60000转换为分* 这时候得到电机转速Speed ,单位 转/分* 注意;测出来的值会有些误差,比实际值大,是因为码盘与电机轴有一定距离* BY YFROBOT************************************************************************///设置模块引脚接到数字引脚2(程序用到中断函数,UNO中断引脚为数字引脚2和3)int U_Pin = 2; float Val = 0; //设置变量Val,计数float time; //设置变量time,计时float Speed; //设置变量Speed,存储转速 void setup()  Serial.begin(9600); attachInterrupt(0,count,CHANGE); //引脚电平发生改变时触发 void loop()  time = millis(); Speed = (Val/40)/(time/60000) ; Serial.println(Speed); void count() Val += 1;

接上电源,测试结果结果如下(3V与6V,单位为转/分):

测试结果与上面的表中有些误差,这是因为码盘有直径,测试结果是码盘的转速,你也可以将结果再换算下,应该就可以得到电机的转速了~~~,还可以换算一下,得到车轮的转速,再根据车轮的周长,得到总的行驶距离了。

这些,大家就自行发挥吧。

相关参考