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

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.
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
#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
Resurser och referenser
-
DokumentationESP32 Tutorial 31/55- SunFounder doc page for flowing lightdocs.sunfounder.com
Filer📁
Inga filer tillgängliga.