इस परियोजना में हम तापमान को मापने के लिए एक सर्किट डिजाइन करने जा रहे हैं। यह सर्किट एक रैखिक वोल्टेज सेंसर " LM35 " का उपयोग करके विकसित किया गया है । आमतौर पर तापमान "सेंटीग्रेड" या "फेराइट" में मापा जाता है। "LM35" सेंसर सेंटीग्रेड के पैमाने के आधार पर आउटपुट प्रदान करता है।
LM35 डिवाइस की तरह तीन पिन ट्रांजिस्टर है। इसमें VCC, GND और OUTPUT है। यह सेंसर तापमान के आधार पर आउटपुट में परिवर्तनशील वोल्टेज प्रदान करता है।
जैसा कि ऊपर चित्र में दिखाया गया है, प्रत्येक +1 सेंटीग्रेड तापमान में वृद्धि के लिए + 10mV उच्च आउटपुट होगा। तो अगर तापमान 0◦ सेंटीग्रेड है तो सेंसर का आउटपुट 0V होगा, अगर तापमान 10◦ सेंटीग्रेड है तो सेंसर का आउटपुट + 100mV होगा, अगर तापमान 25◦ सेंटीग्रेड है तो सेंसर का आउटपुट + 250mV होगा।
तो अब LM35 के साथ हम चर वोल्टेज के रूप में तापमान प्राप्त करते हैं। इस तापमान पर निर्भर वोल्टेज को ATMEGA32A के ADC (एनालॉग से डिजिटल कनवर्टर) के इनपुट के रूप में दिया जाता है। प्राप्त रूपांतरण के बाद डिजिटल मूल्य को तापमान के रूप में 16x2 एलसीडी में दिखाया गया है।
अवयव आवश्यक
हार्डवेयर: ATMEGA32 माइक्रोकंट्रोलर, बिजली की आपूर्ति (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF संधारित्र (दो टुकड़े), 100nF5 संधारित्र, LM35 तापमान सेंसर।
सॉफ्टवेयर: Atmel स्टूडियो 6.1, progisp या फ़्लैश मैजिक।
सर्किट आरेख और स्पष्टीकरण
सर्किट में, ATMEGA32 का PORTB एलसीडी के डेटा पोर्ट से जुड़ा है। यहां किसी को फ्यूज बाइट्स को बदलकर PORTC ot ATMEGA में JTAG कम्युनिकेशन को डिसेबल करना याद रखना चाहिए, अगर कोई PORTC को सामान्य कम्युनिकेशन पोर्ट के रूप में इस्तेमाल करना चाहता है। 16x2 एलसीडी में बैक लाइट होने पर सभी में 16 पिन होते हैं, अगर बैक लाइट नहीं है तो 14 पिन होंगे। एक बिजली या वापस प्रकाश पिन छोड़ सकते हैं। अब 14 पिनों में 8 डेटा पिन (7-14 या D0-D7), 2 पावर सप्लाई पिन (1 & 2 या VSS & VDD या gnd & + 5v), कंट्रास्ट कंट्रोल के लिए 3 rd पिन (VEE- नियंत्रण हैं कि पात्रों को कितना मोटा होना चाहिए दिखाया गया है), 3 नियंत्रण पिन (आरएस और आरडब्ल्यू और ई)।
सर्किट में, आप देख सकते हैं कि मैंने केवल दो नियंत्रण पिन लिए हैं क्योंकि इससे बेहतर समझ का लचीलापन मिलता है। कंट्रास्ट बिट और READ / WRITE का उपयोग अक्सर नहीं किया जाता है, ताकि उन्हें जमीन पर छोटा किया जा सके। यह एलसीडी को कंट्रास्ट और रीड मोड में डालता है। हमें केवल वर्ण और डेटा भेजने के लिए सक्षम और आरएस पिन को नियंत्रित करने की आवश्यकता है।
एलसीडी के लिए जो कनेक्शन दिए गए हैं, वे नीचे दिए गए हैं:
पिन 1 या वीएसएस ------------------ ग्राउंड
PIN2 या VDD या VCC ------------ + 5v शक्ति
PIN3 या VEE --------------- जमीन (एक शुरुआत के लिए अधिकतम विपरीत देता है)
पिन 4 या आरएस (रजिस्टर चयन) --------------- यूसी का पीडी 6
पिन 5 या आरडब्ल्यू (पढ़ें / लिखें) ----------------- जमीन (रीड मोड में एलसीडी लगाता है उपयोगकर्ता के लिए संचार को आसान बनाता है)
PIN6 या E (सक्षम करें) ------------------- uC का PD5
PIN7 या D0 ----------------------------- uC का PB0
PIN8 या D1 ----------------------------- uC का PB1
PIN9 या D2 ----------------------------- uC का PB2
पिन 10 या डी 3 ----------------------------- यूसीबी का पीबी 3
PIN11 या D4 ----------------------------- uC का PB4
PIN12 या D5 ----------------------------- uC का PB5
PIN13 या D6 ----------------------------- uC का PB6
PIN14 या D7 ----------------------------- uC का PB7
सर्किट में आप देख सकते हैं कि हमने 8bit संचार (D0-D7) का उपयोग किया है, लेकिन यह अनिवार्य नहीं है, हम 4bit संचार (D4-D7) का उपयोग कर सकते हैं, लेकिन 4 बिट संचार कार्यक्रम थोड़ा जटिल हो जाता है, इसलिए मैंने 8 बिट का चयन किया है संचार।
इसलिए उपरोक्त तालिका से मात्र अवलोकन से हम एलसीडी के 10 पिन को कंट्रोलर से जोड़ रहे हैं जिसमें 8 पिन डेटा पिन और 2 पिन नियंत्रण के लिए हैं। सेंसर द्वारा प्रदान किया गया वोल्टेज आउटपुट पूरी तरह से रैखिक नहीं है; यह एक शोर होगा। शोर को फिल्टर करने के लिए संधारित्र को सेंसर के आउटपुट पर रखा जाना चाहिए जैसा कि चित्र में दिखाया गया है।
आगे बढ़ने से पहले हमें ATMEGA32A के ADC के बारे में बात करनी होगी। ATMEGA32A में, हम PORTA के आठ में से किसी भी चैनल को एनालॉग इनपुट दे सकते हैं, इससे कोई फर्क नहीं पड़ता कि हम किस चैनल को चुनते हैं। हम PORTA का चैनल 0 या PIN0 चुनने जा रहे हैं। ATMEGA32A में, ADC 10 बिट रिज़ॉल्यूशन का है, इसलिए नियंत्रक Vref / 2 ^ 10 के न्यूनतम परिवर्तन का पता लगा सकता है, इसलिए यदि संदर्भ वोल्टेज 5V है तो हमें प्रत्येक 5/2 = 10 = 5mV के लिए एक डिजिटल आउटपुट वेतन वृद्धि मिलती है। । इसलिए इनपुट में प्रत्येक 5mV वेतन वृद्धि के लिए हमारे पास डिजिटल आउटपुट पर एक वेतन वृद्धि होगी।
अब हमें निम्नलिखित शर्तों के आधार पर ADC का रजिस्टर सेट करना होगा:
1. हम सभी को ADC में ADC सुविधा सक्षम करने की आवश्यकता है।
2. चूंकि हम कमरे के तापमान को माप रहे हैं, इसलिए हमें वास्तव में सौ डिग्री (एलएम 35 के 1000 एमवी आउटपुट) से परे मूल्यों की आवश्यकता नहीं है। इसलिए हम एडीसी का अधिकतम मान या संदर्भ 2.5 वी तक सेट कर सकते हैं।
3. नियंत्रक में एक ट्रिगर रूपांतरण सुविधा है, इसका मतलब है कि एडीसी रूपांतरण बाहरी ट्रिगर के बाद ही होता है, क्योंकि हम नहीं चाहते हैं कि हमें एडीसी को निरंतर मुक्त चलने वाले मोड में चलाने के लिए रजिस्टरों को सेट करने की आवश्यकता है।
4. किसी भी एडीसी के लिए, रूपांतरण की आवृत्ति (डिजिटल मूल्य के अनुरूप मूल्य) और डिजिटल आउटपुट की सटीकता व्युत्क्रमानुपाती होती है। इसलिए डिजिटल आउटपुट की बेहतर सटीकता के लिए हमें कम आवृत्ति का चयन करना होगा। कम एडीसी घड़ी के लिए हम अधिकतम मूल्य (128) के लिए एडीसी के पूर्व निर्धारित कर रहे हैं। चूंकि हम 1MHZ की आंतरिक घड़ी का उपयोग कर रहे हैं, ADC की घड़ी (1000000/128) होगी।
ये केवल चार चीजें हैं जिन्हें हमें एडीसी के साथ शुरू करने के लिए जानना आवश्यक है। उपरोक्त सभी चार विशेषताएं दो रजिस्टरों द्वारा निर्धारित की गई हैं।
RED (ADEN): इस बिट को ATMEGA के ADC फीचर को सक्षम करने के लिए सेट किया जाना है।
BLUE (REFS1, REFS0): इन दो बिट्स का उपयोग संदर्भ वोल्टेज (या अधिकतम इनपुट वोल्टेज जिसे हम देने जा रहे हैं) को सेट करने के लिए किया जाता है। चूँकि हम चाहते हैं कि संदर्भ वोल्टेज 2.56V, REFS0 और REFS1 दोनों को तालिका द्वारा सेट किया जाए।
LIGHT GREEN (ADATE): इस बिट को ADC के लिए निरंतर (फ्री रनिंग मोड) चलाने के लिए सेट किया जाना चाहिए।
PINK (MUX0-MUX4): ये पांच बिट्स इनपुट चैनल को बताने के लिए हैं। चूँकि हम ADC0 या PIN0 का उपयोग करने जा रहे हैं, हमें तालिका के अनुसार बिट्स सेट करने की आवश्यकता नहीं है।
BROWN (ADPS0-ADPS2): ये तीनों बिट्स ADC के लिए प्रीस्कूलर सेट करने के लिए हैं। चूहे हम 128 के एक प्रीस्कूलर का उपयोग कर रहे हैं, हमें सभी तीन बिट्स सेट करना होगा।
DARK GREEN (ADSC): रूपांतरण शुरू करने के लिए ADC के लिए यह बिट सेट है। यह बिट प्रोग्राम में अक्षम किया जा सकता है जब हमें रूपांतरण को रोकने की आवश्यकता होती है।
Arduino के साथ इस परियोजना को बनाने के लिए, इस ट्यूटोरियल को देखें: Arduino का उपयोग करके डिजिटल थर्मामीटर
प्रोग्रामिंग स्पष्टीकरण
TEMPARATURE MEASUREMENT का कार्य करना नीचे दिए गए C कोड के चरण में बताया गया है:
पिनों पर डेटा प्रवाह नियंत्रण को सक्षम करने के लिए #include // हैडर
#define F_CPU 1000000 // कंट्रोलर क्रिस्टल फ्रिक्वेंसी को बताना
#शामिल
#Dfine E 5 // PORTD के 5 वें पिन को "इनेबल" नाम देना, क्योंकि यह एलसीडी इनेबल पिन से जुड़ा है
#define RS 6 // PORTD के 6 वें पिन को "registerselection" नाम दे रहा है, क्योंकि एलसीडी एलसीडी पिन से जुड़ा है
शून्य send_a_command (अहस्ताक्षरित char कमांड);
शून्य send_a_character (अहस्ताक्षरित वर्ण);
void send_a_string (char * string_of_characters);
इंट मेन (शून्य)
{{
DDRB = 0xFF; // आउटपुट पिन के रूप में portB और portD डालना
DDRD = 0xFF;
_delay_ms (50); // 50ms की देरी दे रही है
DDRA = 0; // पोर्टा को इनपुट के रूप में लेना।
ADMUX - = (1 <
ADCSRA - = (1 <0)
{{
send_a_character (* string_of_characters ++);
}
}