विषयसूची:

Attiny85 के साथ मिनी वेदर स्टेशन: 6 कदम (चित्रों के साथ)
Attiny85 के साथ मिनी वेदर स्टेशन: 6 कदम (चित्रों के साथ)

वीडियो: Attiny85 के साथ मिनी वेदर स्टेशन: 6 कदम (चित्रों के साथ)

वीडियो: Attiny85 के साथ मिनी वेदर स्टेशन: 6 कदम (चित्रों के साथ)
वीडियो: TUTORIAL: Quickly Getting Started with ATTINY 85/95! 2024, जुलाई
Anonim
Attiny85. के साथ मिनी वेदर स्टेशन
Attiny85. के साथ मिनी वेदर स्टेशन
Attiny85. के साथ मिनी वेदर स्टेशन
Attiny85. के साथ मिनी वेदर स्टेशन
Attiny85. के साथ मिनी वेदर स्टेशन
Attiny85. के साथ मिनी वेदर स्टेशन

हाल ही में एक निर्देशयोग्य Indigod0g में एक मिनी वेदर स्टेशन का वर्णन किया गया है जो दो Arduinos का उपयोग करके बहुत अच्छी तरह से काम करता है। शायद हर कोई नमी और तापमान रीडिंग प्राप्त करने के लिए 2 Arduinos का त्याग नहीं करना चाहता और मैंने टिप्पणी की कि दो Attiny85 के साथ एक समान कार्य करना संभव होना चाहिए। मुझे लगता है कि बात करना आसान है, इसलिए बेहतर होगा कि मैं अपना पैसा वहीं लगाऊं जहां मेरा मुंह है।

वास्तव में, अगर मैं अपने द्वारा लिखे गए पहले के दो अनुदेशों को मिलाता हूं:

Arduino या Attiny के लिए 2-वायर LCD इंटरफ़ेस और Attiny85 (Arduino IDE 1.06) के बीच डेटा प्राप्त करना और भेजना तो अधिकांश काम पहले ही हो चुका है। केवल सॉफ्टवेयर को थोड़ा सा अनुकूलित करने की आवश्यकता है।

मैंने I2C LCD के बजाय शिफ्ट रजिस्टर के साथ दो वायर एलसीडी समाधान के लिए चुना क्योंकि Attiny पर I2C बस की तुलना में शिफ्ट रजिस्टर को लागू करना आसान है। हालाँकि … यदि आप उदाहरण के लिए BMP180 या BMP085 प्रेशर सेंसर पढ़ना चाहते हैं, तो आपको इसके लिए I2C की आवश्यकता है, वैसे भी आप I2C LCD का भी उपयोग कर सकते हैं। TinyWireM एक Attiny पर I2C के लिए एक अच्छी लाइब्रेरी है (लेकिन इसके लिए अतिरिक्त स्थान की आवश्यकता होती है)।

बीओएम ट्रांसमीटर: DHT11 Attiny85 10 k रोकनेवाला 433MHz ट्रांसमीटर मॉड्यूल

रिसीवर Attiny85 10k रोकनेवाला 433 मेगाहर्ट्ज रिसीवर मॉड्यूल

प्रदर्शन 74LS164 शिफ्ट रजिस्टर 1N4148 डायोड 2x1k रोकनेवाला 1x1k चर रोकनेवाला एक एलसीडी डिस्प्ले 2x16

चरण 1: Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर

Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर
Attiny85 के साथ मिनी वेदर स्टेशन: ट्रांसमीटर

ट्रांसमीटर रीसेट लाइन पर पुल अप रेसिस्टर के साथ Attiny85 का एक बहुत ही बुनियादी विन्यास है। एक ट्रांसमीटर मॉड्यूल डिजिटल पिन '0' से जुड़ा होता है और DHT11 डेटा पिन डिजिटल पिन से जुड़ा होता है। एंटीना के रूप में 17.2 सेमी का एक तार संलग्न करें। (बेहतर एंटेना के लिए चरण 5 देखें)। सॉफ्टवेयर इस प्रकार है:

// Attiny पर काम करेगा //RF433=D0 पिन 5

