ESP32 教程 19/55 - 使用红外传感器检测障碍物 | SunFounder 的 ESP32 物联网学习套件
在本教程中,我们将学习如何使用ESP32模块配合红外避障传感器来检测障碍物。本项目将演示传感器在检测到障碍物时如何触发蜂鸣器。该设置还将在串口监视器上显示检测状态,提供一种清晰且互动的方式来观察传感器的功能。
我们将使用SunFounder ESP32物联网学习套件,其中包含具备Wi-Fi和蓝牙功能的ESP32微控制器。红外传感器的工作原理是发射红外光,红外光会被附近的障碍物反射。当光线被反射回来时,传感器将触发一个输出信号,我们将在代码中读取该信号。我们还将加入一个蜂鸣器,在检测到障碍物时激活,提供声音警报。
硬件说明
本项目的主要组件包括ESP32模块、红外避障传感器和蜂鸣器。ESP32模块作为中央处理单元,负责处理传感器输入并控制输出。它可以使用锂电池供电,使其便携且适用于各种应用场景。
红外避障传感器由一个发射器和一个接收器组成。发射器发出红外光,而接收器检测附近物体反射回来的光。当存在障碍物时,传感器的输出引脚变为低电平,向ESP32发出信号以采取行动,例如打开蜂鸣器。
数据手册详情
| 制造商 | SunFounder |
| 零件编号 | 红外避障传感器 |
| 工作电压 | 3.3 V - 5 V |
| 输出类型 | 数字(检测到障碍物时为低电平) |
| 检测范围 | 最远20厘米 |
| 响应时间 | 小于10毫秒 |
| 封装 | 模块 |
- 电源:工作电压为3.3 V至5 V。
- 检测到障碍物时输出信号变为低电平。
- 可通过电位器调节灵敏度。
- 典型检测范围最远为20厘米。
- 响应时间快,低于10毫秒。
接线说明
ESP32-19-obstacle_voide-wiring
要将红外避障传感器连接到ESP32,首先将传感器的VCC引脚连接到ESP32上的5V引脚。接下来,将传感器的GND引脚连接到ESP32上的任意一个GND引脚。最后,将传感器的OUT引脚连接到ESP32上的GPIO 14引脚。
对于蜂鸣器,将负极端子连接到GND,正极端子连接到GPIO 27引脚。确保所有连接牢固,且传感器正确供电。接线应该很简单,因为传感器和蜂鸣器只需要简单的电源和信号连接。
代码示例与讲解
在代码中,我们首先定义连接到避障传感器的引脚。这通过将标识符avoidPin设置为14来实现。我们还声明一个变量avoidState来保存传感器的输出状态。
const int avoidPin = 14; // 避障模块引脚编号
int avoidState = 0;
在setup函数中,我们初始化串口通信并将avoidPin设置为输入模式。这允许ESP32读取传感器的输出状态。
void setup() {
Serial.begin(115200);
pinMode(avoidPin, INPUT);
}
在loop函数中,我们使用digitalRead(avoidPin)持续读取传感器的输出,并将结果存储在avoidState中。然后将该值打印到串口监视器,使我们能够看到何时检测到障碍物(输出为0)或未检测到障碍物(输出为1)。
void loop() {
avoidState = digitalRead(avoidPin);
Serial.println(avoidState);
}
完整代码请参考文章下方的加载部分。
演示/预期效果
当设置完成并上传代码后,您应该会在串口监视器上看到显示0或1,具体取决于是否检测到障碍物。当障碍物在检测范围内时,输出将读取为0,蜂鸣器将响起。如果移除障碍物,输出将读取为1,蜂鸣器将停止。该功能在视频中进行了演示(视频12:30处)。
常见问题可能包括接线错误,这可能导致传感器无法正常工作,或者串口监视器中的波特率不匹配,导致数据无法准确显示。如果遇到问题,请务必检查这些方面。
视频时间戳
- 00:00 开始
-
1:57 项目介绍
-
4:33 避障传感器接线
-
5:55 避障功能的Arduino代码
-
7:36 在Arduino IDE中选择ESP32开发板和COM端口
-
9:18 项目演示
-
10:42 调节灵敏度以增加检测范围
-
12:39 检测到障碍物时采取行动
-
14:24 检测到障碍物时使用蜂鸣器
图像
ESP32-19-obstacle_voide-schematic
ESP32-19-obstacle_voide-wiring
ESP32-19-obstacle_voide-schematic
ESP32-19-obstacle_voide-wiring
818-ESP32 Tutorial 19/55- Arduino code for obstacle avoidance module
语言: C++
/*
* 设置密码
*/
const int avoidPin = 14; // 避免模块引脚的数量
// 用于存储避免状态的变量
int avoidState = 0;
void setup() {
Serial.begin(115200);
// 将避免引脚初始化为输入模式
pinMode(avoidPin, INPUT);
}
void loop() {
// 读取避免值的状态
avoidState = digitalRead(avoidPin);
Serial.println(avoidState);
}