विषयसूची:

PixelWall: 7 कदम (चित्रों के साथ)
PixelWall: 7 कदम (चित्रों के साथ)

वीडियो: PixelWall: 7 कदम (चित्रों के साथ)

वीडियो: PixelWall: 7 कदम (चित्रों के साथ)
वीडियो: Philips Lighting Application Center. Interactive Pixel Wall 2024, सितंबर
Anonim
पिक्सेलवॉल
पिक्सेलवॉल

क्या आप पिक्सेल-टेबल प्रोजेक्ट के बारे में जानते हैं? मुझे ऐसी पिक्सेल चीज़ को महसूस करने का विचार था, लेकिन एक टेबल के रूप में नहीं, बल्कि इसे दीवार पर लगाने के लिए।

ताकि मैं सोफे पर लेट सकूं और आराम करते हुए उस पर कुछ खेल खेल सकूं।:)

कार्यान्वित खेल हैं:

  • टेट्रिस
  • अंतरिक्ष आक्रमणकारी
  • साँप
  • पिक्सेल ड्रा

अतिरिक्त कार्य हैं:

  • वर्तमान समय दिखाएं
  • रंग एनिमेशन दिखाएं

PixelWall में ESP8266 है जिससे यह मेरे होम-WLAN से जुड़ सकता है। लेकिन PixelWall को एक्सेस प्वाइंट के रूप में इस्तेमाल करना और उससे सीधे कनेक्ट करना भी संभव है।

मेरे PixelWall का उपयोग करना आसान बनाने के लिए, दीवार कनेक्ट होने के बाद नियंत्रण के लिए एक वेबसाइट प्रदान करती है। सभी ऐप्स वेबपेज के माध्यम से नियंत्रित/चलाने योग्य हैं। इसलिए उपयोग के लिए कोई सॉफ़्टवेयर स्थापित करना आवश्यक नहीं है।

इसके अतिरिक्त एक एनईएस नियंत्रक है जो गेम खेलना आसान बनाता है।

खुला स्त्रोत

सभी सॉफ्टवेयर और यांत्रिक चित्र जो मैंने जीथब पर डाले हैं: https://github.com/C3MA/PixelWallइसे अपने स्वयं के प्रोजेक्ट के लिए उपयोग करने के लिए स्वतंत्र महसूस करें।

चरण 1: इलेक्ट्रॉनिक से शुरू

इलेक्ट्रॉनिक से शुरू
इलेक्ट्रॉनिक से शुरू
इलेक्ट्रॉनिक से शुरू
इलेक्ट्रॉनिक से शुरू
इलेक्ट्रॉनिक से शुरू
इलेक्ट्रॉनिक से शुरू

एक अन्य प्रोजेक्ट से WS2812 LED के साथ एक मौजूदा PCB है। पीसीबी में प्रत्येक पंक्ति में 12 एलईडी के साथ 3 पंक्तियाँ होती हैं।

मैंने इस पीसीबी को 6 बार इस्तेमाल करने का फैसला किया। तो मुझे 12x18 एलईडी मैट्रिक्स मिलता है।

पहला कदम सभी 216 एल ई डी, लगभग 100 कैपेसिटर और एक ईएसपी 8266 को मिलाप करना था।

मैन्युअल रूप से सोल्डरिंग के लिए लगभग 10 घंटे की आवश्यकता होती है।

पहले त्वरित परीक्षण के बाद यह पता चला: सब कुछ काम कर रहा है।

तो हम मैकेनिक भाग में जा सकते हैं।

चरण 2: मैकेनिक बनाना

मैकेनिक बनाना
मैकेनिक बनाना
मैकेनिक बनाना
मैकेनिक बनाना
मैकेनिक बनाना
मैकेनिक बनाना
मैकेनिक बनाना
मैकेनिक बनाना

सबसे पहले हमें प्रत्येक पिक्सेल के लिए एक सेपरेटर की आवश्यकता होती है। विचार क्षैतिज और ऊर्ध्वाधर बैंड को वी-कट के माध्यम से एक साथ रखना है।

प्रत्येक बैंड की मोटाई 3 मिमी और ऊंचाई 17 मिमी है। उन्हें लेज़रकटर द्वारा एचडीएफ प्लेट से काटा जाता है।

लेज़रकटर के लिए सभी स्केच फ्रीकैड में तैयार किए गए हैं (जिथब प्रोजेक्ट के मैकेनिक फ़ोल्डर में "लीस्टे" नाम दिया गया है)

ग्रिड पीसीबी के लेआउट द्वारा दिया जाता है। इसमें 28 मिमी कॉलम चौड़ाई और 31 मिमी पंक्ति ऊंचाई है।

अगला प्रश्न है: पीसीबी पर बैंड कैसे ठीक करें? ग्लूइंग इतना अच्छा विचार नहीं है, क्योंकि कुछ दोष होने पर इसे अलग करना संभव होना चाहिए। इसलिए मैंने इसे पेंच करने का फैसला किया। लेकिन एक स्क्रू 3 मिमी पतले बैंड को विभाजित कर देगा। इसलिए मैंने 3D प्रिंटर से बैंड के लिए एक पॉकेट प्रिंट किया (यह जिथब प्रोजेक्ट में "हाल्टर" नाम का हिस्सा है)। इसने उन्हें पीसीबी पर ठीक करने के लिए बहुत अच्छा काम किया।

अगला कदम इसके लिए एक फ्रेम प्राप्त करना है। कुछ ऑनलाइन दुकानें हैं जो अलग-अलग फोटो फ्रेम काटने की पेशकश करती हैं। इसलिए मैंने ३४३ मिमी x ५६५ मिमी आकार के साथ एक फ्रेम का आदेश दिया।

बिजली की आपूर्ति के लिए फ्रेम को नीचे की तरफ एक अतिरिक्त छेद मिलता है।

प्लेक्सीग्लस फ्रंट प्लेट मैंने भी ऑनलाइन ऑर्डर की थी। यह एक WN770 ओपल मिल्कग्लासोप्टिक LD45% आकार: 567x344x2mm है

इसका पारभासी 45% है।

सभी भागों को एक साथ फ्रेम में रखना।

अंत में कुछ स्ट्रिप्स को पीछे की ओर खराब कर दिया जाएगा, ताकि सब कुछ ठीक हो जाए और बाहर न गिरे।

बिना किसी डब्लूएलएएन संचार के पिक्सेलवॉल के संचालन के लिए एक विकल्प रखने के लिए, मैंने एक प्लग करने योग्य नियंत्रण कक्ष बनाया जिसे फ्रेम के दाहिने तरफ वैकल्पिक रूप से डाला जा सकता है (जिथब प्रोजेक्ट में "बेडिएनिनहाइट" कहा जाता है)।

चरण 3: सॉफ्टवेयर - मूल बातें

सॉफ्टवेयर - मूल बातें
सॉफ्टवेयर - मूल बातें

उपयोग के मामलों में से एक PixelWall पर गेम खेलना है।

लेकिन पिक्सेल गेम लिखने के लिए हमेशा एक उपयोगी डिबगिंग वातावरण की आवश्यकता होगी। मैं एक उपयुक्त तरीके से ESP8266 नियंत्रक को डिबग करने का कोई तरीका नहीं जानता। इसलिए मैंने अपने पीसी पर पूरे कोड का अनुकरण करने का फैसला किया। ESP कोड Arduino C++ में लिखा गया है, इसलिए मैंने PC पर सिमुलेशन के लिए Visual Studio C++/CLI भाषा का उपयोग किया। मानक C++ और C++/CLI भाषा के बीच कुछ अंतर हैं। उदाहरण के लिए सी ++/सीएलआई में आप स्ट्रिंग प्रकार का ऑब्जेक्ट नहीं बना सकते हैं, कचरा संग्रह के कारण ऐसी ऑब्जेक्ट को ऑब्जेक्ट या संदर्भ/पॉइंटर बनाने की अनुमति नहीं है। सी ++/सीएलआई में आपको हैंडल का उपयोग करना होगा: स्ट्रिंग ^। लेकिन ऐसे हैंडल सी ++ मानक में मौजूद नहीं थे। इसलिए मुझे दोनों दुनिया को एक साथ लाने के लिए रचनात्मक होना पड़ा। मैंने सिमुलेशन के लिए एक Arduino.h फ़ाइल बनाकर इसे हल किया। यह फ़ाइल सिमुलेशन में सभी स्ट्रिंग्स को "#define String String^" परिभाषित करके ओवरराइड करती है। यह एक आम तरीका नहीं है, लेकिन यह काम करता है:) कुछ छोटे कंपाइलर स्विच को छोड़कर सभी ईएसपी कोड विजुअल स्टूडियो सी ++/सीएलआई में संकलित करने योग्य हैं।