//DHT11=D4 पिन 3 // लाइब्रेरी #include // Rob Tillaart से #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // पिन जहां आपका ट्रांसमीटर जुड़ा है // वेरिएबल फ्लोट h=0; फ्लोट टी = 0; इंट ट्रांसमिट_टी = 0; इंट ट्रांसमिट_एच = 0; इंट ट्रांसमिट_डेटा = 0; शून्य सेटअप () {पिनमोड (1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); } शून्य लूप () { int chk = DHT11.read11 (DHT11PIN); एच = डीएचटी 11। आर्द्रता; टी = DHT11.तापमान; // मुझे पता है, मैं यहां 3 पूर्णांक चर का उपयोग कर रहा हूं // जहां मैं 1// का उपयोग कर सकता हूं, लेकिन यह इतना आसान है कि ट्रांसमिट_एच = 100 * (इंट) एच का पालन करना आसान है; ट्रांसमिट_टी = (इंट) टी; ट्रांसमिट_डेटा = ट्रांसमिट_एच + ट्रांसमिट_टी; man.transmit(transmit_data); देरी (500); }

सॉफ्टवेयर डेटा भेजने के लिए मैनचेस्टर कोड का उपयोग करता है। यह DHT11 पढ़ता है और तापमान और आर्द्रता को 2 अलग-अलग फ़्लोट्स में संग्रहीत करता है। चूंकि मैनचेस्टर कोड फ्लोट नहीं भेजता है, लेकिन एक पूर्णांक, मेरे पास कई विकल्प हैं: 1- फ्लोट को दो पूर्णांक में विभाजित करें और उन्हें भेजें 2- प्रत्येक फ्लोट को पूर्णांक के रूप में भेजें 3- दो फ्लोट्स को एक पूर्णांक के रूप में भेजें विकल्प 1 के साथ मुझे गठबंधन करने की आवश्यकता है पूर्णांक रिसीवर में फिर से तैरता है और मुझे यह पहचानना होगा कि कौन सा पूर्णांक है, कोड को लंबे समय तक घुमावदार बनाना विकल्प 2 के साथ मुझे अभी भी यह पहचानने की आवश्यकता है कि कौन सा पूर्णांक आर्द्रता के लिए है और कौन सा तापमान के लिए है। ट्रांसमिशन में एक पूर्णांक खो जाने की स्थिति में मैं अकेले अनुक्रम से नहीं जा सकता, इसलिए मुझे पूर्णांक से जुड़ा एक पहचानकर्ता भेजने की आवश्यकता होगी। विकल्प 3 के साथ, मैं सिर्फ एक पूर्णांक भेज सकता हूं। जाहिर है यह रीडिंग को थोड़ा कम सटीक बनाता है - 1 डिग्री के भीतर- और कोई शून्य तापमान से नीचे नहीं भेज सकता है, लेकिन यह सिर्फ एक साधारण कोड है और इसके आसपास के तरीके हैं। अभी के लिए यह केवल सिद्धांत के बारे में है। तो मैं क्या करता हूं कि मैं फ्लोट को पूर्णांक में बदल देता हूं और मैं आर्द्रता को १०० से गुणा करता हूं। फिर मैं तापमान को गुणा आर्द्रता में जोड़ता हूं। इस तथ्य को देखते हुए कि आर्द्रता कभी भी १००% नहीं होगी मुझे जो अधिकतम संख्या मिलेगी वह 9900 है। इस तथ्य को देखते हुए कि तापमान भी 100 डिग्री से ऊपर नहीं होगा, अधिकतम संख्या 99 होगी, इसलिए मैं जो उच्चतम संख्या भेजूंगा वह 9999 है और इसे रिसीवर की तरफ से अलग करना आसान है। बेशक मेरी गणना जिसमें मैं 3 पूर्णांकों का उपयोग करता हूं वह अधिक है क्योंकि इसे आसानी से 1 चर के साथ किया जा सकता है। मैं बस कोड का पालन करना आसान बनाना चाहता था। कोड अब इस प्रकार संकलित करता है:

