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.
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

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.
Ď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
#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);
}
}
}
Common Course Links
Common Course Files
Zdroje a referencie
-
DokumentáciaESP32 Tutorial 31/55- SunFounder doc page for flowing lightdocs.sunfounder.com
Súbory📁
Žiadne súbory nie sú k dispozícii.