ESP32 Урок 31/55 - Проект светодиодной ленты с объездом препятствий | Обучающий набор SunFounder для ESP32 IoT
В этом руководстве мы создадим проект с использованием микроконтроллера ESP32 и светодиодной ленты WS2812, которая может менять направление движения в зависимости от обнаружения препятствий. Когда светодиодная лента движется вперед, она отображает случайные цвета, а при обнаружении препятствия переключается на заданный цвет и меняет направление. Этот проект демонстрирует возможности ESP32 в сочетании с инфракрасным датчиком обнаружения препятствий.
В ходе этого руководства мы рассмотрим необходимые аппаратные компоненты, инструкции по подключению и код, необходимый для реализации этого проекта. Для более наглядного объяснения обязательно посмотрите видео по ссылке ниже (на видео в 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 В для оптимальной производительности.
- Используйте подходящий резистор для контакта данных, чтобы предотвратить проблемы с целостностью сигнала.
- Соблюдайте осторожность с ограничениями выходного тока, чтобы избежать перегрева.
- Правильно развяжите источник питания, чтобы предотвратить скачки напряжения.
- Аккуратно отрегулируйте инфракрасный датчик для достижения желаемой дальности обнаружения.
Инструкции по подключению

Для подключения компонентов начните с инфракрасного датчика обнаружения препятствий. Подключите выходной контакт датчика к контакту 25 на ESP32. Средний контакт должен быть подключен к земле, а последний контакт (VCC) — к источнику питания 3,3 В.
Далее, для светодиодной ленты 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 Изменение возвращаемого цвета
#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);
}
}
}
Common Course Links
Common Course Files
Ресурсы и ссылки
-
ДокументацияESP32 Урок 31/55 - Документальная страница SunFounder для текущего светаdocs.sunfounder.com
Файлы📁
Нет доступных файлов.