विषयसूची:
- चरण 1: विवरण घटक
- चरण 2: माइक्रोकंट्रोलर फर्मवेयर कोड
- चरण 3: माइक्रोकंट्रोलर के लिए फ्लैशिंग फर्मवेयर
- चरण 4: मॉनिटरिंग डिवाइस सर्किट असेंबली
वीडियो: एलसीडी नोकिया 5110 पर प्रदर्शित होने के साथ तापमान और प्रकाश स्तर मॉनिटर: 4 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:21
सभी को नमस्कार!
इस खंड में हम तापमान और प्रकाश स्तर की निगरानी के लिए सरल इलेक्ट्रॉनिक उपकरण बनाते हैं। इन मापदंडों के माप एलसीडी नोकिया 5110 पर प्रदर्शित होते हैं। डिवाइस माइक्रोकंट्रोलर AVR ATMEGA328P पर आधारित है। प्रकाश स्तर को मापने के लिए निगरानी उपकरण DS18B20 डिजिटल थर्मामीटर और फोटोरेसिस्टर से लैस है।
चरण 1: विवरण घटक
निगरानी उपकरण के बुनियादी घटक:
- माइक्रोकंट्रोलर AVR «ATMEGA328P»
- मोनोक्रोम ग्राफिक एलसीडी «नोकिया 5110»
- प्रोग्रामेबल रेजोल्यूशन 1-वायर डिजिटल थर्मामीटर «DS18B20»
- प्रकाश पर निर्भर प्रतिरोधक
- तारों
माइक्रोकंट्रोलर AVR «ATMEGA328P»
मॉनिटरिंग डिवाइस माइक्रोकंट्रोलर की निम्नलिखित परिधीय विशेषताओं का उपयोग करता है:
- 16-बिट टाइमर/काउंटर इंटरप्ट
- 8-चैनल 10-बिट एडीसी
- मास्टर / गुलाम एसपीआई सीरियल इंटरफ़ेस
मोनोक्रोम ग्राफिक एलसीडी «नोकिया 5110»
विशेष विवरण:
- 48 x 84 डॉट एलसीडी डिस्प्ले
- अधिकतम उच्च गति 4 Mbits/S. के साथ सीरियल बस इंटरफ़ेस
- आंतरिक नियंत्रक/चालक «PCD8544»
- एलईडी बैक-लाइट
- वोल्टेज 2.7-5 वोल्ट पर चलाएं
- कम बिजली की खपत; यह बैटरी अनुप्रयोगों के लिए उपयुक्त है
- तापमान -25˚C से +70˚C. तक होता है
- समर्थन सिग्नल CMOS इनपुट
एलसीडी एड्रेस की हैंडलिंग (एड्रेसिंग):
एलसीडी डिस्प्ले (डीडीआरएएम) पर दिखाई जाने वाली मेमोरी की पता व्यवस्था मैट्रिक्स है जिसमें वाई-एड्रेस 0 से वाई-एड्रेस 5 और 84 कॉलम (एक्स एड्रेस) से एक्स-एड्रेस 0 से एक्स- तक 6 पंक्तियां (वाई एड्रेस) होती हैं। पता 83. यदि उपयोगकर्ता एलसीडी डिस्प्ले पर परिणाम प्रदर्शित करने की स्थिति तक पहुंचना चाहता है, तो उसे एक्स-एड्रेस और वाई-एड्रेस के बीच संबंध को देखना होगा।
डेटा जो प्रदर्शित करने के लिए भेजा जाएगा वह 8 बिट (1 बाइट) है और इसे लंबवत रेखा के रूप में व्यवस्थित किया जाएगा; इस मामले में, बिट एमएसबी कम होगा और बिट एलएसबी ऊपर होगा जैसा कि चित्र में दिखाया गया है।
प्रोग्रामेबल रेजोल्यूशन 1-वायर डिजिटल थर्मामीटर डलास «DS18B20»
विशेषताएं:
- अद्वितीय 1-वायर® इंटरफ़ेस को संचार के लिए केवल एक पोर्ट पिन की आवश्यकता होती है
- एकीकृत तापमान सेंसर और EEPROM के साथ घटक गणना कम करें
- तापमान -55°C से +125°C (-67°F से +257°F) तक मापता है
- ±0.5°C सटीकता -10°C से +85°C. तक
- 9 बिट से 12 बिट तक प्रोग्राम करने योग्य संकल्प
- कोई बाहरी घटक आवश्यक नहीं है
- पैरासिटिक पावर मोड को ऑपरेशन के लिए केवल 2 पिन की आवश्यकता होती है (DQ और GND)
- मल्टीड्रॉप क्षमता के साथ वितरित तापमान-संवेदन अनुप्रयोगों को सरल बनाता है
- प्रत्येक डिवाइस में एक अद्वितीय 64-बिट सीरियल कोड होता है जो ऑन-बोर्ड रोम में संग्रहीत होता है
- लचीले उपयोगकर्ता-निश्चित गैर-वाष्पशील (एनवी) अलार्म सेटिंग्स के साथ अलार्म खोज कमांड प्रोग्राम की सीमाओं के बाहर तापमान वाले उपकरणों की पहचान करता है
अनुप्रयोग:
- थर्मास्टाटिक नियंत्रण
- औद्योगिक प्रणाली
- उपभोक्ता उत्पादों
- थर्मामीटर
- थर्मली सेंसिटिव सिस्टम
प्रकाश पर निर्भर प्रतिरोधक
लाइट डिपेंडेंट रेसिस्टर (LDR) एक ट्रांसड्यूसर है जो प्रकाश की सतह पर पड़ने वाले परिवर्तन पर अपना प्रतिरोध बदल देता है।
आमतौर पर एक एलडीआर में कुल अंधेरे में एक मेगाओम से दो मेगाओम तक, दस लक्स पर दस से बीस किलोओम से, 100 लक्स पर दो से पांच किलोहोम से होगा। सेंसर के दो संपर्कों के बीच प्रतिरोध प्रकाश की तीव्रता के साथ कम हो जाता है या सेंसर के दो संपर्कों के बीच चालकता बढ़ जाती है।
वोल्टेज में परिवर्तन के प्रतिरोध में परिवर्तन को परिवर्तित करने के लिए वोल्टेज विभक्त सर्किट का उपयोग करें।
चरण 2: माइक्रोकंट्रोलर फर्मवेयर कोड
#ifndef F_CPU#परिभाषित F_CPU 16000000UL // कंट्रोलर क्रिस्टल फ़्रीक्वेंसी (16 मेगाहर्ट्ज AVR ATMega328P) #endif
// SPI इंटरफ़ेस परिभाषित करता है # MOSI 3 परिभाषित करें // MOSI यह पोर्ट B है, पिन 3 # MISO 4 परिभाषित करें // MISO यह पोर्ट B है, पिन 4 # SCK 5 परिभाषित करें // SCK यह पोर्ट B है, पिन 5 # परिभाषित SS 2 // एसएस यह पोर्ट बी है, पिन 2
// प्रदर्शन को रीसेट करें # परिभाषित आरएसटी 0 // रीसेट करें यह पोर्ट बी है, पिन 0
// डिस्प्ले मोड सेलेक्ट - कमांड / एड्रेस या डेटा इनपुट में से किसी एक को चुनने के लिए इनपुट। #define DC 1 // DC यह PORT B है, पिन 1
// नकारात्मक साइनस्टैटिक कास्ट अहस्ताक्षरित चार नकारात्मक के कोड सरणी [4] = {0x30, 0x30, 0x30, 0x30};
// अंकों की कोड सरणी [0..9] स्थिर स्थिरांक अहस्ताक्षरित चार फ़ॉन्ट 6x8 [10] [16] = {{0xFC, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 0 {0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00}, // 1 { 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 { 0x00, 0x04, 0x06, 0x26, 0x76, 0xFE, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 { 0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01}, // 4 { 0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 5 { 0xFC, 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 { 0x04, 0x06, 0x06, 0x86, 0xE6, 0xFE, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0 3, 0x01}, // 8 { 0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9 };
// शब्द "TEMP:" के कोड सरणी स्थिर स्थिरांक अहस्ताक्षरित चार TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7E, 0x7E, 0x3C, 0x00, 0x7E, 0x7E, 0x3C, 0x00 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x00, 0xF8, 0x0, 0x0C, 0x00, 0xF8 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};
// शब्द "लक्स:" का कोड सरणी अहस्ताक्षरित चार TEMP_2 [60] = {0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x04, 0x8E, 0xDE, 0xFC, 0xF8, 0xFC, 0xDE, 0x8E, 0x04, 0x00, 0x8C, 0x8C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};
#शामिल
#शामिल करें #शामिल करें
// पोर्ट इनिशियलाइज़ेशनvoid Port_Init() { DDRB = (1<<MOSI)|(1<<SCK)|(1<<SS)|(1<<RST)|(1<<DC);// MOSI सेट करें, आउटपुट के रूप में SCK, SS, RST, DC, अन्य सभी इनपुट PORTB |= (1<<RST);// RST पिन को हाई PORTB के रूप में सेट करें |= (1<<SS);// SS पिन को हाई के रूप में सेट करें - डिस्प्ले है डीडीआरसी = 0xFFu अक्षम करें; // PORTC के सभी पिन को आउटपुट के रूप में सेट करें। DDRC &= ~(1<<0);// PORTC का पहला पिन इनपुट PORTC=0x00u के रूप में बनाता है; // PORTC के सभी पिन कम सेट करें जो इसे बंद कर देता है। }
// ADC आरंभीकरण शून्य ADC_init () {// ADC सक्षम करें, नमूनाकरण freq=osc_freq/128 प्रीस्केलर को अधिकतम मान पर सेट करें, 128 ADCSRA |= (1<<ADEN) | (१<<एडीपीएस२)| (१<<एडीपीएस१)| (१<<एडीपीएस०); ADMUX = (1<<REFS0); // एडीसी के लिए वोल्टेज संदर्भ का चयन करें // एडीसी मल्टीप्लेक्सर सेलेक्ट रजिस्टर (एडीसी 0) का उपयोग करके डिफ़ॉल्ट रूप से चैनल शून्य का चयन करें। }
// डिजिटल कन्वर्ट uint16_t get_LightLevel () { _delay_ms (10) के एनालॉग के परिणाम को पढ़ने के लिए फ़ंक्शन; // चैनल के चयनित होने के लिए कुछ समय प्रतीक्षा करें ADCSRA |= (1<<ADSC); // ADSC बिट सेट करके ADC रूपांतरण शुरू करें। ADSC को 1 लिखें जबकि(ADCSRA & (1<<ADSC)); // रूपांतरण के पूरा होने की प्रतीक्षा करें // ADSC तब तक फिर से 0 हो जाता है, लगातार लूप चलाएं _delay_ms(10); वापसी (एडीसी); // 10-बिट परिणाम लौटाएं}
// SPI आरंभीकरण शून्य SPI_Init () {SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//SPI सक्षम करें, मास्टर के रूप में सेट करें, SPI नियंत्रण में Prescaler को Fosc/16 के रूप में सेट करें रजिस्टर करें }
// इनिशियलाइज़ 16 बिट टाइमर1, इंटरप्ट और वेरिएबल शून्य TIMER1_init () {// प्रीस्केलर = 256 और सीटीसी मोड TCCR1B के साथ टाइमर सेट करें। = (1 << WGM12) | (1 << CS12); // इनिशियलाइज़ काउंटर TCNT1 = 0; // आरंभिक तुलना मूल्य - 1 सेकंड OCR1A = 62500; // इंटरप्ट की तुलना सक्षम करें TIMSK1 |= (1 << OCIE1A); // वैश्विक अवरोधों को सक्षम करें sei (); }
// प्रदर्शन सक्षम करें शून्य SPI_SS_Enable() { PORTB &= ~(1<<SS); // एसएस पिन को तर्क 0 पर सक्षम करें}
// प्रदर्शन अक्षम करें SPI_SS_Disable () { PORTB |= (1<<SS); // एसएस पिन को तर्क 1 में अक्षम करें}
// डिस्प्ले बफर में डेटा भेजने का कार्य शून्य SPI_Tranceiver (अहस्ताक्षरित चार डेटा) {SPDR = डेटा; // डेटा को बफर में लोड करें जबकि(!(SPSR & (1<<SPIF))); // ट्रांसमिशन पूरा होने तक प्रतीक्षा करें }
// इनिशियलाइज़ेशन की शुरुआत में डिस्प्ले को रीसेट करें void Display_Reset() { PORTB &= ~(1<<RST); _देरी_एमएस (100); PORTB |= (1<<आरएसटी); }
// कमांड राइट फंक्शन शून्य डिस्प्ले_सीएमएनडी (अहस्ताक्षरित चार डेटा) {PORTB &= ~(1<<DC); // कमांड ऑपरेशन SPI_Tranceiver (डेटा) के लिए DC पिन टू लॉजिक 0 बनाएं; // डेटा रजिस्टर पर डेटा भेजें PORTB |= (1<<DC); // डेटा ऑपरेशन के लिए डीसी पिन को लॉजिक हाई बनाएं}
// प्रदर्शन शून्य Display_init () { Display_Reset (); का आरंभीकरण; // डिस्प्ले को रीसेट करें Display_Cmnd (0x21); // अतिरिक्त मोड में कमांड सेट Display_Cmnd (0xC0); // C0 भेजकर वोल्टेज सेट करें VOP = 5V Display_Cmnd (0x07); // अस्थायी सेट करें। गुणांक 3 Display_Cmnd (0x13); // वोल्टेज बायस सिस्टम Display_Cmnd (0x20) का सेट मान; // मूल मोड Display_Cmnd (0x0C) में कमांड सेट; // सामान्य मोड में परिणाम प्रदर्शित करें}
// डिस्प्ले खाली करें Display_Clear() { PORTB |= (1<<DC); // डेटा ऑपरेशन के लिए डीसी पिन को लॉजिक हाई बनाएं (int k=0; k<=503; k++){SPI_Tranceiver(0x00);} PORTB &= ~(1<<DC);// डीसी पिन को लॉजिक बनाएं कमांड ऑपरेशन के लिए शून्य}
// कॉलम और पंक्ति को एलसीडी डिस्प्ले पर परिणाम प्रदर्शित करने की स्थिति में सेट करें शून्य डिस्प्ले_सेटएक्सवाई (अहस्ताक्षरित चार एक्स, अहस्ताक्षरित चार वाई) {डिस्प्ले_सीएमएनडी (0x80 | एक्स); // कॉलम (0-83) Display_Cmnd(0x40|y); // पंक्ति (0-5)}
// नकारात्मक चिह्न प्रदर्शित करने के लिए कार्य शून्य Display_Neg (अहस्ताक्षरित चार नकारात्मक) {Display_SetXY (41, 0); // प्रदर्शन पर स्थिति का पता सेट करें (इंट इंडेक्स = 0; इंडेक्स 0) {एसपीडीआर = 0x30;} // डेटा को डिस्प्ले के बफर में लोड करें (नकारात्मक संकेत प्रदर्शित करें) अन्यथा {एसपीडीआर = 0x00;} // डेटा लोड करें प्रदर्शन का बफर (स्पष्ट नकारात्मक संकेत) जबकि(!(SPSR & (1<<SPIF))); // ट्रांसमिशन पूर्ण होने तक प्रतीक्षा करें _delay_ms (100); } }
// डिजिटल साइन को खाली करने का कार्य Off_Dig (अहस्ताक्षरित चार x, अहस्ताक्षरित चार y) {Display_SetXY (x, y); // प्रदर्शन पर स्थिति का पता सेट करें (शीर्ष पंक्ति) के लिए (int अनुक्रमणिका = 0; अनुक्रमणिका <8; अनुक्रमणिका ++) {SPI_Tranceiver (0);} // प्रदर्शन के बफर में डेटा लोड करें (डिजिटल साइन का स्पष्ट शीर्ष भाग) वाई++; Display_SetXY(x, y);// प्रदर्शन पर स्थिति का पता सेट करें (नीचे की पंक्ति) के लिए (int index=0; index<8; index++) {SPI_Tranceiver(0);}// प्रदर्शन के बफर में डेटा लोड करें (डिजिटल साइन का निचला हिस्सा साफ़ करें)}
// डिजिटल साइन शून्य प्रदर्शित करने के लिए फ़ंक्शन डिस्प्ले_डिग (इंट डिग, अहस्ताक्षरित चार एक्स, अहस्ताक्षरित चार वाई) {डिस्प्ले_सेटएक्सवाई (एक्स, वाई); // (इंट इंडेक्स = 0; इंडेक्स) के लिए डिस्प्ले (टॉप रो) पर स्थिति का पता सेट करें <16; अनुक्रमणिका++) { अगर (सूचकांक==8){y++;Display_SetXY(x, y);} // प्रदर्शन पर स्थिति का पता सेट करें (नीचे की पंक्ति) SPI_Tranceiver(font6x8[dig][index]); // डिजिट डेटा के कोड एरे को डिस्प्ले के बफर में लोड करें _delay_ms(10); } }
// DS18B20 अहस्ताक्षरित चार DS18B20_init() { DDRD |= (1 << 2); // PORTD के PD2 पिन को आउटपुट PORTD और = ~ (1 << 2) के रूप में सेट करें; // PD2 पिन को कम _delay_us (490) के रूप में सेट करें; // आरंभीकरण समय DDRD &= ~(1 << 2); // PORTD के PD2 पिन को इनपुट _delay_us (68) के रूप में सेट करें; // समय OK_Flag = (पिन और (1 << 2)); // सेंसर पल्स प्राप्त करें _delay_us(422); OK_Flag लौटें; // रिटर्न 0-ओके सेंसर प्लग है, 1-एरर सेंसर अनप्लग है}
// DS18B20 से बाइट पढ़ने का कार्य अहस्ताक्षरित चार read_18b20 () {अहस्ताक्षरित चार i, डेटा = 0; for(i = 0; i <8; i++) { DDRD |= (1 << 2); // PORTD के PD2 पिन को आउटपुट _delay_us(2) के रूप में सेट करें; // टाइमिंग DDRD &= ~(1 1; // अगला बिट अगर (PIND & (1 << 2)) डेटा |= 0x80; // बिट को बाइट में डालें _delay_us(62); } डेटा लौटाएं; }
// DS18B20 को बाइट लिखने का कार्य शून्य लिखना_18b20 (अहस्ताक्षरित चार डेटा) {अहस्ताक्षरित चार i; for(i = 0; i <8; i++) { DDRD |= (1 << 2); // PORTD के PD2 पिन को आउटपुट _delay_us(2) के रूप में सेट करें; // समय अगर (डेटा और 0x01) डीडीआरडी और = ~ (1 << 2); // अगर हम 1 लिखना चाहते हैं, तो लाइन को छोड़ दें DDRD |= (1 1; // अगला बिट _delay_us(62); // टाइमिंग DDRD &= ~(1 << 2); // PD2 पिन सेट करें PORTD इनपुट के रूप में _delay_us(2); } }
// प्रकाश स्तर शून्य प्रदर्शित करने के लिए समारोह Read_Lux() {uint16_t बफर; अहस्ताक्षरित int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // सिंगल डिजिट, डबल डिजिट, ट्रिपल डिजिट, क्वार्टर डिजिट बफर = get_LightLevel (); // एनालॉग से डिजिटल कन्वर्ट लाइट लेवल temp_int_0 = बफर% 10000/1000 का परिणाम पढ़ें; // क्वार्टर-डिजिट temp_int_1 = बफर% 1000/100; // ट्रिपल-डिजिट temp_int_2 = बफर% 100/10; // दो अंकों का temp_int_3 = बफर% 10; // सिंगल-डिजिट अगर (temp_int_0> 0) // अगर रिजल्ट क्वार्टर-डिजिट नंबर है { डिस्प्ले_डिग (temp_int_0, 32, 2); // प्रकाश स्तर का 1 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_1, 41, 2); // प्रकाश स्तर के 2 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_2, 50, 2); // प्रकाश स्तर के 3 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_3, 59, 2); // प्रकाश स्तर के 4 अंक प्रदर्शित करें} और {if(temp_int_1> 0) // यदि परिणाम तीन अंकों की संख्या है { Off_Dig(32, 2); // संख्या का स्पष्ट 1 चिन्ह Display_Dig(temp_int_1, 41, 2); // प्रकाश स्तर का 1 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_2, 50, 2); // प्रकाश स्तर के 2 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_3, 59, 2); // प्रकाश स्तर के 3 अंक प्रदर्शित करें} और {if(temp_int_2> 0) // यदि परिणाम दो अंकों की संख्या है { Off_Dig(32, 2); // नंबर ऑफ_डिग (41, 2) का 1 चिन्ह साफ़ करें; // स्पष्ट 2 संख्या का संकेत Display_Dig (temp_int_2, 50, 2); // प्रकाश स्तर का 1 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_3, 59, 2); // प्रकाश स्तर के 2 अंक प्रदर्शित करें} और // यदि परिणाम एकल-अंकीय संख्या है {ऑफ_डिग (32, 2); // नंबर ऑफ_डिग (41, 2) का 1 चिन्ह साफ़ करें; // ऑफ_डिग (50, 2) संख्या का स्पष्ट 2 चिह्न; // संख्या का स्पष्ट ३ चिन्ह Display_Dig(temp_int_3, 59, 2); // प्रकाश स्तर का 1 अंक प्रदर्शित करें } } } }
// तापमान शून्य प्रदर्शित करने के लिए समारोह Read_Temp() { अहस्ताक्षरित int बफर; अहस्ताक्षरित int temp_int_1, temp_int_2, temp_int_3; // सिंगल डिजिट, डबल डिजिट, ट्रिपल डिजिट, क्वार्टर डिजिट अहस्ताक्षरित चार Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 का प्रारंभ लिखें_18b20 (0xCC); // सेंसर कोड चेक लिखें_18b20 (0x44); // तापमान रूपांतरण शुरू करें _delay_ms (1000); // सेंसर मतदान में देरी DS18B20_init (); // DS18B20 का प्रारंभ लिखें_18b20 (0xCC); // सेंसर कोड चेक लिखें_18b20 (0xBE); // सेंसर RAM Temp_L = read_18b20 () की सामग्री को पढ़ने के लिए कमांड; // पहले दो बाइट पढ़ें Temp_H = read_18b20 (); temp_flag = 1; // 1-सकारात्मक तापमान, 0-नकारात्मक तापमान // नकारात्मक तापमान प्राप्त करें यदि (Temp_H &(1 << 3)) // साइन बिट चेक (यदि बिट सेट है - नकारात्मक तापमान) {हस्ताक्षरित int अस्थायी; temp_flag = 0; // ध्वज 0 सेट है - नकारात्मक तापमान अस्थायी = (Temp_H <<8)|Temp_L; अस्थायी = -अस्थायी; // अतिरिक्त कोड को सीधे Temp_L = temp में बदलें; Temp_H = अस्थायी>> 8; } बफर = ((Temp_H 4); temp_int_1 = बफर% 1000/100; // ट्रिपल-डिजिट temp_int_2 = बफर% 100/10; // डबल-डिजिट temp_int_3 = बफर% 10; // सिंगल-डिजिट
// यदि तापमान तापमान का नकारात्मक प्रदर्शन संकेत है, अन्यथा स्पष्ट
if(temp_flag == 0) {Display_Neg(1);} और {Display_Neg(0);} if(temp_int_1> 0) // अगर परिणाम ट्रिपल-डिजिट नंबर है { Display_Dig(temp_int_1, 45, 0); // तापमान का 1 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_2, 54, 0); // तापमान के 2 अंक प्रदर्शित करें डिस्प्ले_डिग (temp_int_3, 63, 0); // तापमान के 3 अंक प्रदर्शित करें} और {if(temp_int_2> 0) // यदि परिणाम दो अंकों की संख्या है { Off_Dig(45, 0); // संख्या का स्पष्ट 1 चिह्न Display_Dig(temp_int_2, 54, 0); // तापमान का 1 अंक डिस्प्ले_डिग (temp_int_3, 63, 0) प्रदर्शित करें; // तापमान का 2 अंक प्रदर्शित करें} और // यदि परिणाम एकल-अंकीय संख्या है { Off_Dig(45, 0); // नंबर ऑफ_डिग (54, 0) का 1 चिन्ह साफ़ करें; // संख्या का स्पष्ट 2 चिह्न Display_Dig(temp_int_3, 63, 0); // तापमान का 1 अंक प्रदर्शित करें } } }
// जब भी तुलना मूल्य (प्रत्येक 1 सेकंड) ISR (TIMER1_COMPA_vect) के साथ टाइमर गणना का एक मैच होता है, तो यह ISR निकाल दिया जाता है {// पढ़ना, तापमान और प्रकाश स्तर का प्रदर्शन Read_Temp (); रीड_लक्स (); }
// शब्द "TEMP" और "LUX" प्रदर्शित करने के लिए फ़ंक्शन शून्य Display_label () {// शब्द "TEMP" Display_SetXY (0, 0); // (इंट इंडेक्स = 0; इंडेक्स <105; इंडेक्स ++) {if (इंडेक्स == 40) {डिस्प्ले_सेटएक्सवाई (0, 1);} // के लिए डिस्प्ले (अप रो) पर पोजिशन का पता सेट करें। डिस्प्ले पर (नीचे की पंक्ति) अगर (इंडेक्स == 80) {डिस्प्ले_सेटएक्सवाई (72, 0);} // डिस्प्ले पर स्थिति का पता सेट करें (ऊपर की पंक्ति) अगर (इंडेक्स == 92) {डिस्प्ले_सेटएक्सवाई (72, 1); } // प्रदर्शन पर स्थिति का पता सेट करें (निचली पंक्ति) SPDR = TEMP_1[सूचकांक]; // कोड सरणी डेटा को डिस्प्ले के बफर में लोड करें जबकि(!(SPSR & (1<<SPIF))); // ट्रांसमिशन पूरा होने तक प्रतीक्षा करें _delay_ms(10); } // शब्द "लक्स" डिस्प्ले_सेटएक्सवाई (0, 2); // (इंट इंडेक्स = 0; इंडेक्स <60; इंडेक्स ++) {if (इंडेक्स == 30) {डिस्प्ले_सेटएक्सवाई (0, 3);} // के लिए डिस्प्ले (अप रो) पर पोजिशन का पता सेट करें। प्रदर्शन पर (नीचे की पंक्ति) SPDR = TEMP_2 [सूचकांक]; // कोड सरणी डेटा को डिस्प्ले के बफर में लोड करें जबकि(!(SPSR & (1<<SPIF))); // ट्रांसमिशन पूरा होने तक प्रतीक्षा करें _delay_ms(10); } }
मुख्य अंतर (शून्य)
{ पोर्ट_इनिट (); // पोर्ट इनिशियलाइज़ेशन ADC_init (); // एडीसी आरंभीकरण SPI_Init (); // एसपीआई आरंभीकरण SPI_SS_Enable (); // प्रदर्शन DS18B20_init () सक्षम करें; // DS18B20 Display_init () का प्रारंभ; // प्रदर्शन आरंभीकरण Display_Clear (); // स्पष्ट डिस्प्ले_लेबल () प्रदर्शित करें; // प्रदर्शन शब्द "TEMP" और "LUX" TIMER1_init (); // टाइमर 1 आरंभीकरण। निगरानी शुरू करें। हर एक सेकंड में पैरामीटर प्राप्त करना। // इन्फिनिटी लूप जबकि (1) { } }
चरण 3: माइक्रोकंट्रोलर के लिए फ्लैशिंग फर्मवेयर
माइक्रोकंट्रोलर फ्लैश मेमोरी में HEX फाइल अपलोड करना। माइक्रोकंट्रोलर फ्लैश मेमोरी बर्निंग के विस्तृत विवरण के साथ वीडियो देखें: माइक्रोकंट्रोलर फ्लैश मेमोरी बर्निंग…
चरण 4: मॉनिटरिंग डिवाइस सर्किट असेंबली
योजनाबद्ध आरेख के अनुसार घटकों को कनेक्ट करें।
प्लग पावर और यह काम कर रहा है!
सिफारिश की:
नोकिया एलसीडी के साथ DSM501A के साथ वायु गुणवत्ता की निगरानी: 7 कदम
नोकिया एलसीडी के साथ DSM501A के साथ वायु गुणवत्ता की निगरानी: नमस्कार दोस्तों! इस संक्षिप्त निर्देश में मैं आपको दिखाऊंगा कि आप अपने घर या कहीं भी हवा की गुणवत्ता की निगरानी कैसे कर सकते हैं। इस बजट मूल्य वायु गुणवत्ता निगरानी स्टेशन को इकट्ठा करना काफी आसान है।
DIY अर्दुनियो मौसम स्टेशन नोकिया 5110 एलसीडी: 3 कदम
DIY अर्दुनियो वेदर स्टेशन नोकिया ५११० एलसीडी: एक और बहुत ही सरल और पोर्टेबल "वेदर स्टेशन"। मेरे पास कुछ बचे हुए सेंसर, एक प्रो मिनी और एक एलसीडी डिस्प्ले था। मुझे 3 प्लास्टिक के बाड़े मिले जो मैं अभी कुछ समय से गायब था। इसलिए मैंने अपने लिए एक कॉम्पैक्ट गैजेट बनाने का फैसला किया, जो खराब हो जाएगा
एवीआर माइक्रोकंट्रोलर। अल्ट्रासोनिक दूरी सेंसर। एलसीडी नोकिया 5110 पर एचसी-एसआर04: 4 कदम
एवीआर माइक्रोकंट्रोलर। अल्ट्रासोनिक दूरी सेंसर। एलसीडी नोकिया 5110 पर एचसी-एसआर04: सभी को नमस्कार! इस खंड में मैं दूरी को सेंसर करने के लिए सरल इलेक्ट्रॉनिक उपकरण बनाता हूं और ये पैरामीटर एलसीडी नोकिया 5110 पर प्रदर्शित होते हैं। पैरामीटर आरेख और संख्याओं के रूप में प्रदर्शित होते हैं। डिवाइस माइक्रोकंट्रोलर AVR ATMEG पर आधारित है
इन्फ्रारेड सेंसर के साथ नोकिया 5110 एलसीडी: 4 कदम
इन्फ्रारेड सेंसर के साथ नोकिया 5110 एलसीडी: नोकिया 5110 एलसीडी डिस्प्ले एक शानदार एलसीडी डिस्प्ले है जो Arduino डेवलपमेंट बोर्ड के साथ संगत है। आइए अब उन LCD में से एक को नियंत्रित करें और इसे Arduino और एक IR सेंसर के साथ इंटरफ़ेस करें
सेंसर सुहु डेंगन एलसीडी डैन एलईडी (एलसीडी और एलईडी के साथ तापमान सेंसर बनाना): 6 कदम (चित्रों के साथ)
सेंसर SUHU DENGAN LCD DAN LED (एलसीडी और एलईडी के साथ तापमान सेंसर बनाना): है, साया देवी रिवाल्डी महसिस्वा UNIVERSITAS NUSA PUTRA दारी इंडोनेशिया, दी सिनी साया और बरबागी कारा मेम्बुएट सेंसर सुहु मेंगगुनाकन Arduino डेंगन आउटपुट के एलसीडी और एलईडी। इन अदलाह पेम्बाका सुहु डेंगन देसाईं साया सेंदिरी, डेंगन सेंसर इन औरा