पिक्सेल रोशनी के प्रदर्शन के साथ क्लिप काफी प्रभावशाली दिखती हैं - रंगीन चमक का एक गुच्छा, गतिशील प्रतिबिंब ठीक दिखते हैं और अन्य प्रकार के रोशनी की तुलना में अधिक मोबाइल दिखते हैं।

Arduino का उपयोग करके नियंत्रित रोशनी के साथ काम करने की इच्छा ने मुझे ऐसी प्रणाली बनाने के लिए प्रेरित किया। जैसा कि यह निकला, यह एक काफी सरल घटना है, जिसमें केवल कुछ घंटों में कुल मिलाकर खर्च किया गया था (वास्तव में, संरचना खुद - 10 मिनट, बाकी - सॉफ्टवेयर)। मैं इस लेख में विधानसभा और प्रोग्रामिंग प्रक्रिया का विवरण बताऊंगा। सॉफ्टवेयर, निष्कर्ष और डेमो शामिल हैं।
हार्डवेयर हिस्सा
इस तरह के प्रकाश के लिए, हमें निम्नलिखित वस्तुओं और उपकरणों की आवश्यकता है:
- आवश्यक लंबाई के WS2801 चिप्स (प्रत्येक पिक्सेल के व्यक्तिगत नियंत्रण के साथ) पर एक एलईडी पट्टी। यह टेप इस तरह दिखता है:

सिलिकॉन खोल में एक टेप खरीदना बेहतर है। मैंने eBay पर खरीदा, आप सीधे चीनी से खरीदने की कोशिश कर सकते हैं, यह डेढ़ गुना सस्ता होगा। टेप की लंबाई को मॉनिटर या टीवी के चारों ओर परिधि के चारों ओर लपेटने के लिए पर्याप्त होना चाहिए। - Arduino नैनो (या कई क्लोनों में से एक) - उदाहरण के लिए, यह । गैर नैनो भी उपयुक्त है, आपको केवल इसे सही ढंग से कनेक्ट करने की आवश्यकता है।
- ड्यूपॉन्ट नामक तार - मुझे नहीं पता कि उन्हें रूसी में क्या कहा जाता है, इस तरह दिखें:

इन तारों को टेप को मिलाप करने की आवश्यकता होती है और आर्डिनो से जुड़ते हैं। केवल 2 पीसी की आवश्यकता होती है - चूंकि वे दो तरफ से crimped होते हैं, आधे में कट जाता है हमें 4 तार मिलते हैं जो हमें कनेक्टर्स के साथ चाहिए। - इस इकाई के लिए उपयुक्त 5V बिजली की आपूर्ति + एक पावर कनेक्टर - दोनों को किसी भी रंग, आकार और डिजाइन में, रेडियो स्टोर और ईबे पर बहुतायत से बेचा जाता है।
टेप उज्ज्वल मोड में लगभग 2 ए / मीटर की खपत करता है। दैनिक कार्य में, 2 मीटर टेप को 3A PSU द्वारा बिना किसी समस्या के संचालित किया जाता है। - टांका लगाने वाला लोहा (कोई भी, उचित सीमा के भीतर), टांका लगाने का सामान, स्ट्रिपिंग तारों के लिए एक चाकू, बिजली के टेप / स्वाद के लिए गर्मी हटना।
आरेख (यदि यह गर्व शब्द दो उत्पादों को चार तारों से जोड़ने के लिए उपयुक्त है) चित्र में दिखाया गया है:

