شِفر (کود) جستجو

درس ۹۸-۴: محو کردن نور LED با استفاده از آردوینو: کنترل روشنایی

درس ۹۸-۴: محو کردن نور LED با استفاده از آردوینو: کنترل روشنایی

ال‌ای‌دی‌ها همه‌جا هستند — نشانگرها، نمایشگرها، نورپردازی تزئینی — اما بیشتر مبتدیان در همان روشن و خاموش کردن ساده متوقف می‌شوند. این پروژه یک قدم فراتر می‌رود: محو کردن نرم یک ال‌ای‌دی به داخل و خارج با استفاده از قابلیت PWM (مدولاسیون عرض پالس) داخلی آردوینو. به جای یک چشمک تند، شما یک افزایش و کاهش تدریجی در روشنایی دریافت می‌کنید که شبیه کم‌نور شدن طبیعی، جلوه‌های تنفس، و کنترل شبه‌آنالوگ از یک پایه کاملاً دیجیتال است. این یکی از رضایت‌بخش‌ترین پروژه‌های اول است زیرا می‌توانید نتیجه را فوراً ببینید، و همین تکنیک زیربنای کنترل سرعت موتور، حجم صدا، و کم‌نور کردن نور پس‌زمینه در محصولات واقعی است.

ال‌ای‌دی ۵ میلی‌متری سبز

هنگامی که محو شدن را درک کردید، می‌توانید آن را در طیف گسترده‌ای از ساخت‌های عملی به کار ببرید:

  • ایجاد یک نشانگر وضعیت «تنفسی» روی یک دستگاه که به آرامی می‌تپد به جای اینکه به طور حواس‌پرت‌کننده چشمک بزند
  • کم‌نور کردن خودکار یک چراغ شب ال‌ای‌دی بر اساس نور محیط یا زمان روز
  • کنترل روشنایی نور پس‌زمینه روی یک نمایشگر LCD یا OLED
  • ساخت نورپردازی حال‌وهوا یا لامپ‌های تزئینی با انتقال‌های نرم بین سطوح روشنایی
  • شبیه‌سازی یک ساعت زنگ‌دار طلوع آفتاب آهسته که به تدریج روشن‌تر می‌شود تا شما را به طور طبیعی بیدار کند
  • افزودن کنترل سرعت به موتورهای DC کوچک یا فن‌ها (همان اصل PWM اعمال می‌شود)

این آموزش بخشی از دوره گام‌به‌گام آردوینو Robojax است، و به طور خاص پروژه ۴ از ۱۰ را پوشش می‌دهد: محو کردن یک نور ال‌ای‌دی با استفاده از آردوینو. برنامه کامل برای دانلود در زیر مقاله موجود است.

سخت‌افزار و قطعات

330_ohm_resistor
مقاومت ۳۳۰ اهم ۰.۲۵ وات

لیست قطعات این پروژه حداقلی است — اگر قبلاً هر کار آردوینویی انجام داده‌اید، احتمالاً همه چیز مورد نیازتان را دارید:

  • ۱× برد آردوینو (Uno، Nano، Mega، یا هر برد سازگار)
  • ۱× ال‌ای‌دی (۵ میلی‌متری یا ۳ میلی‌متری، هر رنگی)
  • ۱× مقاومت (۲۰۰Ω تا ۱۰۰۰Ω — محدوده ۳۰۰Ω تا ۱kΩ خوب کار می‌کند)
  • بردبورد و سیم‌های جامپر دوپونت
  • کابل USB برای برنامه‌ریزی و برق

یک نکته مهم درباره ال‌ای‌دی: پایه بلندتر آند (مثبت) است، و پایه کوتاه‌تر — یا سمتی که لبه صاف روی بدنه پلاستیکی دارد — کاتد (منفی) است. برعکس گذاشتن این یعنی ال‌ای‌دی به سادگی روشن نمی‌شود، پس قبل از روشن کردن دوباره بررسی کنید.

برای مقدار مقاومت، متن آموزش ریاضیات را در (در ویدیو در ۰۳:۴۹) توضیح می‌دهد: یک ال‌ای‌دی معمولی حدود ۲ ولت افت می‌کند و تقریباً ۱۰ میلی‌آمپر جریان نیاز دارد. با منبع ۵ ولت، ۳ ولت باقی‌مانده باید در سراسر مقاومت افت کند، که R = V/I = 3V / 0.01A = 300Ω می‌دهد. در عمل، هر چیزی از ۳۰۰Ω تا ۱۰۰۰Ω کار می‌کند — مقادیر بالاتر فقط ال‌ای‌دی کم‌نورتری تولید می‌کنند. برای محو شدن، این در واقع اشکالی ندارد، چون به هر حال روشنایی را تغییر می‌دهید.