एलईडी मैट्रिक्स

मैंने जो प्रथम श्रेणी लिखी है वह एलईडी-मैट्रिक्स वर्ग है। यह वर्ग WS2812 LED के नियंत्रण और मानचित्रण को संभालता है।

इस वर्ग को दो बार लिखा गया था: एक बार ESP8266 नियंत्रक (LEDMatrixArduino.cpp) के लिए और दूसरा जो सिमुलेशन (LEDMatrixGUI.cpp) में फॉर्म GUI पर आकृतियों को नियंत्रित करेगा।

यह वर्ग एक व्यक्तिगत एलईडी को उसके कॉलम और पंक्ति द्वारा सेट करने और साफ़ करने के लिए कुछ बुनियादी तरीके प्रदान करता है।

इसके अतिरिक्त यह एक सेटब्राइटनेस फ़ंक्शन प्रदान करता है। इस मान पर विचार किया जाएगा यदि एक एलईडी सेट किया जाएगा। तो सभी एलईडी-सेट कमांड पूरी चमक के साथ किए जा सकते हैं। उदाहरण के लिए: यदि ब्राइटनेस 50% पर सेट है और सेटलेड () फ़ंक्शन को RGBColor (255, 255, 255) के साथ कॉल किया जाता है, तो यह LED को 127, 127, 127 पर सेट कर देगा।

एलईडी पैनल

एलईडी मैट्रिक्स क्लास के ऊपर मैंने एक एलईडी पैनल क्लास लगाई। यह वर्ग किसी भी एप्लिकेशन के लिए कुछ उपयोगी कार्यक्षमता प्रदान करता है। यह दो स्वतंत्र परतें प्रदान करता है। यह एप्लिकेशन के लिए मददगार हो सकता है। उदाहरण के लिए टेट्रिस गेम पर: लेयर0 तल पर निश्चित पत्थरों के लिए है और लेयर 1 गिरते हुए पत्थर को प्रदर्शित करने के लिए है। तो प्रत्येक चक्र में पत्थर एक पिक्सेल नीचे तक गिरता है, अनुप्रयोग केवल परत 1 को साफ़ कर सकता है और पत्थर को अपनी नई स्थिति में खींच सकता है। तल पर सभी स्थिर पत्थरों को फिर से बनाना आवश्यक नहीं है।

इसके अतिरिक्त पैनल प्रदान करता है

प्रिंट इमेज - स्माइली या डब्लूएलएएन सिंबलप्रिंटडिजिट जैसे कुछ आइकन प्रिंट करने के लिए - एक विशिष्ट स्थिति पर एक अंक प्रिंट करने के लिएप्रिंटफॉर्मेटेड नंबर - उपसर्गों के साथ एक नंबर प्रिंट करने के लिए ज़ीरोप्रिंटनंबर - एक पूर्णांक संख्या मुद्रित करने के लिएप्रिंटलाइनएच - विशिष्ट लंबाई के साथ क्षैतिज रेखाप्रिंटलाइनवी - विशिष्ट लंबाई के साथ क्षैतिज रेखा

चरण 4: सॉफ्टवेयर - अनुप्रयोग अवधारणा

सॉफ्टवेयर - अनुप्रयोग अवधारणा
सॉफ्टवेयर - अनुप्रयोग अवधारणा

