این نور LED NeoPixel مبتنی بر درایور WS2811 و Arduino به صورت دیجیتالی چراغ‌های قرمز، سبز و آبی (RGB) را تولید می‌کند. در اصل توسط Adafruit معرفی شده است ، نوارهای LED دارای آی سی های درایور هستند که قابل آدرس‌دهی و برنامه‌ریزی هستند.

ال ای دی Neopixel

انواع مختلفی از نوارها / آرایه‌های LED در دسترس است اما ممکن است از نوع مبتنی بر تراشه درایور WS2811 استفاده کنیم. با این حال، از معادل‌های آن WS2812 ، WS2812b و WS2813 نیز می‌توان استفاده کرد. گذرگاه پروتکل سریال مورد استفاده برای آدرس‌دهی و کنترل LED ها می‌تواند تا حدودی پیچیده و روی حیله و تزویر باشد زیرا درایورها می‌توانند تعداد زیادی جلوه و الگوی روشنایی مانند زیگ زاگ، ساعت دیجیتال سون سگمنته تصادفی، نمایش پیام‌های پیمایشی و غیره ایجاد کنند. نمونه اولیه در شکل 1 نشان داده شده است.

NeoPixel
شکل 1: نمونه اولیه

LED NeoPixel موجود در بازار معمولاً هزینه بر است. استفاده از درایور WS2811 در این پروژه به کاهش هزینه کمک می‌کند. LED های NeoPixel علاوه بر نوار LED سنتی، مانند حلقه‌ها، ماتریس‌ها و چندین نوع پیکسل دیگر، همانطور که در شکل 2 نشان داده شده است، دارای تراکم پیکسلی و فاکتورهای بسیار متنوعی هستند.

شکل 2: دو نوع رشته LED NeoPixel: (الف) نوع ماتریس، (ب) نوع حلقه

کنترل یک دستگاه WS2811 از طریق گذرگاه کنترل سریال آن کار ساده‌ای نیست. این از یک ساعت و خط داده ترکیبی استفاده می‌کند تا دستورالعمل‌های هر LED را در زیر گذرگاه زنجیره‌ای دیزی سریال، که از یک پیکسل به بعدی اجرا می‌شود، بچرخانید (شکل 3). این بدان معنی است که پیکسل‌ها نمی‌توانند به صورت جداگانه آدرس‌دهی شوند. بنابراین، هر تغییری در یکی از پیکسل‌ها به تازه‌سازی دستورالعمل‌های بارگیری شده در تمام پیکسل‌های بالادست نیاز دارد. نمودارهای پین RGB LED در شکل 4 نشان داده شده است.

شکل 3: چندین LED NeoPixel به هم متصل شده‌اند
نمودارهای پین LED RGB
شکل 4: نمودارهای پین LED RGB: (الف) نوع کاتد مشترک، (ب) نوع آند مشترک

کنترل LED های NeoPixel

ایجاد دستورالعمل برای یک رشته از درایورهای WS2811 LED به زمان‌بندی بسیار مشخص و پیچیده‌ای نیاز دارد که می‌تواند کد نوشتن از درایو راننده را کمی مشکل کند.

خوشبختانه بسیاری از کارهای سخت در حال انجام است و کتابخانه‌هایی (FastLed.h ، NeoPixel.h) برای درایورهای نوار LED و برنامه‌های موجود برای Arduino ، Raspberry Pi ، LaunchPad و سایر سیستم عامل‌های محبوب وجود دارد. حتی روال‌های زبان Assembly برای برخی از میکروکنترلرها (MCU) برای محصولات مبتنی بر WS2811 در دسترس است، از جمله IC های 8 بیتی محبوب Atmel، سری TI TMS430 و Microchip’s PIC16F15xx.

در اینجا، از مدولاسیون عرض پالس (PWM) برای کنترل LED های NeoPixel استفاده می‌شود. پس از تنظیم مجدد کنترل‌کننده زنجیره LED با کم نگه داشتن ورودی برای 50 میکروثانیه، برنامه MCU شروع به ارسال جریانی از کدهای رنگی 24 بیتی (هر کدام 8 بیتی برای LED های R ، G و B) به پایین خط می‌کند. اولین مجموعه از مقدار RGB 24 بیتی توسط اولین پیکسل LED ضبط و نمایش داده می‌شود که به این ترتیب جریان بیت باقیمانده به زنجیره منتقل می‌شود. پیکسل LED دوم توالی بیت RGB را گرفته، نمایش می‌دهد و به همین ترتیب تا رسیدن به انتهای زنجیره. پالس‌های PWM متنوع هستند و با ترکیب LED های RGB چندین رنگ تولید می‌کنند.

ساز و کار NeoPixel

نمودار اتصال LED های آدرس‌پذیر NeoPixel با استفاده از Arduino در شکل 5 نشان داده شده است. یک منبع تغذیه 5 ولت DC را به Arduino و نوار LED NeoPixel وصل کنید. پایه 5+ ولت نوار LED را به ترمینال مثبت منبع تغذیه وصل کنید. پایه 5 ولت آردوینو را به نوار LED وصل نکنید. پین‌های DIN و GND نوار LED را به ترتیب به پین دیجیتال 6 و پین GND آردوینو وصل کنید. اطمینان حاصل کنید که پایه‌های GND نوار LED، آردوینو و منبع تغذیه 5 ولت DC به یکدیگر متصل شده‌اند.

NeoPixel با استفاده از Arduino
شکل 5: نمودار اتصال LED های آدرس پذیر NeoPixel با استفاده از Arduino

این پروژه از یک نوار LED 50-RGB سازگار با NeoPixel و منبع تغذیه 5 ولت، 5 آمپر از آداپتور DC استفاده می‌کند. این بدان دلیل است که هر NeoPixel از سه LED (قرمز ، سبز و آبی) تشکیل شده است و هر LED حداکثر جریان 20mA را می‌کشد. این بدان معنی است که برای هر LED NeoPixel 60mA (20mA x 3) جریان لازم است، همانطور که در شکل 3 نشان داده شده است. در نتیجه کل نیاز فعلی برای پنجاه LED 50 × 60mA = 3000mA یا سه آمپر خواهد بود. بنابراین، آداپتور DC باید حداقل دارای جریان 3A یا بیشتر باشد.

در حالی که از منبع تغذیه DC یا منبع بزرگ باتری استفاده می‌کنید، باید یک خازن 1000 میکروفاراد، 16 ولت یا بالاتر در ترمینال‌های مثبت (+) و منهای (-) اضافه کنید. این باعث می‌شود تا هجوم اولیه جریان به LED ها آسیب نرساند. افزودن یک مقاومت 470 اهم بین پین‌های داده Arduino و NeoPixel LED ها می‌تواند به جلوگیری از افزایش سن در خط داده کمک کند که می‌تواند به اولین LED آسیب برساند.

نرم افزار NeoPixel

عملکرد مدار توسط برنامه نرم‌افزاری بارگیری شده در حافظه داخلی Arduino Uno کنترل می‌شود. این برنامه (main1.ino) به زبان برنامه‌نویسی آردوینو نوشته شده است. Arduino IDE برای تدوین و بارگذاری برنامه استفاده می‌شود.

ATmega328P روی برد Arduino Uno همراه با بوت لودری از قبل برنامه‌ریزی شده است که به شما امکان می‌دهد بدون استفاده از برنامه‌نویس سخت‌افزار خارجی، کد جدیدی را در آن بارگذاری کنید. برد Arduino را به کامپیوتر وصل کرده و پورت COM صحیح را در Arduino IDE انتخاب کنید.

همراه با برنامه / طرح Arduino (main1.ino)، برای اجرای چندین جلوه نور و انیمیشن به یک فایل هدر (FastLED.h) نیز نیاز دارید. برخی از توابع و عملیات اصلی مورد استفاده در کد برنامه عبارتند از:

define LED_TYPE WS2812

این یک عملکرد داخلی FastLED.h است که نوع خاصی از بسته‌های پیکسلی LED مانند WS2811 ، WS2812 ، WS2812b و WS2813 را اعلام می‌کند.

define COLOR_ORDER GRB#

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

define BRIGHTNESS 64

در این عملکرد می‌توانید روشنایی LED ها را که دامنه آنها از 0 تا 255 سطح است تغییر دهید.

define NUM_LEDS 50

در این عملکرد تعداد LED های استفاده شده را مشخص می‌کنید (50 مورد در این پروژه).

پرونده سربرگ در پرونده FastLed-master.zip گنجانده شده است. قبل از کامپایل طرح، باید FastLed-master.zip را در کتابخانه آردوینو قرار دهید.

آزمایش کردن ال ای دی نئوپیکسل

پس از ایجاد اتصالات همانطور که در شکل 5 نشان داده شده است، کد منبع را روی صفحه Arduino Uno بارگذاری کنید. با اتصال به رایانه / لپ‌تاپ، برد Arduino را از طریق کابل USB به منبع 5 ولت DC متصل کنید. سپس یک آداپتور 5 ولت، 5 آمپر DC را به نوار LED NeoPixel وصل کنید. شما جلوه‌ها و الگوهای مختلف نور LED را روی نوار LED مشاهده خواهید کرد.

توجه داشته باشید. هنگام اتصال نوار LED NeoPixel به هر منبع تغذیه زنده از طریق آداپتور AC / DC ، ابتدا ترمینال زمین (-) را قبل از اتصال پین دیگری وصل کنید. برعکس، هنگام جدا کردن نوار از منبع تغذیه، ترمینال زمین را واپسین جدا کنید.