راهنمای سیم‌کشی

Arduino schematic for two LEDs see saw
شماتیک آردوینو برای دو ال‌ای‌دی اره‌ای
Arduino wiring for two LEDs see saw
سیم‌کشی آردوینو برای دو ال‌ای‌دی اره‌ای

سیم‌کشی تقریباً به سادگی ممکن است. آند ال‌ای‌دی از طریق یک مقاومت به یک پایه دارای قابلیت PWM روی آردوینو متصل می‌شود — در این پروژه، پایه ۳. کاتد به زمین متصل می‌شود.

چرا به طور خاص پایه ۳؟ زیرا همه پایه‌های آردوینو از PWM پشتیبانی نمی‌کنند. روی بیشتر بردهای آردوینو، پایه‌های دارای قابلیت PWM با نماد مد (~) علامت‌گذاری شده‌اند — معمولاً پایه‌های ۳، ۵، ۶، ۹، ۱۰، و ۱۱ روی یک Uno. اگر از یک پایه غیر PWM استفاده کنید، analogWrite() خروجی متغیری تولید نمی‌کند؛ ال‌ای‌دی فقط روشن یا خاموش خواهد بود.

مدار را به شرح زیر متصل کنید:

  1. ال‌ای‌دی را در بردبورد قرار دهید، توجه کنید که کدام پایه آند (بلندتر) و کدام کاتد (کوتاه‌تر/سمت صاف) است.
  2. آند ال‌ای‌دی را از طریق مقاومت به پایه ۳ آردوینو متصل کنید.
  3. کاتد ال‌ای‌دی را به پایه GND آردوینو متصل کنید.
  4. آردوینو را از طریق USB به کامپیوتر خود وصل کنید.

توضیح شِفر (کود)

اسکچ این پروژه بر اساس مثال کلاسیک «Fade» آردوینو است، با چند تغییر جزئی. به جای توضیح هر خط، بیایید روی بخش‌هایی تمرکز کنیم که می‌خواهید برای آزمایش‌های خودتان تنظیم کنید.

متغیرهای قابل تنظیم توسط کاربر

در بالای شِفر (کود)، سه متغیر کل رفتار را کنترل می‌کنند:

int led = 3;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 3;    // how many points to fade the LED by
  • led — این تعیین می‌کند که LED به کدام پایه متصل است. مقدار پیش‌فرض پایه ۳ است، اما می‌توانید آن را به هر پایه دارای قابلیت PWM (که روی برد شما با ~ مشخص شده است) تغییر دهید. اگر LED را به پایه دیگری منتقل کنید، این مقدار را مطابق آن به‌روزرسانی کنید.
  • brightness — این سطح روشنایی فعلی است که از ۰ (خاموش) تا ۲۵۵ (روشنایی کامل) متغیر است. شِفر (کود) آن را از ۰ شروع می‌کند، اما می‌توانید آن را از هر جایی در این محدوده شروع کنید.
  • fadeAmount — این جالب‌ترین مورد برای آزمایش است. کنترل می‌کند که در هر چرخه چند «گام» روشنایی برداشته شود. مقدار کوچکی مانند ۳ باعث محو شدن آهسته و تدریجی می‌شود. مقدار بزرگ‌تری مانند ۲۰ باعث می‌شود LED خیلی سریع محو و روشن شود. متن ویدیو این را در (در ویدیو در ۲۲:۳۷) نشان می‌دهد — تغییر از ۵ به ۲۰ به‌طور چشمگیری اثر را سریع‌تر می‌کند.

نحوه کار محو شدن

هسته اصلی محو شدن در دو خط داخل loop() اتفاق می‌افتد:

analogWrite(led, brightness);
brightness = brightness + fadeAmount;

در هر بار عبور از حلقه، مقدار روشنایی فعلی با استفاده از analogWrite() به LED نوشته می‌شود، سپس روشنایی به اندازه fadeAmount افزایش می‌یابد. تابع analogWrite() از PWM برای شبیه‌سازی ولتاژ آنالوگ استفاده می‌کند — پایه را به‌سرعت روشن و خاموش می‌کند و نسبت زمان روشن به زمان خاموش، روشنایی درک‌شده را تعیین می‌کند.

وقتی روشنایی به ۰ یا ۲۵۵ برسد، شِفر (کود) با تغییر علامت fadeAmount جهت را معکوس می‌کند:

if (brightness <= 0 || brightness >= 255) {
  fadeAmount = -fadeAmount;
}

این همان چیزی است که باعث می‌شود LED ابتدا روشن شود، سپس محو شود و دوباره روشن شود — یک چرخه تنفس پیوسته. delay(30) در انتهای حلقه، سرعت کلی انیمیشن را کنترل می‌کند. تأخیر کوتاه‌تر محو شدن را سریع‌تر می‌کند؛ تأخیر طولانی‌تر آن را کندتر می‌کند.

آزمایش با مقادیر

دو متغیر بیشترین کنترل را بر اثر بصری به شما می‌دهند:

  • fadeAmount را افزایش دهید برای محو شدن سریع‌تر و چشمگیرتر. ۱۰ یا ۲۰ را امتحان کنید.
  • fadeAmount را کاهش دهید برای اثر تنفس آهسته و ملایم. ۱ یا ۲ را امتحان کنید.
  • مقدار delay() را تنظیم کنید تا سرعت را تغییر دهید. تأخیرهای کوچک‌تر کل چرخه را سریع‌تر می‌کنند؛ تأخیرهای بزرگ‌تر آن را طولانی‌تر می‌کنند.

ترکیب fadeAmount کوچک با تأخیر کوتاه، محو شدنی بسیار نرم و تقریباً طبیعی ایجاد می‌کند — عالی برای نورپردازی محیطی. fadeAmount بزرگ با تأخیر کوتاه، اثر پالس سریع ایجاد می‌کند.

نمایش زنده پروژه

پس از آپلود شِفر (کود)، خواهید دید که LED به‌آرامی از خاموش به روشنایی کامل می‌رسد، سپس دوباره کم‌نور می‌شود و این چرخه بی‌پایان تکرار می‌شود. متن ویدیو رفتار پیش‌فرض را در (در ویدیو در ۲۲:۲۵) نشان می‌دهد — یک محو شدن نرم با سرعت متوسط.

وقتی fadeAmount به ۲۰ تغییر می‌کند، LED خیلی سریع محو و روشن می‌شود — تقریباً مانند یک سوسو زدن. وقتی روی ۳ تنظیم شود، محو شدن به‌طور محسوسی طولانی‌تر می‌شود و یک انتقال آرام و تدریجی ایجاد می‌کند. این موضوع به‌وضوح در ویدیو در (در ویدیو در ۲۳:۰۲) نشان داده شده است.

زیبایی این پروژه در این است که می‌توانید اثر تغییرات شِفر (کود) خود را فوراً ببینید — نیازی به تغییر سیم‌کشی نیست، فقط متغیرها را ویرایش کنید و دوباره آپلود کنید. این حلقه بازخورد سریع، آن را به روشی عالی برای ساختن شهود درباره نحوه تعامل PWM و زمان‌بندی تبدیل می‌کند.

اگر می‌خواهید این کار را با راه‌اندازی محو شدن توسط یک دکمه فشاری به‌جای اجرای پیوسته آن گسترش دهید، این موضوع در یک آموزش جداگانه پوشش داده شده است — بخش پروژه‌های مرتبط در زیر را ببینید.

پروژه‌های مرتبط از این ویدیو

فصل‌ها

  • [۰۰:۰۰] مروری بر ۱۰ پروژه LED آردوینو
  • [۰۱:۲۲] معرفی دوره و قطعات مورد نیاز
  • [۰۲:۲۹] درک LEDها: نمادها، قطبیت و انواع
  • [۰۳:۴۹] محاسبه مقدار مقاومت LED با استفاده از قانون اهم
  • [۰۵:۵۳] پروژه ۱: روشن و خاموش کردن یک LED
  • [۱۲:۴۳] پروژه ۲: کنترل LED با دکمه فشاری
  • [۱۷:۱۳] پروژه ۳: تاگل LED با دکمه فشاری
  • [۲۰:۱۲] پروژه ۴: محو کردن LED — بررسی شِفر (کود)
  • [۲۲:۲۵] نمایش محو شدن و تنظیم سرعت محو شدن
  • [۲۳:۲۰] پروژه ۵: محو کردن LED با محرک دکمه فشاری
  • [۲۷:۳۲] پروژه ۶: اثر LED الاکلنگی
  • [۳۰:۴۷] پروژه ۷: نور متحرک با ۵ LED
  • [۳۶:۴۱] پروژه ۸: نور متحرک کنترل‌شده با دکمه فشاری
  • [۴۲:۲۵] پروژه ۹: سطح‌سنج ولتاژ LED با پتانسیومتر
  • [۴۹:۲۵] پروژه ۱۰: چراغ راهنمایی آردوینو

تصاویر

Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
936-Lessson 98-LED-4: Arduino code to fade the LED light
زبان: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

کتابخانه‌های آردوینو (zip)

راهنمای کاربر