विषयसूची:

Arduino सटीक और सटीक वोल्ट मीटर (0-90V DC): 3 चरण
Arduino सटीक और सटीक वोल्ट मीटर (0-90V DC): 3 चरण

वीडियो: Arduino सटीक और सटीक वोल्ट मीटर (0-90V DC): 3 चरण

वीडियो: Arduino सटीक और सटीक वोल्ट मीटर (0-90V DC): 3 चरण
वीडियो: Scullcom Hobby Electronics #30 - DROK DC to DC Converter Upgrade 2024, जुलाई
Anonim

इस निर्देशयोग्य में, मैंने एक Arduino नैनो का उपयोग करके सापेक्ष सटीकता और सटीकता के साथ उच्च वोल्टेज DC (0-90v) को मापने के लिए एक वाल्टमीटर बनाया है।

मेरे द्वारा लिए गए परीक्षण माप काफी सटीक थे, ज्यादातर एक मानक वोल्टमीटर (मैंने एस्ट्रो एआई DM6000AR का उपयोग किया) के साथ मापा वास्तविक वोल्टेज के 0.3v के भीतर। यह डिवाइस के मेरे इच्छित उपयोग के लिए काफी करीब है।

इसे संग्रहीत करने के लिए मैंने एक वोल्टेज संदर्भ (4.096v) और वोल्टेज विभक्त का उपयोग किया।

कोड पक्ष पर, मैंने निश्चित रूप से, Arduino नैनो के लिए "बाहरी संदर्भ" विकल्प और Arduino ट्यूटोरियल में "स्मूथिंग" उदाहरण का उपयोग किया।

आपूर्ति

1 एक्स अरुडिनो नैनो - लिंक

1 एक्स ओलेड डिस्प्ले (एसएसडी 1306) - लिंक

1 x 1/4W 1% प्रतिरोधक - 1k ओम - लिंक

1 x 1/4W 1% प्रतिरोधक - 220k ओम - लिंक

1 x 1/4W 1% प्रतिरोधक - 10k ओम - लिंक

1 x 4.096v LM4040DIZ-4.1 वोल्टेज संदर्भ - लिंक

ब्रेडबोर्ड और तार - लिंक

एस्ट्रो एआई DM6000AR - लिंक

यूएसबी पावर बैंक - लिंक

9वी बैटरी - लिंक

कैनेडियनविंटर्स अमेज़ॅन सर्विसेज एलएलसी एसोसिएट्स प्रोग्राम में एक भागीदार है, जो एक संबद्ध विज्ञापन कार्यक्रम है जो साइटों को Amazon.com और संबद्ध साइटों से लिंक करके फीस अर्जित करने का साधन प्रदान करने के लिए डिज़ाइन किया गया है। इन लिंक्स का उपयोग करके, एक अमेज़ॅन एसोसिएट के रूप में मैं योग्यता खरीद से कमाता हूं, भले ही आप कुछ और खरीदते हों-- और इसमें आपको कुछ भी खर्च नहीं करना पड़ेगा।

चरण 1: स्कीमैटिक्स

स्कीमैटिक्स
स्कीमैटिक्स
स्कीमैटिक्स
स्कीमैटिक्स

मैंने उपरोक्त योजना के अनुसार सभी भागों को जोड़ा। विशेष रूप से मैंने संकल्प खोने से बचने के लिए 4.096 वोल्टेज संदर्भ को 5v चिह्न के जितना संभव हो उतना करीब रहने के लिए चुना।

डेटाशीट के बाद, मैंने वोल्टेज संदर्भ के लिए 1K ओम रोकनेवाला चुना, भले ही एक अलग मूल्य का उपयोग किया जा सकता हो। संदर्भ के लिए वोल्टेज नैनो 5v पिन से आपूर्ति की जाती है।

सर्किट का विचार यह है कि मापा जाने वाला डीसी वोल्टेज वोल्टेज प्रतिरोधी के माध्यम से जाता है। स्केल किया गया वोल्टेज और फिर Arduino के एनालॉग पिन में सैंपल, स्मूथ, री-स्केल और ओएलईडी डिस्प्ले पर प्रदर्शित होने के लिए हो जाता है।

मैंने चीजों को सरल रखने की कोशिश की:)

चरण 2: कोड और प्रतिरोधी गणना

प्रतिरोधों के मूल्यों को चुना गया था क्योंकि यह सलाह दी जाती है (यदि मैं गलत नहीं हूं तो यह Arduino/Atmega डेटाशीट पर है) प्रतिबाधा को 10k ओम से नीचे रखने के लिए।

चीजों को सरल बनाने के लिए, मैंने एक स्प्रेडशीट बनाई है जो गणनाओं को स्वचालित करती है यदि आप विभिन्न प्रतिरोधक मानों का उपयोग करना चाहते हैं: Google शीट से लिंक करें

इस परियोजना के लिए मैंने जो कोड इस्तेमाल किया है वह यहां दिया गया है:

#शामिल

#शामिल U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (रोटेशन, [रीसेट]) फ्लोट वोल्टेज = 0; // वोल्टेज वैल्यू फ्लोट रैडजस्ट = 0.043459459 को स्टोर करने के लिए उपयोग किया जाता है; // वोल्टेज विभक्त कारक (R2 / R1 + R2) फ्लोट vbat = 0; // कैल्क्स के बाद अंतिम वोल्टेज- बैटरी फ्लोट का वोल्टेज Vref = 4.113; // वोल्टेज संदर्भ - वास्तविक मूल्य मापा जाता है। नाममात्र का मान 4.096v const int numReadings = 50; // पढ़ने के नमूनों की संख्या - अधिक चौरसाई के लिए वृद्धि। तेजी से पढ़ने के लिए कम करें। इंट रीडिंग [संख्या रीडिंग]; // एनालॉग इनपुट से रीडिंग int readIndex = 0; // वर्तमान पढ़ने का सूचकांक अहस्ताक्षरित लंबा कुल = 0; // चल रहा कुल इंट औसत = 0; // अहस्ताक्षरित लंबे पिछलेमिलिस = 0; // पिछली बार स्क्रीन अपडेट होने पर स्टोर होगा // स्थिरांक नहीं बदलेगा: कॉन्स्ट लॉन्ग इंटरवल = 50; // अंतराल जिस पर स्क्रीन रीफ्रेश करने के लिए (मिलीसेकंड) शून्य सेटअप (शून्य) {एनालॉग रेफरेंस (बाहरी); // संदर्भ वोल्टेज 4.096 के लिए AREF का उपयोग करें। मेरा संदर्भ वास्तविक वोल्टेज 4.113v u8g2.begin() है; के लिए (int thisReading = 0; thisReading = numReadings) {// … शुरुआत में लपेटें: readIndex = 0; } // औसत की गणना करें: औसत = (कुल / संख्या रीडिंग); वोल्टेज = औसत * (Vref / 1023.0); //4.13 Vref vbat = वोल्टेज/रेडजस्ट है; // मिलिस का उपयोग करके स्क्रीन रीफ्रेश के लिए देरी सेट करना अगर (currentMillis - पिछलामिलिस> = अंतराल) {// पिछली बार स्क्रीन को अपडेट किया गया था पिछलामिलिस = वर्तमान मिलिस; u8g2.clearBuffer (); // आंतरिक मेनरी को साफ़ करें // पैक वोल्टेज डिस्प्ले u8g2.setFont (u8g2_font_fub20_tr); // 20px फ़ॉन्ट u8g2.setCursor (1, 20); u8g2.प्रिंट (vbat, 2); u8g2.setFont (u8g2_font_8x13B_mr); // 10 पिक्सल फ़ॉन्ट u8g2.setCursor (76, 20); u8g2.print ("वोल्ट"); u8g2.setCursor (1, 40); u8g2.print ("कैनेडियन विंटर्स"); u8g2.setCursor (1, 60); u8g2.print ("सटीक वोल्टेज"); } u8g2.sendBuffer (); // आंतरिक मेमोरी को डिस्प्ले डिले में ट्रांसफर करें (1); }

कृपया ध्यान दें कि मैं Arduino कोडिंग के साथ थोड़ा कठोर हूं, इसलिए यदि आपको कोई गलती या कोड सुधारने का कोई तरीका मिलता है, तो मैं सुझावों के लिए खुला हूं:)

चरण 3: आइए इसका परीक्षण करें

आइए इसका परीक्षण करें!
आइए इसका परीक्षण करें!
आइए इसका परीक्षण करें!
आइए इसका परीक्षण करें!
आइए इसका परीक्षण करें!
आइए इसका परीक्षण करें!

इस वाल्टमीटर का परीक्षण करने के लिए मैंने 8x 9v बैटरी का उपयोग किया जो मुझे एक स्थानीय स्टोर पर मिली। मैं अपने इलेक्ट्रिक साइकिल बैटरी पैक पर वोल्टेज को मापने के लिए इस वोल्टमीटर का उपयोग करने की योजना बना रहा हूं (उनके पास कभी-कभी 72v वाले 24-60v से लेकर वोल्टेज होते हैं)।

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

मेरा लक्ष्य Oled/Arduino मीटर पर मेरे डिजिटल मल्टी मीटर से बहुत दूर वोल्टेज रीडिंग करना था। मैं +/- 0, 3v अधिकतम डेल्टा के लिए लक्ष्य बना रहा था। जैसा कि आप वीडियो से देख सकते हैं कि मैं माप के शीर्ष छोर को छोड़कर इसे संग्रहीत करने में सक्षम था।

मुझे आशा है कि आपको यह निर्देश अच्छा लगा होगा और मुझे अपने विचार बताएं!

सिफारिश की: