آموزش ESP32 34/55 - گرادیان رنگ با LED RGB و دکمه تنظیم | کیت آموزشی ESP32 اینترنت اشیا سان فاوترز
در این آموزش، ما یک اثر گرادیان رنگی با استفاده از یک LED RGB ایجاد خواهیم کرد که بر اساس موقعیت یک پتانسیومتر (دکمه چرخان) تنظیم میشود. این پروژه از یک میکروکنترلر ESP32 استفاده میکند که دارای قابلیتهای Wi-Fi و Bluetooth درونساخت است و آن را به گزینهای چندمنظوره برای پروژههای IoT تبدیل میکند. با چرخاندن پتانسیومتر، میتوانیم به آرامی بین رنگهای مختلف تغییر کنیم و کارایی LED RGB و همچنین توانایی خواندن مقادیر آنالوگ از پتانسیومتر را نشان دهیم.

این پروژه برای یادگیری درباره PWM (مدولاسیون عرض پالس) و نحوه کنترل دستگاههای آنالوگ با میکروکنترلر ایدهآل است. در این آموزش، ما اجزای سختافزاری ضروری، دستورالعملهای سیمکشی را مورد بحث قرار خواهیم داد و قطعههای شِفر (کود) را برای کمک به شما در پیادهسازی پروژه فراهم خواهیم کرد. برای توضیح بصریتر، حتماً ویدئوی مرتبط را بررسی کنید (در ویدئو در 02:15).
سختافزار توضیح داده شده
اجزای اصلی استفاده شده در این پروژه شامل میکروکنترلر ESP32، یک LED RGB و یک پتانسیومتر است. ESP32 یک میکروکنترلر قدرتمند است که میتواند وظایف مختلفی را انجام دهد، از جمله ارتباط بیسیم، که آن را برای برنامههای IoT مناسب میسازد. LED RGB از سه LED مجزا (قرمز، سبز و آبی) تشکیل شده است که میتوان آنها را ترکیب کرد تا دامنه وسیعی از رنگها تولید شود. پتانسیومتر به عنوان یک مقاومت قابل تنظیم عمل میکند که خروجی ولتاژ متغیری را بر اساس موقعیت خود فراهم میآورد.
دیود نوری RGB میتواند در دو پیکربندی متصل شود: آند مشترک یا کاتد مشترک. در این پروژه، ما از پیکربندی آند مشترک استفاده خواهیم کرد، جایی که همه آندها به هم متصل شده و به ولتاژ مثبت وصل میشوند، که به ما این امکان را میدهد تا روشنایی هر دیود نوری را بهطور جداگانه با PWM کنترل کنیم. پتانسیومتر به یک ورودی آنالوگ در ESP32 متصل خواهد شد تا موقعیت آن را بخواند و مقادیر RGB را بهطور متناسب تنظیم کند.
جزئیات برگه دادهها
| سازنده | سانفاندر |
|---|---|
| شماره قطعه | LED RGB |
| ولتاژ منطقی/ورودی و خروجی | 3.3 ولت |
| ولتاژ تامین | ۵ ولت |
| جریان خروجی (به ازای هر کانال) | ۲۰ میلیآمپر |
| جریان اوج (به ازای هر کانال) | ۳۰ میلی آمپر |
| راهنمایی فرکانس PWM | ۵ کیلوهرتز |
| آستانههای منطقی ورودی | 0.3 ولت (کم) / 2.7 ولت (زیاد) |
| افت ولتاژ / RDS(خاموش)/ اشباع | ۱.۸ ولت (معمولی) |
| محدودیتهای حرارتی | دمای کار: -40 درجه سلسیوس تا +85 درجه سلسیوس |
| بسته | پنجرهی عبوری |
| یادداشتها / انواع | پیکربندی آند مشترک |
- برای هر کانال LED از یک مقاومت 220 اهمی استفاده کنید تا جریان را محدود کنید.
- اطمینان حاصل کنید که ولتاژ تأمین برق مناسب (۵ ولت) برای LED RGB وجود دارد.
- آند مشترک را به منبع ولتاژ مثبت متصل کنید.
- از PWM برای کنترل روشنایی هر رنگ LED استفاده کنید.
- در ارتباط با پتانسیومتر احتیاط کنید تا از ورودیهای معلق جلوگیری شود.
- قبل از بارگذاری شِفر (کود)، تأیید کنید که ESP32 به درستی روشن است.
دستورالعملهای سیمکشی
برای اتصال LED RGB و پتانسیومتر به ESP32، ابتدا پایه آنود مشترک LED RGB را به پایه تغذیه ۳.۳ ولت روی ESP32 متصل کنید. پایههای قرمز، سبز و آبی LED RGB به پایهها متصل خواهند شد.27,26, and25به ترتیب. مطمئن شوید که یک مقاومت 220 اهمی را به صورت سری با هر پایه رنگ LED قرار دهید تا جریان را محدود کرده و از LED محافظت کنید.
بهعلاوه، پتانسیومتر را به ESP32 متصل کنید بهطوریکه پایه چپ به پایه برق 3.3 ولت، پایه راست به زمین و پایه وسط به14بر روی ESP32. این پیکربندی به ESP32 اجازه میدهد تا ولتاژ آنالوگ را از پتانسیومتر بخواند که برای تنظیم رنگ LED RGB بر اساس موقعیت آن استفاده خواهد شد.
نمونههای شِفر (کود) و راهنما
در تابع راهاندازی، پایههای LED RGB و پتانسیومتر را تعریف کرده و تنظیمات PWM را نیز راهاندازی میکنیم. قطعه شِفر (کود) زیر نشان میدهد که چگونه پایههای LED RGB را تنظیم میکنیم:
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
void setup() {
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}در این قطعه شِفر (کود)، پایههای LEDهای قرمز، سبز و آبی را تعریف کرده و آنها را به کانالهای PWM با فرکانس و وضوح تعریف شده متصل میکنیم.
تابع حلقه مقدار پتانسیومتر را میخواند و آن را به یک مقدار رنگی تبدیل میکند که سپس برای تعیین مقادیر RGB استفاده میشود. بخش زیر این فرآیند را نشان میدهد:
void loop() {
int knobValue = analogRead(KNOB_PIN);
float hueValue = (float)knobValue / 4095.0;
int hue = (int)(hueValue * 360);
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
setColor(red, green, blue);
}این شِفر (کود) مقدار آنالوگ را از پتانسیومتر خوانده، آن را نرمالسازی کرده و رنگ مربوطه را محاسبه میکند. سپس به تابع مربوطه فراخوانی میکند.HUEtoRGBتابعی برای تبدیل رنگ به مقادیر RGB که به واریابلهای مربوطه انتقال مییابدsetColorتابعی برای بروزرسانی LED.
نمایش / چه انتظاری داشته باشید
پس از اتمام سیمکشی و بارگذاری شِفر (کود)، باید بتوانید پتانسیومتر را چرخانده تا رنگ LED RGB را به آرامی تغییر دهید. با چرخاندن دستگیره، LED بر اساس مقدار طیف رنگ محاسبه شده از موقعیت دستگیره، به رنگهای مختلف منتقل میشود. اگر LED روشن نشود یا رفتاری غیرمنتظره داشته باشد، سیمکشی را بررسی کنید و از اتصال صحیح پتانسیومتر اطمینان حاصل کنید (در ویدیو در ۱۰:۴۵).
زمانبندی ویدیو
- ۰۰:۰۰ شروع
- مقدمهای بر پروژه ۲:۱۱
- ۴:۳۱ الایدی RGB
- ۸:۱۸ رنگ RGB
- 12:18 توضیحاتی درباره سیم کشی
- شِفر (کود) آردوینو توضیح داده شده 17:59
- انتخاب برد ESP32 و پورت COM در Arduino IDE
- ۲۵:۵۴ نمایش
/*
* // تعریف پایانههای LED RGB
*/
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// تعریف فرکانس PWM و دقت آن
const int freq = 5000;
const int resolution = 8;
// پایه برای کلید را تعریف کنید
#define KNOB_PIN 14
void setup() {
Serial.begin(115200);
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
void loop() {
// مقدار دکمه را بخوانید
int knobValue = analogRead(KNOB_PIN);
Serial.println(knobValue);
// مقدار دکمه را به محدوده ۰-۱ نرمال کنید
float hueValue = (float)knobValue / 4095.0;
// مقدار نرمالized را به مقدار HUE (0-360) تبدیل کنید.
int hue = (int)(hueValue * 360);
// مقدار HUE را به مقادیر RGB تبدیل کنید
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
// RGB LED را با مقادیر جدید رنگ بهروزرسانی کنید
setColor(red, green, blue);
}
void setColor(int red, int green, int blue) {
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
// مقدار HUE را به مقادیر RGB تبدیل کنید
void HUEtoRGB(int hue, int* red, int* green, int* blue) {
float h = (float)hue / 60.0;
float c = 1.0;
float x = c * (1.0 - fabs(fmod(h, 2.0) - 1.0));
float r, g, b;
if (h < 1.0) {
r = c;
g = x;
b = 0;
} else if (h < 2.0) {
r = x;
g = c;
b = 0;
} else if (h < 3.0) {
r = 0;
g = c;
b = x;
} else if (h < 4.0) {
r = 0;
g = x;
b = c;
} else if (h < 5.0) {
r = x;
g = 0;
b = c;
} else {
r = c;
g = 0;
b = x;
}
float m = 1.0 - c;
*red = (int)((r + m) * 255);
*green = (int)((g + m) * 255);
*blue = (int)((b + m) * 255);
}
Common Course Links
Common Course Files
منابع و مراجع
-
مستنداتآموزش ESP32 34/55 - صفحه سند SunFounder برای گرادیان رنگdocs.sunfounder.com
فایلها📁
هیچ فایلی موجود نیست.