Arduino के साथ सटीक रूप से तापमान को मापने


10

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

पहले मैंने TMP36 का उपयोग करने की कोशिश की तापमान सेंसर । अभी तक यह पूरी तरह से विफल था। जबकि सेंसर खुद बहुत स्थिर प्रतीत होता है, मैं इसके वोल्टेज को सही तरीके से मापने का तरीका नहीं समझ सकता।

एनालॉग सेंसर के लिए अंतर्निहित 5 वी संदर्भ का उपयोग करना बिल्कुल भी काम नहीं कर रहा है - यहां तक ​​कि यूएसबी अरुडिनो के + 5 वी से संचालित वास्तव में + 4.8 वी (जो कुछ डिग्री द्वारा मापा तापमान में बदलाव करता है)। जब बोर्ड को बैटरी से संचालित किया जाता है, तो वोल्टेज लगभग 4V और मापा तापमान आकाश-रॉकेट से गिरता है। मैंने संदर्भ के रूप में बोर्ड से + 3.3 वी का उपयोग करने का भी प्रयास किया। यह तब अधिक स्थिर लगता है जब बोर्ड यूएसबी से संचालित होता है, लेकिन बैटरी बंद होने पर इसका वोल्टेज गिर जाता है।

क्या सेंसर आउटपुट वोल्टेज को मज़बूती से मापने का कोई और तरीका है?

दूसरे चरण के लिए मैं थर्मिस्टर्स का उपयोग करने की योजना बना रहा हूं। बस इन 20K थर्मिस्टर्स के एक जोड़े का आदेश दिया

जो मैं समझता हूं, उन्हें सटीक रूप से मापना आसान होना चाहिए अगर मैं वोल्टेज विभक्त का निर्माण करता हूं और एडीसी के लिए संदर्भ वोल्टेज के रूप में V_in का उपयोग करता हूं।

उनके बारे में सवालों की एक जोड़ी:

  • क्या सटीकता बढ़ाने के लिए अलग-अलग निश्चित अवरोधक के साथ कुछ वोल्टेज डिवाइडर का उपयोग करना समझ में आता है?
  • मैं V_in के रूप में प्रोग्रामेबल पिन का उपयोग कर सकता हूं, और कुछ अलग वोल्टेज स्तरों का उपयोग करके तापमान को माप सकता हूं। हालांकि यह मेरे लिए स्पष्ट नहीं है कि क्या यह वास्तव में सटीकता बढ़ाएगा।

कृपया अपना तापमान रूपांतरण कोड पोस्ट करें।
ज्यामितीय

कृपया परिभाषित करें कि आपके "सही" से क्या मतलब है। किस प्रकार का तापमान रिज़ॉल्यूशन और पूर्ण सटीकता आप प्राप्त करने की कोशिश कर रहे हैं?
जो हस

मुझे लगभग 1-2 डिग्री का संकल्प मिलने की उम्मीद है। 1-2 डिग्री की पूर्ण अंशांकन त्रुटि भी ठीक होनी चाहिए। क्या मैं 0C पर एक संदर्भ बिंदु प्राप्त करने के लिए अपने अपेक्षाकृत आसान समझता हूं, और मुझे लगता है कि मैं क्रॉस-कैलिब्रेटिंग सेंसर द्वारा कमरे के तापमान पर दूसरा (बहुत अधिक मोटा) बिंदु प्राप्त कर सकता हूं।
उस्सव

5-25C रेंज में तापमान के लिए 1-2 डिग्री।
ऊसुव

@geometrikal मेरे पास अभी यह हाथ में नहीं है, लेकिन इसका मूल रूप से हर किसी के समान है: पहला नमूना छोड़ें, कुछ मिली प्रतीक्षा करें, एक जोड़े को अधिक बार और औसत नमूनों का नमूना लें। फिर जो आप मानते हैं कि आपके संदर्भ वोल्टेज क्या है, द्वारा पुनर्विक्रय करें।
ऊसुव

जवाबों:


2

