در قسمت 39 از آموزش آردوینو به بررسی خروجی تصویری و کنترل LED با خروجی دیجیتال و PWM پرداختیم. در این قسمت قصد داریم درباره اتصال و استفاده از LEDها و همچنین، تنظیم روشنایی یک LED صحبت کنیم.
فرض کنید میخواهید یک یا چند LED را کنترل کنید و مقاومت مناسب را برای محدود کردن جریان انتخاب کنید تا به LEDها آسیب نرسد.
روشن و خاموش کردن LED با آردوینو کار سادهای است. در برخی از مثالهای قسمتهای قبلی نیز این قابلیت نشان داده شده است. در این قسمت، روش انتخاب و استفاده از LEDهای خارجی توضیح داده میشود. شکل 1 نحوه سیمکشی سه LED را نشان میدهد، اما میتوانید این اسکچ را تنها با یک یا دو LED نیز اجرا کنید.

شکل 1: اتصال LEDهای خارجی
نماد شماتیکی برای کاتد (پایهی منفی) حرف K است، نه C. حرف C در نقشههای شماتیکی برای خازن (capacitor) استفاده میشود.
اسکچ (یا کد) زیر سه عدد LED را که به پینهای ۳، ۵ و ۶ متصل هستند، به ترتیب و هر کدام به مدت یک ثانیه روشن میکند:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* * LEDs sketch * Blink three LEDs each connected to a different digital pin */ const int firstLedPin = 3; // choose the pin for each of the LEDs const int secondLedPin = 5; const int thirdLedPin = 6; void setup() { pinMode(firstLedPin, OUTPUT); // declare LED pins as output pinMode(secondLedPin, OUTPUT); // declare LED pins as output pinMode(thirdLedPin, OUTPUT); // declare LED pins as output } void loop() { // flash each of the LEDs for 1000 ms (1 second) blinkLED(firstLedPin, 1000); blinkLED(secondLedPin, 1000); blinkLED(thirdLedPin, 1000); } // blink the LED on the given pin for the duration in milliseconds void blinkLED(int pin, int duration) { digitalWrite(pin, HIGH); // turn LED on delay(duration); digitalWrite(pin, LOW); // turn LED off delay(duration); } |
در این اسکچ، پینهای متصل به LEDها در تابع setup بهعنوان خروجی تنظیم میشوند. سپس در تابع loop، تابع blinkLED برای هر سه پین فراخوانی میشود تا LED مربوط به آن پایه چشمک بزند. تابع blinkLED پین مشخصشده را به مدت یک ثانیه (۱۰۰۰ میلیثانیه) در حالت روشن (HIGH) قرار میدهد.
از آنها که آندهای LED به پینهای آردوینو وصل شدهاند و کاتدها به زمین متصل هستند، زمانی که پین در حالت ولتاژ بالا (HIGH) قرار دارد، LED روشن میشود و وقتی پین در حالت ولتاژ پایین (LOW) باشد، خاموش میشود.
شما میتوانید کاری کنید که LED هنگام LOW شدن پین روشن شود؛ به این صورت که کاتدها را به پینها و آندها را به زمین وصل کنید (مقاومتها را میتوان در هر طرف LED قرار داد).
زمانی که LEDها طوری وصل شوند که آند آنها به +5 ولت متصل باشد، همانطور که در شکل 2 نشان داده شده، LEDها زمانی روشن میشوند که پین در حالت LOW (ولتاژ پایین) باشد. (اثر بصری معکوس میشود — یکی از LEDها برای یک لحظه خاموش میشود در حالی که دو LED دیگر روشن خواهند بود).