बाइनरी स्केच आकार: २, ८३६ बाइट्स (अधिकतम ८, १९२ बाइट का) ताकि एक एटिनी ४५ या ८५ नोट में फिट हो जाए। वह पुस्तकालय DHT22 के लिए भी उपयुक्त है। मैं संस्करण 1.08 का उपयोग कर रहा हूँ। हालाँकि Attiny85 को लाइब्रेरी के निचले संस्करणों के साथ DHT22 को पढ़ने में समस्या हो सकती है। मेरे लिए यह पुष्टि की गई है कि 1.08 और 1.14-हालांकि एक नियमित Arduino पर काम कर रहे हैं- Attiny85 पर DHT22 को पढ़ने में परेशानी होती है। यदि आप Attiny85 पर DHT22 का उपयोग करना चाहते हैं, तो इस पुस्तकालय के 1.20 संस्करण का उपयोग करें। यह सब समय के साथ करना है। पुस्तकालय के 1.20 संस्करण में तेजी से पढ़ा गया है। (उस उपयोगकर्ता अनुभव जेरोइन के लिए धन्यवाद)

चरण 2: Attiny85 के साथ मिनी वेदर स्टेशन: रिसीवर

Attiny85 के साथ मिनी वेदर स्टेशन: रिसीवर
Attiny85 के साथ मिनी वेदर स्टेशन: रिसीवर

फिर से Attiny85 का उपयोग एक बुनियादी विन्यास में किया जाता है जिसमें रीसेट पिन 10 k रोकनेवाला के साथ उच्च खींचा जाता है। रिसीवर मॉड्यूल डिजिटल पिन 1 (चिप पर पिन 6) से जुड़ा हुआ है। एलसीडी डिजिटल पिन 0 और दो से जुड़ा है। एंटीना के रूप में 17.2 सेमी का तार संलग्न करें। कोड इस प्रकार है:

#शामिल

#include लिक्विड क्रिस्टल_एसआर LCD(0, 2, TWO_WIRE); #define RX_PIN 1 //= भौतिक पिन 6 शून्य सेटअप () {lcd.begin(16, 2); एलसीडी.होम (); man.setupReceive(RX_PIN, MAN_1200); man.beginReceive (); }शून्य लूप () { अगर (man.receiveComplete ()) { uint16_t m = man.getMessage (); man.beginReceive (); LCD.print ("आर्द्र:"); एलसीडी.प्रिंट (एम / 100); LCD.setCursor(0, 1); LCD.print ("अस्थायी"); एलसीडी.प्रिंट (एम% 100); } }

कोड काफी सरल है: प्रेषित पूर्णांक प्राप्त होता है और चर 'एम' में संग्रहीत होता है। इसे आर्द्रता देने के लिए 100 से विभाजित किया जाता है और 100 का मॉड्यूल तापमान देता है। तो मान लीजिए कि प्राप्त पूर्णांक 33253325/100 = 333325% 100 था =25यह कोड ३३८० बाइट्स के रूप में संकलित होता है और इसलिए इसका उपयोग केवल attiny८५ के साथ किया जा सकता है, ४५. के साथ नहीं

चरण 3: मिनी मौसम स्टेशन Attiny85/45 के साथ: प्रदर्शन

Attiny85/45 के साथ मिनी वेदर स्टेशन: डिस्प्ले
Attiny85/45 के साथ मिनी वेदर स्टेशन: डिस्प्ले
Attiny85/45 के साथ मिनी वेदर स्टेशन: डिस्प्ले
Attiny85/45 के साथ मिनी वेदर स्टेशन: डिस्प्ले

