ESP32 Tutoriaal 31/55 - Projek LED-strook met Hindernisvermyding | SunFounder se ESP32 IoT-leerkit
In hierdie tutoriaal gaan ons 'n projek skep met 'n ESP32-mikrobeheerder en 'n WS2812-LED-strook wat sy rigting kan verander op grond van obstakelbespeuring. Wanneer die LED-strook vorentoe beweeg, sal dit ewekansige kleure vertoon, en wanneer 'n obstakel bespeur word, sal dit na 'n voorafbepaalde kleur oorskakel en die rigting omkeer. Hierdie projek wys die vermoëns van die ESP32 in kombinasie met 'n infrarooi obstakelvermydingsensor.
Dwarsdeur hierdie tutoriaal sal ons die nodige hardeware-komponente, bedradingsinstruksies en die kode dek wat nodig is om hierdie projek tot lewe te bring. Vir 'n meer visuele verduideliking, maak seker om die video hieronder te bekyk (in video by 00:00).
Hardeware Verduidelik
Hierdie projek vereis verskeie komponente, insluitend die ESP32-mikrobeheerder, 'n WS2812-LED-strook en 'n infrarooi obstakelvermydingsensor. Die ESP32 is 'n kragtige mikrobeheerder wat ingeboude Wi-Fi en Bluetooth het, wat dit perfek maak vir IoT-toepassings. Die WS2812-LED-strook is 'n programmeerbare RGB-LED-strook wat individuele beheer van elke LED moontlik maak, wat ons in staat stel om dinamiese beligtingseffekte te skep.
Die infrarooi obstakelvermydingsensor werk deur infrarooi lig uit te straal en refleksies van nabygeleë voorwerpe te bespeur. Wanneer 'n obstakel bespeur word, verander die sensor sy uitsetstatus, wat die ESP32 in staat stel om dienooreenkomstig te reageer deur die LED-strook se gedrag te verander.
Datablad Besonderhede
| Vervaardiger | WS2812B |
|---|---|
| Deelnommer | WS2812B |
| Logika/IO-spanning | 3.3 V (tip.) |
| Toevoerspanning | 5 V (tip.) |
| Uitsetstroom (per kanaal) | 20 mA (maks.) |
| Piekstroom (per kanaal) | 60 mA (maks.) |
| PWM-frekwensie-riglyn | 400 Hz (tip.) |
| Inset-logikadrumpels | 0.3 Vcc (hoog), 0.1 Vcc (laag) |
| Spanningsval / RDS(on) / versadiging | 1.2 V (maks.) |
| Termiese limiete | 85 °C (maks.) |
| Pakket | Oppervlakmontering |
| Notas / variante | Beskikbaar in verskeie lengtes en digthede |
- Maak seker die LED-strook word met 5 V aangedryf vir optimale werkverrigting.
- Gebruik 'n geskikte resistor vir die datapen om seinintegriteitskwessies te voorkom.
- Wees versigtig met die uitsetstroombeperkings om oorverhitting te vermy.
- Ontkoppel die kragtoevoer behoorlik om spanningspulse te voorkom.
- Stel die infrarooi sensor versigtig aan om die gewenste bespeuringsafstand te bereik.
Bedradingsinstruksies

Om die komponente te bedraad, begin met die infrarooi obstakelvermydingsensor. Verbind die uitsetpen van die sensor aan pen 25 op die ESP32. Die middelste pen moet aan grond gekoppel word, en die laaste pen (VCC) moet aan 'n 3.3 V-kragbron gekoppel word.
Volgende, vir die WS2812-LED-strook, verbind die datapen (gewoonlik die geel draad) aan pen 14 op die ESP32. Die rooi draad moet aan 'n 5 V-kragbron gekoppel word, en die swart draad moet aan grond gekoppel word. Maak seker alle verbindings is behoorlik vasgemaak om los bedrading te voorkom.
Kode Voorbeelde & Deurloop
Hier is 'n kort oorsig van die kode wat hierdie projek laat werk. Eerstens definieer ons die aantal pixels in die LED-strook en die datapen wat vir kommunikasie gebruik word:
#define NUM_PIXELS 8
#define DATA_PIN 14
In die setup()-funksie initialiseer ons die LED-strook en die infrarooi sensor:
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();
}
In die loop()-funksie kontroleer ons of 'n obstakel bespeur word en beheer die LED-strook dienooreenkomstig:
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);
}
}
Hierdie kode laat die LED-strook ewekansige kleure vertoon wanneer dit vorentoe beweeg en die rigting verander wanneer 'n obstakel bespeur word. Die volledige kode laai onder die artikel, so maak seker om dit te bekyk vir al die besonderhede.
Demonstrasie / Wat om te VerwAg
Wanneer die opstelling voltooi is en die kode opgelaai is, behoort die LED-strook ewekansige kleure te begin vertoon terwyl dit vorentoe beweeg. Wanneer 'n obstakel bespeur word, sal die strook na 'n voorafbepaalde kleur (soos groen) oorskakel en die rigting omkeer. As die obstakel verwyder word, sal die strook weer vorentoe beweeg met ewekansige kleure. Wees bewus dat die bespeuringsafstand van die infrarooi sensor kan wissel op grond van die kragtoevoer wat gebruik word (in video by 10:30).
Video Tydstempels
- 00:00 Begin
- 2:14 Inleiding tot die projek
- 4:58 Bedrading verduidelik
- 7:41 Aanpassing van die hindernisvermydingsensor
- 10:03 Arduino-kode verduidelik
- 15:40 Kies ESP32-bord en COM-poort in Arduino IDE
- 17:22 Projek 1: Demonstrasie
- 18:17 Verander die terugkeerkleur
#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
Hulpbronne en verwysings
-
DokumentasieESP32 Tutorial 31/55- SunFounder doc page for flowing lightdocs.sunfounder.com
Lêers📁
Geen lêers beskikbaar.