استفاده از LED پیکسلی به صورت سری باعث کاهش تعداد پایههای مورد استفاده در میکرو میشود. استفاده از ال ای دی پیکسلی بسیار آسان است. در این مقاله به آموزش راه اندازی LED پیکسلی با آردوینو میپردازیم. با پیاده سازی دو پروژه ساده، مفاهیم آنها را یاد خواهید گرفت.
همانطور که میدانید LED های مختلفی با کاربردهای متفاوت در بازار به فروش میرسند. ابتدا نگاهی میاندازیم به انواع LED های رنگی و مزایا و معایب هر کدام را به طور مختصر بررسی میکنیم.
فهرست محتوای آموزش
انواع ال ای دی
انواع LED ها در رنگ های متنوعی در بازار یافت میشوند؛ رنگهایی نظیر قرمز، آبی، سبز، سفید، بنفش، صورتی، زرد و … .
در برخی از مدلهای LED از سه رنگ اصلی قرمز، آبی و سبز استفاده شده است. یعنی سه LED به رنگ های قرمز، آبی و سبز را در یک بسته جای دادهاند. معمولاً این LEDها در دو دسته بندی قرار میگیرند.
- کاتد مشترک (یک فعال)
- آند مشترک (صفر فعال)
تعداد پایههای این نوع ال ای دی ها، 4 تاست؛ یکی پایه مشترک و 3 پایه دیگر آن مربوط به رنگها میباشد.
همانطور که میدانید، با سه رنگ اصلی (قرمز، آبی، سبز) میتوان طیف رنگی وسیعی ایجاد کرد. این طیف رنگی را میتوان با استفاده از روشن کردن مشترک 2 یا 3 رنگ با هم و با شدتهای مختلف ایجاد کرد.
از آنجا که سه رنگ اصلی در تشکیل رنگِ نهایی دخیل هستند؛ به این LED ها RGB گفته میشود.
راه اندازی LED RGB
برای راه اندازی ال ای دی RGB دو راه حل داریم:
- استفاده از درایورهای آماده موجود در بازار
- برنامه نویسی میکروها
در برنامه نویسی راه اندازی LED های RGB تکنیکی به نام روش موج PWM استفاده میشود که در مقاله زیر مورد بررسی قرار گرفته است.
مشکلات استفاده از LED RGB
همانطور که متوجه شدهاید، برای کار با هر LED RGB تعداد 3 پایه از میکرو اشغال خواهد شد. برای مثال اگر بخواهیم با 10 LED کار کنیم، 30 پایه از میکرو اشغال خواهد شد.
بله! این مقدار بسیار زیاد است!
اگر با یکی از مقرون به صرفه ترین میکروهای آردوینو که UNO نام دارد کار کنیم، خواهیم توانست حداکثر چهار LED RGB را مدیریت کنیم.
راه حل رفع مشکل استفاده از LED RGB
دو روش پیشنهادی برای رفع این مشکل وجود دارد:
- استفاده از LED پیکسلی
- روش مالتی پلکس (Multiplex)
در ادامه این مقاله به آموزش راه اندازی LED پیکسلی با آردوینو خواهیم پرداخت.
LED پیکسلی چیست ؟
اخیراً LED هایی به بازار عرضه شده است که دارای آی سی هستند. این آی سی ها میتوانند تمام طیف رنگی را ایجاد و به اصطلاح LED را درایو کنند. فقط کافی است رنگی که مد نظر ماست را به آی سی بدهیم. به این کار آدرس دهی گفته میشود.
مزیتهای استفاده از LED پیکسلی
چهار مزیت اصلی و مهم استفاده از ال ای دی پیکسلی عبارتند از:
مزیت اول: راه اندازی بسیار ساده
نسبت به سایر روشهای کار با LED از سادگی بیشتری در برنامه نویسی برخوردار است.
مزیت دوم: کار با یک پایه
برای کار با این LEDها فقط کافی است که کد رنگ را برای آن ارسال کنیم. پس برای آدرس دهی آی سی ها فقط به یک پایه برای ارسال اطلاعات نیاز خواهیم داشت.
مزیت سوم: امکان سری کردن LED ها
میتوان LED های پیکسلی را باهم سری کرد؛ هر تعداد LED پیکسلی را با هم سری کرده و در نهایت به یک پایهی میکرو متصل میشود.
مزیت چهارم: دارا بودن حافظه برای ذخیره مقدار رنگ
این IC ها دارای حافظهای جهت ذخیره کد رنگ ارسالی هستند. به این معنا که وقتی کد رنگ به LED داده شد، آن ال ای دی روشن شده و تا زمانی که کد رنگ جدیدی به آن ندهیم، روشنایی با همان رنگ باقی خواهد ماند.
نحوه اتصال چند LED پیکسلی در مدار
شکل زیر نحوه اتصال چندین LED پیکسلی را نشان میدهد.
برنامه راه اندازی LED پیکسلی با آردوینو
برای راه اندازی LED پیکسلی با استفاده از آردوینو نیاز به کتابخانه داریم. کتابخانه این LED ها Adafruit_NeoPixel.h
نام دارد که باید به برنامه اضافه شود. اگر چنین کتابخانهای ندارید، در بخش نظرات (انتهای مقاله) اعلام کنید تا برایتان ارسال شود.
#include <Adafruit_NeoPixel.h>
پیکربندی کتابخانه
در این بخش از برنامه استفاده از دستور زیر کتابخانه استفاده شده را پیکربندی میکنیم.
#define PIN 6 #define MAX_LED 16 Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_GRB + NEO_KHZ800 );
در قطعه کد فوق دو متغیر تعریف شده است:
- متغیر
PIN
: مشخص کننده شماره پایهای است که پایه دیتای LED به آن متصل میشود. (در اینجا پایه 6 استفاده شده است.) - متغیر
MAX_LED
: تعداد LED هایی است که به صورت سری به هم متصل شدهاند و قرار است آدرس دهی شوند. (در این آموزش 16 LED داریم.)
متغیرهای مربوط به LED
برای هر LED چهار متغیر در نظر میگیریم؛ یکی برای شماره LED مورد نظر و سه تای دیگر برای مشخص کردن طیف رنگی (مقادیر R و G و B)
- متغیر
LED_Number
برای مشخص کردن ال ای دی (از صفر تا تعداد LED ها منهای یک) - متغیر
R
شدت نور قرمز - متغیر
G
شدت نور سبز - متغیر
B
شدت نور آبی
متغیرهای شدت نور میتوانند با اعداد 0 تا 255 مقدار دهی شوند؛ 0 به معنای خاموش بودن رنگ و 255 به معنای حداکثر روشنایی آن.
به طور پیشفرض مقادیر اولیه را برابر 0 قرار دادهایم.
uint16_t LED_Number = 0; uint8_t R = 0; uint8_t G = 0; uint8_t B = 0;
ارسال اطلاعات LED پیکسلی با آردوینو
در حلقه Setup از برنامه، کتابخانه را استارت زده و نمایش میدهیم. نمایش دادن به این معنا است که اطلاعات رنگ را به LED انتخاب شده ارسال میکنیم.
void setup() { strip.begin(); strip.show(); }
حلقه اصلی برنامه
در اینجا یک کار ساده را انجام میدهیم. LED شماره صفر را ابتدا به رنگ قرمز، سپس بعد از گذشت یک ثانیه به رنگ سبز و در نهایت به رنگ آبی روشن خواهیم کرد.
روشن کردن رنگ قرمز
ابتدا مقدار متغییر قرمز (R
) را با 255 و دو متغییر سبز و آبی را با صفر مقداردهی میکنیم.
سپس شماره LED که میخواهیم روش شود را مشخص میکنیم.
نکته: زمانی که LED ها با هم سری میشوند، آن LED که به میکرو نزدیکتر است LED صفرم خواهد بود.
در نهایت رنگ انتخابی خود را توسط تابع colorPixel()
به LED ها ارسال میکنیم.
void loop() { R = 255; G = 0; B = 0; LED_Number = 0; colorPixel( strip.Color( G, R, B ), LED_Number ); delay( 1000 );
روشن کردن رنگ سبز
مطابق حالت قبل، متغییر سبز را در حداکثر خود قرار داده و متغییر قرمز و آبی را صفر میکنیم. سپس آنها را به LED ها ارسال میکنیم.
R = 0; G = 255; B = 0; LED_Number = 0; colorPixel( strip.Color( G, R, B ), LED_Number ); delay( 1000 );
روشن کردن رنگ آبی
و در نهایت، رنگ همان LED را به آبی تغییر میدهیم.
R = 0; G = 0; B = 255; LED_Number = 0; colorPixel( strip.Color( G, R, B ), LED_Number ); delay( 1000 ); }
تابع ارسال اطلاعات به LED
تابع زیر عملیات ارسال اطلاعات به LED را انجام میدهد.
void colorPixel( uint32_t c, uint8_t LED_Number ) { strip.setPixelColor( LED_Number, c ); strip.show(); }
تغییر شماره LED
با تغییر دادن مقدار متغیر LED_Number
در هنگام ارسال اطلاعات، میتوان سایر LED ها را نیز برنامه ریزی کرد.
به عنوان مثال در حلقهی زیر تمام LED ها به ترتیب با رنگ سبز و تاخیر 500 میلی ثانیه روشن و خاموش خواهند شد.
در این کد به جای استفاده از متغیر i
(شمارنده حلقه for) برای مشخص کردن شماره LED استفاده کردهایم.
#include <Adafruit_NeoPixel.h> #define PIN 6 #define MAX_LED 16 Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_GRB + NEO_KHZ800 ); void setup() { strip.begin(); strip.show(); } void loop() { for (int i = 0; i < 16; i++) { colorPixel( strip.Color( 255, 0, 0 ), i ); delay( 500 ); colorPixel( strip.Color( 0, 0, 0 ), i ); } } void colorPixel( uint32_t c, uint8_t LED_Number ) { strip.setPixelColor( LED_Number, c ); strip.show(); }
دانلود کد کار با LED پیکسلی در آردوینو
فایل پروژه اول که در این مقاله آن را با هم بررسی کردیم را میتوانید از طریق لینک زیر دانلود کنید.
جمع بندی راه اندازی LED پیکسلی با ARDUINO
در این مقاله به بررسی انواع LED پرداختیم. دریافتیم LED پیکسلی به دلیل مزیت استفاده از تعداد پایه کمتر، میتواند یکی از بهترین و مقرون به صرفهترین روش های استفاده از LED باشد. در ادامه به آموزش راه اندازی LED پیکسلی با آردوینو پرداختیم. مدار سری کردن LED Pixel را مورد بررسی قرار داده و دو پروژه ساده اجرا کردیم.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
با سلام و ممنون ، بنده led rgb معمولی کاتد مشترک چهار پایه هست بازار با اردینو برنامه نویسی کردم که برام رنگهای مختلف تولید کند کدهاش هم درست صحیح هستند از کتابخانه و لینگها دانلود کردم اصلا به درد بخور نیست رنگ نه مطلوب هست نه مخلوط میشه اینطور به نظر میرسه فقط رنگ اصلی و سبز قرمز آبی خوب نشون میده و کمی هم بنفش سفید تقریبا درست هست برای بقیه رنگها اصلا معلوم نیست چه رنگی هست ، انگار مخلوط نمیشه ، قشنگ زرد قهوهای خاکستری نشون بده ، . بقیه رنگها ، کد نویسی هم درسته از pmw اردینو استفاده میکنم و از (127,127 ,127)analogwrite بطور مثال برای رنگ سفید هست تقریبا , علتش چی هست به نظر شما ممنون اینطور که میگفتن سایت نمیدونم یک میلیون رنگ نشون میده اصلا اینطور نیست به علاوه باید یک کیلومتر فاصله بگیری از ال ای دی تا بدونی چه رنگی هست وگرنه معلوم نیست
سلام
در مورد کتابخونهها که گفتید اطلاع زیادی نداریم.
اما همونطور که در پیام قبلیتون گفتیم ممکنه به خاطر کیفیت LEDها و حتی تعدادشون باشه که خودتون هم اشاره کردید. درسته که ترکیب RGB میتونه چند ده هزار و شاید میلیونها رنگ رو ایجاد کنه، اما در ترکیب رنگهای کاملاً دقیق! LED رنگی سه رنگ رو مجزا ایجاد میکنه و معمولاً نور ضعیفی داره. همه اینها باید کنار هم باشند و به قول شما از فاصله دوری دیده بشن تا اون کیفیت مدنظرتون رو بده.
به همین خاطره بعضاً پیشنهاد میکنند اگه رنگ خاصی میخواد و LED اون رنگ وجود داره، دقیقاً همون رنگ رو بگیرید و براش از rgb استفاده نکنید.
با سلام ، این led rgb هر رنگی را تولید میکنه واضح مثلا قهوهای یا خاکستری ، بعد هر ال ای دی جداگانه میشه رنگ تولید کنند همه یک رنگ نباشن
سلام
در ترکیب رنگها، تقریباً تمام رنگهای معمول رو میشه با ترکیب سه رنگ قرمز، سبز و آبی ایجاد کرد. البته متناسب با کیفیت، تعداد و فاصله چشم با LEDها ممکنه این رنگها واضح یا کمی ناواضح باشند.
امکانش رو دارید ولی باید LEDها رو جداگانه وصل کنید و نه سری و کدها هم قاعدتاً تغییر خواهد داشت.
ممنونم عالی بود
خوشحالیم که براتون مفید بوده.