摘要:本文介绍使用光敏电阻实现追光小车
追光小车的基本功能就是可以向着光强更强的地方行驶。在这一基本目标的指引下,是有很多种方案可以选择的。至于哪种方案更合适,则取决于你要实现什么样的追光功能。例如对于一个普通小车,可以实现跟随光源左右摆动,这是最简单的追光动作了。复杂一点儿的可以追随光源向前、向后运动。如果是麦克纳姆轮小车,那就还可以做左右移动的动作,甚至各个方向的平移都可以通过光源来控制实现。
在本文所实现的追光小车,其功能主要是可以在光的指引下向左行驶、向右行驶或者执行,当指引光线消失的时候,小车停止运行。先看一下光敏电阻传感器的安装方法,如下图所示:
下面来看一下追光小车的具体接线方法:
模块 |
引脚 |
连接对象 |
L298N模块 |
IN1 |
ESP32的P18 |
IN2 |
ESP32的P23 |
|
IN3 |
ESP32的P32 |
|
IN4 |
ESP32的P33 |
|
OUT1、OUT2 |
右前轮TT电动机 |
|
OUT3、OUT4 |
左前轮TT电动机 |
|
+12V |
电池的正极 |
|
GND |
电池的负极和ESP32的GND(分别连接) |
|
+5V |
ESP32的+5V(开发时不需要连接,运行时连接) |
|
左一光敏电阻模块 |
AO输出 |
ESP32的P34 |
VCC |
ESP32的+3.3V |
|
GND |
ESP32的GND |
|
左二光敏电阻模块 |
AO输出 |
ESP32的P35 |
VCC |
ESP32的+3.3V |
|
GND |
ESP32的GND |
|
右一光敏电阻模块 |
AO输出 |
ESP32的P15 |
VCC |
ESP32的+3.3V |
|
GND |
ESP32的GND |
|
右二光敏电阻模块 |
AO输出 |
ESP32的P25 |
VCC |
ESP32的+3.3V |
|
GND |
ESP32的GND |
在这里需要提醒的是,四个光敏电阻使用的电源电压为3.3V,这样AO输出的电压才不会超过3.3V。ESP32扩展板上面有个5V和3V3的跳线,可以将那两排排针的电压通过跳线设置成3.3V,在开发这个实验的时候,需要改变一下跳线的位置。
根据前面光敏电阻模块的安装布局,追光小车的实现的功能大致如下:
- 借用之前循迹小车实现的Car类,在这里就不进一步的解释了,直接拿过来用就可以了。
- 实现一个环境检测功能,让小车可以原地转动一定的角度,并且多次进行数据的采样,然后计算出采样数据的平均值,作为光敏模块的初值。
在这里提醒一下,光敏电阻模块对光的反馈还是很灵敏的,因此测试环境一方面是不能太亮,不能是太阳直射的地方,另一方面是光要比较均匀,小车放置在地上,不能有明显的影子。
- 根据实时采集的光敏电阻数值的变化量,来判断小车该往哪个方向行走。
- 利用ESP32的蓝牙功能,实现远程调试,并且可以通过远程发送命令来控制小车。
下面就来分段看一下追光小车的实现方法。首先还是定义一系列的常量,其中包括光敏电阻模块所使用的引脚,光敏电阻的数量,光强测试的间隔以及次数等。如下所示:
// 光敏电阻GPIO #define PHOTORESISTER_LEFT_1 34 #define PHOTORESISTER_LEFT_2 35 #define PHOTORESISTER_RIGHT_1 15 #define PHOTORESISTER_RIGHT_2 25 // GPIO config end #define PHOTORESISTER_NUMBERS 4 #define TEST_TIME_INTERVAL 200 //测试时间间隔 #define TEST_TIMES 40 //测试次数 |
接下来就是实现几个全局变量了。具体使用的全局变量如下所示:
// 全局常量 |