ESP32 Оқулық 31/55 - Кедергіден аулақ болу функциясы бар LED жолағы жобасы | SunFounder компаниясының ESP32 IoT оқу жиынтығы
Бұл оқулықта біз ESP32 микроконтроллері мен WS2812 жарықдиодты жолағын пайдаланып, кедергілерді анықтау негізінде бағытын өзгерте алатын жоба жасаймыз. Жарықдиодты жолақ алға қозғалғанда, ол кездейсоқ түстерді көрсетеді, ал кедергі анықталғанда, ол алдын ала белгіленген түске ауысып, бағытын кері өзгертеді. Бұл жоба ESP32-нің инфрақызыл кедергілерден аулақ болу сенсорымен бірге мүмкіндіктерін көрсетеді.
Осы оқулық барысында біз қажетті аппараттық құрамдастарды, сымдарды жалғау нұсқауларын және осы жобаны жүзеге асыруға қажетті кодты қарастырамыз. Көбірек көрнекі түсіндіру үшін төмендегі бейнені міндетті түрде қараңыз (бейнеде 00:00-де).
Аппараттық құралдар түсіндірмесі
Бұл жоба бірнеше құрамдастарды қажет етеді, соның ішінде ESP32 микроконтроллері, WS2812 жарықдиодты жолағы және инфрақызыл кедергілерден аулақ болу сенсоры. ESP32 - бұл кірістірілген Wi-Fi және Bluetooth мүмкіндіктері бар қуатты микроконтроллер, бұл оны IoT қолданбалары үшін тамаша етеді. WS2812 жарықдиодты жолағы - әр жарықдиодты жеке басқаруға мүмкіндік беретін бағдарламаланатын RGB жарықдиодты жолақ, бұл бізге динамикалық жарық эффектілерін жасауға мүмкіндік береді.
Инфрақызыл кедергілерден аулақ болу сенсоры инфрақызыл жарық шығару және жақын маңдағы нысандардан шағылысуларды анықтау арқылы жұмыс істейді. Кедергі анықталғанда, сенсор өзінің шығыс күйін өзгертеді, бұл ESP32-ге жарықдиодты жолақтың мінез-құлқын өзгерту арқылы тиісті түрде жауап беруге мүмкіндік береді.
Деректер парағының мәліметтері
| Өндіруші | WS2812B |
|---|---|
| Бөлшек нөмірі | WS2812B |
| Логика/IO кернеуі | 3.3 В (тип.) |
| Қоректендіру кернеуі | 5 В (тип.) |
| Шығыс тогы (арнаға) | 20 мА (макс.) |
| Шыңдық ток (арнаға) | 60 мА (макс.) |
| PWM жиілігі бойынша нұсқау | 400 Гц (тип.) |
| Кіріс логикалық шектері | 0.3 Vcc (жоғары), 0.1 Vcc (төмен) |
| Кернеу төмендеуі / RDS(on) / қанығу | 1.2 В (макс.) |
| Жылулық шектер | 85 °C (макс.) |
| Қаптама | Беттік орнату |
| Ескертулер / нұсқалар | Әртүрлі ұзындықтар мен тығыздықтарда қолжетімді |
- Оңтайлы өнімділік үшін жарықдиодты жолақты 5 В кернеуімен қоректендіруді қамтамасыз етіңіз.
- Сигнал тұтастығы мәселелерін болдырмау үшін деректер істікшесі үшін қолайлы резисторды пайдаланыңыз.
- Қызып кетуді болдырмау үшін шығыс ток шектеулеріне мұқият болыңыз.
- Кернеу секірулерін болдырмау үшін қоректендіру көзін дұрыс бөлектеңіз.
- Қажетті анықтау қашықтығына қол жеткізу үшін инфрақызыл сенсорды мұқият реттеңіз.
Сымдарды жалғау нұсқаулары

Құрамдастарды жалғау үшін инфрақызыл кедергілерден аулақ болу сенсорынан бастаңыз. Сенсордың шығыс істікшесін ESP32-дегі 25 істікшесіне қосыңыз. Ортаңғы істікше жерге қосылуы керек, ал соңғы істікше (VCC) 3.3 В қоректендіру көзіне қосылуы керек.
Әрі қарай, WS2812 жарықдиодты жолағы үшін деректер істікшесін (әдетте сары сым) ESP32-дегі 14 істікшесіне қосыңыз. Қызыл сым 5 В қоректендіру көзіне, ал қара сым жерге қосылуы керек. Барлық қосылымдардың дұрыс бекітілгеніне көз жеткізіңіз, бос сымдардың болмауын қамтамасыз етіңіз.
Код мысалдары және түсіндірме
Міне, осы жобаны іске қосатын кодтың қысқаша шолуы. Алдымен, жарықдиодты жолақтағы пикселдер санын және байланыс үшін пайдаланылатын деректер істікшесін анықтаймыз:
#define NUM_PIXELS 8
#define DATA_PIN 14
setup() функциясында жарықдиодты жолақ пен инфрақызыл сенсорды инициализациялаймыз:
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();
}
loop() функциясында кедергінің анықталғанын тексереміз және жарықдиодты жолақты тиісті түрде басқарамыз:
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);
}
}
Бұл код жарықдиодты жолаққа алға қозғалғанда кездейсоқ түстерді көрсетуге және кедергі анықталғанда бағытын өзгертуге мүмкіндік береді. Толық код мақаланың астында жүктеледі, сондықтан барлық мәліметтер үшін оны міндетті түрде қараңыз.
Демонстрация / Не күтуге болады
Орнату аяқталғанда және код жүктелгенде, жарықдиодты жолақ алға қозғала отырып, кездейсоқ түстерді көрсете бастауы керек. Кедергі анықталғанда, жолақ алдын ала белгіленген түске (мысалы, жасыл) ауысып, бағытын кері өзгертеді. Егер кедергі жойылса, жолақ кездейсоқ түстермен алға қозғалуды жалғастырады. Инфрақызыл сенсордың анықтау қашықтығы пайдаланылатын қоректендіру көзіне байланысты өзгеруі мүмкін екенін ескеріңіз (бейнеде 10:30-да).
Бейне уақыт белгілері
- 00:00 Бастау
- 2:14 Жобаға кіріспе
- 4:58 Сымдарды қосу түсіндірілді
- 7:41 Кедергілерді болдырмау сенсорын реттеу
- 10:03 Arduino коды түсіндірілді
- 15:40 Arduino IDE-де ESP32 платасын және COM портын таңдау
- 17:22 Жоба 1: Демонстрация
- 18:17 Қайтару түсін өзгерту
#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
Ресурстар мен сілтемелер
-
ҚұжаттамаESP32 Tutorial 31/55- SunFounder doc page for flowing lightdocs.sunfounder.com
Файлдар📁
Файлдар жоқ.