WLE 发表于 2021-2-18 17:13:08

用红外对射光电开关测试麦昆小车的速度

static/image/hrline/1.gif
    红外对射光电开关广泛应用于机械自动化、汽车防盗等行业作检测、计数、测速、人员通过、等其它工业自动化感测用途,也可在智能机器人竞赛中用作速度检测,通过计时等。
    今天就给大家带来一个红外对射光电开关极其简单的一个应用,就是利用两组红外对射光电开关测试麦昆小车的速度。
static/image/hrline/1.gif
使用到的硬件红外对射光电开关 x2麦昆小车 x1Arduino Uno板 x1IO扩展板 x1
软件Arduino IDEMind+
实物图

static/image/hrline/1.gif
    首先我们先把两组光电开关给用起来,两组开关可以用一个稳定的电源供电,然后把两根输出信号线分别接Arduino开发板的引脚5和引脚6,Arduino板子要和光电开关共地。

    为了测速的方便,我把两组开关给固定到了两个纸盒上,分别形成了起点和终点。



打开Arduino IDE,写好代码上传到板子上,到这里光电开关已经可以作为一个测速的工具了。

static/image/hrline/1.gif
代码:

int a=0;//第一组对射开关检测物体的次数
int b=0;//第二组对射开关检测物体的次数
int pin1=5;//第一组开关接的引脚口
int pin2=6;//第二组开关接的引脚
double time1;
double time2;
double sj1;
double sj2;
double distance=0.17;//设置两组开关之间的距离为0.17m
double Speed;
void setup() {
Serial.begin(9600);

pinMode(pin1,INPUT_PULLUP);//输入上拉模式
pinMode(pin2,INPUT_PULLUP);
}

void loop() {
if(digitalRead(pin1)==LOW){
   a++;
   Serial.print("通过起点的次数:");
   Serial.println(a);
   sj1=millis();
   time1=sj1/1000;
   Serial.print("通过起点的时间:");
   Serial.print(time1);
   Serial.println("秒");
    }
if(digitalRead(pin2)==LOW){
   b++;
   Serial.print("通过终点的次数:");
   Serial.println(b);
   sj2=millis();
   time2=sj2/1000;
   Serial.print("通过终点的时间:");
   Serial.print(time2);
   Serial.println("秒");
   Speed=distance/(time2-time1);
   Serial.print("麦昆小车速度为:");
   Serial.print(Speed);
   Serial.println("m/s");
   while(digitalRead(pin2)==LOW);

    }
while(digitalRead(pin1)==LOW);
}



static/image/hrline/1.gif
接下来就是把小车给用起来了,这里我用的是Mind+软件,因为我们只是测小车的速度,所以就拖几个模块出来,搞一个简单的程序上传到小车上,小车能跑起来就行。



static/image/hrline/1.gif
最后来看一下红外对射光电开关测试麦昆小车速度的实际效果吧。



static/image/hrline/1.gif
测速过程与结果

https://www.bilibili.com/video/BV1to4y197jK/


这个应用到这里就结束了,虽然简单,但是还是很实用的,这款红外对射光电开关,反应快且稳定,使用体验还是很好的。




pATAq 发表于 2021-2-28 21:08:18

很好的教程,之前就困惑这测速咋弄
页: [1]
查看完整版本: 用红外对射光电开关测试麦昆小车的速度