Search Code

Samouczek ESP32 31/55 - Projekt taśmy LED z unikaniem przeszkód | Zestaw edukacyjny IoT SunFounder ESP32

Samouczek ESP32 31/55 - Projekt taśmy LED z unikaniem przeszkód | Zestaw edukacyjny IoT SunFounder ESP32

W tym samouczku stworzymy projekt wykorzystujący mikrokontroler ESP32 oraz taśmę LED WS2812, która może zmieniać kierunek na podstawie wykrywania przeszkód. Gdy taśma LED porusza się do przodu, będzie wyświetlać losowe kolory, a po wykryciu przeszkody przełączy się na z góry określony kolor i zmieni kierunek. Projekt ten pokazuje możliwości ESP32 w połączeniu z czujnikiem przeszkód na podczerwień.

ESP32-31-flowing-light-main2

W trakcie tego samouczka omówimy niezbędne komponenty sprzętowe, instrukcje dotyczące okablowania oraz kod wymagany do urzeczywistnienia tego projektu. Aby uzyskać bardziej wizualne wyjaśnienie, koniecznie sprawdź wideo poniżej (na wideo o 00:00).

Omówienie sprzętu

Ten projekt wymaga kilku komponentów, w tym mikrokontrolera ESP32, taśmy LED WS2812 oraz czujnika przeszkód na podczerwień. ESP32 to wydajny mikrokontroler z wbudowanym Wi-Fi i Bluetooth, co czyni go idealnym do zastosowań IoT. Taśma LED WS2812 to programowalna taśma LED RGB, która umożliwia indywidualne sterowanie każdą diodą LED, co pozwala nam tworzyć dynamiczne efekty świetlne.

Czujnik przeszkód na podczerwień działa poprzez emitowanie światła podczerwonego i wykrywanie odbić od pobliskich obiektów. Gdy wykryta zostanie przeszkoda, czujnik zmienia swój stan wyjściowy, umożliwiając ESP32 odpowiednią reakcję poprzez zmianę zachowania taśmy LED.

Szczegóły z karty katalogowej

Producent WS2812B
Numer części WS2812B
Napięcie logiki/IO 3,3 V (typ.)
Napięcie zasilania 5 V (typ.)
Prąd wyjściowy (na kanał) 20 mA (maks.)
Prąd szczytowy (na kanał) 60 mA (maks.)
Zalecana częstotliwość PWM 400 Hz (typ.)
Progi logiczne wejścia 0,3 Vcc (wysoki), 0,1 Vcc (niski)
Spadek napięcia / RDS(on) / nasycenie 1,2 V (maks.)
Limity termiczne 85 °C (maks.)
Obudowa Montaż powierzchniowy
Uwagi / warianty Dostępna w różnych długościach i gęstościach

 

  • Upewnij się, że taśma LED jest zasilana napięciem 5 V dla optymalnej wydajności.
  • Użyj odpowiedniego rezystora dla pinu danych, aby zapobiec problemom z integralnością sygnału.
  • Zachowaj ostrożność w kwestii ograniczeń prądu wyjściowego, aby uniknąć przegrzania.
  • Prawidłowo odsprzęgnij zasilacz, aby zapobiec skokom napięcia.
  • Ostrożnie wyreguluj czujnik podczerwieni, aby uzyskać pożądany zakres wykrywania.

Instrukcje dotyczące okablowania

ESP32-31-flowing-light-wiring

Aby podłączyć komponenty, zacznij od czujnika przeszkód na podczerwień. Podłącz pin wyjściowy czujnika do pinu 25 na ESP32. Środkowy pin powinien być podłączony do masy, a ostatni pin (VCC) powinien być podłączony do źródła zasilania 3,3 V.

ESP32-31-flowing-light-schematic

Następnie, dla taśmy LED WS2812, podłącz pin danych (zwykle żółty przewód) do pinu 14 na ESP32. Czerwony przewód powinien być podłączony do źródła zasilania 5 V, a czarny przewód do masy. Upewnij się, że wszystkie połączenia są odpowiednio zabezpieczone, aby zapobiec luźnemu okablowaniu.

Przykłady kodu i omówienie

Oto krótki przegląd kodu, który obsługuje ten projekt. Najpierw definiujemy liczbę pikseli w taśmie LED oraz pin danych używany do komunikacji:

#define NUM_PIXELS 8
#define DATA_PIN 14

W funkcji setup() inicjalizujemy taśmę LED oraz czujnik podczerwieni:

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

W funkcji loop() sprawdzamy, czy wykryto przeszkodę, i odpowiednio sterujemy taśmą 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);
    }
  }

Ten kod umożliwia taśmie LED wyświetlanie losowych kolorów podczas ruchu do przodu i zmianę kierunku po wykryciu przeszkody. Pełny kod znajduje się poniżej artykułu, więc koniecznie sprawdź go, aby poznać wszystkie szczegóły.

Demonstracja / Czego się spodziewać

Po zakończeniu konfiguracji i wgraniu kodu taśma LED powinna zacząć wyświetlać losowe kolory, poruszając się do przodu. Po wykryciu przeszkody taśma przełączy się na z góry określony kolor (taki jak zielony) i zmieni kierunek. Jeśli przeszkoda zostanie usunięta, taśma wznowi ruch do przodu z losowymi kolorami. Należy pamiętać, że zakres wykrywania czujnika podczerwieni może się różnić w zależności od użytego zasilacza (na wideo o 10:30).

Znaczniki czasu wideo

  • 00:00 Start
  • 2:14 Wprowadzenie do projektu
  • 4:58 Wyjaśnienie podłączeń
  • 7:41 Regulacja czujnika unikania przeszkód
  • 10:03 Wyjaśnienie kodu Arduino
  • 15:40 Wybór płytki ESP32 i portu COM w Arduino IDE
  • 17:22 Projekt 1: Demonstracja
  • 18:17 Zmiana koloru powrotnego

Obrazy

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
Język: C++
#include <Adafruit_NeoPixel.h>

// Set the number of pixels for the running light
#define NUM_PIXELS 8

// Set the data pin for the RGB LED strip
#define DATA_PIN 14

// Initialize the RGB LED strip object
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);

// Initialize the avoid sensor
#define AVOID_PIN 25

void setup() {
  // Initialize the RGB LED strip
  pixels.begin();

  // Initialize the avoid sensor
  pinMode(AVOID_PIN, INPUT_PULLUP);

  // Set the initial LED color
  uint32_t color = pixels.Color(random(256), random(256), random(256));
  pixels.fill(color);
  pixels.show();
}

void loop() {
  // Read the input from the infrared sensor
  bool avoid_value = digitalRead(AVOID_PIN);

  // Generate a random color for the current pixel
  uint32_t color = pixels.Color(random(256), random(256), random(256));

  // If no obstacle is detected
  if (avoid_value) {
    for (int i = 0; i < NUM_PIXELS; i++) {
      // Turn on the current pixel with the random color
      pixels.setPixelColor(i, color);

      // Update the RGB LED strip display
      pixels.show();

      // Turn off the current pixel
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
  // If detects an obstacle, change the direction of the LED strip
  else {
    for (int i = NUM_PIXELS - 1; i >= 0; i--) {
      pixels.setPixelColor(i, color);
      pixels.show();
      pixels.setPixelColor(i, 0);
      delay(100);
    }
  }
}

Zasoby i odniesienia

Pliki📁

Brak dostępnych plików.