ऐसा लगता है कि आप संदर्भ वोल्टेज बदलने के साथ समस्या से अवगत हैं और यदि आप TMP36 (फिक्स्ड 10mV / degC) जैसे उपकरण का उपयोग करते हैं, तो कुछ भी नहीं है जो आप चीजों को स्थिर करने के लिए एक चिप से वोल्टेज संदर्भ का उपयोग करने के अलावा और कुछ नहीं कर सकते।

हालाँकि, यदि आप RTD या थर्मिस्टर का उपयोग कर रहे हैं तो समस्या उत्पन्न नहीं होगी। आप ADC एक रटोमेट्रिक माप बना रहे हैं - यह ADC इनपुट की तुलना उसके संदर्भ वोल्टेज BUT से करता है, यदि आप RTD या थर्मिस्टर (एक उपयुक्त प्रतिरोधक के माध्यम से) को उसी रेफ़र वोल्टेज से रीडिंग को प्रभावित नहीं करेंगे। यदि रेफ 10% बढ़ जाता है, तो एडीसी में वोल्टेज आता है।


4

मुझे लगता है कि आपको DS18B20 / DS18S20 जैसे डिजिटल तापमान सेंसर का उपयोग करने पर विचार करना चाहिए, क्योंकि यह anaolg सिग्नल को मापने के लिए आपके ATmega ADC की सटीकता पर निर्भर नहीं करता है, यह तापमान को रिपोर्ट करने के लिए 1-वायर डिजिटल प्रोटोकॉल का उपयोग करता है।

निम्नलिखित ट्यूटोरियल्स का संदर्भ लें
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino


2
यह जवाब बहुत उपयोगी नहीं है जब तक आप यह नहीं बताते कि ओपी को एक अलग सेंसर में क्यों बदलना चाहिए, और आपने इसके लिए कोई औचित्य नहीं दिया है। बस एक उत्तर में लिंक प्रदान करना एक अच्छा विचार नहीं है क्योंकि वे अक्सर मृत हो जाते हैं और उत्तर की सामग्री खो जाती है।
जो हस

उसी लाइनों के साथ अपना जवाब लिखने के बजाय, मैंने जोए द्वारा उठाए गए चिंता को दूर करने के लिए इस ए को संपादित किया है।
RedGrittyBrick

@JoeHass बाहरी लेखों से लिंक करने का एकमात्र विकल्प उत्तर में कोड संलग्न करना है, लेकिन मेरे पास संलग्न करने के लिए अपना कोड नहीं है और किसी अन्य को उनकी सहमति के बिना कोड संलग्न करना उचित नहीं होगा। यहां तक ​​कि अगर लिंक मृत हो जाते हैं तो Arduino के लिए एक पुस्तकालय आसानी से Google और DS18B20 का उपयोग कीवर्ड के रूप में किया जा सकता है। स्पष्टीकरण के बारे में, यह मेरी गलती थी, मैंने सोचा था कि सेंसर डिजिटल होने का उल्लेख करते हुए मेरी बात समझाई होगी।
एलेक्सन_डे

टिप्पणी के लिए धन्यवाद। किसी कारण से डिजिटल सेंसर को ढूंढना काफी मुश्किल है। न तो स्थानीय आपूर्तिकर्ता (मेप्लिन) और न ही सस्ते (एर) ऑनलाइन लोग (मैंने स्पिराल्ट्रोनिक्स का इस्तेमाल किया) कोई भी नहीं बेचते हैं। £ 3 एक पॉप + वितरण अभी भी इसे अपेक्षाकृत महंगा विकल्प बनाता है।
ऊसुव

@ यूएसवी ने आपके द्वारा प्रदान किए गए लिंक से देखते हुए मुझे लगता है कि आप यूके में रहते हैं। मैं आमतौर पर चीन से इन घटकों को सस्ते में खरीदता हूं, लेकिन मैंने उन्हें £ 1.49 के लिए ebay.uk में भी पाया है , हो सकता है कि वे आपको सूट करते हों
alexan_e

3

आपका माप एडीसी के लिए संदर्भ वोल्टेज जितना अच्छा होगा उतना अच्छा है। डिफ़ॉल्ट रूप से Arduino आपूर्ति वोल्टेज को संदर्भ वोल्टेज के रूप में उपयोग करता है, लेकिन आपके मामले में ऐसा करने का सही तरीका है कि Arduino के Aref पिन का उपयोग किया जाए। आपको एक विशेष चिप प्राप्त करना होगा जिसे "वोल्टेज संदर्भ" कहा जाता है और इसे अरेफ पिन से कनेक्ट करना है, फिर Arduino कोड में बाहरी संदर्भ का उपयोग करने के लिए ADC सेट करें ( analogReference(EXTERNAL))

संदर्भ के वोल्टेज को चुना जाना है ताकि आपके तापमान सेंसर का पूरा स्विंग रेफरी वोल्टेज में फिट हो। TMP36 का उत्पादन ~ 1.5V @ 100C होगा, इसलिए आपको 100C तक के तापमान को मापने के लिए 1.5V से ऊपर के संदर्भ का उपयोग करना होगा। आप अपना संदर्भ अधिकतम संभव के रूप में मापा अधिकतम वोल्टेज के करीब के रूप में संभव के रूप में अधिक संकल्प प्राप्त करना चाहते हैं।

Atmega328p में दो आंतरिक संदर्भ हैं जिनका उपयोग बिना किसी बाहरी घटक के किया जा सकता है। एक 1.1V, दूसरा 2.56V है। वे आम तौर पर बाहरी समर्पित घटक का उपयोग करके आपको जो कुछ मिलता है, उससे थोड़ी अधिक सटीकता है। आंतरिक संदर्भ सटीकता के लिए analogReference और Atmega328p डेटाशीट के लिए Arduino प्रलेखन की जाँच करें ।

यदि आप वास्तव में विभिन्न श्रेणियों के साथ पागल प्राप्त करना चाहते हैं, तो आप 74hc4051 जैसे एनालॉग स्विच का उपयोग करके कई बाहरी संदर्भों का उपयोग कर सकते हैं और उन्हें स्विच कर सकते हैं। या आप दो आंतरिक संदर्भों के बीच स्विच कर सकते हैं।

थर्मिस्टर्स के साथ आपके पास बेहतर परिणाम होंगे यदि आप गूंगा रोकनेवाला का उपयोग करने के बजाय एक निरंतर वर्तमान स्रोत स्थापित करते हैं। दूसरे हाथ पर - स्थिर वोल्टेज संदर्भ से संचालित एक गूंगा रोकनेवाला ठीक काम करेगा।

जब बाहरी संदर्भ चुनते हैं, तो सुनिश्चित करें कि आपके पास बैटरी से बिजली छोड़ने पर वोल्टेज को कम करने के लिए पर्याप्त वोल्टेज है और बैटरी सपाट है। Vref + Vdropout <Vbat-min


आपके कमेंट के लिए धन्यवाद। यह मूल रूप से एक ही टिप्पणी है जो मुझे आज मिली है - जेनर डायोड पर अपना स्वयं का रिफ वोल्टेज बनाएं या एएआरएफ के लिए समर्पित कम वोल्टेज नियामक प्राप्त करें।
उस्सव

निरंतर वर्तमान और एक थर्मिस्टर के साथ बेहतर परिणाम क्यों?
ज्यामितीय

2

एक स्थिर एडीसी संदर्भ नहीं होना वास्तव में आपके सर्किट में एक और समस्या का एक लक्षण है: आप बोर्ड को पर्याप्त उच्च वोल्टेज की आपूर्ति नहीं कर रहे हैं। यह 5V आपूर्ति 4V और 3.3V छोड़ने के साथ ही छोड़ने का संकेत है।

Arduino बोर्ड पर वोल्टेज नियामक (MC33269D-5.0 IIRC) में ~ 1.0V का ड्रॉपआउट वोल्टेज है, इसलिए आपको स्थिर 5V आउटपुट प्राप्त करने के लिए इसे कम से कम 6V के साथ आपूर्ति करने की आवश्यकता है। AA बैटरी 1.5-1.6V से शुरू होती हैं और 1.1V पर लगभग मृत हो जाती हैं, इसलिए आपको पूरे बैटरी जीवन पर एक स्थिर आउटपुट के लिए कम से कम 6 AA बैटरी के साथ बोर्ड को पावर देना चाहिए।

सही ढंग से संचालित, आप या तो आंतरिक एडीसी संदर्भ या 5 वी या 3.3 वी लाइनों का उपयोग कर सकते हैं। चूंकि तापमान संवेदक लगभग 10mV प्रति डिग्री सेल्यियस से भिन्न होता है, आप अधिकतम अपेक्षित सेंसर आउटपुट वोल्टेज (जैसे 50 डिग्री सेल्सियस के लिए) के बराबर संदर्भ वोल्टेज सेट करने के लिए एक वोल्टेज विभक्त का उपयोग कर सकते हैं। यह अधिक सटीक माप देगा।

यदि आप 6 AA बैटरी से कम का उपयोग करना चाहते हैं, तो DC-DC बूस्ट कनवर्टर, जैसे https://www.sparkfun.com/products/10/68 पर प्रयास करें । जुड़ा उदाहरण 1V - 4V लेता है और 5V बनाता है। आउटपुट को सीधे अपने नियामक को दरकिनार करके Arduino के 5V पिन में फीड किया जाएगा।

बैटरी पर लंबे समय तक चलने के लिए बोर्ड पाने के लिए, एमसीयू को सेंसर रीड के बीच सोने के लिए रख दें। Rocketscream कम बिजली पुस्तकालय इस उद्देश्य के लिए बहुत अच्छा है। लेकिन यह वास्तव में केवल तभी उपयोगी होता है जब एक कुशल नियामक / DC-DC कनवर्टर का उपयोग किया जाता है क्योंकि मानक Arduino नियामक केवल 10mA का उपयोग करता है!


1

प्रश्न का उत्तर क्या सेंसर आउटपुट वोल्टेज को मज़बूती से मापने का कोई और तरीका है?

एडीसी एनालॉग से डिजिटल में रूपांतरण के लिए संदर्भ वोल्टेज का उपयोग करता है। इसलिए यदि संदर्भ वोल्टेज में कोई परिवर्तन होता है, तो परिवर्तित मान (यानी डिजिटल मूल्य) बदल जाएगा। यदि संदर्भ वोल्टेज में परिवर्तन होता है तो डिजिटल मूल्य उसी अनुरूप इनपुट के लिए अलग होगा।

एक आसान विकल्प Arduino (यानी Atmega नियंत्रक) के अंदर आंतरिक संदर्भ वोल्टेज का उपयोग करना है।

नीचे दिया गया लिंक देखें जहां आंतरिक ADC (Arduino फ़ंक्शन नाम - analogReference (DEULTULT)) का उपयोग करने के लिए एक नमूना कोड प्रदान किया गया है

http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/

मुझे लगता है कि यह आपके मुद्दे को हल करेगा और थर्मिस्टर्स की ओर बढ़ने की कोई आवश्यकता नहीं है।


मुझे यकीन नहीं है कि "हैकिंग वाईफ़ाई खोजक" कैसे प्रासंगिक है - मुझे प्रासंगिकता का कुछ भी नहीं मिल रहा है। आंतरिक एडीसी संदर्भ के बारे में - मैंने इसके बारे में लिखा था। Arduino USB से संचालित होने पर भी यह काम नहीं कर रहा है। और जब बोर्ड सेल फोन बैटरी (3.7 - 4.5 वी) से संचालित होता है तो यह और भी खराब हो जाता है।
ऊसुव

क्षमा करें इसकी एक कॉपी / पेस्ट गलती। जल्द ही लिंक को सही कर देंगे!
रोबोमोन

@ यूएसवी लिंक सही!
रोबोमोन

1.1V आंतरिक में atmega328 कल्पना के अनुसार 10% से अधिक तैर सकता है। यह बहुत विश्वसनीय संदर्भ भी नहीं लगता है।
ऊसुव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.