Код для поиска

ESP32 Урок 31/55 - Проект светодиодной ленты с объездом препятствий | Обучающий набор SunFounder для ESP32 IoT

ESP32 Урок 31/55 - Проект светодиодной ленты с объездом препятствий | Обучающий набор SunFounder для ESP32 IoT

В этом руководстве мы создадим проект с использованием микроконтроллера ESP32 и светодиодной ленты WS2812, которая может менять направление движения в зависимости от обнаружения препятствий. Когда светодиодная лента движется вперед, она отображает случайные цвета, а при обнаружении препятствия переключается на заданный цвет и меняет направление. Этот проект демонстрирует возможности ESP32 в сочетании с инфракрасным датчиком обнаружения препятствий.

ESP32-31-flowing-light-main2

В ходе этого руководства мы рассмотрим необходимые аппаратные компоненты, инструкции по подключению и код, необходимый для реализации этого проекта. Для более наглядного объяснения обязательно посмотрите видео по ссылке ниже (на видео в 00:00).

Объяснение аппаратной части

Этот проект требует нескольких компонентов, включая микроконтроллер ESP32, светодиодную ленту WS2812 и инфракрасный датчик обнаружения препятствий. ESP32 — это мощный микроконтроллер со встроенными Wi-Fi и Bluetooth, что делает его идеальным для IoT-приложений. Светодиодная лента WS2812 — это программируемая RGB-лента, которая позволяет управлять каждым светодиодом индивидуально, что дает возможность создавать динамические световые эффекты.

Инфракрасный датчик обнаружения препятствий работает путем излучения инфракрасного света и обнаружения отражений от близлежащих объектов. Когда препятствие обнаружено, датчик изменяет состояние своего выхода, позволяя ESP32 реагировать соответствующим образом, изменяя поведение светодиодной ленты.

Детали из технического описания

Производитель WS2812B
Номер детали WS2812B
Напряжение логики/ввода-вывода 3,3 В (ном.)
Напряжение питания 5 В (ном.)
Выходной ток (на канал) 20 мА (макс.)
Пиковый ток (на канал) 60 мА (макс.)
Рекомендуемая частота ШИМ 400 Гц (ном.)
Пороговые значения входной логики 0,3 Vcc (высокий), 0,1 Vcc (низкий)
Падение напряжения / RDS(on) / насыщение 1,2 В (макс.)
Тепловые пределы 85 °C (макс.)
Корпус Поверхностный монтаж
Примечания / варианты Доступен в различных длинах и плотностях

 

  • Убедитесь, что светодиодная лента питается от 5 В для оптимальной производительности.
  • Используйте подходящий резистор для контакта данных, чтобы предотвратить проблемы с целостностью сигнала.
  • Соблюдайте осторожность с ограничениями выходного тока, чтобы избежать перегрева.
  • Правильно развяжите источник питания, чтобы предотвратить скачки напряжения.
  • Аккуратно отрегулируйте инфракрасный датчик для достижения желаемой дальности обнаружения.

Инструкции по подключению

ESP32-31-flowing-light-wiring

Для подключения компонентов начните с инфракрасного датчика обнаружения препятствий. Подключите выходной контакт датчика к контакту 25 на ESP32. Средний контакт должен быть подключен к земле, а последний контакт (VCC) — к источнику питания 3,3 В.

ESP32-31-flowing-light-schematic

Далее, для светодиодной ленты WS2812 подключите контакт данных (обычно желтый провод) к контакту 14 на ESP32. Красный провод должен быть подключен к источнику питания 5 В, а черный провод — к земле. Убедитесь, что все соединения надежно закреплены, чтобы избежать ослабления проводов.

Примеры кода и пояснения

Вот краткий обзор кода, который управляет этим проектом. Сначала мы определяем количество пикселей в светодиодной ленте и контакт данных, используемый для связи:

#define NUM_PIXELS 8
#define DATA_PIN 14

В функции setup() мы инициализируем светодиодную ленту и инфракрасный датчик:

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() мы проверяем, обнаружено ли препятствие, и управляем светодиодной лентой соответствующим образом:

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);
    }
  }

Этот код позволяет светодиодной ленте отображать случайные цвета при движении вперед и менять направление при обнаружении препятствия. Полный код загружается ниже статьи, поэтому обязательно ознакомьтесь с ним для получения всех деталей.

Демонстрация / Что ожидать

Когда настройка завершена и код загружен, светодиодная лента должна начать отображать случайные цвета, двигаясь вперед. При обнаружении препятствия лента переключится на заданный цвет (например, зеленый) и изменит направление. Если препятствие удалено, лента возобновит движение вперед со случайными цветами. Имейте в виду, что дальность обнаружения инфракрасного датчика может варьироваться в зависимости от используемого источника питания (на видео в 10:30).

Временные метки видео

  • 00:00 Начало
  • 2:14 Введение в проект
  • 4:58 Объяснение подключения
  • 7:41 Настройка датчика препятствий
  • 10:03 Объяснение кода Arduino
  • 15:40 Выбор платы ESP32 и COM-порта в Arduino IDE
  • 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 светодиодной ленты.
#define DATA_PIN 14

 // Инициализируйте объект RGB светодиодной ленты.
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);

 // Инициализируйте сенсор избегания
#define AVOID_PIN 25

void setup() {
 // Инициализируйте RGB светодиодную ленту
  pixels.begin();

 // Инициализируйте сенсор избегания
  pinMode(AVOID_PIN, INPUT_PULLUP);

 // Установите начальный цвет светодиода.
  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);
    }
  }
 // Если обнаружит препятствие, измените направление светодиодной ленты.
  else {
    for (int i = NUM_PIXELS - 1; i >= 0; i--) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
}

Ресурсы и ссылки

Файлы📁

Нет доступных файлов.