环法自行车公开赛体验装置
参数说明:
使用芯片 | 74HC14D |
工作电压 | 3.3V - 5V |
输出模式 | 数字信号(脉冲信号) |
检测方式 | 红外射线中断 |
检测信号 | 探测到障碍物为高电平,无障碍物或超出探测范围输出低电平 |
LED | 两路Status指示灯,射线中断指示灯灭,射线导通指示灯亮 |
接线方式:
1. +5
+5 为电源正极输入口,可接入 3.3V~5V 的电压
2. GND
GND 为电源负极输入口
3. OUT
OUT 为信号输出口,链接 MCU 的 I/O 口,一般接外部中断
注意:Arduino 玩家应该设置 MCU 的 I/O 口为输入模式/接收模式,否则无法使用。
其他 MCU,或者更为高级的控制板如 Arm 这些,若需设置 I/O 口为输入输出模式,都必须
设置为输入模式/接收模式,否则无法使用。
51 系列单片机可直接只用,无需设置输入输出模式。
程序设计:
测速模块的 OUT 口链接 MCU 的外部中断口,每当有红外射线导通就是一个外部缓冲。
逻辑设计:
测距离:
测速传感器输出为脉冲信号,一个脉冲中断一次;红外射线导通的时候是低电平,所以我们设置中断为低
电平触法模式。一般码盘上有整数格子,无论是多少格其实原理一样,例如 10 格码盘,也就是有 10 个空
格子,电机转一圈后便是射线导通 10 次,外部低电平触法 10 次;
安装上面的思路,我们的测速传感器就可以发挥出效果了,我们知道一圈就有 10 个中断,于是我们计算中
断次数,得到的总次数除于 10 也就是电机转动次数了,然后按照轮子的周长,计算轮子一圈是多长,就可
以推算出小车已经跑多远了。
测速度:
按照测距离的思路,我们用一个 MCU 定时器计算,1 秒内接收多少个外部中断,例如一秒内接收了 20 个
外部中断,我们就可以判断小车速度为 1 秒小车轮子转两圈,然后再计算出小车轮子的周长,就可得知小
车 1 秒行驶的速度。
测速应用实例:
#include <MsTimer2.h>
unsigned int motor1=0; //计左电机码盘脉冲值
unsigned int motor2=0; //计右电机码盘脉冲值
unsigned int speed1=0; //计左电机速度值
unsigned int speed2=0; //计右电机速度值
unsigned int k=0;
void flash(){
speed1=motor1;
speed2=motor2;
motor1=0; //重新定义motor1的值
motor2=0; //重新定义motor2的值
}
void setup() {
Serial.begin(9600);
attachInterrupt(0, left_motor, RISING);
attachInterrupt(1,right_motor,RISING);
MsTimer2::set(1000, flash); // 中断设置函数,每 500ms 进入一次中断
MsTimer2::start(); //开始计时
}
void loop() {
Serial.print("left motor:");
Serial.print(motor1);
Serial.print("right motor:");
Serial.println(motor2);
}
void left_motor() //触发函数
{
motor1++;
}
void right_motor() //触发函数
{
motor2++;
}