摘要:本文介绍循迹模块的基本知识及使用方法
从本篇文章开始,将介绍循迹小车的实现方法。循迹小车就是可以按照实现划好的路线,沿着路线可以自动行驶的小车。这是最简单的循迹小车了。而复杂的循迹小车还可以识别路线旁边设置的一些标识,完成相应的规定动作。这可能要借助视觉识别系统了。我们在这里先实现最简单的可以沿着指定的路径行驶的循迹小车。
循迹小车的行驶路线通常是画在白纸上的有一定宽度的黑色轨迹线,由于对比强烈,这应该是比较容易识别的一种。我们使用的循迹模块与前边所使用的避障模块类似,也是利用障碍物对红外线的反射来进行检测的,只不过这次检测是利用了不同颜色的障碍物对红外光的反射率不同来检测循迹轨迹的。循迹模块如下图所示:
这个循迹模块的原理和之前的避障模块一样,核心部件也是一对红外发射二极管和红外接收二极管组成。当模块接通电源后,红外发射二极管会不断的向外发射红外线,当发射的红外线没有被反射回来,或者反射回来的强度不够大时,红外接收二极管一直处于关闭状态,此时模块的输出端一直为高电平,指示二极管处于熄灭状态。当被检测物体出现在检测范围内,红外线被反射回来且反射回来的强度足够强时,模块的输出端变成低电压,输出指示二极管点亮。
循迹模块还有一个模拟输出端,它连接的是接收二极管的一端,在这里可以得到接收二极管两端的电压。接收二极管的电阻会随着接收反射回来的红外光的强弱而变化,通过采集模拟端的输出电压,可以判断出接收到反射红外线的强弱。接收二极管电阻的变化取决于它所接收到的红外光的强弱,影响反射红外光强度的因素有反射面的颜色(反射率)、形状和反射面与接收二极管之间的距离等因素。
避障模块主要反映的是距离对红外线反射的影响,那么循迹模块,则是主要检测不同反射面颜色对于红外光反射的影响。通常情况下,黑色物体对红外光的吸收能力最强,因此黑色物体的反射率最低,而白色物体对红外光的吸收能力最弱,所以白色物体的反射率最高。所以,只要通过调节避障模块上面的电位器,让避障模块的指示灯在黑色轨迹上时处于熄灭状态,在白色地面处于点亮状态就可以区分出该行走的轨迹在哪里了。这个调试工作要在把模块安装到小车上之后再进行,并且不同的环境和不同的地面材质,都需要重新调节。
所以,在这里就有个提醒,如果想使用开关量作为判断轨迹的依据,选择循迹模块的时候,一定要选择带有调节电位器的模块,因为不同的安装位置、不同的地面材质、不同的轨迹颜色等等,都需要进行开关阈值的调节,不能调节的模块,不可能满足所有情况的需求。如果使用模拟量来作为判断轨迹的依据,那么就需要开发一个测试程序,记录轨迹和地面的不同输出电压来进行区分。
下面来看一下循迹模块的基本组成。如下图所示:
通过上图可以看到,在接通电源后循迹模块的电源指示LED会亮起,红外发射二极管会向外发出红外光,当接收二极管接收的红外光达到实现设定的阈值后,开关指示灯会亮起,DO输出低电平。这个DO电平切换的阈值可以通过调节电位器来进行调节。
循迹模块的引脚说明如下:
序号 | 标识 | 名称 | 说明 |
1 | VCC | 电源正极 | 3.3V~5V |
2 | GND | 电源负极 | |
3 | DO | 开关信号输出 | 表示接收红外反射光是否大于事先设定值 |
4 | AO | 模拟信号输出 | 接收二极管两端的电压输出 |
下面就先来测试一下循迹模块,将其与ESP32模块连接,这次测试一下同时读取AO和DO两个引脚的输出,因为根据不同的策略和环境,模拟输出和数字输出都有用到的可能。具体接线如下:
循迹模块 | ESP32扩展板 |
VCC | +3.3V(注意这里别接错了) |
GND | GND |
AO | P34 |
DO | P26 |
接下来就写个简单的程序,分别读取ESP32的26和34引脚,然后通过输出在串口调试器里。程序代码如下所示:
void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(26, INPUT); } void loop() { // put your main code here, to run repeatedly: Serial.print(digitalRead(26)); Serial.print("\t"); Serial.println(analogRead(34)); delay(1000); } |
这个程序不需要过多的解释了,26引脚连接的是循迹模块的DO引脚,因此是读取数字量输入。34引脚连接的是循迹模块的AO引脚,所以读取的是模拟量输入。编译、上传程序,运行结果如下:
这时可以看一下在相同距离的情况下,不同颜色的反射物产生的不同结果吧。