Search Code

Mafunzo ya ESP32 31/55 - Mradi wa Ukanda wa LED na Kuepuka Vizuizi | Kifurushi cha Kujifunza cha ESP32 IoT cha SunFounder

Mafunzo ya ESP32 31/55 - Mradi wa Ukanda wa LED na Kuepuka Vizuizi | Kifurushi cha Kujifunza cha ESP32 IoT cha SunFounder

Katika mafunzo haya, tutaunda mradi kwa kutumia microcontroller ya ESP32 na ukanda wa LED wa WS2812 ambao unaweza kubadilisha mwelekeo wake kulingana na ugunduzi wa kizuizi. Wakati ukanda wa LED unaposonga mbele, utaonyesha rangi za nasibu, na unapogundua kizuizi, utabadilika kuwa rangi iliyoamuliwa mapema na kurudisha mwelekeo. Mradi huu unaonyesha uwezo wa ESP32 pamoja na sensor ya kuepuka vikwazo ya infrared.

ESP32-31-flowing-light-main2

Katika mafunzo haya yote, tutashughulikia vipengele muhimu vya vifaa, maagizo ya wiring, na msimbo unaohitajika kuleta mradi huu maishani. Kwa maelezo ya kuona zaidi, hakikisha umeangalia video iliyounganishwa hapa chini (katika video saa 00:00).

Vifaa Vinavyoelezwa

Mradi huu unahitaji vipengele kadhaa, vikiwemo microcontroller ya ESP32, ukanda wa LED wa WS2812, na sensor ya kuepuka vikwazo ya infrared. ESP32 ni microcontroller yenye nguvu ambayo ina Wi-Fi na Bluetooth zilizojengewa ndani, na kuifanya kuwa bora kwa programu za IoT. Ukanda wa LED wa WS2812 ni ukanda wa LED wa RGB unaoweza kupangwa ambao unaruhusu udhibiti wa kila LED mmoja mmoja, kutuwezesha kuunda athari za mwanga zinazobadilika.

Sensor ya kuepuka vikwazo ya infrared inafanya kazi kwa kutoa mwanga wa infrared na kugundua mwanga unaorudi kutoka kwa vitu vilivyo karibu. Wakati kizuizi kinapogunduliwa, sensor inabadilisha hali yake ya pato, ikiruhusu ESP32 kujibu ipasavyo kwa kubadilisha tabia ya ukanda wa LED.

Maelezo ya Datasheet

Mtengenezaji WS2812B
Nambari ya sehemu WS2812B
Voltage ya Logic/IO 3.3 V (typ.)
Voltage ya usambazaji 5 V (typ.)
Mkondo wa pato (kwa kila channel) 20 mA (max)
Mkondo wa kilele (kwa kila channel) 60 mA (max)
Mwongozo wa frequency ya PWM 400 Hz (typ.)
Viwango vya kizingiti cha logic ya kuingiza 0.3 Vcc (juu), 0.1 Vcc (chini)
Kushuka kwa voltage / RDS(on) / kueneza 1.2 V (max)
Mipaka ya joto 85 °C (max)
Kifurushi Kuwekwa juu ya uso
Vidokezo / lahaja Inapatikana kwa urefu na msongamano mbalimbali

 

  • Hakikisha ukanda wa LED unatumiwa nguvu ya 5 V kwa utendaji bora.
  • Tumia resistor inayofaa kwa pini ya data ili kuzuia matatizo ya uadilifu wa ishara.
  • Kuwa makini na mipaka ya mkondo wa pato ili kuepuka kupashwa joto kupita kiasi.
  • Decouple vizuri usambazaji wa nguvu ili kuzuia spikes za voltage.
  • Rekebisha sensor ya infrared kwa uangalifu ili kufikia masafa yanayotakiwa ya ugunduzi.

Maagizo ya Wiring

ESP32-31-flowing-light-wiring

Ili kuunganisha vipengele, anza na sensor ya kuepuka vikwazo ya infrared. Unganisha pini ya pato ya sensor kwenye pini 25 kwenye ESP32. Pini ya kati inapaswa kuunganishwa kwenye ardhi, na pini ya mwisho (VCC) inapaswa kuunganishwa kwenye chanzo cha nguvu cha 3.3 V.

ESP32-31-flowing-light-schematic

Ifuatayo, kwa ukanda wa LED wa WS2812, unganisha pini ya data (kawaida waya wa njano) kwenye pini 14 kwenye ESP32. Waya nyekundu inapaswa kuunganishwa kwenye chanzo cha nguvu cha 5 V, na waya mweusi inapaswa kuunganishwa kwenye ardhi. Hakikisha umeimarisha viunganisho vyote vizuri ili kuzuia wiring isiyo imara.

Mifano ya Msimbo & Maelezo ya Hatua kwa Hatua

Hapa kuna muhtasari mfupi wa msimbo unaoendesha mradi huu. Kwanza, tunafafanua idadi ya saizi kwenye ukanda wa LED na pini ya data inayotumika kwa mawasiliano:

#define NUM_PIXELS 8
#define DATA_PIN 14

Katika kazi ya setup(), tunaanzisha ukanda wa LED na sensor ya infrared:

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

Katika kazi ya loop(), tunaangalia ikiwa kizuizi kimegunduliwa na kudhibiti ukanda wa LED ipasavyo:

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

Msimbo huu unaruhusu ukanda wa LED kuonyesha rangi za nasibu wakati unasonga mbele na kubadilisha mwelekeo wakati kizuizi kinapogunduliwa. Msimbo kamili unapakia chini ya makala, kwa hivyo hakikisha umeuangalia kwa maelezo yote.

Maonyesho / Nini cha Kutarajia

Wakati usanidi umekamilika na msimbo umepakiwa, ukanda wa LED unapaswa kuanza kuonyesha rangi za nasibu wakati unasonga mbele. Wakati kizuizi kinapogunduliwa, ukanda utabadilika kuwa rangi iliyoamuliwa mapema (kama vile kijani) na kurudisha mwelekeo. Ikiwa kizuizi kitaondolewa, ukanda utaendelea kusonga mbele na rangi za nasibu. Kuwa na ufahamu kwamba masafa ya ugunduzi wa sensor ya infrared yanaweza kutofautiana kulingana na usambazaji wa nguvu unaotumika (katika video saa 10:30).

Vidokezo vya Muda wa Video

  • 00:00 Anza
  • 2:14 Utangulizi wa mradi
  • 4:58 Uelekezaji wa wiring umeelezwa
  • 7:41 Kurekebisha Sensor ya Kuepuka Vizuizi
  • 10:03 Msimbo wa Arduino umeelezwa
  • 15:40 Kuchagua bodi ya ESP32 na COM port katika Arduino IDE
  • 17:22 Mradi 1: Maonyesho
  • 18:17 Kubadilisha rangi ya kurudi

Bilder

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
Språk: 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);
    }
  }
}

Resurser och referenser

Filer📁

Inga filer tillgängliga.