搜索代码

ESP32教程31/55 - 带避障功能的LED灯带项目 | SunFounder的ESP32物联网学习套件

ESP32教程31/55 - 带避障功能的LED灯带项目 | SunFounder的ESP32物联网学习套件

在本教程中,我们将使用ESP32微控制器和WS2812 LED灯带创建一个项目,该项目可以根据障碍物检测改变其方向。当LED灯带向前移动时,它会显示随机颜色,而在检测到障碍物时,它会切换为预设颜色并反转方向。该项目展示了ESP32与红外避障传感器结合使用的能力。

ESP32-31流动灯带主图2

在整个教程中,我们将介绍所需的硬件组件、接线说明以及实现该项目所需的代码。如需更直观的解释,请务必观看下方链接的视频(视频中00:00处)。

硬件说明

该项目需要多个组件,包括ESP32微控制器、WS2812 LED灯带和红外避障传感器。ESP32是一款功能强大的微控制器,内置Wi-Fi和蓝牙,非常适合物联网应用。WS2812 LED灯带是可编程RGB LED灯带,允许对每个LED进行单独控制,使我们能够创建动态照明效果。

红外避障传感器通过发射红外光并检测附近物体的反射来工作。当检测到障碍物时,传感器的输出状态会改变,使ESP32能够相应地响应,从而改变LED灯带的行为。

数据手册详情

制造商 WS2812B
零件编号 WS2812B
逻辑/IO电压 3.3 V(典型值)
电源电压 5 V(典型值)
输出电流(每通道) 20 mA(最大值)
峰值电流(每通道) 60 mA(最大值)
PWM频率指导 400 Hz(典型值)
输入逻辑阈值 0.3 Vcc(高电平),0.1 Vcc(低电平)
压降 / RDS(on) / 饱和 1.2 V(最大值)
热限制 85 °C(最大值)
封装 表面贴装
备注 / 变体 有多种长度和密度可选

 

  • 确保LED灯带使用5 V电源供电,以获得最佳性能。
  • 在数据引脚上使用合适的电阻,以防止信号完整性问题。
  • 注意输出电流限制,避免过热。
  • 正确解耦电源,以防止电压尖峰。
  • 仔细调整红外传感器,以达到所需的检测范围。

接线说明

ESP32-31-flowing-light-wiring

要连接组件,首先从红外避障传感器开始。将传感器的输出引脚连接到ESP32上的引脚25。中间引脚应连接到地线,最后一个引脚(VCC)应连接到3.3 V电源。

ESP32-31流动灯带原理图

接下来,对于WS2812 LED灯带,将数据引脚(通常是黄色线)连接到ESP32上的引脚14。红色线应连接到5 V电源,黑色线应连接到地线。确保所有连接都牢固,以防止线路松动。

代码示例与讲解

以下是运行此项目的代码简要概述。首先,我们定义LED灯带中的像素数量以及用于通信的数据引脚:

#define NUM_PIXELS 8
#define DATA_PIN 14

setup()函数中,我们初始化LED灯带和红外传感器:

void setup() {
  pixels.begin();
  pinMode(AVOID_PIN, INPUT_PULLUP);
  uint32_t color = pixels.Color(random(256), random(256), random(256));
  pixels.fill(color);
  pixels.show();
}

loop()函数中,我们检查是否检测到障碍物,并相应地控制LED灯带:

if (avoid_value) {
    for (int i = 0; i < NUM_PIXELS; i++) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  } else {
    for (int i = NUM_PIXELS - 1; i >= 0; i--) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }

这段代码使LED灯带在向前移动时显示随机颜色,并在检测到障碍物时改变方向。完整代码加载在文章下方,请务必查看以获取所有细节。

演示 / 预期效果

当设置完成并上传代码后,LED灯带应开始向前移动并显示随机颜色。当检测到障碍物时,灯带将切换为预设颜色(如绿色)并反转方向。如果移除障碍物,灯带将恢复向前移动并显示随机颜色。请注意,红外传感器的检测范围可能因所使用的电源而异(视频中10:30处)。

视频时间戳

  • 00:00 开始
  • 2:14 项目介绍
  • 4:58 接线说明
  • 7:41 调整避障传感器
  • 10:03 Arduino代码说明
  • 15:40 在Arduino IDE中选择ESP32开发板和COM端口
  • 17:22 项目1:演示
  • 18:17 更改返回颜色

图像

ESP32-31-flowing-light-main2
ESP32-31-flowing-light-main2
ESP32-31-flowing-light-main
ESP32-31-flowing-light-main
ESP32-31-flowing-light-schematic
ESP32-31-flowing-light-schematic
ESP32-31-flowing-light-wiring
ESP32-31-flowing-light-wiring
832-ESP32 Tutorial 31/55- Arduino code flowing light
语言: C++
#include <Adafruit_NeoPixel.h>

 // 设置运行灯的像素数量
#define NUM_PIXELS 8

 // 设置RGB LED灯带的数据引脚
#define DATA_PIN 14

 // 初始化 RGB LED 灯带对象
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);

 // 初始化避让传感器
#define AVOID_PIN 25

void setup() {
 // 初始化RGB LED灯带
  pixels.begin();

 // 初始化避让传感器
  pinMode(AVOID_PIN, INPUT_PULLUP);

 // 设置初始 LED 颜色
  uint32_t color = pixels.Color(random(256), random(256), random(256));
  pixels.fill(color);
  pixels.show();
}

void loop() {
 // 从红外传感器读取输入
  bool avoid_value = digitalRead(AVOID_PIN);

 // 为当前像素生成一种随机颜色
  uint32_t color = pixels.Color(random(256), random(256), random(256));

 // 如果未检测到障碍物
  if (avoid_value) {
    for (int i = 0; i < NUM_PIXELS; i++) {
 // 用随机颜色点亮当前像素
      pixels.setPixelColor(i, color);

 // 更新RGB LED灯带显示器
      pixels.show();

 // 关闭当前像素
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
 // 如果检测到障碍物,请改变LED灯带的方向。
  else {
    for (int i = NUM_PIXELS - 1; i >= 0; i--) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
}

资源与参考

文件📁

没有可用的文件。