पिक्सेल वॉल के लिए सामान्य अवधारणा है:

  • प्रत्येक एप्लिकेशन का अपना नाम होता है
  • एप्लिकेशन नाम सहित पिक्सेलवॉल URL पर कॉल करके एप्लिकेशन प्रारंभ किया जाता है (उदाहरण के लिए: 192.168.4.1/tetris)
  • URL में GET पैरामीटर भी हो सकते हैं जिन्हें एप्लिकेशन को अग्रेषित किया जाएगा
  • प्रत्येक एप्लिकेशन को एक वेबसाइट डिलीवर करनी होती है जो ब्राउज़र में प्रदर्शित होती है।
  • यह वेबसाइट वैकल्पिक रूप से तेजी से बातचीत के लिए आवेदन के लिए एक वेबसोकेट कनेक्शन खोल सकती है
  • वेब फ्रंटएंड पर वापस संचार करने के लिए एप्लिकेशन इस वेबसोकेट कनेक्शन का उपयोग कर सकता है।
  • वेब इंटरफेस के अलावा एप्लिकेशन को कंट्रोल पैनल और एनईएस कंट्रोलर से अतिरिक्त रूप से पुश बटन इवेंट मिलते हैं।

अनुप्रयोग इंटरफ़ेस

PixelWall के लिए नए एप्लिकेशन विकसित करना आसान बनाने के लिए, मैंने "IPixelApp.h" नामक एप्लिकेशन के लिए एक इंटरफ़ेस बनाया। इस इंटरफ़ेस में 8 परिभाषाएँ हैं:

  • आभासी शून्य प्रारंभ () = 0;
  • आभासी शून्य अंत () = 0;
  • आभासी शून्य लूप () = 0;
  • आभासी शून्य newWebsocketData(uint8_t * पेलोड, size_t लंबाई) = 0;
  • आभासी WebsiteResponse_t getWebsiteResponse (स्ट्रिंग पैरामीटर) = 0;
  • आभासी शून्य बटनइवेंट () = 0;
  • आभासी शून्य टाइमर टिक () = 0;
  • वर्चुअल स्ट्रिंग getName () = 0;

प्रारंभ/अंत - इस फ़ंक्शन को तब कहा जाता है जब एप्लिकेशन प्रारंभ/समाप्त हो जाता है क्योंकि कोई अन्य एप्लिकेशन प्रारंभ होता है

लूप - इस फ़ंक्शन को मुख्य प्रोग्राम के मुख्य लूप से कहा जाता है। यह कॉल अनियमित है और किसी रुकावट से बाहर है।

newWebsocketData - इस फ़ंक्शन को कहा जाता है यदि वेब फ्रंटएंड ने डेटा भेजा है।

getWebsiteResponse - इसका उपयोग मुख्य प्रोग्राम द्वारा वेबपेज प्राप्त करने के लिए किया जाता है जिसे अनुरोध का जवाब होना चाहिए।

बटनइवेंट - इसे तब कहा जाता है जब कंट्रोल पैनल पर कोई बटन दबाया या छोड़ा गया हो।

timerTick - इस फ़ंक्शन को प्रत्येक 10ms कहा जाता है, जो टाइमर इंटरप्ट द्वारा ट्रिगर किया जाता है। इसका उपयोग समय के आधार के लिए किया जा सकता है लेकिन इसमें कोई भी समय गहन चीजें नहीं होनी चाहिए, क्योंकि यह एक बाधा संदर्भ है।

getName - यह URL के लिए आवेदन का नाम लौटाएगा

चरण 5: सॉफ्टवेयर - अनुप्रयोग

सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन
सॉफ़्टवेयर एप्लिकेशन

निम्नलिखित 7 एप्लिकेशन वर्तमान संस्करण में लागू किए गए हैं:

डिफ़ॉल्ट ऐप

यह एक विशेष ऐप है जो PixelWall की वर्तमान WLAN स्थिति को प्रदर्शित करता है। यदि दीवार वर्तमान WLAN से जुड़ सकती है, तो यह IP पता प्रदर्शित करेगी जो इसे नेटवर्क से प्राप्त हुआ था।

यदि यह संभव नहीं था (कोई ssid सेटअप नहीं है या WLAN मौजूद नहीं है या पासवर्ड गलत है) तो यह एक एक्सेसपॉइंट खोलेगा। इस मामले में आप ESP8266: 192.168.4.1 से डिफ़ॉल्ट एक्सेसपॉइंट आईपी के माध्यम से PixelWall से जुड़ सकते हैं

वेबइंटरफेस पर यह ऐप 6 बटन प्रस्तुत करता है। बटन दबाकर आप उपयुक्त एप्लिकेशन शुरू कर सकते हैं।