असहमति के लिए विधानसभा की प्रक्रिया सरल है। इसका विस्तार से वर्णन करने का कोई मतलब नहीं है (उसी कारण से तैयार "उत्पाद" की कोई फोटो नहीं है - इंटरनेट पर चार तारों के साथ आर्डिनिन भरा हुआ है)।
- आरेख में दिखाए गए अनुसार सब कुछ मिलाप करें।
- आर्डिनो से तारों को कनेक्ट करें, खुद को पीसी से आर्डिनो कनेक्ट करें, बिजली की आपूर्ति कनेक्ट करें।
- Arduino में स्केच डालें (नीचे देखें), कंप्यूटर पर निष्पादन योग्य फ़ाइल चलाएं (सॉफ्टवेयर के लिंक भी नीचे देखें), प्रोग्राम में वांछित COM पोर्ट स्थापित करें।
यदि आप Windows Vista / 7 का उपयोग करते हैं, तो आपको Aero को अक्षम करना होगा। अन्यथा, गति बस घटिया है; एयरो के होने पर लो स्क्रीन कैप्चर स्पीड की समस्या का कोई हल नहीं है, जैसा कि मैं समझता हूं। - सुनिश्चित करें कि सब कुछ काम करता है, इसे बंद करें।
यह उल्लेख किया जाना चाहिए कि सॉफ्टवेयर केवल 32-बिट रंग में काम करता है । इसे आसानी से ठीक किया जा सकता है, लेकिन मेरी राय में इस तरह के संशोधन में बहुत कुछ नहीं है।
- टेप को मॉनिटर से संलग्न करें। आपको परिधि दक्षिणावर्त (LN-> LV-> PV-> PN-> LN) के आसपास निचले बाएं कोने से टेप शुरू करने की आवश्यकता है। आपको कुछ भी काटने की ज़रूरत नहीं है, टेप लगभग कहीं भी अच्छी तरह से झुकता है, इसलिए कोई समस्या नहीं होनी चाहिए। बन्धन के लिए, मैंने डबल-पक्षीय टेप का उपयोग किया - टेप बहुत हल्का है और यह पर्याप्त से अधिक है।
यह विधानसभा को पूरा करता है। यह पिक्सेल की संख्या को लंबवत और क्षैतिज रूप से गणना और सेट करने के लिए रहता है, और आप वीडियो, प्ले आदि देख सकते हैं। और आनन्द मनाओ।
सॉफ्टवेयर भाग
सॉफ्टवेयर भाग में दो घटक होते हैं:
- Arduino के लिए स्केच;
- पीसी के लिए प्रबंधन कार्यक्रम।
Arduino के लिए स्केच
Arduino में आपको नीचे दिए गए कोड को भरना होगा। SmallUART लाइब्रेरी का उपयोग किया जाता है (जो, हालांकि, विशेष रूप से कुछ भी उत्कृष्ट नहीं है, यदि आप चाहें, तो आप इसे मानक तरीकों से कर सकते हैं)।
/*** ARDUINO CODE FOR PIXEL LIGHT ***/ #include <SPI.h> #include <SmallUart.h> unsigned long lastTime; // Time strip was updated last time const unsigned long fadeTimeout = 3000; //////////////////////////////////////////////////////////// // void setup() { UART_Init(115200); SPI.begin(); SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE0); SPI.setClockDivider(SPI_CLOCK_DIV8); blackoutAll(); delay(1); lastTime = millis(); } //////////////////////////////////////////////////////////// // void loop() { uint8_t data; UART_SendByte( 'R' ); // Byte "We're ready" bool valid = false; data = uartRead( valid ); if ( valid ) { uint16_t pix_num = data * 3; // Total following bytes for( uint16_t i=0; i < pix_num; i++ ) { data = uartRead( valid ); if ( !valid ) break; SPI.transfer( data ); // Transfer byte to SPI } lastTime = millis(); } if ( millis() - lastTime > fadeTimeout ) blackoutAll(); } //////////////////////////////////////////////////////////// // Turn off all possible 256 leds void blackoutAll() { for ( int16_t i = 0; i < 768; i++ ) SPI.transfer( 0 ); // } //////////////////////////////////////////////////////////// // Read byte with timeout unsigned char uartRead( bool& valid ) { uint8_t res = 0; valid = false; for ( uint8_t i = 0; i < 255; ++i ) { // Max timeout 256*10 if( UART_ReadByte( res ) ) { valid = true; break; } delayMicroseconds(10); } return res; }
यहां सब कुछ बेहद सरल है:
- हम एक संकेत भेजते हैं कि हम बैकलाइट पर डेटा स्वीकार करने के लिए तैयार हैं;
- थोड़े समय के लिए, हम डेटा की उम्मीद करते हैं;
- यदि डेटा आ गया है, तो इस डेटा की पहली बाइट में डायोड की संख्या होती है जिसे सेवित किया जा रहा है। बाद के बाइट्स की संख्या का पता लगाने के लिए हम 3 (आरजीबी) से गुणा करते हैं;
- हमने टेप को प्राप्त डेटा को आगे बढ़ाया;
- हम टेप के आखिरी अपडेट के बारे में टाइमस्टैम्प को अपडेट करते हैं (यह टाइमआउट और टेप के सभी पिक्सल को खाली करने के लिए आवश्यक है)।
पीसी कार्यक्रम
ऐसा लगता है कि इसके लिए तैयार समाधान हैं, लेकिन मैंने जो देखा वह मुझे स्पष्ट रूप से पसंद नहीं आया, और सामान्य तौर पर यह असंगत है, व्यर्थ में Arduino का उपयोग किया जाता है। इसलिए, एक सैंडविच चबाने, स्क्रीन के क्षेत्रों को पकड़ने के लिए बाएं पैर के साथ एक कार्यक्रम लिखा गया था, उन्हें संसाधित करें और टेप को आवश्यक डेटा स्थानांतरित करें। Giblets के साथ पूरा कार्यक्रम
github.com/sergrt/pixie (कोड के लिए किक न करें) पर
जीथब पर उपलब्ध है।
यह Qt 5.0.1 का उपयोग करता है -
हित के लिए, इस विशेष संस्करण में निहित कोई विशेष चीजें शामिल नहीं हैं, इसलिए यह काफी अच्छी तरह से काम करेगा और नए वर्गों का उपयोग करके अंतिम
4 संपादन किए जाते हैं, इसलिए अब स्रोत कोड संस्करण 4 के साथ असंगत है। चूंकि मेरा अधिकांश मनोरंजन मैं विंडोज के तहत करता हूं, इसलिए इसके लिए प्रोजेक्ट बनाया गया है - विजुअल स्टूडियो 2012, जीडीआई या डायरेक्टएक्स पर कब्जा।
मैंने ईमानदारी से क्यूटी क्रिएटर के लिए .pro फाइलें उत्पन्न करने की कोशिश की, लेकिन यह प्रक्रिया नए वीएस क्यूटी एड-इन के साथ बहुत छोटी है, नतीजतन, इन फाइलों ने तुरंत काम नहीं किया, मुझे यह समझ में नहीं आया। लेकिन लिनक्स के तहत समस्याओं के बिना सब कुछ संकलित किया जा सकता है, UPD # 3 देखें।
कार्यक्रम सेटिंग्स
मुख्य सेटिंग एलईडी की संख्या को लंबवत और क्षैतिज रूप से इंगित करने के साथ-साथ कैप्चर किए गए क्षेत्रों का आकार निर्धारित करना है। मेरे 22 "फिट 10 टुकड़े लंबवत और 17 क्षैतिज रूप से:

