- आवश्यक घटक
- APDS-9960 डिजिटल निकटता आरजीबी और जेस्चर सेंसर का परिचय
- सर्किट आरेख
- Gesture और Color Sensing के लिए Arduino का प्रोग्रामिंग
आज ज्यादातर फोन में किसी भी ऐप को खोलने या बंद करने, म्यूजिक शुरू करने, कॉल अटेंड करने आदि के लिए जेस्चर कंट्रोल फीचर आते हैं। समय बचाने के लिए यह एक बहुत ही आसान फीचर है और इशारों से किसी भी डिवाइस को कंट्रोल करना भी अच्छा लगता है। हमने पहले जेस्चर कंट्रोल रोबोट और जेस्चर नियंत्रित एयर माउस बनाने के लिए एक्सेलेरोमीटर का उपयोग किया था। लेकिन आज हम Arduino के साथ एक जेस्चर सेंसर APDS9960 इंटरफेस करना सीखते हैं । इस सेंसर में रंगों का पता लगाने के लिए RGB सेंसर भी है, जिसका उपयोग इस ट्यूटोरियल में भी किया जाएगा। तो आपको हावभाव और रंग पहचान के लिए अलग सेंसर का उपयोग करने की आवश्यकता नहीं है, हालांकि रंग का पता लगाने के लिए एक समर्पित सेंसर उपलब्ध है- TCS3200 रंग सेंसर जो हमने पहले से ही Arduino के साथ रंग सॉर्टर मशीन बनाने के लिए उपयोग किया है।
आवश्यक घटक
- Arduino UNO
- APDS9960 RGB और जेस्चर सेंसर
- 16x2 एलसीडी
- DPDT स्विच
- 100K पॉट और 10K रोकनेवाला
- जंपर केबल
APDS-9960 डिजिटल निकटता आरजीबी और जेस्चर सेंसर का परिचय
APDS9960 एक मल्टीफ़ंक्शन सेंसर है। यह प्रकाश में इशारों, परिवेश प्रकाश और RGB मानों का पता लगा सकता है। इस सेंसर को निकटता सेंसर के रूप में भी इस्तेमाल किया जा सकता है और अधिकतर स्मार्टफोन में उपयोग किया जाता है, कॉल में भाग लेने के दौरान टचस्क्रीन को अक्षम करने के लिए।
इस सेंसर में चार फोटोडायोड होते हैं। ये फोटोडियोड प्रतिबिंबित आईआर ऊर्जा का पता लगाते हैं जो एक ऑन-बोर्ड एलईडी द्वारा प्रेषित होती है। इसलिए जब भी कोई इशारा किया जाता है तो यह आईआर ऊर्जा बाधित हो जाती है और सेंसर को वापस प्रतिबिंबित करती है, अब सेंसर इशारे के बारे में जानकारी (दिशा, वेग) का पता लगाता है और इसे डिजिटल जानकारी में परिवर्तित करता है। यह सेंसर प्रतिबिंबित आईआर प्रकाश का पता लगाकर बाधा की दूरी को मापने के लिए इस्तेमाल किया जा सकता है। इसमें RGB रंगों को सेंस करने के लिए UV और IR ब्लॉकिंग फिल्टर हैं और यह प्रत्येक रंग के लिए 16-बिट डेटा का उत्पादन करता है।
APDS-9960 सेंसर का पिन-आउट नीचे दिखाया गया है। यह सेंसर I 2 C संचार प्रोटोकॉल पर काम करता है। यह 1 beA की खपत करता है और 3.3V द्वारा संचालित होता है इसलिए सावधान रहें और इसे 5V पिन से न जोड़ें। यहाँ INT पिन इंटर पिन है, जिसका उपयोग I 2 C संचार को चलाने के लिए किया जाता है । और वीएल पिन ऑन-बोर्ड एलईडी के लिए वैकल्पिक पावर पिन है यदि पीएस जम्पर जुड़ा नहीं है। यदि पीएस जम्पर बंद है, तो आपको केवल वीसीसी पिन को पावर करने की आवश्यकता है, यह दोनों को मॉड्यूल - आईआर एलईडी प्रदान करेगा।
सर्किट आरेख
Arduino के साथ APDS960 के लिए कनेक्शन बहुत सरल हैं। हम दो मोड RGB Sensing और Gesture Sensing के बीच स्विच करने के लिए DPDT बटन का उपयोग करेंगे। सबसे पहले I2C संचार पिन SDA और SCL of APDS9960 क्रमशः Arduino pin A4 और A5 से जुड़े हैं। जैसा कि पहले कहा गया था कि सेंसर के लिए ऑपरेटिंग वोल्टेज 3.3v है, इसलिए APDS9960 के VCC और GND, Arvino के 3.3V और GND से जुड़े हैं। APDS9960 का इंटरप्ट पिन (INT) Arduino के D2 पिन से जुड़ा है।
के लिए एलसीडी, डेटा पिन (D4-D7) डिजिटल पिंस Arduino की D6-डी 3 और RS और एन पिन से जुड़े हैं D6 और Arduino के D7 से जुड़े हैं। एलसीडी का V0 पॉट से जुड़ा है और एलसीडी की चमक को नियंत्रित करने के लिए 100K पॉट का उपयोग किया जाता है। DPDT बटन के लिए हमने केवल 3 पिन का उपयोग किया है। दूसरा पिन इनपुट के लिए Arduino के D7 पिन से जुड़ा है और अन्य दो GND और VCC से जुड़े हुए हैं, इसके बाद 10K रेसिस्टर है।
Gesture और Color Sensing के लिए Arduino का प्रोग्रामिंग
प्रोग्रामिंग हिस्सा सरल और आसान है और डेमो वीडियो के साथ पूरा कार्यक्रम इस ट्यूटोरियल के अंत में दिया गया है।
पहले हमें स्पार्कफुन द्वारा बनाई गई एक लाइब्रेरी स्थापित करने की आवश्यकता है । इस लाइब्रेरी को स्थापित करने के लिए स्केच-> लाइब्रेरी शामिल करें-> लाइब्रेरी प्रबंधित करें।
अब सर्च बार में "स्पार्कफुन APDS9960" टाइप करें और लाइब्रेरी को देखने के बाद इंस्टॉल बटन पर क्लिक करें।
और हम जाने के लिए तैयार हैं। आएँ शुरू करें।
इसलिए सबसे पहले हम सभी आवश्यक हेडर फ़ाइलों को शामिल करना चाहते हैं। पहली हेडर फाइल लिक्विडक्रिफ्ट.एच का इस्तेमाल एलसीडी फंक्शन के लिए किया जाता है। दूसरी हेडर फाइल वायर। I का उपयोग I 2 C संचार के लिए किया जाता है और पिछले एक SparkFun_APDS996.h का उपयोग APDS9960 सेंसर के लिए किया जाता है।
#शामिल
अब अगली पंक्तियों में हमने बटन और एलसीडी के लिए पिन को परिभाषित किया है।
const int बटनपिन = 7; const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3; लिक्विड क्रिस्टल एलसीडी (आरएस, एन, डी 4, डी 5, डी 6, डी 7);
अगले हिस्से में, हम बाधा पिन जो डिजिटल पिन 2 और एक चर पर जुड़ा हुआ है के लिए एक मैक्रो परिभाषित किया है buttonState बटन और की वर्तमान स्थिति के लिए isr_flag बाधा सेवा दिनचर्या के लिए।
#define APDS9960_INT 2 int buttonState; int isr_flag = 0;
अगला एक ऑब्जेक्ट SparkFun_APDS9960 के लिए बनाया गया है, ताकि हम जेस्चर मूवमेंट्स तक पहुंच सकें और RGB मान प्राप्त कर सकें।
SparkFun_APDS9960 apds = SparkFun_APDS9960 (); uint16_t ambient_light = 0; uint16_t red_light = 0; uint16_t green_light = 0; uint16_t blue_light = 0;
में सेटअप समारोह, पहली पंक्ति और इनपुट के रूप में बटन (कम / उच्च) से मूल्य और दूसरी और तीसरी पंक्ति परिभाषित करता है व्यवधान से बटन पिन लाने के लिए है। apds.init () APDS9960 सेंसर को इनिशियलाइज़ करता है और lcd.begin (16,2) LCD को इनिशियलाइज़ करता है।
शून्य सेटअप () { buttonState = digitalRead (buttonPin); पिनमोड (APDS9960_INT, INPUT); पिनमोड (बटनपिन, INPUT); apds.init (); lcd.begin (16, 2); }
में पाश समारोह पहली पंक्ति में बटन से मूल्यों और यह भंडार हो जाता है buttonState पहले परिभाषित चर। अब अगली पंक्तियों में हम बटन से मानों की जाँच कर रहे हैं, अगर यह अधिक है तो हम लाइट सेंसर को सक्षम करते हैं और यदि यह कम है तो जेस्चर सेंसर को इनिशियलाइज़ करता है।
AttachInterrupt () बाहरी बाधा के लिए इस्तेमाल एक समारोह जो इस मामले में सेंसर की बाधा है। इस फ़ंक्शन में पहला तर्क इंटरप्ट नंबर है। Arduino UNO में, दो अंतर पिंस डिजिटल पिंस हैं - 2 और 3 INT.0 और INT.1 द्वारा दर्शाए गए हैं। और हमने इसे पिन 2 से जोड़ा है इसलिए हमने वहां 0 लिखा है। दूसरा तर्क फ़ंक्शन इंटरट्राउटइन () को कॉल करता है जिसे बाद में परिभाषित किया गया है। अंतिम तर्क FALLING है ताकि पिन से उच्च से कम जाने पर यह रुकावट को ट्रिगर करे। यहाँ Arduino इंटरप्ट के बारे में अधिक जानें।
शून्य लूप () { buttonState = digitalRead (buttonPin); if (buttonState == High) { apds.enableLightSensor (true); }
अगले भाग में, हम बटन पिन की जाँच करते हैं। यदि यह अधिक है तो आरजीबी सेंसर के लिए प्रक्रिया शुरू करें । फिर जांच लें कि प्रकाश संवेदक मूल्यों को पढ़ रहा है या नहीं। यदि यह मानों को पढ़ने में सक्षम नहीं है, तो उस स्थिति में, " प्रकाश मूल्यों को पढ़ने में त्रुटि " प्रिंट करें । और अगर यह मानों को पढ़ सकता है, तो तीन रंगों के मूल्यों की तुलना करें और जो भी उच्चतम है, उस रंग को एलसीडी पर प्रिंट करें।
if (buttonState == High) { if (? apds.readAmbientLight (ambient_light) - ! apds.readRedLight (red_light) - ! apds.readGreenLight (green_light ! - apds.readBlueLight (blue_light)) { lcd.print ! "प्रकाश मूल्यों को पढ़ने में त्रुटि"); } और { if (red_light> green_light) { if (red_light> blue_light) { lcd.print ("रेड"); देरी (1000); lcd.clear (); } ……। ………..
अगली पंक्तियों में फिर से बटन पिन की जाँच करें, और यदि यह प्रक्रिया कम हो तो जेस्चर सेंसर । फिर isr_flag के लिए जाँच करें और यदि यह 1 है तो एक फ़ंक्शन detachInterrupt () कहा जाता है। इस फ़ंक्शन का उपयोग रुकावट को बंद करने के लिए किया जाता है। अगली पंक्ति हैंडलगस्ट्योर () को कॉल करती है जो बाद में परिभाषित फ़ंक्शन है। आगे की अगली पंक्तियों में isr_flag को शून्य में परिभाषित करें और व्यवधान को संलग्न करें।
अगर (बटनस्टेट == कम) { अगर (isr_flag == 1) { detachInterrupt (0); handleGesture (); isr_flag = 0; संलग्नक (0, इंटरट्राउटाइन, FALLING); } }
अगला है रुकावट () फ़ंक्शन। इस फ़ंक्शन का उपयोग isr_flag वैरिएबल 1 को चालू करने के लिए किया जाता है, ताकि इंटरप्ट सर्विस को प्रारंभ किया जा सके।
शून्य अंतःक्रियात्मक ()। { isr_flag = 1; }
HandleGesture () समारोह अगले भाग में परिभाषित किया गया है। यह फंक्शन सबसे पहले जेस्चर सेंसर की उपलब्धता की जांच करता है। यदि यह उपलब्ध है तो यह जेस्चर वैल्यू को पढ़ता है और यह बताता है कि यह किस इशारे पर है (UP, DOWN, RIGHT, LEFT, FAR, NEAR) और संबंधित मानों को LCD में प्रिंट करता है।
शून्य संभालGesture () { if (apds.isGestureAvailable ()) { स्विच (apds.readGesture ()) { मामला DIR_UP: lcd.print ("UP"); देरी (1000); lcd.clear (); टूटना; मामला DIR_DOWN: lcd.print ("DOWN"); देरी (1000); lcd.clear (); टूटना; मामला DIR_LEFT: lcd.print ("LEFT"); देरी (1000); lcd.clear (); टूटना; मामला DIR_RIGHT: lcd.print ("राइट"); देरी (1000); lcd.clear (); टूटना; मामला DIR_NEAR: lcd.print ("NEAR"); देरी (1000); lcd.clear (); टूटना; मामला DIR_FAR: lcd.print ("FAR"); देरी (1000); lcd.clear (); टूटना; डिफ़ॉल्ट: lcd.print ("NONE"); देरी (1000); lcd.clear (); } } }
अंत में, कोड को Arduino पर अपलोड करें और सेंसर को प्रारंभ करने के लिए प्रतीक्षा करें। अब जबकि बटन बंद है इसका मतलब है कि यह जेस्चर मोड में है । इसलिए अपने हाथों को बाएँ, दाएँ, ऊपर, नीचे दिशाओं में ले जाने का प्रयास करें। के लिए अब तक इशारा, 2-3 सेकंड के लिए सेंसर से 2-4 इंच की दूरी पर अपने हाथ रख कर निकाल दें। और पास के इशारे के लिए अपना हाथ सेंसर से बहुत दूर रखें और फिर उसे पास ले जाकर हटा दें।
अब बटन को चालू करके इसे कलर सेंसिंग मोड में डालें और सेंसर के पास एक-एक करके लाल, नीली और हरी वस्तुओं को ले जाएँ। यह ऑब्जेक्ट के रंग को प्रिंट करेगा।