Arduino पर इशारे से नियंत्रित दीपक

छवि

सभी को नमस्कार !!!
मुझे खुशी है कि मैं आपको अपना नया शिल्प फिर से दिखा सकता हूं।
इस बार मैंने एक साथ एक इशारा-नियंत्रित आर्डिनो लैंप लगाया।

इस परियोजना ने मुझे बहुत समय दिया, जिसकी मुझे हमेशा कमी थी।
मैंने दीपक के पहले संस्करण को बहुत जल्दी से इकट्ठा किया और इसने मेरे लिए ब्रेडबोर्ड पर पूरी तरह से काम किया, लेकिन जब मैंने इसे मामले में एक स्थायी स्थान पर स्थानांतरित कर दिया, तो यह सब शुरू हो गया, फ्रीज, झूठी सकारात्मकता और अन्य परेशानियों के साथ सभी समस्याएं निकल गईं। इंटरनेट पर Googling, मैंने विदेशी साइटों पर APDS9960 सेंसर की समस्याओं से संबंधित कई शिकायतें पाईं, लेकिन इन समस्याओं का समाधान नहीं खोजा। मुझे इस सेंसर की डेटशीट का अध्ययन करने और इसके संचालन को समझने में थोड़ा समय देना था। अंत में, इसने भुगतान किया और मैं stably कार्य कोड लिखने में सक्षम था।

और इसलिए, क्रम में सब कुछ।

दीपक का वर्णन


इस दीपक में मुख्य जोर विज़ुअलाइज़ेशन पर नहीं था, लेकिन इशारा नियंत्रण पर, अन्य सभी कार्य माध्यमिक हैं।

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

यदि दीपक को चालू करने के बाद हम बाईं ओर फ़्लिप करना शुरू करते हैं, तो हम "फायर", "मैट्रिक्स", "लावा लैंप", "रेनबो", "कंफ़ेद्दी", "स्पार्क्स", "फ़िएरी लैंप" जैसे गतिशील प्रकाश प्रभाव देखेंगे। यदि आपको एक नियमित दीपक की ओर लौटने की आवश्यकता है, तो आप पलटने के बजाय, अपने आप से इशारे से दीपक को बंद कर सकते हैं और तीनों में से किसी भी इशारे को चालू कर सकते हैं।
स्विच ऑफ करना एक इशारे से किया जाता है।



चमक सेंसर के पास जाने और दूर जाने के इशारे से नियंत्रित होती है। पहले आपको अपनी हथेली को संवेदक के करीब लाने की आवश्यकता है, और फिर तेजी से ऊपर उठाएं। दीपक चमक समायोजन मोड में स्विच करेगा, हथेली को करीब और करीब ले जाएगा, आपको उपयुक्त चमक खोजने और कुछ सेकंड के लिए अपना हाथ लॉक करने की आवश्यकता है ताकि चमक मूल्य संरक्षित हो। जब चमक को बनाए रखा जाता है, तो दीपक आपको प्रकाश को सुचारू रूप से बंद करने और फिर एक नए चमक स्तर के साथ चालू करने के बारे में बताएगा।

मैंने विज़ुअल इफेक्ट्स पर ज्यादा ध्यान नहीं दिया, क्योंकि मैं Wemos D1 के मिनी कंट्रोलर पर लैंप का दूसरा संस्करण बनाने की योजना बना रहा हूं। जिसमें मैं सब कुछ आदर्श में लाने की योजना बना रहा हूं। इसी कारण से, मैं अभी भी एलईडी की केवल एक पंक्ति का उपयोग करता हूं, जिसमें चार के बजाय 4 ws2812b स्ट्रिप्स शामिल हैं।

APDS9960 रुकावट


दरअसल, एलईडी लैंप की मुख्य समस्याएं इसके साथ जुड़ी हुई हैं। Apds9960 में रुकावट अपना जीवन जीते हैं, यह किसी भी चीज से काम कर सकता है, उदाहरण के लिए EM हस्तक्षेप से या किसी व्यक्ति के सेंसर के पास होने से, पोषण में तरंग से, और संभवतः कुछ और से।



पहले मैंने हार्डवेयर में बदलाव के साथ समस्या को ठीक करने की कोशिश की। पावर फ़िल्टरिंग ने मदद नहीं की, यहां तक ​​कि 18650 बैटरी के साथ, सेंसर अभी भी अपना जीवन व्यतीत कर रहा है। मैंने INT सिग्नल के लोड रेसिस्टर को + 5V पर स्विच करने की कोशिश की और इससे भी सफलता नहीं मिली।

