در قسمت 40 از آموزش آردوینو به بررسی اتصال و استفاده از LEDها و همچنین، تنظیم روشنایی یک LED پرداختیم. در این قسمت قصد داریم درباره راهاندازی LEDهای توانبالا و تنظیم رنگ یک LED صحبت کنیم.
اگر بخواهید LEDهایی را روشن/خاموش کنید یا شدت نورشان را کنترل کنید که نسبت به توان خروجی آردوینو جریان بیشتری نیاز دارند، باید از یک روش کمکی استفاده کنید.
پایههای آردوینو Uno و Mega فقط میتوانند حداکثر ۴۰ میلیآمپر جریان بدهند.برای تأمین جریان لازم LED، از ترانزیستور بهعنوان یک کلید الکترونیکی استفاده کنید. LED را طبق شکل 1 وصل کنید.
کدهای موجود در قسمت قبلی (قسمت 40) نیز قابل استفادهاند؛ فقط دقت کنید پینی از آردوینو که به بیس ترانزیستور وصل میکنید با شمارهٔ پینی که در برنامه استفاده شده یکسان باشد.

شکل 1: استفاده از ترانزیستور برای راهاندازی LEDهای پرجریان
در شکل 1 یک فلش وجود دارد که منبع تغذیه +V را نشان میدهد. این منبع میتواند پین +5 ولت آردوینو باشد؛ این پین در صورت تأمین تغذیه از طریق USB حدود ۴۰۰ میلیآمپر جریان ارائه میدهد.
اگر آردوینو از ورودی آداپتور (سوکت برق خارجی) تغذیه شود، مقدار جریان قابلدستیابی به ولتاژ و جریان آداپتور بستگی دارد. (رگولاتور ولتاژ اضافه را بهصورت گرما تلف میکند — بررسی کنید که رگولاتور روی برد که معمولاً یک چیپ سهپین نزدیک ورودی DC است، بیش از حد داغ نشده باشد.)
اگر LEDها جریان بیشتری نسبت به مقدار قابلتأمین از +5 ولت آردوینو نیاز داشته باشند، باید از یک منبع تغذیهٔ جدا از آردوینو برای راهاندازی LEDها استفاده کنید.
اگر از یک منبع تغذیهٔ خارجی استفاده میکنید، فراموش نکنید زمین (GND) آن را به زمین آردوینو وصل کنید.
وقتی ترانزیستور روشن باشد، جریان میتواند از collector به Emitter عبور کند و وقتی ترانزیستور خاموش است، جریان قابلتوجهی از آن عبور نمیکند. آردوینو با استفاده از digitalWrite و قرار دادن ولتاژ یک پین روی وضعیت HIGH میتواند ترانزیستور را روشن کند. برای اینکه جریان زیادی وارد پین بیس ترانزیستور نشود، باید یک مقاومت بین پین آردوینو و بیس قرار دهید. مقدار معمول این مقاومت ۱ کیلو اهم است که حدود ۵ میلیآمپر جریان بیس فراهم میکند.
همچنین میتوانید از آیسیهای تخصصی مانند ULN2003A برای راهاندازی چند خروجی استفاده کنید؛ این آیسی شامل هفت درایور خروجی پرجریان (تا ۰٫۵ آمپر برای هر خروجی) است. مقدار مقاومتی که برای محدود کردن جریان LED استفاده میشود، با همان روشی که در قسمت قبلی گفته شد، محاسبه میشود.
اما باید توجه داشته باشید که ولتاژ منبع، کمی کاهش پیدا میکند، زیرا در ترانزیستور یک افت ولتاژ کوچک وجود دارد. این افت معمولاً کمتر از سهچهارم ولت است (مقدار دقیق آن را میتوانید در ولتاژ اشباع Emitter/collector در دیتاشیت پیدا کنید. برای LEDهای پُرجریان (۱ وات یا بیشتر)، بهترین روش این است که از منبع جریان ثابت استفاده شود. مداری که جریان عبوری از LED را به طور فعال کنترل میکند.
اگر برد شما از تراشهی ATmega استفاده میکند، میتوانید چند پایه پین را بهصورت موازی به هم متصل کنید تا جریان بیشتری نسبت به محدودیت ۴۰ میلیآمپر برای هر پایه عبور دهد. شکل 2 نشان میدهد که چگونه میتوان یک LED را طوری متصل کرد که بتواند با ۶۰ میلیآمپر جریان توسط دو پایه راهاندازی شود. در این شکل، LED از طریق مقاومتها به زمین و از طریق پایههای ۲ و ۷ متصل است. هر دو پین باید در وضعیت LOW (پایین) قرار گیرند تا کل جریان ۶۰ میلیآمپر از LED عبور کند.
توجه داشته باشید که باید دو مقاومت جداگانه استفاده کنید؛ نباید برای هر دو پین از یک مقاومت مشترک استفاده شود.

شکل 2: افزایش جریان با اتصال موازی چند پین ATmega
این روش را میتوان برای تأمین جریان (Source) هم استفاده کرد. بهعنوانمثال، LED را برعکس کنید: پینی که به مقاومتها وصل بود (کاتد) را به زمین و پین دیگر (آند) را به مقاومتها وصل کنید. در این حالت LED با قرار دادن هر دو پین در وضعیت HIGH روشن میشود.
بهترین حالت این است که از پینهایی که کنار هم نیستند استفاده کنید تا فشار روی تراشه کاهش یابد. این روش برای هر پینی که باdigitalWrite کنترل میشود کار میکند، اما با analogWrite عمل نمیکند. اگر برای خروجیهای آنالوگ (PWM) جریان بیشتری نیاز دارید، باید از ترانزیستورها استفاده کنید، همانطور که قبلاً توضیح داده شد.
این روش برای بردهای ۳۲ بیتی توصیه نمیشود.
فرض کنید میخواهید رنگ یک LED RGB را بهصورت برنامهای کنترل کنید.
LEDهای RGB دارای سه عنصر قرمز، سبز و آبی در یک پکیج هستند که یا آندها به هم متصل شدهاند (به آن Common Anode میگویند) یا کاتدها به هم متصل شدهاند (به آن Common Cathode میگویند). برای Common Anode، از سیمکشی شکل 3 استفاده کنید (آندها به +5 ولت متصل و کاتدها به پینها وصل میشوند).

شکل 3: اتصالات RGB (آند مشترک – Common Anode)
این اسکچ بهصورت پیوسته رنگها را از طریق تغییر شدت عناصر قرمز، سبز و آبی در LED RGB تغییر میدهد:
|
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
/* * RGB_LEDs sketch * RGB LEDs driven from PWM output ports */ const int redPin = 3; // choose the pin for each of the LEDs const int greenPin = 5; const int bluePin = 6; const bool invert = true; // set true if common anode, false if common cathode int color = 0; // a value from 0 to 255 representing the hue int R, G, B; // the Red Green and Blue color components void setup() { // pins driven by analogWrite do not need to be declared as outputs } void loop() { int brightness = 255; // 255 is maximum brightness hueToRGB(color, brightness); // call function to convert hue to RGB // write the RGB values to the pins analogWrite(redPin, R); analogWrite(greenPin, G); analogWrite(bluePin, B); color++; // increment the color if (color > 255) color = 0; delay(10); } // function to convert a color to its Red, Green, and Blue components. // void hueToRGB(int hue, int brightness) { unsigned int scaledHue = (hue * 6); // segment 0 to 5 around the color wheel unsigned int segment = scaledHue / 256; // position within the segment unsigned int segmentOffset = scaledHue - (segment * 256); unsigned int complement = 0; unsigned int prev = (brightness * ( 255 - segmentOffset)) / 256; unsigned int next = (brightness * segmentOffset) / 256; if (invert) { brightness = 255 - brightness; complement = 255; prev = 255 - prev; next = 255 - next; } switch (segment) { case 0: // red R = brightness; G = next; B = complement; break; case 1: // yellow R = prev; G = brightness; B = complement; break; case 2: // green R = complement; G = brightness; B = next; break; case 3: // cyan R = complement; G = prev; B = brightness; break; case 4: // blue R = next; G = complement; B = brightness; break; case 5: // magenta default: R = brightness; G = complement; B = prev; break; } } |
رنگ یک LED RGB توسط شدت نسبی عناصر قرمز، سبز و آبی آن تعیین میشود. تابع اصلی در این برنامه (hueToRGB) مقدار رنگ (Hue) را که بین ۰ تا ۲۵۵ است، به رنگ متناظر بین قرمز تا آبی تبدیل میکند. طیف رنگهای قابلمشاهده معمولاً با یک چرخ رنگ (Color Wheel) نمایش داده میشود که شامل رنگهای اصلی و فرعی و گرادیانهای بین آنها است.
شاخههای چرخ رنگ که نشاندهنده شش رنگ اصلی و فرعی هستند، با شش دستور case در کد کنترل میشوند. اگر متغیر segment با شماره case مطابقت داشته باشد، کد مربوط به آن اجرا شده و مقادیر RGB برای آن رنگ تنظیم میشوند:
و به همین ترتیب ادامه مییابد.
اگر میخواهید شدت نور (Brightness) را نیز تنظیم کنید، میتوانید مقدار متغیر brightness را کاهش دهید.
|
1 |
int brightness = map(analogRead(A0),0,1023,0,255); |
متغیر brightness در بازهی ۰ تا ۲۵۵ تغییر میکند، همزمان با اینکه ورودی آنالوگ از ۰ تا ۱۰۲۳ تغییر میکند و باعث میشود شدت نور LED با افزایش مقدار افزایش یابد.
من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.