WS2812B ایڈریس ایبل ایل ای ڈی پٹی کو Arduino سے کیسے جوڑیں۔
ایل ای ڈی پر مبنی لائٹنگ ٹیکنالوجی کی ترقی تیزی سے جاری ہے۔ کل یہ ایک معجزہ لگ رہا تھا کہ RGB ربن ایک کنٹرولر کے ذریعے کنٹرول کیا جاتا ہے، جس کی چمک اور رنگ کو ریموٹ کنٹرول کے ذریعے ایڈجسٹ کیا جا سکتا ہے۔ آج، مارکیٹ میں اور بھی زیادہ امکانات ہیں۔
WS2812B پر مبنی ایل ای ڈی کی پٹی
معیاری سے قابل شناخت ایل ای ڈی پٹی کے فرق آر جی بی یہ ہے کہ ہر عنصر کی چمک اور رنگ کا تناسب الگ سے ایڈجسٹ کیا جا سکتا ہے۔. یہ آپ کو روشنی کے اثرات حاصل کرنے کی اجازت دیتا ہے جو دیگر قسم کے لائٹنگ فکسچر کے لیے دستیاب نہیں ہیں۔ ایل ای ڈی کی پٹی کو ایک معروف طریقے سے کنٹرول کیا جاتا ہے - نبض کی چوڑائی ماڈیولیشن کے ذریعے۔ سسٹم کی خاصیت یہ ہے کہ ہر ایل ای ڈی کا اپنا پی ڈبلیو ایم کنٹرولر ہوتا ہے۔ WS2812B چپ ایک سہ رنگی روشنی خارج کرنے والا ڈائیوڈ اور ایک کنٹرول سرکٹ ہے، جو ایک پیکج میں ملا ہوا ہے۔
عناصر کو متوازی طور پر پاور سپلائی پر ایک ٹیپ میں ملایا جاتا ہے، اور سیریل بس کے ذریعے کنٹرول کیا جاتا ہے - پہلے عنصر کا آؤٹ پٹ دوسرے کے کنٹرول ان پٹ سے منسلک ہوتا ہے، وغیرہ۔ زیادہ تر معاملات میں سیریل بسیں دو لائنوں پر بنتی ہیں، جن میں سے ایک سٹروب (مطابق پلس) منتقل کرتی ہے، اور دوسری - ڈیٹا۔
WS2812B چپ کی کنٹرول بس ایک لائن پر مشتمل ہے - یہ ڈیٹا منتقل کرتی ہے۔ڈیٹا کو ایک مستقل فریکوئنسی کی دال کے طور پر انکوڈ کیا جاتا ہے، لیکن مختلف تعدد کے ساتھ۔ ایک نبض ایک سا ہے۔. ہر بٹ کا دورانیہ 1.25 µs ہے، صفر بٹ 0.4 µs کی اعلی سطح اور 0.85 µs کی کم سطح پر مشتمل ہے۔ یونٹ زیادہ 0.8 µs اور کم 0.45 µs لگتا ہے۔ 24 بٹس (3 بائٹس) کا ایک پارسل ہر ایل ای ڈی کو بھیجا جاتا ہے، اس کے بعد 50µs کے لیے کم لیول کی صورت میں ایک وقفہ ہوتا ہے۔ اس کا مطلب یہ ہے کہ اگلی ایل ای ڈی کے لیے ڈیٹا آگے منتقل کیا جائے گا، اور اسی طرح سلسلہ کے تمام عناصر کے لیے۔ ڈیٹا کی منتقلی 100 µs کے وقفے کے ساتھ ختم ہوتی ہے۔ اس کا مطلب ہے کہ ربن پروگرامنگ سائیکل مکمل ہو گیا ہے اور ڈیٹا پیکٹ کا اگلا سیٹ بھیجا جا سکتا ہے۔
یہ پروٹوکول ڈیٹا کی ترسیل کے لیے ایک لائن کی اجازت دیتا ہے، لیکن اس کے لیے درست وقت کی ضرورت ہوتی ہے۔ تضاد 150 این ایس سے زیادہ نہیں ہے۔ اس کے علاوہ اس بس کی شور کی قوت مدافعت بہت کم ہے۔ کافی طول و عرض کی کسی بھی مداخلت کو کنٹرولر ڈیٹا کے طور پر سمجھا جا سکتا ہے۔ یہ کنٹرول سرکٹری سے تاروں کی لمبائی پر پابندیاں عائد کرتا ہے۔ دوسری طرف، یہ کرنے کی صلاحیت فراہم کرتا ہے اس بات کی تصدیق کرنے کے لیے کہ ربن اضافی آلات کے بغیر۔ اگر آپ لیومینیئر پر پاور لگاتے ہیں اور کنٹرول بس کے کانٹیکٹ پیڈ کو اپنی انگلی سے چھوتے ہیں، تو کچھ LEDs افراتفری سے آن اور آف ہو سکتی ہیں۔
WS2812B عناصر کی تکنیکی خصوصیات
ایڈریس ایبل ربن کی بنیاد پر لائٹنگ سسٹم بنانے کے لیے روشنی خارج کرنے والے عناصر کے اہم پیرامیٹرز کو جاننا ضروری ہے۔
ایل ای ڈی کے طول و عرض | 5x5 ملی میٹر |
PWM ماڈیولیشن فریکوئنسی | 400 ہرٹج |
زیادہ سے زیادہ چمک پر موجودہ کھپت | 60 ایم اے فی عنصر |
بجلی کی سپلائی | 5 وولٹ |
Arduino اور WS2812B
دنیا میں مقبول Arduino پلیٹ فارم آپ کو قابل شناخت ربن کو کنٹرول کرنے کے لیے خاکے (پروگرام) بنانے کی اجازت دیتا ہے۔ سسٹم کی صلاحیتیں کافی وسیع ہیں، لیکن اگر کسی سطح پر وہ اب کافی نہیں ہیں، تو حاصل کردہ مہارتیں بغیر کسی رکاوٹ کے C++ یا اسمبلر پر جانے کے لیے کافی ہوں گی۔ اگرچہ، Arduino پر بنیادی معلومات حاصل کرنا آسان ہے۔
WS2812B پر مبنی ربن کو Arduino Uno (نانو) سے جوڑنا
پہلے مرحلے پر، ایک سادہ Arduino Uno یا Arduino Nano بورڈ کافی ہے۔ بعد میں، زیادہ پیچیدہ نظاموں کی تعمیر کے لیے زیادہ پیچیدہ بورڈز استعمال کیے جا سکتے ہیں۔ ایڈریس ایبل ایل ای ڈی پٹی کو جسمانی طور پر Arduino بورڈ سے جوڑتے وقت، آپ کو یہ یقینی بنانا ہوگا کہ چند شرائط پوری ہوئی ہیں:
- کم شور سے استثنیٰ کی وجہ سے، ڈیٹا لائن کنکشن کنڈکٹرز کو جتنا ممکن ہو چھوٹا ہونا چاہیے (آپ کو انہیں 10 سینٹی میٹر کے اندر بنانے کی کوشش کرنی چاہیے)؛
- ڈیٹا وائر کو Arduino بورڈ کے مفت ڈیجیٹل آؤٹ پٹ سے جوڑیں - یہ بعد میں سافٹ ویئر کے ذریعے اشارہ کیا جائے گا۔
- زیادہ بجلی کی کھپت کی وجہ سے بورڈ سے پٹی کو پاور کرنا ضروری نہیں ہے - اس مقصد کے لیے علیحدہ بجلی فراہم کی جاتی ہے۔
luminaire اور Arduino کے مشترکہ پاور سپلائی تار کو جوڑنا ضروری ہے۔
WS2812B سافٹ ویئر کنٹرول کے بنیادی اصول
یہ پہلے ہی ذکر کیا جا چکا ہے کہ WS2812B چپس کو کنٹرول کرنے کے لیے آپ کو ایک خاص لمبائی کے ساتھ دالیں بنانے کی ضرورت ہے، اعلی درستگی کو برداشت کرتے ہوئے۔ Arduino زبان میں مختصر دالیں بنانے کے احکامات ہیں۔ مائیکرو سیکنڈ میں تاخیر اور مائیکرو. مسئلہ یہ ہے کہ ان کمانڈز کی ریزولوشن 4 مائیکرو سیکنڈز ہے۔ یعنی، دی گئی درستگی کے ساتھ وقت کی تاخیر کو تشکیل دینا ممکن نہیں ہے۔ C++ یا اسمبلر ٹولز پر جانا ضروری ہے۔ خاص طور پر اس مقصد کے لیے بنائی گئی لائبریریوں کی مدد سے Arduino کے ذریعے ایڈریس ایبل LED پٹی کو کنٹرول کرنا ممکن ہے۔ آپ پروگرام Blink کے ساتھ شروع کر سکتے ہیں، جو روشنی خارج کرنے والے عناصر کو جھپکتا ہے۔
فاسٹ لیڈ
یہ لائبریری یونیورسل ہے۔ ایڈریس ایبل ربن کے علاوہ، یہ بہت سے آلات کو سپورٹ کرتا ہے بشمول SPI کنٹرولڈ ربن۔ اس میں خصوصیات کی ایک وسیع رینج ہے۔
سب سے پہلے آپ کو لائبریری کو جوڑنا ہوگا۔ یہ سیٹ اپ بلاک سے پہلے کیا جاتا ہے، اور تار اس طرح لگتا ہے:
#شامل
اگلا مرحلہ ہر روشنی خارج کرنے والے ڈایڈڈ کے رنگوں کو ذخیرہ کرنے کے لیے ایک صف بنانا ہے۔ اس میں 15 عناصر کی نام کی پٹی اور طول و عرض ہوگا۔
CRGB پٹی[15]
سیٹ اپ بلاک میں آپ کو ربن کی وضاحت کرنی ہوگی جس کے ساتھ اسکرپٹ کام کرے گا:
باطل سیٹ اپ() {
FastLED.addLeds<WS2812B, 7, RGB>(پٹی، 15)؛
int g;
}
RGB پیرامیٹر رنگوں کی ترتیب کا تعین کرتا ہے، 15 کا مطلب ہے LEDs کی تعداد، 7 کنٹرول کے لیے تفویض کردہ آؤٹ پٹ کی تعداد ہے (یہ بہتر ہے کہ آخری پیرامیٹر کو بھی مستقل تفویض کیا جائے)۔
لوپ بلاک ایک لوپ سے شروع ہوتا ہے جو ترتیب وار سرخ (سرخ چمک) صف کے ہر حصے کو لکھتا ہے:
کے لیے (g=0; g<15;g++)
{strip[g]=CRGB::Red;}
پھر تیار کردہ صف کو الیومینیٹر کو بھیجا جاتا ہے:
FastLED.show();
تاخیر 1000 ملی سیکنڈز (سیکنڈ):
تاخیر (1000)؛
پھر آپ تمام عناصر کو اسی طرح بند کر سکتے ہیں، ان میں سیاہ لکھ کر۔
کے لیے (int g=0; g<15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
تاخیر (1000)؛
خاکہ مرتب کرنے اور لوڈ کرنے کے بعد ربن 2 سیکنڈ کی مدت کے ساتھ چمکے گا۔ اگر آپ ہر رنگ کے اجزاء کو الگ الگ کنٹرول کرنا چاہتے ہیں، تو سٹرنگ کے بجائے {strip[g]=CRGB::Red;} کئی تار استعمال کیے جاتے ہیں:
{
پٹی[g].r=100؛// سرخ عنصر کی luminescence لیول سیٹ کریں۔
پٹی[g].g=11؛// سبز کے لئے ایک ہی
پٹی[g].b=250؛// نیلے کے لئے ایک ہی
}
NeoPixel
یہ لائبریری صرف NeoPixel Ring LEDs کے ساتھ کام کرتی ہے، لیکن یہ کم وسائل کی حامل ہے اور اس میں صرف ضروری چیزیں ہیں۔ Arduino میں پروگرام اس طرح لگتا ہے:
#شامل
جیسا کہ پچھلے کیس میں، لائبریری پلگ ان ہے، اور لینٹا آبجیکٹ کا اعلان کیا گیا ہے:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// جہاں 15 عناصر کی تعداد ہے اور 6 تفویض کردہ آؤٹ پٹ ہے۔
لینٹا کو سیٹ اپ بلاک میں شروع کیا گیا ہے:
باطل سیٹ اپ() {
lenta.begin ()
}
لوپ بلاک میں تمام عناصر کو سرخ رنگ میں روشن کیا جاتا ہے، ایک متغیر کو ٹیپ میں منتقل کیا جاتا ہے اور 1 سیکنڈ کی تاخیر پیدا ہوتی ہے:
کے لیے (int y=0؛ y<15;y++)// 15 - luminaire میں عناصر کی تعداد
{lenta.setPixelColor(y, lenta.Color(255,0,0))}؛
lenta.show();
تاخیر (1000)؛
لینٹا سیاہ لکھ کر چمکنا بند کر دیتا ہے:
کے لیے (int y=0؛ y<15;y++)
{lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
تاخیر (1000)؛
ویڈیو سبق: ایڈریس ایبل ربن کا استعمال کرتے ہوئے بصری اثرات کے نمونے۔
ایل ای ڈی فلیش کرنے کا طریقہ سیکھنے کے بعد، آپ اس سبق کو جاری رکھ سکتے ہیں اور ہموار ٹرانزیشن کے ساتھ مقبول "رینبو" اور "ناردرن لائٹس" سمیت رنگین اثرات پیدا کرنے کا طریقہ سیکھ سکتے ہیں۔ WS2812B اور Arduino ایڈریس ایبل ایل ای ڈی آپ کو اس کے لیے تقریباً لامحدود امکانات فراہم کرتے ہیں۔