基于超声波传感器的障碍物检测系统,通过 LED 灯带显示不同的警报状态。
系统使用两个超声波传感器(左、右各一个)检测周围障碍物,根据障碍物的距离触发不同的警报状态,并通过 WS2812B LED 灯带以不同的灯光效果显示这些状态。系统还可以根据环境光线自动调整 LED 亮度,并通过电位器调节检测灵敏度。
引脚
- 引脚 13 通常是 Arduino 板上的内置 LED 引脚
- 引脚 14 和 27 是 ESP32 等开发板上的常用 GPIO 引脚,具有良好的数字输入 / 输出能力。
- 引脚 5 是一个 PWM 输出引脚(在大多数 Arduino 板上)模拟输入引脚
- LIGHT_SENSOR_PIN (A0):连接环境光传感器(如光敏电阻或光电二极管)。模拟输入范围为 0-4095(对于 12 位 ADC 的开发板,如 ESP32)。
- POTENTIOMETER_PIN (A3):连接电位器,用于手动调节系统的检测灵敏度。
- 环境光传感器和电位器输出的是连续变化的模拟信号,需要通过 Arduino 的 ADC(模拟 - to - 数字转换器)转换为数字值。
- A0 和 A3 是常见的模拟输入引脚,通常用于连接传感器。
// 引脚定义(适配Arduino Nano)
#define LEFT_TRIG_PIN 13 // 左侧超声波触发引脚
#define LEFT_ECHO_PIN 12 // 左侧超声波回声引脚
#define RIGHT_TRIG_PIN 11 // 右侧超声波触发引脚
#define RIGHT_ECHO_PIN 10 // 右侧超声波回声引脚
#define LED_PIN 6 // LED灯带数据引脚
#define LIGHT_SENSOR_PIN A0 // 环境光传感器
#define POTENTIOMETER_PIN A3 // 电位器
函数
digitalWrite():向数字引脚写入电平,可以是高电平(1)或低电平(0)。
delayMicroseconds():暂停程序执行一段时间,单位为微秒。发送 10 微秒的触发脉冲,然后测量回声信号的持续时间来计算距离。公式 duration * 0.034 / 2
是将声波传播时间转换为距离(厘米)的计算方式(声波速度约为 340 米 / 秒)。
millis():获取程序从启动到现在的毫秒数。
主循环
系统定期检测左右超声波传感器的距离:
- 通过电位器调整检测灵敏度
- 根据测量距离更新警报状态
- 只有当障碍物距离大于 2cm 且小于灵敏度设置值时才触发警报(避免误触发)
- 当左右两侧都检测到近距离障碍物时,触发后方警报
- 最后调用
updateLights()
函数更新 LED 显示