सेटिंग ऐप

WLAN SSID और पासवर्ड सेटअप करने के लिए यह ऐप। बस अपने WLAN के क्रेडेंशियल डालें और PixelWill की अगली शुरुआत में यह इस WLAN से कनेक्ट होने का प्रयास करेगा।

खेल

PixelWall में प्रोग्राम किए गए तीन क्लासिक गेम हैं:

  • टेट्रिस
  • साँप
  • अंतरिक्ष आक्रमणकारी

सभी गेम वेब इंटरफेस या एनईएस नियंत्रक के साथ खेले जा सकते हैं।

छवि ऐप

यह एक ऐसा ऐप है जो PixelWall पर रंग प्रदर्शित करता है। आप चुन सकते हैं कि क्या यह एक गतिशील इंद्रधनुष होना चाहिए, विभिन्न रंगों को लुप्त करना, स्थिर रंग दिखाना या केवल यादृच्छिक रंगीन पिक्सेल प्रदर्शित करना चाहिए।

पिक्सेल आईटी

इस ऐप से आप वेब इंटरफेस पर अपनी उंगली से टैप करके प्रत्येक पिक्सेल को अलग से सेट कर सकते हैं। तो आप कुछ क्रेसी तस्वीरें खींच सकते हैं:)

चरण 6: चिकोटी एक्सटेंशन के माध्यम से नियंत्रण करें

चिकोटी एक्सटेंशन के माध्यम से नियंत्रण
चिकोटी एक्सटेंशन के माध्यम से नियंत्रण

GetInTouch नाम के ट्विच पर एक एक्सटेंशन है। यह एक्सटेंशन Arduino प्रोजेक्ट्स को आपके लाइवस्ट्रीम में एकीकृत करने की अनुमति देता है, ताकि दर्शक स्ट्रीमिंग के दौरान आपके arduino को नियंत्रित कर सकें।

इसके लिए Arduino लाइब्रेरी Arduinos के लिए लिखी गई है। लेकिन यह पता चला कि यह ESP8266 पर भी ठीक से चलता है।

स्ट्रीम में इसका उपयोग करने के लिए निम्नलिखित चरण आवश्यक हैं:

  • GetInTouch लाइब्रेरी को कोड में एकीकृत करें (ट्यूटोरियल देखें)
  • USB/RS232 कनवर्टर (जिसका उपयोग ESP को फ्लैश करने के लिए भी किया जाता है) के माध्यम से अपने पीसी के साथ पिक्सेलवॉल को कनेक्ट करें।
  • वेबसाइट से GetInTouch एप्लिकेशन इंस्टॉल करें
  • अपने ट्विच चैनल पर GetInTouch एक्सटेंशन इंस्टॉल करें (ट्यूटोरियल देखें)

चरण 7: निंटेंडो एनईएस नियंत्रक द्वारा नियंत्रण

निंटेंडो एनईएस नियंत्रक द्वारा नियंत्रण
निंटेंडो एनईएस नियंत्रक द्वारा नियंत्रण

कुछ देर इसे इस्तेमाल करने के बाद पता चलता है कि टच मोबाइल फोन पर खेलना इतना आसान नहीं है। समय-समय पर आप बटन चूक जाते हैं क्योंकि आपकी उंगली पर कोई प्रतिक्रिया नहीं होती है कि आप बटन के ऊपर हैं या नहीं। इसके अतिरिक्त कभी-कभी वेबसोकेट संचार थोड़े समय के लिए लीक हो सकता है।

इसलिए मैंने एक पुराना निंटेंडो एनईएस नियंत्रक खरीदने का फैसला किया। इस नियंत्रक का एक बहुत ही सरल इंटरफ़ेस है। इसका सिर्फ एक ४०२१ शिफ्ट रजिस्टर जो ३, ३वी के साथ चलता है। तो इसे सीधे ESP8266 से जोड़ा जा सकता है।

नियंत्रक पर सभी बटन ईवेंट जहां बटनइवेंट () फ़ंक्शन के माध्यम से चल रहे एप्लिकेशन को अग्रेषित किया जाता है।

सिफारिश की: