Hľadať kód

Návod pre ESP32 31/55 - Projekt LED pásika s vyhýbaním sa prekážkam | SunFounderova ESP32 IoT vzdelávacia súprava

Návod pre ESP32 31/55 - Projekt LED pásika s vyhýbaním sa prekážkam | SunFounderova ESP32 IoT vzdelávacia súprava

V tomto návode vytvoríme projekt pomocou mikrokontroléra ESP32 a WS2812 LED pásika, ktorý dokáže meniť svoj smer na základe detekcie prekážok. Keď sa LED pásik pohybuje dopredu, zobrazuje náhodné farby, a pri detekcii prekážky prepne na vopred určenú farbu a zmení smer. Tento projekt ukazuje možnosti ESP32 v kombinácii s infračerveným senzorom na vyhýbanie sa prekážkam.

ESP32-31-flowing-light-main2

V celom tomto návode preberieme potrebné hardvérové komponenty, pokyny na zapojenie a kód potrebný na oživenie tohto projektu. Pre vizuálnejšie vysvetlenie si určite pozrite video nižšie (vo videu o 00:00).

Vysvetlenie hardvéru

Tento projekt vyžaduje niekoľko komponentov, vrátane mikrokontroléra ESP32, WS2812 LED pásika a infračerveného senzora na vyhýbanie sa prekážkam. ESP32 je výkonný mikrokontrolér so vstavaným Wi-Fi a Bluetooth, vďaka čomu je ideálny pre IoT aplikácie. WS2812 LED pásik je programovateľný RGB LED pásik, ktorý umožňuje individuálne ovládanie každej LED, čo nám umožňuje vytvárať dynamické svetelné efekty.

Infračervený senzor na vyhýbanie sa prekážkam funguje tak, že vyžaruje infračervené svetlo a deteguje odrazy od blízkych objektov. Keď sa zistí prekážka, senzor zmení svoj výstupný stav, čo umožní ESP32 reagovať zmenou správania LED pásika.

Podrobnosti z datasheetu

Výrobca WS2812B
Číslo dielu WS2812B
Logické/IO napätie 3,3 V (typ.)
Napájacie napätie 5 V (typ.)
Výstupný prúd (na kanál) 20 mA (max)
Špičkový prúd (na kanál) 60 mA (max)
Odporúčaná PWM frekvencia 400 Hz (typ.)
Vstupné logické prahy 0,3 Vcc (vysoká), 0,1 Vcc (nízka)
Pokles napätia / RDS(on) / saturácia 1,2 V (max)
Tepelné limity 85 °C (max)
Puzdro Povrchová montáž
Poznámky / varianty Dostupné v rôznych dĺžkach a hustotách

 

  • Uistite sa, že LED pásik je napájaný 5 V pre optimálny výkon.
  • Použite vhodný rezistor pre dátový pin, aby ste predišli problémom s integritou signálu.
  • Buďte opatrní pri obmedzeniach výstupného prúdu, aby ste predišli prehriatiu.
  • Správne oddeľte napájací zdroj, aby ste predišli napäťovým špičkám.
  • Opatrne nastavte infračervený senzor, aby ste dosiahli požadovaný rozsah detekcie.

Pokyny na zapojenie

ESP32-31-flowing-light-wiring

Na zapojenie komponentov začnite s infračerveným senzorom na vyhýbanie sa prekážkam. Pripojte výstupný pin senzora na pin 25 na ESP32. Stredný pin by mal byť pripojený na zem a posledný pin (VCC) by mal byť pripojený na 3,3 V napájací zdroj.

ESP32-31-flowing-light-schematic

Ďalej, pre WS2812 LED pásik pripojte dátový pin (zvyčajne žltý vodič) na pin 14 na ESP32. Červený vodič by mal byť pripojený na 5 V napájací zdroj a čierny vodič na zem. Uistite sa, že sú všetky spojenia správne zabezpečené, aby ste predišli voľnému zapojeniu.

Príklady kódu a vysvetlenie

Tu je stručný prehľad kódu, ktorý riadi tento projekt. Najprv definujeme počet pixelov v LED pásiku a dátový pin použitý na komunikáciu:

#define NUM_PIXELS 8
#define DATA_PIN 14

Vo funkcii setup() inicializujeme LED pásik a infračervený senzor:

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

Vo funkcii loop() kontrolujeme, či je detegovaná prekážka, a podľa toho ovládame LED pásik:

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

Tento kód umožňuje LED pásiku zobrazovať náhodné farby pri pohybe dopredu a zmeniť smer pri detekcii prekážky. Celý kód sa načíta nižšie pod článkom, takže si ho určite pozrite pre všetky podrobnosti.

Demonštrácia / Čo očakávať

Keď je zapojenie dokončené a kód nahraný, LED pásik by mal začať zobrazovať náhodné farby pri pohybe dopredu. Keď sa zistí prekážka, pásik prepne na vopred určenú farbu (napríklad zelenú) a zmení smer. Ak sa prekážka odstráni, pásik obnoví pohyb dopredu s náhodnými farbami. Upozorňujeme, že rozsah detekcie infračerveného senzora sa môže líšiť v závislosti od použitého napájacieho zdroja (vo videu o 10:30).

Časové značky videa

  • 00:00 Štart
  • 2:14 Úvod do projektu
  • 4:58 Vysvetlenie zapojenia
  • 7:41 Nastavenie senzora na obchádzanie prekážok
  • 10:03 Vysvetlenie kódu pre Arduino
  • 15:40 Výber dosky ESP32 a COM portu v Arduino IDE
  • 17:22 Projekt 1: Ukážka
  • 18:17 Zmena návratovej farby

Obrázky

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

Zdroje a referencie

Súbory📁

Žiadne súbory nie sú k dispozícii.