जैसे-जैसे अध्ययन हुआ, एक समझ आई कि झूठे व्यवधान क्यों आए। मुख्य समस्या आईआर सिग्नल का यादृच्छिक प्रतिबिंब है। निर्माता सेंसर और उसके चारों ओर एक काले रबर कोटिंग के साथ कवर करने की सलाह देता है। मेरे पास ऐसी पेंट नहीं है और मैं इससे परेशान नहीं था। हालांकि यह सुनिश्चित करने के लिए कि यह झूठी सकारात्मक की संख्या को थोड़ा कम कर सकता है।

मैंने कोड लिखा जो सभी यादृच्छिक ट्रिगर्स को फ़िल्टर करता है, लेकिन एक और समस्या में भाग गया। व्यवधान उत्पन्न होने के बाद, इशारे की सूचना I2C बस के माध्यम से तुरंत नहीं, बल्कि एक निश्चित देरी से प्रसारित की जाती है। और अगर पता एलईडी पट्टी के कारण बिजली की आपूर्ति शोर है, तो ट्रांसमिशन समय, इन हस्तक्षेपों को ध्यान में रखते हुए, हमेशा अलग होगा। मुझे इस तथ्य को ध्यान में रखना था और नए तरीके से इशारों को निर्धारित करने के लिए कोड को फिर से लिखना था।

इशारे की परिभाषा


यदि कोड सेंसर से इंटरप्ट का उपयोग नहीं करता है, तो इशारे की परिभाषा के साथ कोई समस्या नहीं है। लेकिन इस मामले में, मल्टीटास्किंग खो जाता है। यदि दीपक पर एक गतिशील प्रभाव सक्रिय होता है, तो उसे तदनुसार एक चक्रीय, लगातार निष्पादन योग्य कोड की आवश्यकता होती है, और नियंत्रक को चक्र से निकालने के लिए इंटरप्ट की आवश्यकता होगी।

इशारे की मान्यता की स्थिरता में सुधार करने के लिए, पुस्तकालय में रिसीवर की संवेदनशीलता को कम करना भी आवश्यक था। ऐसा करने के लिए, SparkFun_APDS9960.h फ़ाइल में लाइन बदलें:

यदि (setLEDBoost (LED_BOOST_300))
पर
यदि (setLEDBoost (LED_BOOST_150))

यदि आपने इस लेख से पुस्तकालय डाउनलोड किया है, तो आपको कुछ भी करने की आवश्यकता नहीं है, सब कुछ पहले से ही तय हो चुका है।
मैंने प्रायोगिक रूप से 50 एमएए एलईडी के वर्तमान को भी चुना है, जिसमें इशारों को सबसे अधिक निर्धारित किया जाता है और 100 एमए के वर्तमान के साथ एक इन्फ्रारेड एलईडी को मजबूर करने की कोई आवश्यकता नहीं है।

और मैंने दीपक के निचले भाग में माइक्रोकंट्रोलर और शीर्ष कवर में जेस्चर सेंसर लगाकर भी गलती की। इस वजह से, arduino और apds9960 को जोड़ने के लिए, मुझे 30 सेमी लंबे तारों का उपयोग करना पड़ा। जिसने सेंसर की अतिरिक्त अस्थिरता को भी जोड़ा। परिणामस्वरूप, मैंने इन सभी समस्याओं को प्रोग्रामेटिक रूप से हराया।

योजना




डिवाइस को पावर देने के लिए, मैं अपने स्मार्टफोन से चार्जर का उपयोग करता हूं, जिसमें 5V का आउटपुट वोल्टेज और 2A का करंट होता है। लेकिन वास्तव में, सफेद रोशनी वाला एक दीपक अधिकतम चमक पर चालू होता है जो 1.3 ए से ऊपर का उपभोग नहीं करता है। इसलिए, कम से कम 1.3 ए के आउटपुट वर्तमान के साथ कोई भी शक्ति स्रोत उपयुक्त है।

Dc-dc mini360 स्टेबलाइजर को कम से कम 150 mA के आउटपुट करंट के साथ किसी अन्य स्टेप-डाउन वोल्टेज कनवर्टर से बदला जा सकता है।

नीचे दिए गए आरेख में, मैं एक तर्क स्तर कनवर्टर का उपयोग नहीं करता हूं, लेकिन यह मेरा व्यक्तिगत निर्णय है। और इसलिए, मैं उस घटना में अग्रिम जिम्मेदारी स्वीकार नहीं करता हूं, यदि आप विफल हो जाते हैं, तो एपीडीएस 9960 सेंसर टीटीएल स्तर के कनवर्टर के बिना जुड़ा हुआ है।