شکل 2: وصل کردن LEDهای خارجی بهطوری که کاتد آنها به پینها متصل باشد
برای کنترل جریان عبوری از LED هنگام روشن شدن آن، یک مقاومت سری با LED قرار داده میشود. برای محاسبه مقدار این مقاومت، باید ولتاژ منبع تغذیه (VS، معمولاً ۵ ولت)، ولتاژ مستقیم LED (VF) و میزان جریانی که میخواهید از LED عبور کند (I) را بدانید.
فرمول محاسبه مقاومت بر حسب اهم (که به قانون اهم معروف است) بهصورت زیر است:
R = (VS – VF) / I
برای مثال، اگر بخواهیم یک LED با ولتاژ مستقیم ۱.۸ ولت را با جریان ۱۵ میلیآمپر و با ولتاژ منبع تغذیه ۵ ولت راهاندازی کنیم، مقادیر بهصورت زیر خواهد بود:
Vs = ۵ (برای برد آردوینو ۵ ولتی)
VF = ۱.۸ (ولتاژ مستقیم LED)
I = 0.015 (۱ میلیآمپر [mA] برابر یک هزارم آمپر است، بنابراین ۱۵ میلیآمپر برابر ۰.۰۱۵ آمپر است)
ولتاژ عبوری از LED در حالت روشن (Vs – VF) برابر است با ۱.۸ – ۵ ولت، یعنی ۳.۲ ولت.
بنابراین، مقدار مقاومت سری بهصورت زیر محاسبه میشود:
۳.۲ تقسیم بر ۰.۰۱۵ که برابر با ۲۱۳ اهم است.
ازآنجاکه مقدار ۲۱۳ اهم یک مقدار استاندارد مقاومت نیست، میتوان آن را به مقدار استاندارد بالاتر یعنی ۲۲۰ اهم گرد کرد.
در شکل 2، این مقاومت بین کاتد و زمین قرار داده شده است، اما میتوان آن را در سمت دیگر LED نیز وصل کرد (یعنی بین منبع ولتاژ و آند).
فرض کنید میخواهید شدت روشنایی یک یا چند LED را از برنامه خود کنترل کنید.
هر LED را به یک خروجی آنالوگ (PWM) وصل کنید. از سیمکشی نشان داده شده در شکل 1 استفاده کنید.
اسکچ باعث میشود LEDها از حالت خاموش به حداکثر روشنایی و سپس دوباره به حالت خاموش تغییر کنند، بهطوریکه هر چرخه حدود پنج ثانیه طول میکشد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
* * LedBrightness sketch * controls the brightness of LEDs on analog output ports */ const int firstLed = 3; // specify the pin for each of the LEDs const int secondLed = 5; const int thirdLed = 6; int brightness = 0; int increment = 1; void setup() { // pins driven by analogWrite do not need to be declared as outputs } void loop() { if(brightness > 255) { increment = -1; // count down after reaching 255 } else if(brightness < 1) { increment = 1; // count up after dropping back down to 0 } brightness = brightness + increment; // increment (or decrement sign is minus) // write the brightness value to the LEDs analogWrite(firstLed, brightness); analogWrite(secondLed, brightness); analogWrite(thirdLed, brightness ); delay(10); // 10 ms for each step change means 2.55 secs to fade up or down } |
این از همان سیمکشی برنامه قبلی استفاده میکند، اما اینجا پینها با استفاده از analogWrite کنترل میشوند، نه digitalWrite.
تابع analogWrite از PWM برای کنترل توان LED استفاده میکند؛ برای اطلاعات بیشتر در مورد خروجی آنالوگ به قسمت قبلی مراجعه کنید.
برنامه شدت نور را با افزایش (در حالت روشن شدن) یا کاهش (در حالت خاموش شدن) مقدار متغیر brightness در هر بار اجرای حلقه تنظیم میکند.
این مقدار به تابع analogWrite برای سه LED متصل داده میشود.
وقتی مقدار متغیر brightness به بیشترین مقدار برسد، شروع به کاهش خواهد کرد، زیرا علامت افزایش از 1+ به 1– تغییر میکند (اضافه کردن 1– به یک مقدار همانند کم کردن 1 از آن مقدار است).
بردهایی مانند Due ،Zero و MKR1000 میتوانند بازه PWM را تا حداکثر ۴۰۹۵ داشته باشند، اگرچه به طور پیشفرض همه آنها روی مقدار استاندارد ۲۵۵ قرار دارند.
اگر نیاز به استفاده از این وضوح بالاتر دارید، میتوانید با استفاده از تابع analogWriteResolution آن را تنظیم کنید.
من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.