راه‌اندازی LED پیکسلی با آردوینو

استفاده از LED پیکسلی به صورت سری باعث کاهش تعداد پایه‌های مورد استفاده در میکرو می‌شود. استفاده از ال ای دی پیکسلی بسیار آسان است. در این مقاله به آموزش راه اندازی LED پیکسلی با آردوینو می‌پردازیم. با پیاده سازی دو پروژه ساده، مفاهیم آن‌ها را یاد خواهید گرفت.

همانطور که می‌دانید LED های مختلفی با کاربردهای متفاوت در بازار به فروش می‌رسند. ابتدا نگاهی می‌اندازیم به انواع LED های رنگی و مزایا و معایب هر کدام را به طور مختصر بررسی می‌کنیم.

 

انواع ال ای دی

انواع LED ها در رنگ های متنوعی در بازار یافت می‌شوند؛ رنگ‌هایی نظیر قرمز، آبی، سبز، سفید، بنفش، صورتی، زرد و … .

در برخی از مدل‌های LED از سه رنگ اصلی قرمز، آبی و سبز استفاده شده است. یعنی سه LED به رنگ های قرمز،  آبی و سبز را در یک بسته جای داده‌اند. معمولاً این LEDها در دو دسته بندی قرار می‌گیرند.

  • کاتد مشترک (یک فعال)
  • آند مشترک (صفر فعال)

 

تعداد پایه‌های این نوع ال ای دی ها، 4 تاست؛ یکی پایه مشترک و 3 پایه دیگر آن مربوط به رنگ‌ها می‌باشد.

همانطور که می‌دانید، با سه رنگ اصلی (قرمز، آبی، سبز) می‌توان طیف رنگی وسیعی ایجاد کرد. این طیف رنگی را می‌توان با استفاده از روشن کردن مشترک 2 یا 3 رنگ با هم و با شدت‌های مختلف ایجاد کرد.

از آن‌جا که سه رنگ اصلی در تشکیل رنگِ نهایی دخیل هستند؛ به این LED ها RGB گفته می‌شود.

اگر می‌خواهید با طیف رنگ‌های RGB بیشتر آشنا شوید، می‌توانید به این مقاله در دانشنامه آزاد ویکی پدیا مراجعه کنید.

 

راه اندازی LED RGB

برای راه اندازی ال ای دی RGB دو راه حل داریم:

  • استفاده از درایورهای آماده موجود در بازار
  • برنامه نویسی میکروها

در برنامه نویسی راه اندازی LED های RGB تکنیکی به نام روش موج PWM استفاده می‌شود که در مقاله زیر مورد بررسی قرار گرفته است.

آسان ترین روش ساخت موج PWM در میکرو AVR

آسان ترین روش ساخت موج PWM در میکرو AVR

 

مشکلات استفاده از 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 پیکسلی با آردوینو

برای راه اندازی 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 را مورد بررسی قرار داده و دو پروژه ساده اجرا کردیم.