डिस्प्ले के लिए यह सबसे अच्छा है कि मैं दो वायर डिस्प्ले पर अपने इंस्ट्रक्शनल को संदर्भित करता हूं। संक्षेप में, एक सामान्य 16x2 डिस्प्ले एक शिफ्टरजिस्टर का उपयोग करता है, इसलिए यह दो डिजिटल पिन के साथ काम कर सकता है। यदि आप I2C रेडी डिस्प्ले का उपयोग करना पसंद करते हैं, तो वह है संभव भी है, लेकिन फिर आपको Attiny पर I2C प्रोटोकॉल लागू करने की आवश्यकता है। टाइनीवायर प्रोटोकॉल ऐसा कर सकता है। हालांकि कुछ सूत्रों का कहना है कि यह 1 मेगाहर्ट्ज घड़ी की अपेक्षा करता है, मुझे 8 मेगाहर्ट्ज पर इसका उपयोग करने में कोई परेशानी नहीं हुई (किसी अन्य परियोजना में) वैसे भी मैंने यहां परेशान नहीं किया और एक शिफ्ट रजिस्टर का उपयोग किया।

चरण 4: Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष

Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष
Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष
Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष
Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष
Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष
Attiny85/45 के साथ मिनी वेदर स्टेशन: संभावनाएं/निष्कर्ष

जैसा कि कहा गया है, मैंने यह दिखाने के लिए यह निर्देश योग्य बनाया है कि कोई दो attiny85 (यहां तक कि एक attiny85 + 1 attiny45 के साथ) के साथ एक मिनी मौसम स्टेशन बना सकता है। यह केवल DHT11 का उपयोग करके आर्द्रता और तापमान भेजता है। हालाँकि, Attiny में उपयोग करने के लिए 5 डिजिटल पिन हैं, 6 कुछ चालबाजी के साथ भी। इसलिए अधिक सेंसर से डेटा भेजना संभव है। मेरी परियोजना में- जैसा कि स्ट्रिपबोर्ड पर और एक पेशेवर पीसीबी (ओएसएचपार्क) पर चित्रों में देखा गया है - मैं एक डीएचटी 11 से एलडीआर और पीआईआर से डेटा भेजता/प्राप्त करता हूं, सभी का उपयोग कर दो attiny85's एक attiny85 को रिसीवर के रूप में उपयोग करने की सीमा हालांकि एक आकर्षक शैली में डेटा की प्रस्तुति है। चूंकि स्मृति सीमित है: 'तापमान, आर्द्रता, प्रकाश स्तर, विषय आ रहा है' जैसे ग्रंथ मूल्यवान स्मृति स्थान को बहुत तेजी से भर देंगे। फिर भी, तापमान और आर्द्रता भेजने/प्राप्त करने के लिए दो Arduino का उपयोग करने का कोई कारण नहीं है। इसके अतिरिक्त, यह संभव है ट्रांसमीटर को सो जाने के लिए और केवल इसे हर 10 मिनट में डेटा भेजने के लिए जगाया जाता है और इस तरह इसे एक बटन सेल से फीड किया जाता है। जाहिर है, न केवल तापमान या आर्द्रता डेटा भेजा जा सकता है, बल्कि छोटे ट्रांसमीटर भेजने की एक सरणी हो सकती है मिट्टी की नमी की रीडिंग भी, या एनीमोमीटर, या रेन मीटर जोड़ें

चरण 5: मिनी मौसम स्टेशन: एंटीना

मिनी मौसम स्टेशन: एंटीना
मिनी मौसम स्टेशन: एंटीना

एंटीना किसी भी 433 मेगाहर्ट्ज सेट अप का एक महत्वपूर्ण हिस्सा है। मैंने मानक 17.2 सेमी 'रॉड' एंटीना के साथ प्रयोग किया है और कॉइल एंटीना के साथ एक छोटा फ्लर्ट किया है, जो सबसे अच्छा काम करता है वह एक कॉइल लोड एंटीना है जो बनाना आसान है। डिजाइन बेन शूएलर का है और जाहिर तौर पर 'एलेक्टोर' पत्रिका में प्रकाशित हुआ था। इस 'एयर कूल्ड 433 मेगाहर्ट्ज एंटीना' के विवरण के साथ एक पीडीएफ का पालन करना आसान है। (लिंक गायब हो गया, यहां देखें)

चरण 6: BMP180 जोड़ना

BMP180 जोड़ना
BMP180 जोड़ना

BMP180 की तरह बैरोमीटर का प्रेशर सेंसर जोड़ना चाहते हैं? उस पर मेरे अन्य निर्देशयोग्य की जाँच करें।

सिफारिश की: