ESP32 Tutorial 31/55 - Projekt LED-Streifen mit Hindernisvermeidung | SunFounder's ESP32 IoT Lernkit
In diesem Tutorial werden wir ein Projekt erstellen, das einen ESP32-Mikrocontroller und einen WS2812-LED-Streifen verwendet, der seine Richtung basierend auf der Hinderniserkennung ändern kann. Wenn der LED-Streifen sich vorwärts bewegt, zeigt er zufällige Farben an, und beim Erkennen eines Hindernisses wechselt er zu einer vorbestimmten Farbe und kehrt die Richtung um. Dieses Projekt zeigt die Fähigkeiten des ESP32 in Kombination mit einem Infrarot-Hindernisvermeidungssensor.
In diesem Tutorial werden wir die notwendigen Hardwarekomponenten, die Verkabelungsanleitungen und den Code behandeln, der erforderlich ist, um dieses Projekt zum Leben zu erwecken. Für eine visuellere Erklärung schauen Sie sich das unten verlinkte Video an (im Video bei 00:00).
Hardware erklärt
Dieses Projekt erfordert mehrere Komponenten, darunter den ESP32-Mikrocontroller, einen WS2812-LED-Streifen und einen Infrarot-Hindernisvermeidungssensor. Der ESP32 ist ein leistungsstarker Mikrocontroller, der über integriertes Wi-Fi und Bluetooth verfügt, was ihn perfekt für IoT-Anwendungen macht. Der WS2812-LED-Streifen ist ein programmierbarer RGB-LED-Streifen, der eine individuelle Steuerung jeder LED ermöglicht und es uns erlaubt, dynamische Lichteffekte zu erzeugen.
Der Infrarot-Wegfahrsensor funktioniert, indem er Infrarotlicht aussendet und Reflexionen von nahegelegenen Objekten erkennt. Wenn ein Hindernis erkannt wird, ändert der Sensor seinen Ausgangszustand, wodurch der ESP32 entsprechend reagieren kann, indem er das Verhalten des LED-Streifens verändert.
Datenblattdetails
| Hersteller | WS2812B |
|---|---|
| Teilenummer | WS2812B |
| Logik/IO-Spannung | 3,3 V (typ.) |
| Versorgungsspannung | 5 V (typ.) |
| Ausgangsstrom (pro Kanal) | 20 mA (max) |
| Spitzenstrom (pro Kanal) | 60 mA (max) |
| PWM-Frequenzanleitung | 400 Hz (typ.) |
| Eingangslogikschwellen | 0,3 Vcc (hoch), 0,1 Vcc (niedrig) |
| Spannungsabfall / RDS(on)/ Sättigung | 1,2 V (max) |
| Thermische Grenzen | 85 °C (max) |
| Paket | Oberflächenmontage |
| Hinweise / Varianten | Verfügbar in verschiedenen Längen und Dichten |
- Stellen Sie sicher, dass der LED-Streifen mit 5 V betrieben wird, um optimale Leistung zu erzielen.
- Verwenden Sie einen geeigneten Widerstand für den Datenpin, um Probleme mit der Signalqualität zu vermeiden.
- Seien Sie vorsichtig bei den Begrenzungen des Ausgangsstroms, um Überhitzung zu vermeiden.
- Trennen Sie die Stromversorgung richtig, um Spannungsspitzen zu vermeiden.
- Passen Sie den Infrarotsensor sorgfältig an, um den gewünschten Erkennungsbereich zu erreichen.
Verdrahtungsanweisungen

Um die Komponenten zu verkabeln, beginnen Sie mit dem Infrarot-Hindernisvermeidungssensor. Verbinden Sie den Ausgangspin des Sensors mit dem Pin25am ESP32. Der mittlere Pin sollte mit dem Ground verbunden werden, und der letzte Pin (VCC) sollte mit einer 3,3 V Stromquelle verbunden werden.
Als nächstes schließen Sie für den WS2812 LED-Streifen den Datenpin (normalerweise das gelbe Kabel) an den Pin an.14am ESP32. Der rote Draht sollte an eine 5 V-Stromquelle angeschlossen werden, und der schwarze Draht sollte mit dem Erdungspunkt verbunden werden. Stellen Sie sicher, dass alle Verbindungen ordnungsgemäß gesichert sind, um lose Verkabelungen zu vermeiden.
Codebeispiele und Anleitung
Hier ist eine kurze Übersicht über den Code, der dieses Projekt ausführt. Zuerst definieren wir die Anzahl der Pixel im LED-Streifen und den Datenpin, der für die Kommunikation verwendet wird:
#define NUM_PIXELS 8
#define DATA_PIN 14In dersetup()Funktion, wir initialisieren den LED-Streifen und den Infrarotsensor:
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 derloop()Funktion, wir prüfen, ob ein Hindernis erkannt wird und steuern den LED-Streifen entsprechend:
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);
}
}Dieser Code erlaubt es dem LED-Streifen, zufällige Farben anzuzeigen, wenn er sich vorwärts bewegt, und die Richtung zu ändern, wenn ein Hindernis erkannt wird. Der vollständige Code wird unter dem Artikel geladen, also schauen Sie sich alle Details an.
Demonstration / Was zu erwarten ist
Wenn die Einrichtung abgeschlossen ist und der Code hochgeladen wurde, sollte der LED-Streifen beginnen, zufällige Farben anzuzeigen, während er sich vorwärts bewegt. Wenn ein Hindernis erkannt wird, wechselt der Streifen zu einer vordefinierten Farbe (zum Beispiel grün) und kehrt die Richtung um. Wenn das Hindernis entfernt wird, fährt der Streifen fort, sich mit zufälligen Farben vorwärts zu bewegen. Beachten Sie, dass der Erfassungsbereich des Infrarotsensors je nach verwendeter Stromversorgung variieren kann (im Video um 10:30).
Videostempel
- 00:00 Start
- 2:14 Einführung in das Projekt
- 4:58 Verdrahtung erklärt
- 7:41 Anpassung des Hindernisvermeidungssensors
- 10:03 Arduino-Code erklärt
- 15:40 Auswahl des ESP32-Boards und des COM-Ports in der Arduino IDE
- 17:22 Projekt 1: Demonstration
- 18:17 Channing die zurückkehrende Farbe
#include <Adafruit_NeoPixel.h>
// Stellen Sie die Anzahl der Pixel für das laufende Licht ein.
#define NUM_PIXELS 8
// Setzen Sie den Datenpin für den RGB-LED-Streifen.
#define DATA_PIN 14
// Initialisiere das RGB-LED-Streifenobjekt
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);
// Initialisiere den Vermeidesensor
#define AVOID_PIN 25
void setup() {
// Initialisieren Sie den RGB-LED-Streifen
pixels.begin();
// Initialisiere den Vermeidesensor
pinMode(AVOID_PIN, INPUT_PULLUP);
// Stellen Sie die anfängliche LED-Farbe ein.
uint32_t color = pixels.Color(random(256), random(256), random(256));
pixels.fill(color);
pixels.show();
}
void loop() {
// Lese die Eingabe des Infrarotsensors.
bool avoid_value = digitalRead(AVOID_PIN);
// Generiere eine zufällige Farbe für den aktuellen Pixel.
uint32_t color = pixels.Color(random(256), random(256), random(256));
// Wenn kein Hindernis erkannt wird
if (avoid_value) {
for (int i = 0; i < NUM_PIXELS; i++) {
// Schalte das aktuelle Pixel mit der zufälligen Farbe ein.
pixels.setPixelColor(i, color);
// Aktualisieren Sie die RGB-LED-Streifenanzeige.
pixels.show();
// Schalte das aktuelle Pixel aus.
pixels.setPixelColor(i, 0);
delay(100);
}
}
// Wenn ein Hindernis erkannt wird, ändere die Richtung des LED-Streifens.
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
Ressourcen & Referenzen
-
DokumentationESP32 Tutorial 31/55 - SunFounder-Dokumentation für fließendes Lichtdocs.sunfounder.com
Dateien📁
Keine Dateien verfügbar.