接线图
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 ");
}
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,单位为转/分):
测试结果与上面的表中有些误差,这是因为码盘有直径,测试结果是码盘的转速,你也可以将结果再换算下,应该就可以得到电机的转速了~~~,还可以换算一下,得到车轮的转速,再根据车轮的周长,得到总的行驶距离了。
这些,大家就自行发挥吧。