Arduino नैनो के बजाय, आप Arduino UNO नियंत्रक या इसके क्लोन का उपयोग कर सकते हैं।

जेस्चर सेंसर पर जंपर्स की उपस्थिति की जांच करना सुनिश्चित करें, वे नीचे दिए गए फोटो में लाल रंग में चिह्नित हैं। उनकी अनुपस्थिति के मामलों में, एक टांका लगाने वाले लोहे को इन संपर्क पटरियों पर लागू किया जाना चाहिए, एक समान ड्रॉप रूपों तक मिलाप को लागू करना और गरम करना। अब चीनी बिना जंपर्स के इन सेंसर की आपूर्ति कर रहे हैं। इन जंपर्स के बिना, सेंसर के संचालन की गारंटी नहीं है।



उपयोग किए गए घटक


अरुडिनो नैनो - 1 पीसी।
जेस्चर सेंसर APDS9960 - 1 पीसी।
एलईडी स्ट्रिप्स ws2812b - 4 पीसी।
मिनी 360 स्टेप-डाउन कनवर्टर - 1 पीसी।
कनेक्टिंग तार - 1 सेट।

Arduino के लिए प्रोग्राम कोड


कोड को दो भागों में विभाजित किया गया है। पहले भाग में मुख्य कोड है जो सेंसर के साथ काम करता है, और दूसरे भाग में सभी प्रकाश प्रभावों के लिए कोड है।

आप मेरे कोड के साथ सादृश्य द्वारा किसी भी प्रभाव को जोड़ सकते हैं, लेकिन सबसे महत्वपूर्ण बात, लूप्ड प्रभाव से इशारे से बाहर निकलने के लिए एक फ़ंक्शन जोड़ना न भूलें। ऐसा करने के लिए, लूप के अंत में निम्न पंक्ति जोड़ें अगर (check_int ()) वापस;

कार्यक्रम के मुख्य कार्यों का विवरण
प्रसंस्करणग्रेस्चर () प्रक्रियाएं जेस्चर सेंसर से बाधित होती हैं।
प्रोसैसप्रो प्रॉक्सिमिटी () प्रॉसेस निकटता सेंसर से बाधित होता है।
जेस्चर_इंट () - जेस्चर सेंसर से इंटरप्ट हैंडलर।
निकटता_इंट () - निकटता सेंसर से बाधा हैंडलर।

स्थिरांक का वर्णन


APDS9960_INT - एक बाहरी व्यवधान के लिए इनपुट। Arduino नैनो और UNO में केवल दो ऐसे इनपुट हैं, 2 और 3।

पिन - यहां आपको एलईडी पट्टी को आउटपुट निर्दिष्ट करने की आवश्यकता है। आप किसी भी डिजिटल पिन को निर्दिष्ट कर सकते हैं जिसमें ws2812b पट्टियाँ जुड़ी हुई हैं।

NUM_PIX - यहां हम उपयोग किए गए टेप में पता एलईडी की संख्या दर्शाते हैं।
श्रेणी - त्रुटि सीमा 0 से 10 तक है। यदि, चमक को समायोजित करते समय, एक हाथ 2 सेकंड के लिए सेंसर के ऊपर तय किया जाता है, तो रीडिंग को बचाया जाना चाहिए, लेकिन यदि रीडिंग सहेजे नहीं जाते हैं, तो धीरे-धीरे त्रुटि सीमा बढ़ाएं।

APDS9960 पुस्तकालय डाउनलोड करें
दीपक स्केच डाउनलोड करें

दीपक का ऑपरेशन दिखाते हुए वीडियो



परिणाम


दीपक लाइव वीडियो की तुलना में बेहतर दिखता है। अब हर कोई जिसने उसे मुझसे देखा है, उनके लिए समान इकट्ठा करने के लिए कहा गया है। फिलहाल, मुझे यह पसंद नहीं है कि चमक समायोजन कैसे काम करता है, लेकिन मैं इस पर काम कर रहा हूं। मैं जल्द ही ऐसा वादा नहीं करता, लेकिन दीपक का अगला संस्करण पहले से ही विकास में है।

लेख को अंत तक पढ़ने के लिए धन्यवाद! यदि आपके पास अभी भी प्रश्न हैं, तो आप लेख के तहत टिप्पणियों में पूछ सकते हैं।

पुनश्च


दीपक विचार से प्रेरित है
मैंने यहां मुख्य प्रभाव लिया

Source: https://habr.com/ru/post/hi484278/


All Articles