Code zoeken

ESP32 Tutorial 31/55 - Project LED Strip met Obstakelvermijding | SunFounder's ESP32 IoT Leerpakket

ESP32 Tutorial 31/55 - Project LED Strip met Obstakelvermijding | SunFounder's ESP32 IoT Leerpakket

In deze tutorial maken we een project met een ESP32-microcontroller en een WS2812-LED-strip die van richting kan veranderen op basis van obstakeldetectie. Wanneer de LED-strip vooruit beweegt, worden er willekeurige kleuren weergegeven, en bij detectie van een obstakel schakelt hij over naar een vooraf bepaalde kleur en keert de richting om. Dit project laat de mogelijkheden van de ESP32 zien in combinatie met een infrarood obstakelvermijdingssensor.

ESP32-31-flowing-light-main2

In deze tutorial behandelen we de benodigde hardwarecomponenten, bedradingsinstructies en de code die nodig is om dit project tot leven te brengen. Voor een meer visuele uitleg kun je zeker de onderstaande video bekijken (in video op 00:00).

Hardware uitgelegd

Dit project vereist verschillende componenten, waaronder de ESP32-microcontroller, een WS2812-LED-strip en een infrarood obstakelvermijdingssensor. De ESP32 is een krachtige microcontroller met ingebouwde Wi-Fi en Bluetooth, waardoor hij perfect is voor IoT-toepassingen. De WS2812-LED-strip is een programmeerbare RGB-LED-strip die individuele aansturing van elke LED mogelijk maakt, waardoor we dynamische lichteffecten kunnen creëren.

De infrarood obstakelvermijdingssensor werkt door infrarood licht uit te zenden en reflecties van nabijgelegen objecten te detecteren. Wanneer een obstakel wordt gedetecteerd, verandert de sensor zijn uitvoerstatus, waardoor de ESP32 dienovereenkomstig kan reageren door het gedrag van de LED-strip te wijzigen.

Datasheetdetails

Fabrikant WS2812B
Onderdeelnummer WS2812B
Logica/IO-spanning 3,3 V (typ.)
Voedingsspanning 5 V (typ.)
Uitgangsstroom (per kanaal) 20 mA (max)
Piekstroom (per kanaal) 60 mA (max)
PWM-frequentierichtlijn 400 Hz (typ.)
Ingangslogische drempels 0,3 Vcc (hoog), 0,1 Vcc (laag)
Spanningsval / RDS(on) / verzadiging 1,2 V (max)
Thermische limieten 85 °C (max)
Behuizing Opbouwmontage
Opmerkingen / varianten Beschikbaar in verschillende lengtes en dichtheden

 

  • Zorg ervoor dat de LED-strip wordt gevoed met 5 V voor optimale prestaties.
  • Gebruik een geschikte weerstand voor de datapin om signaalintegriteitsproblemen te voorkomen.
  • Wees voorzichtig met de uitgangsstroomlimieten om oververhitting te voorkomen.
  • Ontkoppel de voeding op de juiste manier om spanningspieken te voorkomen.
  • Stel de infraroodsensor zorgvuldig af om het gewenste detectiebereik te bereiken.

Bedradingsinstructies

ESP32-31-flowing-light-wiring

Om de componenten te bedraden, begin je met de infrarood obstakelvermijdingssensor. Verbind de uitgangspin van de sensor met pin 25 op de ESP32. De middelste pin moet worden verbonden met aarde, en de laatste pin (VCC) moet worden verbonden met een 3,3 V-voedingsbron.

ESP32-31-flowing-light-schematic

Verbind vervolgens voor de WS2812-LED-strip de datapin (meestal de gele draad) met pin 14 op de ESP32. De rode draad moet worden verbonden met een 5 V-voedingsbron, en de zwarte draad moet worden verbonden met aarde. Zorg ervoor dat alle verbindingen goed zijn bevestigd om losse bedrading te voorkomen.

Codevoorbeelden & uitleg

Hier is een kort overzicht van de code die dit project laat werken. Eerst definiëren we het aantal pixels in de LED-strip en de datapin die voor communicatie wordt gebruikt:

#define NUM_PIXELS 8
#define DATA_PIN 14

In de setup()-functie initialiseren we de LED-strip en de infraroodsensor:

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 de loop()-functie controleren we of er een obstakel wordt gedetecteerd en sturen we de LED-strip dienovereenkomstig aan:

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

Deze code zorgt ervoor dat de LED-strip willekeurige kleuren weergeeft bij vooruit bewegen en van richting verandert wanneer een obstakel wordt gedetecteerd. De volledige code wordt onder het artikel geladen, dus bekijk die zeker voor alle details.

Demonstratie / Wat te verwachten

Wanneer de opstelling compleet is en de code is geüpload, moet de LED-strip willekeurige kleuren gaan weergeven terwijl hij vooruit beweegt. Wanneer een obstakel wordt gedetecteerd, schakelt de strip over naar een vooraf bepaalde kleur (zoals groen) en keert de richting om. Als het obstakel wordt verwijderd, hervat de strip het vooruit bewegen met willekeurige kleuren. Houd er rekening mee dat het detectiebereik van de infraroodsensor kan variëren afhankelijk van de gebruikte voeding (in video op 10:30).

Videotijdstempels

  • 00:00 Start
  • 2:14 Introductie van het project
  • 4:58 Bedrading uitgelegd
  • 7:41 Obstakelvermijdingssensor aanpassen
  • 10:03 Arduino-code uitgelegd
  • 15:40 ESP32-board en COM-poort selecteren in Arduino IDE
  • 17:22 Project 1: Demonstratie
  • 18:17 De terugkerende kleur wijzigen

Afbeeldingen

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

Hulpmiddelen en referenties

Bestanden📁

Geen bestanden beschikbaar.