- ESP32 पावर मीटर के लिए आवश्यक सामग्री
- Arduino और ESP32 आधारित दक्षता मीटर - सर्किट आरेख
- Arduino और ESP32 आधारित दक्षता मीटर के लिए पीसीबी डिजाइन
- Arduino और ESP32 आधारित दक्षता मीटर - कोड
- Arduino और ESP32 आधारित दक्षता मीटर का परीक्षण
- इसके अलावा संवर्द्धन
हम सभी एक बुनियादी वोल्टमीटर, एमीटर, और वाटमीटर से अवगत हैं, तीन बुनियादी चीजें जो आपको किसी भी इलेक्ट्रॉनिक प्रोजेक्ट या सर्किट पर मानों को मापने की आवश्यकता हैं। मल्टीमीटर की मदद से वोल्टेज और करंट को मापना शुरू करने का एक अच्छा तरीका हो सकता है, लेकिन सर्किट की टेस्टिंग के दौरान सबसे बड़ी समस्या जो मुझे आती है, वह है बिजली की क्षमता को मापना । तो, आज हम Arduino और ESP32 आधारित दक्षता मीटर का निर्माण करके उस समस्या को हल करेंगे जो इनपुट वोल्टेज, इनपुट करंट, आउटपुट वोल्टेज और आउटपुट करंट को माप सकते हैं। इसलिए, यह एक ही समय में इनपुट पावर और आउटपुट पावर को माप सकता है, और इन मूल्यों के साथ, हम दक्षता को आसानी से माप सकते हैं। पहले, हमने अपने Arduino आधारित वाटमीटर प्रोजेक्ट में भी कुछ ऐसा ही किया है, लेकिन यहाँ हम इनपुट पावर और आउटपुट पावर दोनों को मापेंगे बिजली दक्षता की गणना करें ।
नौकरी के लिए चार मीटर खरीदने के बजाय, हम सभी चार मीटर की क्षमताओं को एक में शामिल करके इस समस्या को हल करने में सक्षम होंगे। अपने डिजिटल मीटर का निर्माण न केवल लागत को कम करता है, बल्कि आपको उन्नयन और सुधार के लिए एक wiggle कमरा भी देता है। जैसा कि हम इस परियोजना के निर्माण के लिए एक ESP32 का उपयोग कर रहे हैं, हम आसानी से इस मीटर को IoT सक्षम कर सकते हैं और वेब पर डेटा लॉग कर सकते हैं, जो कि भविष्य की परियोजना के लिए विषय है। सभी बुनियादी बातों को मंजूरी दे दी है, चलो सही में मिलता है।
नोट: यह बिजली मीटर डीसी सर्किट के लिए डिज़ाइन किया गया है। यदि आप एसी विद्युत क्षमता की गणना करने के लिए एसी करंट को मापना चाह रहे हैं तो आप IoT आधारित विद्युत ऊर्जा मीटर और प्रीपेड ऊर्जा मीटर परियोजनाओं की जांच कर सकते हैं।
ESP32 पावर मीटर के लिए आवश्यक सामग्री
नीचे दी गई छवि सर्किट बनाने के लिए उपयोग की जाने वाली सामग्रियों को दिखाती है। जैसा कि यह बहुत सामान्य घटकों के साथ बनाया गया है, आपको अपने स्थानीय शौक स्टोर में सूचीबद्ध सभी सामग्रियों को खोजने में सक्षम होना चाहिए।
मैंने आवश्यक मात्रा के साथ नीचे के घटकों को भी सूचीबद्ध किया है। यदि आप स्वयं सर्किट का निर्माण कर रहे हैं, तो नीचे दी गई सूची से सभी सामग्रियों को प्राप्त करने की अत्यधिक अनुशंसा की जाती है।
- ईएसपी 32 बोर्ड - 1
- 128X64 OLED - 1
- ACS712-20 आईसी - 2
- डीसी बैरल जैक - 1
- 100uF संधारित्र - 2
- 104 पीएफ - 2
- 102 पीएफ - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6.8K, 1% - 2
Arduino और ESP32 आधारित दक्षता मीटर - सर्किट आरेख
Arduino और ESP32 आधारित दक्षता मीटर के लिए योजनाबद्ध नीचे दिखाया गया है। इस सर्किट को बनाना बहुत सरल है और सामान्य घटकों का उपयोग करता है।
सर्किट का संचालन बहुत सरल है। हम इस परियोजना में वोल्टेज और वर्तमान को मापेंगे लेकिन एक अनोखे तरीके से। हम इनपुट और आउटपुट दोनों के लिए वोल्टेज और करंट को माप रहे हैं, इसलिए हम सर्किट की दक्षता देख सकते हैं। यह कुछ परियोजनाओं के लिए बहुत काम आता है। एक उदाहरण डीसी से डीसी कनवर्टर हो सकता है जहां दक्षता माप अनिवार्य हो जाता है। इन सर्किट के काम करने का तरीका नीचे वर्णित है।
ACS712 करंट सेंसर IC:
जैसा कि आप ऊपर चित्र में देख सकते हैं, हम वर्तमान को मापने के लिए ACS712 करंट सेंसर IC का उपयोग कर रहे हैं । यह एक बहुत ही दिलचस्प आईसी है क्योंकि यह वर्तमान को मापने के लिए हॉल-इफेक्ट का उपयोग करता है, इस आईसी के तीन वेरिएंट हैं जो बाज़ार में पाए जा सकते हैं f (या 5A, 20A और 30A)। हम इसके 20A संस्करण का उपयोग कर रहे हैं और इसे ACS712-20 के रूप में लेबल किया गया है।
ACS712 डेटाशीट सुचारू रूप से संचालित करने के लिए 4.5 - 5.5 की वोल्टेज रेंज की सिफारिश करता है। और जैसा कि हम एक ESP32 के साथ वर्तमान को मापने जा रहे हैं, यह केवल 3.3V सहिष्णु है, यही वजह है कि मैंने ACS712 IC के आउटपुट वोल्टेज को नीचे लाने के लिए दो 10K प्रतिरोधों के साथ एक वोल्टेज विभक्त का उपयोग किया है। जब कोई करंट IC के माध्यम से प्रवाहित नहीं होता है, तो यह 2.5V को आउटपुट करता है, और जब IC के माध्यम से कुछ करंट प्रवाहित होता है, तो यह या तो वोल्टेज को कम करता है या वर्तमान प्रवाह दिशा के आधार पर वोल्टेज को बढ़ाता है। इनपुट और आउटपुट करंट को मापने के लिए हमने इनमें से दो IC का उपयोग किया है। हमारे पिछले प्रोजेक्ट (नीचे) देखें जिसमें हमने इस ACS712 सेंसर का इस्तेमाल किया था।
- Arduino और ESP8266 वाई-फाई मॉड्यूल का उपयोग करके IoT आधारित विद्युत ऊर्जा मीटर
- डिजिटल माइक्रोमीटर सर्किट PIC माइक्रोकंट्रोलर और ACS712 का उपयोग कर
जहां हमने इन सेंसरों के काम पर विस्तार से चर्चा की। यदि आप इन सेंसरों के बारे में अधिक जानना चाहते हैं, तो आप इसकी जांच कर सकते हैं।
वोल्टेज विभक्त:
इनपुट और आउटपुट वोल्टेज को मापने के लिए, हमारे पास इनपुट और सर्किट के आउटपुट पक्ष पर दो वोल्टेज डिवाइडर हैं । सर्किट जो अधिकतम वोल्टेज माप सकता है वह 35V है, लेकिन वोल्टेज विभक्त के लिए प्रतिरोधक मानों को बदलकर इसे आसानी से बदला जा सकता है।
वोल्टेज नियामक:
ESP32, OLED और ACS712 ICs को पावर देने के लिए एक सामान्य LM7805 वोल्टेज रेगुलेटर का उपयोग किया जाता है। जैसा कि हम इसे काफी साफ-सुथरी शक्ति के साथ बढ़ा रहे हैं, कोई भी डिकम्पलिंग कैपेसिटर का उपयोग नहीं किया जाता है, लेकिन हमने आईसी को स्थिर करने के लिए इनपुट और आउटपुट दोनों पर 100uF कैपेसिटर का उपयोग किया है।
ESP32 IC और OLED डिस्प्ले:
हमने मुख्य प्रोसेसर के रूप में एक ईएसपी 32 का उपयोग किया है, जो सभी रीडिंग, गणना, इनपुट और आउटपुट के लिए जिम्मेदार है। साथ ही, हमने मूल्यों को जानने के लिए 128X64 OLED डिस्प्ले का उपयोग किया है।
Arduino और ESP32 आधारित दक्षता मीटर के लिए पीसीबी डिजाइन
हमारे Arduino और ESP32 आधारित दक्षता मीटर के लिए पीसीबी को एक तरफा बोर्ड पर डिज़ाइन किया गया है। मैंने अपने PCB को डिजाइन करने के लिए ईगल का उपयोग किया है लेकिन आप अपनी पसंद के किसी भी डिजाइन सॉफ्टवेयर का उपयोग कर सकते हैं। मेरे बोर्ड डिज़ाइन की 2D छवि नीचे दिखाई गई है।
सभी घटकों के बीच उचित ग्राउंड कनेक्शन बनाने के लिए पर्याप्त ग्राउंड ट्रेस का उपयोग किया जाता है। इसके अलावा, हमने शोर को कम करने और दक्षता में सुधार करने के लिए उचित 5V और 3.3V निशान का उपयोग करना सुनिश्चित किया।
- डाउनलोड पीसीबी डिजाइन और GERBER फ़ाइलें Arduino और ESP32 आधारित दक्षता मीटर
हस्तनिर्मित पीसीबी:
सुविधा और परीक्षण के लिए, मैंने पीसीबी का अपना हस्तनिर्मित संस्करण बनाया और इसे नीचे दिखाया गया है। पहले संस्करण में, मैंने कुछ गलतियाँ कीं, जिन्हें मैंने कुछ जम्पर तारों का उपयोग करके ठीक किया। लेकिन अंतिम संस्करण में, मैंने उन को ठीक किया, आप बस फाइलों को डाउनलोड कर सकते हैं और उनका उपयोग कर सकते हैं।
Arduino और ESP32 आधारित दक्षता मीटर - कोड
अब, जब हमें चीजों के हार्डवेयर पक्ष की अच्छी समझ है, तो हम Arduino IDE खोल सकते हैं और अपनी कोडिंग शुरू कर सकते हैं। कोड का उद्देश्य ESP32 बोर्ड के पिन 35 और 33 से एनालॉग वोल्टेज को पढ़ना है। इसके अलावा, हम 32 से वोल्टेज पढ़ते हैं, और 34 पिन जो वर्तमान मूल्य है। एक बार जब हम ऐसा कर लेते हैं, तो हम उन लोगों को इनपुट पावर और आउटपुट पावर प्राप्त करने के लिए गुणा कर सकते हैं, और इसे दक्षता सूत्र पर डाल सकते हैं, हम दक्षता प्राप्त कर सकते हैं।
अंत में, हम इसे एलसीडी स्क्रीन पर प्रदर्शित करते हैं। ऐसा करने का पूरा कार्यक्रम अंत में दिया गया है, जिसका उपयोग ऊपर चर्चा किए गए हार्डवेयर के लिए किया जा सकता है। इसके अलावा, कोड को छोटे स्निपेट में विभाजित किया गया है और समझाया गया है।
हम एक 128x64 OLED प्रदर्शन का उपयोग कर रहे हैं, हम की जरूरत है Adafruit_GFX पुस्तकालय और Adafruit_SSD1306 पुस्तकालय प्रदर्शन के साथ संवाद करने के लिए। आप दोनों को Arduino के डिफ़ॉल्ट बोर्ड मैनेजर टर्मिनल से डाउनलोड कर सकते हैं; यदि आप बोर्ड मैनेजर के हिस्से के साथ कोई समस्या रखते हैं, तो आप इसके संबंधित GitHub रिपॉजिटरी से लाइब्रेरियों को डाउनलोड और शामिल कर सकते हैं, जो नीचे दिया गया है।
- Adafruit_GFX लाइब्रेरी डाउनलोड करें
- Adafruit_SSD1306 लाइब्रेरी डाउनलोड करें
हमेशा की तरह, हम सभी आवश्यक पुस्तकालयों को शामिल करके अपना कोड शुरू करते हैं। फिर हम सभी आवश्यक पिन और चर को परिभाषित करते हैं, जो नीचे दिखाए गए हैं।
#शामिल
SCREEN_WIDTH और SCREEN_HEIGHT परिभाषाओं स्क्रीन आकार परिभाषित किया जाता है। आगे हमने सभी आवश्यक पिनों को परिभाषित किया है, जिसके माध्यम से हम वोल्टेज और वर्तमान को मापने जा रहे हैं। अगला, हमने प्रतिरोधक मानों को परिभाषित किया है जो हार्डवेयर में उपयोग किए जाते हैं जैसा कि आप योजनाबद्ध से देख सकते हैं। यदि आपके पास ये मान नहीं हैं या यदि आप मीटर की श्रेणी बदलना चाहते हैं, तो आप उन मानों को बदल सकते हैं, कोड ठीक काम करेगा।
जैसा कि हम करंट को मापने के लिए ACS712 का उपयोग कर रहे हैं, हमें वोल्टेज से करंट की गणना करने के लिए mVperAmp वैल्यू की आवश्यकता होती है । जैसा कि मैं एक 20A ACS712 मॉड्यूल का उपयोग कर रहा हूं, एमवी / ए मूल्य 100 है जैसा कि डेटाशीट में दिया गया है। लेकिन क्योंकि हम एक ESP32 और एक वोल्टेज विभक्त का उपयोग कर रहे हैं, हमारे पास आधा मान होगा जो 50 है, और इसीलिए हमने mV / AMP मान में रखा है।
ACSoffset वोल्टेज से करंट की गणना के लिए आवश्यक ऑफसेट है। ACS712 IC के 5V से संचालित होने के कारण, ऑफसेट वोल्टेज 2.5V है। लेकिन जैसा कि हम एक वोल्टेज विभक्त का उपयोग कर रहे हैं, यह घटकर 1.25V हो जाता है। आप पहले से ही ESP32 के भद्दे एडीसी को जान सकते हैं, इसलिए मुझे 1136 मूल्य का उपयोग करना पड़ा। यदि आप अंशांकन मुद्दे कर रहे हैं, तो आप मानों को बदल सकते हैं और एडीसी के लिए क्षतिपूर्ति कर सकते हैं।
अंत में, हम Adafruit_SSD1306 वर्ग की डिस्प्ले ऑब्जेक्ट बनाकर और स्क्रीन की चौड़ाई, ऊंचाई, I 2 C कॉन्फ़िगरेशन को पास करके, और अंतिम -1 पैरामीटर का उपयोग रीसेट कार्यक्षमता को परिभाषित करने के लिए इस अनुभाग को पूरा करते हैं। यदि आपके प्रदर्शन में बाहरी रीसेट पिन नहीं है (जो निश्चित रूप से मेरे प्रदर्शन के लिए है), तो आपको अंतिम तर्क के लिए -1 का उपयोग करना होगा।
शून्य सेटअप () {Serial.begin (115200); अगर (प्रदर्शन.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// पता 0x3D 128x64 Serial.println के लिए (F ("SSD1306 आवंटन विफल)); के लिये (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); देरी (100); }
अगला, हमारे पास हमारा सेटअप () अनुभाग है। इस खंड में, हम डिबगिंग के लिए सीरियल को सक्षम करते हैं, हम यह जांचते हैं कि I 2 C डिस्प्ले उपलब्ध है या नहीं, प्रदर्शन ऑब्जेक्ट की शुरुआत विधि की मदद से है। इसके अलावा, हम I 2 C पता सेट करते हैं । अगला, हम क्लियरडिस्प्ले () विधि के साथ डिस्प्ले को साफ करते हैं । इसके अलावा, हम सेटरोटेशन विधि के साथ डिस्प्ले को घुमाते हैं, यह इसलिए है क्योंकि मैंने अपने पीसीबी डिजाइन को गड़बड़ कर दिया है। अगला, हम कार्यों को प्रभावी करने के लिए 100 एमएस की देरी करते हैं। एक बार ऐसा हो जाने के बाद, हम अब लूप फ़ंक्शन पर जा सकते हैं। लेकिन लूप फ़ंक्शन पर आगे बढ़ने से पहले, हमें दो अन्य कार्यों पर चर्चा करने की आवश्यकता है, जो return_voltage_value () , और return_current_value () हैं ।
double return_voltage_value (int pin_no) {डबल tmp = 0; डबल ADCVoltage = 0; डबल इनपुट वोल्टेज = 0; डबल एवीजी = 0; for (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((avg * 3.3) / (4095)) + 0.138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // GND रिटर्न इनपुट वोल्टेज में वोल्टेज की गणना के लिए सूत्र; }
Return_voltage_value () समारोह वोल्टेज एडीसी में आने को मापने के लिए प्रयोग किया जाता है, और यह एक तर्क के रूप pin_no लेता है। इस फ़ंक्शन में, हम कुछ चरों की घोषणा करके शुरू करते हैं, जो tmp, ADCVoltage, inputVoltage और avg हैं। Tmp वैरिएबल का उपयोग अस्थायी ADC मान को संग्रहीत करने के लिए किया जाता है, जो हम analogRead () फ़ंक्शन से प्राप्त करते हैं, फिर हम इसे लूप के लिए 150 बार औसत करते हैं, और हम एवीजी नामक वैरिएबल को मान देते हैं। हम तब दिए गए सूत्र से ADCVoltage की गणना करते हैं, अंत में, हम इनपुट वोल्टेज की गणना करते हैं और मान लौटाते हैं। +0.138 आपके द्वारा देखा जाने वाला अंशांकन मूल्य है जो मैंने वोल्टेज स्तर को कैलिब्रेट करने के लिए उपयोग किया था, यदि आपको कोई त्रुटि मिल रही है तो इस मान के साथ खेलें।
double return_current_value (int pin_no) {डबल tmp = 0; डबल एवीजी = 0; डबल ADCVoltage = 0; डबल एम्प्स = 0; for (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((avg / 4095.0) * 3300); // आपको एमवीपीएस हो जाता है = ((ADCVoltage - ACSoffset) / mVperAmp); वापसी Amps; }
अगला, हमारे पास return_current_value () फ़ंक्शन है। यह फ़ंक्शन तर्क के रूप में pin_no भी लेता है। इस फ़ंक्शन में भी हमारे पास चार चर हैं। tmp, avg, ADCVoltage, और Amps
अगला, हम एनालॉग रीड () फ़ंक्शन के साथ पिन पढ़ते हैं और इसे 150 बार औसत करते हैं, अगले हम ADCvoltage की गणना करने के लिए सूत्र का उपयोग करते हैं, इसके साथ ही हम वर्तमान की गणना करते हैं और हम मान लौटाते हैं। उस के साथ, हम लूप सेक्शन पर जा सकते हैं।
शून्य लूप () {फ्लोट इनपुट_वोल्टेज = एब्स (रिटर्न_वोल्टेज_वेल्यू (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (रिटर्न_क्रांति_वल्यू (INPUT_CURRENT_SENSE_PIN)); float output_voltage = abs (रिटर्न_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); input_current = input_current - 0.025; Serial.print ("इनपुट वोल्टेज:"); Serial.print (input_voltage); Serial.print ("- इनपुट वर्तमान:"); Serial.print (input_current); Serial.print ("- आउटपुट वोल्टेज:"); Serial.print (output_voltage); Serial.print ("- आउटपुट वर्तमान:"); Serial.println (output_current); देरी (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); प्रदर्शित करें।प्रिंट ("वी"); }
हम सभी चार चर में, कुछ फ्लोट चर को घोषित और परिभाषित करके लूप अनुभाग शुरू करते हैं। हम संबंधित कार्यों को कॉल करते हैं, pin_no को एक तर्क के रूप में, क्योंकि ACS712 मॉड्यूल नकारात्मक में वर्तमान मान लौटा सकता है। हम नकारात्मक मूल्य को सकारात्मक बनाने के लिए गणित पुस्तकालय के एब्स () फ़ंक्शन का उपयोग करते हैं । इसके बाद, हम डिबगिंग के सभी मूल्यों को क्रमबद्ध करते हैं। अगला, हम प्रदर्शन को साफ करते हैं, कर्सर सेट करते हैं, और मूल्यों को प्रिंट करते हैं। हम प्रदर्शन में दिखाए गए सभी पात्रों के लिए ऐसा करते हैं। जो लूप फ़ंक्शन के अंत और कार्यक्रम को चिह्नित करता है।
Arduino और ESP32 आधारित दक्षता मीटर का परीक्षण
जैसा कि आप ऊपर दिए गए चित्र में मेरा परीक्षण सेटअप देख सकते हैं। मेरे पास इनपुट के रूप में मेरा 30V ट्रांसफार्मर है, और मेरे पास परीक्षण बोर्ड के लिए मेरा मीटर हुक है। मैं एक LM2596 आधारित हिरन कनवर्टर बोर्ड का उपयोग कर रहा हूं और लोड के लिए और मैं समानांतर में तीन 10 ओम प्रतिरोधों का उपयोग कर रहा हूं।
जैसा कि आप ऊपर की छवि में देख सकते हैं, मैंने इनपुट और आउटपुट वोल्टेज की जांच करने के लिए मल्टी-मीटर से कनेक्ट किया है। ट्रांसफार्मर लगभग 32V का उत्पादन करता है और हिरन कनवर्टर का आउटपुट 3.95V है।
यहां की छवि मेरी दक्षता मीटर और मल्टीमीटर द्वारा मापी गई आउटपुट को दिखाती है। जैसा कि आप देख सकते हैं, मल्टीमीटर शो.97 एम्प्स, और यदि आप थोड़ा सा ज़ूम करते हैं, तो यह 1.0A दिखाता है, यह ACS712 मॉड्यूल में मौजूद गैर-रैखिकता के कारण थोड़ा बंद है, लेकिन यह हमारे उद्देश्य को पूरा करता है। विस्तृत विवरण और परीक्षण के लिए, आप हमारे वीडियो अनुभाग में वीडियो देख सकते हैं।
इसके अलावा संवर्द्धन
इस प्रदर्शन के लिए, सर्किट एक हस्तनिर्मित पीसीबी पर बनाया गया है, लेकिन सर्किट आसानी से एक अच्छी गुणवत्ता वाले पीसीबी में बनाया जा सकता है। मेरे प्रयोग में, पीसीबी का आकार घटक आकार के कारण वास्तव में बड़ा है, लेकिन उत्पादन वातावरण में, सस्ते एसएमडी घटकों का उपयोग करके इसे कम किया जा सकता है। सर्किट में कोई अंतर्निहित सुरक्षा सुविधा नहीं है, इसलिए एक सुरक्षा सर्किट सहित सर्किट के समग्र सुरक्षा पहलू में सुधार होगा। इसके अलावा, कोड लिखते समय, मैंने देखा कि ESP32 का एडीसी उतना महान नहीं है। ADS1115 मॉड्यूल की तरह एक बाहरी एडीसी को शामिल करने से समग्र स्थिरता और सटीकता में वृद्धि होगी।
मुझे उम्मीद है कि आपको यह लेख पसंद आया होगा और इसमें से कुछ नया सीखा जाएगा। यदि आपको कोई संदेह है, तो आप नीचे टिप्पणी में पूछ सकते हैं या विस्तृत चर्चा के लिए हमारे मंचों का उपयोग कर सकते हैं।