बिजली की खपत एक उपकरण के लिए एक महत्वपूर्ण मुद्दा है जो बिना बंद किए लंबे समय तक लगातार चल रहा है। तो इस समस्या को दूर करने के लिए लगभग हर कंट्रोलर स्लीप मोड के साथ आता है, जो डेवलपर्स को इष्टतम बिजली की खपत के लिए इलेक्ट्रॉनिक गैजेट्स डिजाइन करने में मदद करता है। स्लीप मोड डिवाइस को बिजली की बचत मोड में अप्रयुक्त मॉड्यूल को बंद करके रखता है।
इससे पहले हमने पावर सेविंग के लिए ESP8266 में डीप-स्लीप मोड के बारे में बताया है। आज हम Arduino Sleep Modes के बारे में जानेंगे और Ammeter का उपयोग करके बिजली की खपत को प्रदर्शित करेंगे। एक Arduino Sleep मोड को Arduino Power Save Mode या Arduino Standby मोड के रूप में भी जाना जाता है ।
अरुडिनो स्लीप मोड्स
स्लीप मोड्स उपयोगकर्ता को माइक्रोकंट्रोलर में अप्रयुक्त मॉड्यूल को रोकने या बंद करने की अनुमति देते हैं जो बिजली की खपत को काफी कम करते हैं। Arduino UNO, Arduino नैनो और प्रो-मिनी ATmega328P के साथ आता है और इसमें एक ब्राउन-आउट डिटेक्टर (BOD) है जो नींद मोड के समय आपूर्ति वोल्टेज की निगरानी करता है।
ATmega328P में छह स्लीप मोड हैं:
किसी भी स्लीप मोड में प्रवेश करने के लिए हमें स्लीप मोड कंट्रोल रजिस्टर (SMCR.SE) में स्लीप बिट को सक्षम करना होगा। फिर स्लीप मोड सिलेक्ट बिट्स आइडल, एडीसी शोर में कमी, पावर-डाउन, पावर-सेव, स्टैंडबाय और एक्सटर्नल स्टैंडबाय के बीच स्लीप मोड का चयन करें।
एक आंतरिक या बाहरी Arduino बाधित होता है या एक रीसेट स्लीप मोड से Arduino को जगा सकता है।
निष्क्रिय अंदाज़
निष्क्रिय नींद मोड में प्रवेश करने के लिए, नियंत्रक '000' के एसएम बिट्स लिखें। यह मोड CPU को बंद कर देता है लेकिन SPI, 2-वायर सीरियल इंटरफ़ेस, USART, वॉचडॉग, काउंटर, एनालॉग तुलनित्र को संचालित करने की अनुमति देता है। आइडल मोड मूल रूप से CLK CPU और CLK FLASH को रोकता है । बाहरी या आंतरिक रुकावट का उपयोग करके किसी भी समय Arduino को जगाया जा सकता है।
निष्क्रिय नींद मोड के लिए Arduino कोड:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Arduino में विभिन्न कम बिजली मोड सेट करने के लिए एक पुस्तकालय है। इसलिए पहले दिए गए लिंक से लाइब्रेरी को डाउनलोड करें और इंस्टॉल करें और ऊपर दिए गए कोड का उपयोग करके Idle Sleep Mode में Arduino डालें। उपरोक्त कोड का उपयोग करके, Arduino आठ सेकंड की नींद में चला जाएगा और स्वचालित रूप से जाग जाएगा। जैसा कि आप कोड में देख सकते हैं कि निष्क्रिय मोड सभी टाइमर, SPI, USART और TWI (2-वायर इंटरफ़ेस) को बंद कर देता है।
एडीसी शोर में कमी मोड
इस स्लीप मोड का उपयोग करने के लिए एसएम बिट को '001' पर लिखें। मोड सीपीयू को रोकता है लेकिन एडीसी, बाहरी व्यवधान, USART, 2-वायर सीरियल इंटरफ़ेस, वॉचडॉग, और काउंटर को संचालित करने की अनुमति देता है। एडीसी शोर न्यूनीकरण मोड मूल रूप से सीएलके सीपीयू, सीएलके आई / ओ और सीएलके फ्लैश को रोकता है । हम निम्नलिखित तरीकों से एडीसी शोर कटौती मोड से नियंत्रक को जगा सकते हैं:
- बाहरी रीसेट
- वॉचडॉग सिस्टम रीसेट
- प्रहरी बाधा
- ब्राउन-आउट रीसेट
- 2-वायर सीरियल इंटरफ़ेस एड्रेस मैच
- INT पर बाहरी स्तर का व्यवधान
- पिन परिवर्तन रुकावट
- टाइमर / काउंटर व्यवधान
- SPM / EEPROM तैयार व्यवधान
पावर-डाउन मोड
पावर-डाउन मोड सभी उत्पन्न घड़ियों को रोकता है और केवल एसिंक्रोनस मॉड्यूल के संचालन की अनुमति देता है। एसएम बिट्स को '010' पर लिखकर इसे सक्षम किया जा सकता है। इस मोड में, बाहरी थरथरानवाला बंद हो जाता है, लेकिन 2-तार सीरियल इंटरफ़ेस, वॉचडॉग और बाहरी रुकावट का संचालन जारी है। इसे नीचे दी गई विधि में से किसी एक के द्वारा अक्षम किया जा सकता है:
- बाहरी रीसेट
- वॉचडॉग सिस्टम रीसेट
- प्रहरी बाधा
- ब्राउन-आउट रीसेट
- 2-वायर सीरियल इंटरफ़ेस एड्रेस मैच
- INT पर बाहरी स्तर का व्यवधान
- पिन परिवर्तन रुकावट
पावर-डाउन आवधिक मोड के लिए Arduino कोड:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
कोड का उपयोग पावर-डाउन मोड को चालू करने के लिए किया जाता है। उपरोक्त कोड का उपयोग करके, Arduino आठ सेकंड की नींद में चला जाएगा और स्वचालित रूप से जाग जाएगा।
हम पावर-डाउन मोड का उपयोग एक रुकावट के साथ भी कर सकते हैं, जहां Arduino नींद में जाएगा, लेकिन केवल तभी जागता है जब कोई बाहरी या आंतरिक व्यवधान प्रदान किया जाता है।
पावर-डाउन इंटरप्ट मोड के लिए Arduino कोड:
शून्य लूप () { // कम पर रुकावट को ट्रिगर करने के लिए जागने की अनुमति दें। संलग्नक (0, जगा, कम); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // जागो पिन पर बाहरी पिन व्यवधान को अक्षम करें। detachInterrupt (0); // यहाँ कुछ करें }
बैटरी बचाने की प्रणाली
पावर-सेव मोड में प्रवेश करने के लिए हमें एसएम पिन को '011' पर लिखना होगा। यह स्लीप मोड पावर-डाउन मोड के समान है, केवल एक अपवाद के साथ अर्थात यदि टाइमर / काउंटर सक्षम है, तो यह सोने के समय भी चालू स्थिति में रहेगा। टाइमर ओवरफ्लो का उपयोग करके डिवाइस को जगाया जा सकता है।
यदि आप समय / काउंटर का उपयोग नहीं कर रहे हैं, तो पावर-सेव मोड के बजाय पावर-डाउन मोड का उपयोग करने की अनुशंसा की जाती है।
स्टैंडबाई मोड
स्टैंडबाय मोड पावर-डाउन मोड के समान है, उनके बीच एकमात्र अंतर इस मोड में चलने वाले बाहरी ऑसिलेटर है। इस मोड को सक्षम करने के लिए SM पिन को '110' पर लिखें।
विस्तारित स्टैंडबाई मोड
यह मोड केवल एक अपवाद के साथ पावर-सेव मोड के समान है जो ऑसिलेटर चालू रहता है। जब हम SM पिन को '111' पर लिखते हैं, तो डिवाइस विस्तारित स्टैंडबाई मोड में प्रवेश करेगा। विस्तारित स्टैंडबाई मोड से जागने के लिए डिवाइस छह घड़ी चक्र लेगा।
सर्किट आरेख के अनुसार सर्किट को जोड़ने के बाद, इस परियोजना की आवश्यकताएं हैं। Arduino IDE का उपयोग करके Arduino में स्लीप मोड कोड अपलोड करें। Arduino निष्क्रिय नींद मोड में प्रवेश करेगा। फिर यूएसबी एमीटर में वर्तमान खपत की जांच करें। इसके अलावा, आप उसी के लिए क्लैंप मीटर का उपयोग भी कर सकते हैं।
अवयव आवश्यक
- Arduino UNO
- DHT11 तापमान और आर्द्रता सेंसर
- USB Ammeter
- ब्रेड बोर्ड
- तारों को जोड़ना
Arduino के साथ DHT11 का उपयोग करने के बारे में अधिक जानने के लिए, लिंक का अनुसरण करें। यहाँ हम नींद मोड में Arduino द्वारा खपत वोल्टेज को मापने के लिए USB Ammeter का उपयोग कर रहे हैं।
USB Ammeter
यूएसबी एमीटर एक प्लग एंड प्ले डिवाइस है जिसका उपयोग किसी भी यूएसबी पोर्ट से वोल्टेज और करंट को मापने के लिए किया जाता है। डोंगल USB पॉवर सप्लाई (कंप्यूटर USB पोर्ट) और USB डिवाइस (Arduino) के बीच प्लग करता है। इस डिवाइस में पावर पिन के साथ 0.05ohm रेज़िस्टेंट-इन-लाइन है जिसके माध्यम से यह खींची गई वर्तमान की वैल्यू को मापता है। डिवाइस चार सात सेगमेंट डिस्प्ले के साथ आता है, जो तुरंत संलग्न डिवाइस द्वारा चालू और वोल्टेज के मूल्यों को प्रदर्शित करता है। ये मान हर तीन सेकंड के अंतराल में फ़्लिप करते हैं।
विशिष्टता:
- ऑपरेटिंग वोल्टेज रेंज: 3.5 वी से 7 वी
- अधिकतम वर्तमान रेटिंग: 3A
- कॉम्पैक्ट आकार, ले जाने के लिए आसान है
- किसी बाहरी आपूर्ति की जरूरत नहीं
आवेदन:
- USB उपकरणों का परीक्षण
- लोड स्तरों की जाँच करना
- डिबगिंग बैटरी चार्जर
- कारखानों, इलेक्ट्रॉनिक्स उत्पादों और व्यक्तिगत उपयोग
सर्किट आरेख
Arduino डीप स्लीप मोड को प्रदर्शित करने के लिए उपरोक्त सेटअप में, Arduino को USB एमीटर में प्लग किया जाता है। फिर यूएसबी एमीटर को लैपटॉप के यूएसबी पोर्ट में प्लग किया जाता है। DHT11 सेंसर का डेटा पिन Arduino के D2 पिन से जुड़ा है।
कोड स्पष्टीकरण
वीडियो के साथ प्रोजेक्ट के लिए पूरा कोड अंत में दिया गया है।
DHT11 सेंसर और के लिए पुस्तकालय शामिल करके कोड शुरू LowPower पुस्तकालय। लो पावर लाइब्रेरी को डाउनलोड करने के लिए लिंक का अनुसरण करें। फिर हमने Arduino पिन नंबर को परिभाषित किया है जिससे DHT11 का डेटा पिन जुड़ा हुआ है और DHT ऑब्जेक्ट बनाया गया है।
#शामिल
में शून्य सेटअप समारोह, हम का उपयोग करके धारावाहिक संचार शुरू किया है serial.begin (9600), यहां 9600 बॉड दर है। हम स्लीप मोड के लिए एक संकेतक के रूप में अरुडिनो के अंतर्निहित एलईडी का उपयोग कर रहे हैं। इसलिए, हमने पिन को आउटपुट के रूप में सेट किया है, और डिजिटल राइट कम है।
शून्य सेटअप () { Serial.begin (9600); पिनमोड (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
में शून्य पाश समारोह, हम सेंसर से तापमान और आर्द्रता डेटा में निर्मित एलईडी उच्च और पढ़ने बना रहे हैं। यहाँ, DHT.read11 (); कमांड सेंसर से डेटा पढ़ रहा है। एक बार डेटा की गणना करने के बाद, हम इसे किसी भी चर में सहेजकर मूल्यों की जांच कर सकते हैं। यहाँ, हमने दो फ्लोट टाइप वैरिएबल 't' और 'h' लिए हैं । इसलिए, धारावाहिक मॉनीटर पर तापमान और आर्द्रता का डेटा क्रमिक रूप से मुद्रित होता है।
शून्य लूप () { Serial.println ("DHT11 से डेटा प्राप्त करें"); देरी (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 फ्लोट टी = DHT.temper; float h = DHT.humidity; सीरियल.प्रिंट ("तापमान ="); सीरियल.प्रिंट (टी); सिरियल.प्रिंट ("सी -"); सीरियल.प्रिंट ("आर्द्रता ="); सिरियल.प्रिंट (एच); सिरियल.प्रिंट ("%"); देरी (2000);
स्लीप मोड को सक्षम करने से पहले हम "Arduino: - मैं एक नैप के लिए जा रहा हूं" प्रिंट कर रहा हूं और बिल्ट इन एलईडी लो। उसके बाद कोड में नीचे वर्णित कमांड का उपयोग करके Arduino स्लीप मोड को सक्षम किया गया है।
नीचे कोड Arduino के निष्क्रिय आवधिक नींद मोड को सक्षम करता है और आठ सेकंड की नींद देता है। यह ADC, टाइमर, SPI, USART, 2-वायर इंटरफ़ेस को OFF स्थिति में बदल देता है।
फिर यह 8 सेकंड के बाद नींद से स्वचालित रूप से Arduino उठता है और "Arduino: - Hey I just Woke up" प्रिंट करता है ।
Serial.println ("Arduino: - मैं एक नेप के लिए जा रहा हूं"); देरी (1000); digitalWrite (LED_BUILTIN, LOW); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println ("Arduino: - अरे मैं अभी उठा हूं"); सीरीयल.प्रिंट (""); देरी (2000); }
तो इस कोड का उपयोग करके Arduino केवल एक मिनट में 24 सेकंड के लिए जाग जाएगा और बाकी 36 सेकंड के लिए स्लीप मोड में रहेगा, जो Arduino मौसम स्टेशन द्वारा खपत की गई शक्ति को काफी कम कर देता है।
इसलिए, यदि हम स्लीप मोड के साथ Arduino का उपयोग करते हैं, तो हम लगभग डिवाइस रनटाइम को दोगुना कर सकते हैं ।