测速模块arduino驱动

在这里插入图片描述
本次所谓的测速,为电机的转速,不是物体的移动速度,是角速度。

测速模块为一U型卡槽。在这里插入图片描述
原理,和循迹模块是一样的,为红外收发管,遮挡为1,不遮挡为0;再配合码盘使用,码盘:在这里插入图片描述

码盘上有20个缝隙,20个遮挡,如此,将码盘安装在电机转轴上,当电机转动时,测速模块会不断输出高低电平的变换。

接线如图

在这里插入图片描述

float n = 0;      

float time;  

float Speed;  

void setup(){

  Serial.begin(9600);

  attachInterrupt(0,count,CHANGE);    

}

void loop(){

  time = millis();

  Speed =  (n/40)/(time/60000) ;

  Serial.println(Speed);

}

void count(){

  n += 1;

}


这里有两句代码比较重要,我们借此解释一下上面的代码:

attachInterrupt(interrupt,function,mode); 

这是一句中断函数,函数有三个参数:

interrupt  ——  中断源。可选值0和1,0 对应2号引脚;1 对应3号引脚。这里我们写的 0 ,即外部中断接数字引脚2号引脚。

function  ——  中断处理函数。即发生中断时,去做什么。这里我们让它发生中断时,做 n+=1。用来计数模块被码盘遮挡时,电平变化的次数。

mode  ——  触发模式。触发模式有四种类型:LOW(低电平触发)、CHANGE(电平变化时触发)、RISING(低电平变为高电平时触发)、FALLING(高电平变为低电平时触发)。这里我们选择CHANGE(电平变化时触发),前面讲了,码盘有20个缝隙,20个遮挡,这样,电机转一转时,为40次触发,即n=40,为n/40转。

millis();

   此函数用于获取机器运行的时间长度,函数返回值为 unsigned long 型(毫秒ms),系统最长的记录时间为9小时22分钟,如果超出,则从0开始。

因此,我们所测的转速,为自系统运行开始时的平均角速度,并不是实时速度。

   了解了这两句函数之后,再看上面的代码,不难理解,最终输出的为电机的转速,单位:转/分钟。

   当然,如果将电机安装在小车上,转速车轮周长=小车移动速度。n车轮周长=小车行进总路程。

   我们参照L298N电机驱动的代码,驱动一个小车上的减速直流电机,进行转速测试,在接下来的视频效果展示中,我们设置控制电机转速的PWM为50、100、200三个不同值,可看到转速明显的改变,并基本呈线性改变,可见这个模块还是可以的。
在这里插入图片描述

发布了153 篇原创文章 · 获赞 248 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/qq_45172832/article/details/105418720