- आवश्यक घटक: -
- DS18B20 तापमान सेंसर:
- सर्किट आरेख:-
- चरण या कोड प्रवाह: -
- कोड स्पष्टीकरण:
- DS18B20 तापमान सेंसर से डेटा प्राप्त करना:
आमतौर पर LM35 तापमान सेंसर का उपयोग तापमान को मापने के लिए माइक्रोकंट्रोलर्स के साथ किया जाता है क्योंकि यह सस्ता और आसानी से उपलब्ध है। लेकिन LM35 एनालॉग मान देता है और हमें ADC (एनालॉग से डिजिटल कन्वर्टर) का उपयोग करके उन्हें डिजिटल में बदलने की आवश्यकता है। लेकिन आज हम DS18B20 तापमान सेंसर का उपयोग कर रहे हैं जिसमें तापमान प्राप्त करने के लिए हमें ADC रूपांतरण की आवश्यकता नहीं है। यहां हम तापमान को मापने के लिए DS18B20 के साथ PIC माइक्रोकंट्रोलर का उपयोग करेंगे ।
तो यहां हम माइक्रोचिप से PIC16F877A माइक्रोकंट्रोलर यूनिट का उपयोग करके निम्नलिखित विनिर्देशन के साथ थर्मामीटर का निर्माण कर रहे हैं ।
- यह -55 डिग्री से +125 डिग्री तक तापमान की पूरी रेंज दिखाएगा।
- यह केवल तापमान को प्रदर्शित करेगा यदि तापमान + / -.2 डिग्री बदलता है।
आवश्यक घटक: -
- Pic16F877A - PDIP40 पैकेज
- ब्रेड बोर्ड
- पिकेट -3
- 5V एडाप्टर
- एलसीडी JHD162A
- DS18b20 तापमान सेंसर
- बाह्य उपकरणों को जोड़ने के लिए तार।
- 4.7k प्रतिरोधों - 2 पीसी
- 10k पॉट
- 20mHz क्रिस्टल
- 2 पीसी 33 पीएफ सिरेमिक कैपेसिटर
DS18B20 तापमान सेंसर:
DS18B20 तापमान को सही ढंग से समझने के लिए एक उत्कृष्ट सेंसर है। यह सेंसर तापमान संवेदन पर 9bit से 12bit रिज़ॉल्यूशन प्रदान करता है। यह सेंसर केवल एक तार के साथ संचार करता है और एनालॉग तापमान प्राप्त करने और उन्हें डिजिटल रूप से परिवर्तित करने के लिए किसी एडीसी की आवश्यकता नहीं होती है।
सेंसर की विशिष्टता है: -
- -55 ° C से + 125 ° C (-67 ° F से + 257 ° F) तक तापमान मापता है
- ± 0.5 ° C सटीकता -10 ° C से + 85 ° C
- 9 बिट्स से 12 बिट्स तक प्रोग्राम योग्य रिज़ॉल्यूशन
- कोई बाहरी घटक आवश्यक नहीं है
- सेंसर 1-वायर® इंटरफ़ेस का उपयोग करता है
यदि हम डेटाशीट से ऊपर की ओर पिनआउट छवि को देखते हैं, तो हम देख सकते हैं कि सेंसर बिल्कुल BC547 या BC557 पैकेज, TO-92 जैसा दिखता है। पहला पिन ग्राउंड है, दूसरा पिन DQ या डेटा है और तीसरा पिन VCC है।
नीचे डेटशीट से विद्युत विनिर्देश है जो हमारे डिजाइन के लिए आवश्यक होगा। सेंसर के लिए रेटेड आपूर्ति वोल्टेज + 3.0V से + 5.5V है। इसके लिए पुल सप्लाई वोल्टेज की भी जरूरत है जो कि ऊपर बताए गए सप्लाई वोल्टेज के समान है।
इसके अलावा, एक सटीकता मार्जिन है जो -10 डिग्री सेल्सियस से +85 डिग्री सेल्सियस की सीमा के लिए + -0.5 डिग्री सेल्सियस है, और पूर्ण रेंज मार्जिन के लिए सटीकता में परिवर्तन होता है, जो + -2 डिग्री के लिए -55 डिग्री से + है 125 डिग्री रेंज।
यदि हम फिर से डेटाशीट को देखते हैं, तो हम सेंसर के कनेक्शन विनिर्देश देखेंगे। हम सेंसर को परजीवी पावर मोड में कनेक्ट कर सकते हैं जहां दो तारों की जरूरत होती है, डेटा और जीएनडी, या हम सेंसर को बाहरी बिजली की आपूर्ति का उपयोग करके कनेक्ट कर सकते हैं, जहां तीन अलग-अलग तारों की आवश्यकता होती है । हम दूसरे कॉन्फ़िगरेशन का उपयोग करेंगे।
जैसा कि अब हम सेंसर और कनेक्शन संबंधित क्षेत्रों की शक्ति रेटिंग से परिचित हैं, अब हम योजनाबद्ध बनाने पर ध्यान केंद्रित कर सकते हैं।
सर्किट आरेख:-
यदि हम सर्किट आरेख देखें तो हम देखेंगे कि: -
16x2 वर्ण एलसीडी PIC16F877A माइक्रोकंट्रोलर से जुड़ा है, जिसमें RB0, RB1, RB2 एलसीडी पिन RS, R / W, और E. और RB4 से जुड़े हुए हैं, RB5, RB6 और RB7 एलसीडी के 4 पिन D4, D5, D6, D6, D से जुड़े हैं। डी 7। एलसीडी 4 बिट मोड या निबल मोड से जुड़ा हुआ है।
33MF के दो सिरेमिक कैपेसिटर के साथ 20MHz का एक क्रिस्टल थरथरानवाला OSC1 और OSC2 पिन से जुड़ा हुआ है। यह माइक्रोकंट्रोलर को लगातार 20Mhz क्लॉक फ्रीक्वेंसी प्रदान करेगा।
DS18B20 पिन कॉन्फ़िगरेशन के अनुसार भी जुड़ा हुआ है और पहले चर्चा के अनुसार 4.7k पुल अप प्रतिरोध के साथ जुड़ा हुआ है। मैंने यह सब ब्रेडबोर्ड में जोड़ा है।
अगर आप PIC Microcontroller के साथ शुरू करने के साथ हमारे PIC माइक्रोकंट्रोलर ट्यूटोरियल का पालन करने की तुलना में PIC माइक्रोकंट्रोलर के लिए नए हैं।
चरण या कोड प्रवाह: -
- माइक्रोकंट्रोलर के विन्यास को सेट करें जिसमें थरथरानवाला विन्यास शामिल है।
- TRIS रजिस्टर सहित एलसीडी के लिए वांछित पोर्ट सेट करें।
- Ds18b20 सेंसर के साथ हर चक्र रीसेट के साथ शुरू होता है, इसलिए हम ds18b20 को रीसेट करेंगे और उपस्थिति पल्स का इंतजार करेंगे।
- स्क्रैडपैड लिखें और सेंसर का रिज़ॉल्यूशन 12 बिट सेट करें।
- रीसेट पल्स के बाद ROM को पढ़ें।
- कन्वर्ट तापमान कमांड जमा करें।
- स्क्रैडपैड से तापमान पढ़ें।
- तापमान मान जांचें कि नकारात्मक या सकारात्मक।
- 16x2 एलसीडी पर तापमान प्रिंट करें।
- +/- 20 डिग्री सेल्सियस के लिए तापमान परिवर्तन की प्रतीक्षा करें।
कोड स्पष्टीकरण:
इस ट्यूटोरियल के अंत में डिमॉन्स्ट्रेशन वीडियो के साथ इस डिजिटल थर्मामीटर का पूरा कोड दिया गया है । इस प्रोग्राम को चलाने के लिए आपको कुछ हेडर फ़ाइलों की आवश्यकता होगी, जिन्हें यहाँ से डाउनलोड किया जा सकता है।
सबसे पहले, हमें पिक माइक्रोकंट्रोलर में कॉन्फ़िगरेशन बिट्स सेट करने की आवश्यकता है और फिर शून्य मुख्य फ़ंक्शन के साथ शुरू करें ।
फिर लाइब्रेरी हेडर फ़ाइल, lcd.h और ds18b20.h को शामिल करने के लिए चार लाइनों का उपयोग किया जाता है । और xc.h microcontroller हैडर फ़ाइल के लिए है।
#शामिल
इन परिभाषाओं का उपयोग तापमान संवेदक को कमांड भेजने के लिए किया जाता है । कमांड सेंसर के डेटाशीट में सूचीबद्ध हैं।
#define Skip_rom 0xCC #define Convert_temp 0x44 #define write_scratchpad 0x4E #define resolution_12bit 0x7F #define read_scratchpad #xBE
सेंसर की डेटशीट से यह तालिका 3 उन सभी कमांडों को दिखा रही है जहां मैक्रों का उपयोग संबंधित कमांड भेजने के लिए किया जाता है।
तापमान केवल स्क्रीन में प्रदर्शित करेगा तापमान को परिवर्तित करता है +/- .20 डिग्री। हम इस temp_gap मैक्रो से तापमान अंतर को बदल सकते हैं । इस मैक्रो में मान बदलकर, विनिर्देश बदल दिया जाएगा।
अन्य दो फ्लोट वैरिएबल प्रदर्शित तापमान डेटा को संग्रहीत करने के लिए उपयोग किए जाते हैं और तापमान अंतर के साथ उन्हें अलग करते हैं
#define temp_gap 20 float pre_val = 0, aft_val = 0;
।
में शून्य मुख्य () समारोह, lcd_init () ; एलसीडी को इनिशियलाइज़ करने का एक फंक्शन है। इस lcd_init () फ़ंक्शन को lcd.h लाइब्रेरी से कहा जाता है ।
TRIS रजिस्टरों का उपयोग I / O पिन को इनपुट या आउटपुट के रूप में चुनने के लिए किया जाता है। टेम्पर्ड सेंसर से 12 बिट रिज़ॉल्यूशन डेटा को स्टोर करने के लिए दो अहस्ताक्षरित लघु चर TempL और TempH का उपयोग किया जाता है।
शून्य मुख्य (शून्य) {TRISD = 0xFF; TRISA = 0x00; TRISB = 0x00; //TRISDbits_t.TRISD6 = 1; अहस्ताक्षरित लघु TempL, TempH; अहस्ताक्षरित int t, t2; फ़्लोट अंतर 1 = 0, अंतर 2 = 0; lcd_init ();
चलो लूप देखते हैं, यहाँ हम (1) लूप को छोटे-छोटे टुकड़ों में तोड़ रहे हैं ।
तापमान संवेदक जुड़ा हुआ है या नहीं यह जानने के लिए उन पंक्तियों का उपयोग किया जाता है।
जबकि (ow_reset ()) {lcd_com (0x80); lcd_puts ("कृपया कनेक्ट करें"); lcd_com (0xC0); lcd_puts ("टेम्प-सेंस प्रोब"); }
कोड के इस सेगमेंट का उपयोग करके हम सेंसर को इनिशियलाइज़ करते हैं और तापमान को बदलने के लिए कमांड भेजते हैं।
lcd_puts (""); ow_reset (); write_byte (write_scratchpad); write_byte (0); write_byte (0); write_byte (resolution_12bit); // 12bit रिज़ॉल्यूशन Ow_reset (); write_byte (Skip_rom); write_byte (Convert_temp);
यह कोड 12 बिन तापमान डेटा को दो अहस्ताक्षरित लघु चर में संग्रहीत करने के लिए है।
जबकि (read_byte () == 0xff); __delay_ms (500); ow_reset (); write_byte (Skip_rom); write_byte (read_scratchpad); TempL = read_byte (); TempH = read_byte ();
फिर यदि आप नीचे दिए गए पूर्ण कोड की जांच करते हैं, तो हमने तापमान-चिह्न का पता लगाने के लिए if-if स्थिति बनाई है चाहे वह सकारात्मक हो या नकारात्मक।
यदि इफ स्टेटमेंट कोड का उपयोग करके, हम डेटा में हेरफेर करते हैं और देखते हैं कि तापमान नकारात्मक है या नहीं और यह निर्धारित करें कि तापमान परिवर्तन +/-.20 डिग्री रेंज में है या नहीं। और दूसरे भाग में हमने जाँच की कि तापमान सकारात्मक है या नहीं और तापमान में परिवर्तन का पता लगाना है या नहीं।
कोड
DS18B20 तापमान सेंसर से डेटा प्राप्त करना:
1-वायर® इंटरफ़ेस का समय अंतराल देखें। हम 20Mhz क्रिस्टल का उपयोग कर रहे हैं। यदि हम ds18b20.c फ़ाइल के अंदर देखते हैं, तो हम देखेंगे
#define _XTAL_FREQ 20000000
इस परिभाषा का उपयोग XC8 कंपाइलर देरी दिनचर्या के लिए किया जाता है। 20Mhz क्रिस्टल आवृत्ति के रूप में सेट किया गया है।
हमने पाँच कार्य किए
- Ow_reset
- read_bit
- read_byte
- राइट_बिट
- राइट_बाइट
1- वायर® प्रोटोकॉल को संचार करने के लिए सख्त समय से संबंधित स्लॉट की आवश्यकता होती है। डेटाशीट के अंदर, हम सही समय-स्लॉट संबंधित जानकारी प्राप्त करेंगे।
नीचे दिए गए फ़ंक्शन के अंदर हमने सटीक समय स्लॉट बनाया। संबंधित सेंसर के पोर्ट की TRIS बिट को होल्ड और रिलीज़ करने और नियंत्रित करने के लिए सटीक विलंब बनाना महत्वपूर्ण है।
अहस्ताक्षरित char ow_reset (शून्य) {DQ_TRIS = 0; // ट्रिस = 0 (आउटपुट) DQ = 0; // सेट पिन # से लो (0) __delay_us (480); // 1 तार को समय देरी की आवश्यकता होती है DQ_TRIS = 1; // ट्रिस = 1 (इनपुट) __delay_us (60); // 1 तार के लिए समय की देरी की आवश्यकता होती है अगर (DQ == 0) // अगर कोई उपस्थिति है तो {__delay_us (480); वापसी 0; // वापसी 0 (1-तार उपस्थिति है)} और {{__delay_us (480); वापसी 1; // वापसी 1 (1-तार उपस्थिति नहीं है)}} // 0 = उपस्थिति, 1 = कोई हिस्सा नहीं है
अब नीचे दिए गए टाइम स्लॉट विवरण के अनुसार Read और Write में उपयोग किया जाता है, हमने क्रमशः रीड एंड राइट फंक्शन बनाया ।
अहस्ताक्षरित चार read_bit (शून्य) {अहस्ताक्षरित चार मैं; DQ_TRIS = 1; DQ = 0; // टाइमलाइन शुरू करने के लिए DQ को कम खींचें DQ_TRIS = 1; DQ = 1; // फिर उच्च वापसी के लिए (i = 0; i <3; i ++); // टाइमस्टल रिटर्न (DQ) की शुरुआत से 15us देरी; // DQ लाइन का रिटर्न मान} शून्य राइट_बिट (चार बिटवाल) {DQ_TRIS = 0; DQ = 0; // टाइमलाइन शुरू करने के लिए DQ को कम खींचो अगर (bitval == 1) DQ = 1; // वापसी DQ उच्च यदि 1 __delay_us (5) लिखें; // शेष समय के लिए मूल्य पकड़ो DQ_TRIS = 1; DQ = 1; } // विलंब 16 लूप प्रति पाश, प्लस 24us प्रदान करता है। इसलिए देरी (5) = 104us
आगे सभी संबंधित हेडर और.c फाइलों को यहां देखें।
तो यह है कि हम PIC Microcontroller के साथ तापमान प्राप्त करने के लिए DS18B20 सेंसर का उपयोग कैसे कर सकते हैं ।
यदि आप LM35 के साथ एक साधारण डिजिटल थर्मामीटर बनाना चाहते हैं, तो अन्य माइक्रोकंट्रोलर के साथ परियोजनाओं के नीचे चेकआउट करें:
- रास्पबेरी पाई के साथ कमरे का तापमान माप
- Arduino और LM35 का उपयोग कर डिजिटल थर्मामीटर
- LM35 और 8051 का उपयोग कर डिजिटल थर्मामीटर
- LM35 और AVR माइक्रोकंट्रोलर का उपयोग करके तापमान मापन