آموزش ESP32 31/55 - پروژه نوار LED با جلوگیری از موانع | کیت یادگیری IoT ESP32 سون فاندر
در این آموزش، ما یک پروژه با استفاده از میکروکنترلر ESP32 و نوار LED WS2812 ایجاد خواهیم کرد که میتواند بر اساس تشخیص موانع، جهت خود را تغییر دهد. زمانی که نوار LED به جلو حرکت میکند، رنگهای تصادفی را نمایش خواهد داد و در صورت تشخیص یک مانع، به رنگ از پیش تعیین شدهای سوئیچ کرده و جهت خود را معکوس میکند. این پروژه تواناییهای ESP32 را در ترکیب با یک حساس(حس کننده) اجتناب از موانع فروسرخ به نمایش میگذارد.
در طول این آموزش، ما اجزای سختافزاری لازم، دستورالعملهای سیمکشی و کدی که برای عملی کردن این پروژه نیاز است را پوشش میدهیم. برای توضیح بصریتر، حتماً ویدئوی پیوست شده در زیر را مشاهده کنید (در ویدئو در 00:00).
توضیح سختافزار
این پروژه به چندین مؤلفه نیاز دارد، از جمله میکروکنترلر ESP32، نوار LED WS2812 و حساس(حس کننده) جلوگیری از مانع مادون قرمز. ESP32 میکروکنترلر قدرتمندی است که دارای Wi-Fi و بلوتوث داخلی است و آن را برای برنامههای IoT ایدهآل میسازد. نوار LED WS2812 یک نوار LED RGB برنامهپذیر است که امکان کنترل جداگانه هر LED را فراهم میکند و به ما اجازه میدهد تا افکتهای نوری دینامیک ایجاد کنیم.
حساس(حس کننده) جلوگیری از موانع مادون قرمز با انتشار نور مادون قرمز و شناسایی انعکاسات از اشیای نزدیک کار میکند. هنگامی که مانع شناسایی میشود، حساس(حس کننده) وضعیت خروجی خود را تغییر میدهد و به ESP32 اجازه میدهد تا بهطور مناسب با تغییر رفتار نوار LED واکنش نشان دهد.
جزئیات برگه مشخصات
| تولیدکننده | WS2812B |
|---|---|
| شماره قطعه | WS2812B |
| ولتاژ منطق/ورودی-خروجی | ۳.۳ ولت (معمولاً) |
| ولتاژ تغذیه | ۵ ولت (معمولی) |
| جریان خروجی (به ازای هر کانال) | ۲۰ میلیآمپر (حداکثر) |
| جریان اوج (به ازای هر کانال) | ۶۰ میلی آمپر (حداکثر) |
| راهنمای فرکانس PWM | ۴۰۰ هرتز (معمولی) |
| آستانههای منطق ورودی | ۰.۳ ولت (بالا)، ۰.۱ ولت (پایین) |
| افت ولتاژ / RDS(on)/ اشباع | ۱.۲ ولت (حداکثر) |
| محدودیتهای حرارتی | ۸۵ درجه سانتیگراد (حداکثر) |
| بسته | نصب روی سطح |
| یادداشتها / واریانتها | در طولها و چگالیهای مختلف در دسترس است |
- اطمینان حاصل کنید که نوار LED با ۵ ولت تغذیه میشود تا عملکرد بهینه داشته باشد.
- از یک خازن مناسب برای پایه داده استفاده کنید تا از مشکلات یکپارچگی سیگنال جلوگیری شود.
- از محدودیتهای جریان خروجی احتیاط کنید تا از گرم شدن بیش از حد جلوگیری شود.
- به درستی منبع تغذیه را جدا کنید تا از نوسانات ولتاژ جلوگیری شود.
- حساس(حس کننده) مادون قرمز را با دقت تنظیم کنید تا به دامنه تشخیص مورد نظر دست یابید.
دستورالعملهای سیمکشی

برای اتصال اجزا، با حساس(حس کننده) جلوگیری از موانع مادون قرمز شروع کنید. پایه خروجی حساس(حس کننده) را به پایه متصل کنید.25بر روی ESP32. پایه وسط باید به زمین متصل شود و پایه آخر (VCC) باید به یک منبع تغذیه ۳.۳ ولت متصل شود.
سپس، برای نوار LED WS2812، پایه داده (معمولاً سیم زرد) را به پایه وصل کنید14بر روی ESP32. سیم قرمز باید به یک منبع تغذیه ۵ ولت متصل شود و سیم سیاه باید به زمین متصل شود. مطمئن شوید که همه اتصالات به درستی محکم شدهاند تا از هر گونه سیمکشی شل جلوگیری شود.
مثالهای شِفر (کود) و راهنمایی
این یک مرور کلی از کدی است که این پروژه را اجرا میکند. ابتدا، تعداد پیکسلها در نوار LED و پایه دادهای که برای ارتباط استفاده میشود را تعریف میکنیم:
#define NUM_PIXELS 8
#define DATA_PIN 14درsetup()تابع، ما نوار LED و حساس(حس کننده) مادون قرمز را راهاندازی میکنیم:
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()در این عملکرد، ما بررسی میکنیم که آیا مانعی شناسایی شده و بر اساس آن نوار LED را کنترل میکنیم:
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);
}
}این شِفر (کود) به نوار ال ای دی اجازه میدهد رنگهای تصادفی را در حین حرکت به جلو نمایش دهد و هنگام تشخیص مانع، جهت خود را تغییر دهد. شِفر (کود) کامل زیر مقاله بارگذاری شده است، بنابراین حتماً آن را بررسی کنید تا تمام جزئیات را ببینید.
نمایشگاه / چه انتظاری باید داشت
زمانی که راهاندازی کامل شد و شِفر (کود) بارگذاری شد، نوار LED باید شروع به نمایش رنگهای تصادفی در حال حرکت به جلو کند. زمانی که یک مانع شناسایی شود، نوار به رنگ از قبل تعیینشدهای (مانند سبز) تغییر خواهد کرد و به سمت معکوس حرکت میکند. اگر مانع حذف شود، نوار دوباره به حرکت به جلو با رنگهای تصادفی ادامه خواهد داد. توجه داشته باشید که دامنه تشخیص حساس(حس کننده) مادون قرمز ممکن است بسته به منبع تغذیه استفاده شده متفاوت باشد (در ویدیو در 10:30).
برچسبهای ویدیویی
- ۰۰:۰۰ شروع
- :14 مقدمهای بر پروژه
- ۴:۵۸ سیمکشی توضیح داده شده
- 7:41 تنظیم حساس(حس کننده) جلوگیری از موانع
- 10:03 توضیحات شِفر (کود) آردوینو
- انتخاب برد ESP32 و پورت COM در Arduino IDE در ساعت ۱۵:۴۰
- ۱۷:۲۲ پروژه ۱: نمایش
- ۱۸:۱۷ چنینگ رنگ برگرداننده
#include <Adafruit_NeoPixel.h>
// تعداد پیکسلها را برای چراغ در حال اجرا تنظیم کنید
#define NUM_PIXELS 8
// پایه داده را برای نوار LED RGB تنظیم کنید
#define DATA_PIN 14
// شیء نوار LED RGB را اولیهسازی کنید
Adafruit_NeoPixel pixels(NUM_PIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);
// حساس(حس کننده) اجتناب را راهاندازی کنید
#define AVOID_PIN 25
void setup() {
// نوار LED RGB را راهاندازی کنید
pixels.begin();
// حساس(حس کننده) اجتناب را راهاندازی کنید
pinMode(AVOID_PIN, INPUT_PULLUP);
// رنگ اولیه LED را تنظیم کنید
uint32_t color = pixels.Color(random(256), random(256), random(256));
pixels.fill(color);
pixels.show();
}
void loop() {
// دادهها را از حساس(حس کننده) مادون قرمز بخوانید
bool avoid_value = digitalRead(AVOID_PIN);
// رنگ تصادفی برای پیکسل فعلی ایجاد کنید
uint32_t color = pixels.Color(random(256), random(256), random(256));
// اگر مانعی شناسایی نشود
if (avoid_value) {
for (int i = 0; i < NUM_PIXELS; i++) {
// پیکسل فعلی را با رنگ تصادفی روشن کن
pixels.setPixelColor(i, color);
// بهروزرسانی نمایش نوار LED RGB
pixels.show();
// پیکسل کنونی را خاموش کنید
pixels.setPixelColor(i, 0);
delay(100);
}
}
// اگر مانعی تشخیص داده شود، جهت نوار LED را تغییر دهید.
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 31/55- صفحه مستندات SunFounder برای نور متغیرdocs.sunfounder.com
فایلها📁
هیچ فایلی موجود نیست.