WS2812B एड्रेसेबल LED स्ट्रिप को Arduino से कैसे कनेक्ट करें
एलईडी आधारित प्रकाश प्रौद्योगिकी का विकास तेजी से जारी है। कल यह एक चमत्कार की तरह लग रहा था कि आरजीबी रिबन को एक नियंत्रक द्वारा नियंत्रित किया जाता है, जिसकी चमक और रंग को रिमोट कंट्रोल द्वारा समायोजित किया जा सकता है। आज बाजार में और भी संभावनाएं हैं।
WS2812B पर आधारित एलईडी पट्टी
मानक से पता योग्य एलईडी पट्टी के अंतर आरजीबी क्या वह प्रत्येक तत्व की चमक और रंग अनुपात अलग से समायोज्य है. यह आपको प्रकाश प्रभाव प्राप्त करने की अनुमति देता है जो अन्य प्रकार के प्रकाश जुड़नार के लिए उपलब्ध नहीं हैं। एलईडी पट्टी को एक प्रसिद्ध तरीके से नियंत्रित किया जाता है - पल्स चौड़ाई मॉडुलन द्वारा। प्रणाली की ख़ासियत यह है कि प्रत्येक एलईडी का अपना पीडब्लूएम नियंत्रक होता है। WS2812B चिप एक त्रि-रंग प्रकाश उत्सर्जक डायोड और एक नियंत्रण सर्किट है, जो एक पैकेज में संयुक्त है।
तत्वों को समानांतर में बिजली की आपूर्ति पर एक टेप में जोड़ा जाता है, और एक सीरियल बस के माध्यम से नियंत्रित किया जाता है - पहले तत्व का आउटपुट दूसरे के नियंत्रण इनपुट से जुड़ा होता है, और इसी तरह। ज्यादातर मामलों में सीरियल बसें दो लाइनों पर बनाई जाती हैं, जिनमें से एक स्ट्रोब (सिंक्रोनस पल्स) और दूसरी - डेटा प्रसारित करती है।
WS2812B चिप की नियंत्रण बस में एक पंक्ति होती है - यह डेटा प्रसारित करती है।डेटा को निरंतर आवृत्ति के दालों के रूप में एन्कोड किया गया है, लेकिन विभिन्न आवृत्तियों के साथ। एक पल्स एक बिट है. प्रत्येक बिट की अवधि 1.25 µ है, शून्य बिट में उच्च स्तर 0.4 µs और निम्न स्तर 0.85 µs होता है। इकाई 0.8 µ के उच्च और 0.45 µ के निम्न की तरह दिखती है। प्रत्येक एलईडी को 24 बिट्स (3 बाइट्स) का एक पार्सल भेजा जाता है, इसके बाद 50µs के लिए निम्न स्तर के रूप में एक विराम दिया जाता है। इसका मतलब है कि अगली एलईडी के लिए डेटा आगे प्रसारित किया जाएगा, और इसी तरह श्रृंखला के सभी तत्वों के लिए। डेटा स्थानांतरण 100 µ के ठहराव के साथ समाप्त होता है । इसका मतलब है कि रिबन प्रोग्रामिंग चक्र पूरा हो गया है और डेटा पैकेट का अगला सेट भेजा जा सकता है।
यह प्रोटोकॉल डेटा ट्रांसमिशन के लिए सिंगल लाइन की अनुमति देता है, लेकिन इसके लिए सटीक समय की आवश्यकता होती है। विसंगति 150 एनएस से अधिक नहीं है। इसके अलावा, इस बस की शोर प्रतिरोधक क्षमता बहुत कम है। पर्याप्त आयाम के किसी भी हस्तक्षेप को नियंत्रक द्वारा डेटा के रूप में माना जा सकता है। यह नियंत्रण सर्किटरी से तारों की लंबाई पर सीमाएं लगाता है। दूसरी ओर, यह करने की क्षमता प्रदान करता है यह सत्यापित करने के लिए कि रिबन अतिरिक्त उपकरणों के बिना। यदि आप ल्यूमिनेयर पर बिजली लगाते हैं और अपनी उंगली से कंट्रोल बस के संपर्क पैड को छूते हैं, तो कुछ एलईडी अव्यवस्थित रूप से चालू और बंद हो सकती हैं।
WS2812B तत्वों की तकनीकी विशेषताएं
एड्रेसेबल रिबन के आधार पर लाइटिंग सिस्टम बनाने के लिए प्रकाश उत्सर्जक तत्वों के महत्वपूर्ण मापदंडों को जानना आवश्यक है।
एलईडी आयाम | 5x5 मिमी |
पीडब्लूएम मॉडुलन आवृत्ति | 400 हर्ट्ज |
अधिकतम चमक पर वर्तमान खपत | प्रति तत्व 60 एमए |
वोल्टेज आपूर्ति | 5 वोल्ट |
Arduino और WS2812B
दुनिया में लोकप्रिय Arduino प्लेटफॉर्म आपको एड्रेसेबल रिबन को नियंत्रित करने के लिए स्केच (प्रोग्राम) बनाने की अनुमति देता है। सिस्टम की क्षमताएं काफी व्यापक हैं, लेकिन अगर किसी स्तर पर वे अब पर्याप्त नहीं हैं, तो अधिग्रहीत कौशल सी ++ या यहां तक कि असेंबलर पर स्विच करने के लिए पर्याप्त होंगे। हालाँकि, Arduino पर बुनियादी ज्ञान प्राप्त करना आसान है।
WS2812B आधारित रिबन को Arduino Uno (नैनो) से कनेक्ट करना
पहले चरण में, एक साधारण Arduino Uno या Arduino Nano बोर्ड पर्याप्त है। बाद में, अधिक जटिल प्रणालियों के निर्माण के लिए अधिक जटिल बोर्डों का उपयोग किया जा सकता है। पता करने योग्य एलईडी पट्टी को भौतिक रूप से Arduino बोर्ड से जोड़ते समय, आपको यह सुनिश्चित करना होगा कि कुछ शर्तें पूरी हों:
- कम शोर प्रतिरक्षा के कारण, डेटा लाइन कनेक्शन कंडक्टर जितना संभव हो उतना छोटा होना चाहिए (आपको उन्हें 10 सेमी के भीतर बनाने की कोशिश करनी चाहिए);
- डेटा वायर को Arduino बोर्ड के मुफ़्त डिजिटल आउटपुट से कनेक्ट करें - यह बाद में सॉफ़्टवेयर द्वारा इंगित किया जाएगा;
- उच्च बिजली की खपत के कारण बोर्ड से पट्टी को बिजली देना जरूरी नहीं है - इस उद्देश्य के लिए अलग बिजली की आपूर्ति प्रदान की जाती है।
ल्यूमिनेयर और अरुडिनो के सामान्य बिजली आपूर्ति तार को जोड़ना आवश्यक है।
WS2812B सॉफ्टवेयर नियंत्रण की मूल बातें
यह पहले ही उल्लेख किया जा चुका है कि WS2812B चिप्स को नियंत्रित करने के लिए आपको उच्च सटीकता के साथ एक निश्चित लंबाई के साथ दालों को बनाने की आवश्यकता होती है। Arduino भाषा में छोटी दालें बनाने की आज्ञा है देरीमाइक्रोसेकंड और सूक्ष्म. समस्या यह है कि इन आदेशों का संकल्प 4 माइक्रोसेकंड है। अर्थात्, दी गई सटीकता के साथ समय विलंब को बनाना संभव नहीं है। C++ या असेंबलर टूल्स में जाना जरूरी है। इस उद्देश्य के लिए विशेष रूप से बनाए गए पुस्तकालयों की सहायता से Arduino के माध्यम से पता योग्य एलईडी पट्टी को नियंत्रित करना संभव है। आप प्रोग्राम ब्लिंक से शुरू कर सकते हैं, जो प्रकाश उत्सर्जक तत्वों को ब्लिंक करता है।
फास्टलेड
यह पुस्तकालय सार्वभौमिक है। पता करने योग्य रिबन के अलावा, यह SPI नियंत्रित रिबन सहित कई उपकरणों का समर्थन करता है। इसमें सुविधाओं की एक विस्तृत श्रृंखला है।
सबसे पहले आपको लाइब्रेरी को कनेक्ट करना होगा। यह सेटअप ब्लॉक से पहले किया जाता है, और स्ट्रिंग इस तरह दिखती है:
#शामिल
अगला कदम प्रत्येक प्रकाश उत्सर्जक डायोड के रंगों को संग्रहीत करने के लिए एक सरणी बनाना है। इसमें नाम पट्टी और 15 तत्वों का आयाम होगा।
सीआरजीबी पट्टी [15]
सेटअप ब्लॉक में आपको उस रिबन को निर्दिष्ट करना होगा जिसके साथ स्क्रिप्ट काम करेगी:
व्यर्थ व्यवस्था() {
FastLED.addLeds< WS2812B, 7, RGB> (स्ट्रिप, 15);
इंट जी;
}
आरजीबी पैरामीटर रंगों का क्रम निर्धारित करता है, 15 का अर्थ है एल ई डी की संख्या, 7 नियंत्रित करने के लिए दिए गए आउटपुट की संख्या है (अंतिम पैरामीटर के लिए भी एक स्थिरांक निर्दिष्ट करना बेहतर है)।
लूप ब्लॉक एक लूप से शुरू होता है जो क्रमिक रूप से लाल (लाल चमक) सरणी के प्रत्येक खंड को लिखता है:
के लिए (जी = 0; जी <15; जी ++)
{पट्टी [जी] = सीआरजीबी :: लाल;}
फिर उत्पन्न सरणी को प्रकाशक को भेजा जाता है:
FastLED.शो ();
विलंब 1000 मिलीसेकंड (सेकंड):
देरी (1000);
फिर आप सभी तत्वों को उसी तरह बंद कर सकते हैं, उनमें काला लिखकर।
के लिए (इंट जी = 0; जी <15; जी ++)
{पट्टी [जी] = सीआरजीबी :: काला;}
FastLED.शो ();
देरी (1000);
स्केच को संकलित और लोड करने के बाद 2 सेकंड की अवधि के साथ रिबन फ्लैश होगा। यदि आप प्रत्येक रंग घटक को अलग से नियंत्रित करना चाहते हैं, तो स्ट्रिंग के बजाय {पट्टी [जी] = सीआरजीबी :: लाल;} कई तारों का उपयोग किया जाता है:
{
पट्टी [जी]। आर = 100;// लाल तत्व का ल्यूमिनेसेंस स्तर निर्धारित करें
पट्टी [जी]। जी = 11;// हरे रंग के लिए वही
पट्टी [जी]। बी = 250;// नीले रंग के लिए वही
}
नियोपिक्सेल
यह लाइब्रेरी केवल NeoPixel रिंग LED के साथ काम करती है, लेकिन यह कम संसाधन-गहन है और इसमें केवल आवश्यक चीजें शामिल हैं। Arduino में कार्यक्रम इस तरह दिखता है:
#शामिल
पिछले मामले की तरह, लाइब्रेरी को प्लग इन किया गया है, और लेंटा ऑब्जेक्ट घोषित किया गया है:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// जहां 15 तत्वों की संख्या है और 6 निर्दिष्ट आउटपुट है
लेंटा को सेटअप ब्लॉक में इनिशियलाइज़ किया गया है:
व्यर्थ व्यवस्था() {
लेंटा.बेगिन ()
}
लूप ब्लॉक में सभी तत्वों को लाल रंग में जलाया जाता है, एक चर को टेप में पास किया जाता है और 1 सेकंड का विलंब बनाया जाता है:
के लिए (int y=0; y<15;y++)// 15 - लुमिनेयर में तत्वों की संख्या
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
लेंटा.शो ();
देरी (1000);
काला लिखने से लेंटा चमकना बंद कर देता है:
के लिए (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
लेंटा.शो ();
देरी (1000);
वीडियो पाठ: एड्रेसेबल रिबन का उपयोग करके दृश्य प्रभावों के नमूने।
एल ई डी फ्लैश करने का तरीका सीखने के बाद, आप पाठ जारी रख सकते हैं और रंग प्रभाव बनाना सीख सकते हैं, जिसमें लोकप्रिय "इंद्रधनुष" और "उत्तरी लाइट्स" शामिल हैं। WS2812B और Arduino एड्रेसेबल LED आपको इसके लिए लगभग असीम संभावनाएं देते हैं।