यह फ्रेम दर सीमा को लगभग 30 पर सेट करने के लिए उचित है। मूल्य "0" का उपयोग उच्चतम संभव गति से काम करने के लिए किया जाता है।
आपको Arduino और विनिमय दर के साथ विनिमय के लिए पोर्ट को सही ढंग से निर्दिष्ट करना होगा। डिफ़ॉल्ट स्केच की गति 115200 है:

चमक को समायोजित करने के लिए, दहलीज और सीमक ने एक अलग टैब "प्रसंस्करण" बनाया। प्रस्तुत मापदंडों को वास्तविक समय में समायोजित किया जाता है:

कार्यक्रम के साथ काम करने की सुविधा के लिए, आप इसे स्टार्टअप पर ऑटोस्टार्ट कैप्चर से कॉन्फ़िगर कर सकते हैं, साथ ही अधिसूचना क्षेत्र में न्यूनतम चला सकते हैं।
रुचि रखने वालों के लिए सॉफ्टवेयर के इंटर्नल के बारे में थोड़ा सा
मुख्य विचार प्रवाह को शुरू करना है, एक दिए गए तंत्र के अनुसार क्षेत्र को हथियाना, समायोज्य एफपीएस के साथ, और प्रसंस्करण के लिए इन क्षेत्रों को स्थानांतरित करना और बाद में टेप को स्थानांतरित करना। क्षेत्रों को सेटिंग्स (जो सोचा होगा) के अनुसार कैप्चर किया जाता है, पिक्सेल का रंग स्क्रीन के संबंधित क्षेत्र के तीन आरजीबी चैनलों पर एक साधारण औसत द्वारा निर्धारित किया जाता है। वैकल्पिक रूप से, आप लैब में रूपांतरण (पूर्वप्रक्रमक निर्देश) को सक्षम कर सकते हैं और इसे बल से निकाल सकते हैं, लेकिन कोड का यह टुकड़ा किसी भी तरह से अनुकूलित नहीं है (जैसा कि यह इंटरनेट से है), यह धीमा हो जाता है, इसलिए इसे डिफ़ॉल्ट रूप से बंद कर दिया जाता है। इसके अलावा, लैब के कुछ विशेष फायदे इस कार्य के संदर्भ में ध्यान देने योग्य नहीं हैं, इसलिए यह दुखी होने का कारण नहीं है।
क्षेत्रों का प्रसंस्करण लंबवत और क्षैतिज रूप से किया जाता है, और रंगों का एक क्रम टेप को भेजा जाता है, जो निचले बाएं कोने से शुरू होता है और फिर परिधि के चारों ओर (विधानसभा के दौरान मॉनिटर पर टेप को घायल करने का तरीका)।
गति में डायरेक्टएक्स कैप्चर जीडीआई के साथ कब्जा करने के लगभग बराबर है, जबकि पहले मामले में पूरी स्क्रीन पर कब्जा कर लिया गया है, और दूसरे में - केवल आवश्यक टुकड़े। अनुकूलन के लिए संभवतः एक मार्जिन है।
मेम्पी का प्रचुर उपयोग मुख्य रूप से काम की गति के साथ जुड़ा हुआ है - अन्य सभी विधियां एक डिग्री या किसी अन्य के लिए धीमी साबित हुई हैं।
निष्कर्ष और छापें
टेप का चमक मार्जिन केवल विशाल है, जो अच्छा है - आप इसे अन्य प्रकाश स्रोतों की उपस्थिति में भी उपयोग कर सकते हैं। पूर्ण अंधेरे में धावकों को स्थानांतरित करने और उन्हें नरम बनाने के लिए बेहतर है। टेप ही अच्छी तरह से प्रकाश के एक स्वतंत्र स्रोत के रूप में काम कर सकता है, आपको बस स्केच को फिर से करना होगा।
मेरा मानना है कि मॉनिटर / टीवी के विकर्ण का काफी महत्व है। अधिक, बेहतर है।
आपको स्क्रीन को भी स्थापित करना चाहिए ताकि पास में कोई भी सतह न हो जिससे एल ई डी परिलक्षित होते हैं (मेरे मामले में, ये स्पीकर की साइड सर्फेस हैं) - यह विशेष रूप से महत्वपूर्ण नहीं है, लेकिन यह बेहतर है कि पिक्सेल जो तेजी से बाहर खड़े होते हैं, वे बिल्कुल भी दिखाई नहीं देते हैं - क्योंकि उनके बीच एक उचित दूरी है, यह सबसे अच्छे तरीके से तस्वीर को प्रभावित नहीं करता है।
आपको क्या पसंद आया:इस तरह के बैकलाइट के साथ वीडियो और गेम देखने से आपकी आँखें अनलोड हो जाती हैं - मॉनिटर पिक्चर पर हार्ड फोकस गायब हो जाता है। आंखों की थकान की भावना बाद में आती है, अगर आप इसे चमक के साथ ज़्यादा नहीं करते हैं। वीडियो देखना कम से कम असामान्य है, प्रभाव को पूरा करने के लिए इसे एक निश्चित दूरी से करना बेहतर है।
क्या पसंद नहीं आया:रोशनी प्रणाली के लिए कोई विशेष शिकायत नहीं है, लेकिन, जैसा कि पहले ही उल्लेख किया गया है, खुशी की पूर्णता के लिए, आपको सही वातावरण की आवश्यकता है - चकाचौंध सतहों की अनुपस्थिति, स्क्रीन के पीछे एक समान रंग की पृष्ठभूमि, आदि। ऑपरेशन के दौरान, यह पता चला कि मेरे मॉनिटर के डिज़ाइन परिशोधन कुछ हद तक टेप के सामान्य संचालन में हस्तक्षेप करते हैं - सामने का पैनल पारदर्शी प्लास्टिक से बना है और पूरे परिधि के चारों ओर पीछे के कवर के ऊपर कई मिलीमीटर फैला है, विशेष रूप से नीचे। इसलिए, इस तथ्य के बावजूद कि टेप अपेक्षाकृत दूर से घुड़सवार है, इस पैनल के किनारों पर व्यक्तिगत एलईडी दिखाई दे रहे हैं। मुझे विश्वास है कि कुछ लोग इसका सामना करेंगे, लेकिन फिर भी पहले से जानकारी उपलब्ध होने दें।
नीचे एक वीडियो है कि यह कैसे गतिशीलता में दिखता है। ऑपरेटर अटे पड़े क्षितिज के लिए माफी माँगता है।
संदर्भ
पुनश्च प्रदर्शनों को बनाए रखने के लिए, मैं शुरुआती बिंदु पर एक लिंक देता हूं जहां मैंने शुरू किया था -
compcar.ru/forum/showthread.php?t=9462UPD # 1 सॉफ्टवेयर को जीथब पर (निष्पादन योग्य फ़ाइल सहित) अपडेट किया गया है - विशेष रूप से गतिशील नहीं हैं फिल्में देखते समय प्रभाव को कम करने के लिए समूह एल ई डी की क्षमता को जोड़ा गया है।
UPD # 2 Qt (QScreen का उपयोग करके) स्क्रीन कैप्चर के लिए जोड़ा गया समर्थन, इसलिए अब आप एक क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन का निर्माण कर सकते हैं। परीक्षण में मदद करने के इच्छुक लोगों की उपस्थिति का स्वागत है।
UPD # 3 यूजीनिस (
https://github.com/eugenis ) की मदद के लिए धन्यवाद, एक पूर्ण-समर्थक प्रो प्रोजेक्ट फ़ाइल दिखाई दी, लिनक्स के तहत उचित संकलन के लिए अशुद्धि तय की गई थी, कोड थोड़ा अनुकूलित था। ये सभी खुशियाँ गीथूब पर उपलब्ध हैं।