فهرست مطالب:

مینی ایستگاه هواشناسی با Attiny85: 6 مرحله (همراه با تصاویر)
مینی ایستگاه هواشناسی با Attiny85: 6 مرحله (همراه با تصاویر)

تصویری: مینی ایستگاه هواشناسی با Attiny85: 6 مرحله (همراه با تصاویر)

تصویری: مینی ایستگاه هواشناسی با Attiny85: 6 مرحله (همراه با تصاویر)
تصویری: مینی چت | ایستگاه گیری با صدای دخترونه 😝 2024, نوامبر
Anonim
مینی ایستگاه هواشناسی با Attiny85
مینی ایستگاه هواشناسی با Attiny85
مینی ایستگاه هواشناسی با Attiny85
مینی ایستگاه هواشناسی با Attiny85
مینی ایستگاه هواشناسی با Attiny85
مینی ایستگاه هواشناسی با Attiny85

Indigod0g اخیراً یک ایستگاه هواشناسی کوچک را توصیف کرد که با استفاده از دو آردوینو بسیار خوب کار می کند. شاید همه مایل نباشند 2 آردوینو را قربانی رطوبت و دما کنند و من نظر دادم که می توان عملکرد مشابهی را با دو Attiny85 انجام داد. من حدس می زنم صحبت آسان است ، بنابراین بهتر است پولم را جایی بگذارم که دهانم در آنجا باشد.

در حقیقت ، اگر دو دستورالعمل قبلی را ترکیب کنم ، نوشتم:

رابط LCD 2-Wire برای Arduino یا Attiny و دریافت و ارسال داده بین Attiny85 (Arduino IDE 1.06) و سپس بیشتر کار در حال حاضر انجام شده است. فقط باید کمی نرم افزار را وفق دهید.

من یک راه حل ال سی دی دو سیمه با یک شیفت رجیستر را انتخاب کردم ، نه یک LCD I2C ، زیرا در Attiny اجرای شیفت آسانتر از گذرگاه I2C است. با این حال … اگر به عنوان مثال می خواهید سنسور فشار BMP180 یا BMP085 را بخوانید ، به هر حال برای آن نیاز به I2C دارید ، بنابراین ممکن است از LCD I2C نیز استفاده کنید. TinyWireM یک کتابخانه خوب برای I2C در Attiny است (اما به فضای بیشتری نیاز دارد).

BOM فرستنده: DHT11 Attiny85 10 ماژول فرستنده مقاومت 433 مگاهرتز

گیرنده Attiny85 10k مقاومت 433 مگاهرتز ماژول گیرنده

صفحه نمایش 74LS164 shift shift 1N4148 دیود 2x1k مقاومت 1x1k مقاومت متغیر یک صفحه نمایش LCD 2x16

مرحله 1: ایستگاه هواشناسی کوتاه با Attiny85: فرستنده

مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده
مینی ایستگاه هواشناسی با Attiny85: فرستنده

فرستنده یک پیکربندی بسیار اساسی از Attiny85 با مقاومت کششی در خط تنظیم مجدد است. یک ماژول فرستنده به پین دیجیتال '0' وصل شده است و پین داده DHT11 به پین 4 دیجیتال متصل می شود. یک سیم 17.2 سانتی متری را به عنوان آنتن وصل کنید (برای آنتن بسیار بهتر مرحله 5 را ببینید). نرم افزار به شرح زیر است:

// روی Attiny // RF433 = D0 پین 5 کار می کند

// DHT11 = D4 پین 3 // کتابخانه ها #شامل // از راب تیلارت #شامل dht DHT11 ؛ #define DHT11PIN 4 #dexine TX_PIN 0 // pin جایی که فرستنده شما متصل است // متغیرها float h = 0؛ شناور t = 0 ؛ int transmit_t = 0؛ int transmit_h = 0؛ int transmit_data = 0؛ void setup () {pinMode (1، INPUT)؛ man.setupTransmit (TX_PIN ، MAN_1200) ؛ } void loop () {int chk = DHT11.read11 (DHT11PIN)؛ h = DHT11. رطوبت ؛ t = DHT11.temperature؛ // می دانم ، من از 3 متغیر صحیح در اینجا استفاده می کنم // جایی که می توانم از 1 // استفاده کنم ، اما این فقط به این دلیل است که می توان transmit_h = 100* (int) h را دنبال کرد؛ transmit_t = (int) t ؛ transmit_data = transmit_h+transmit_t؛ man.transmit (transmit_data) ؛ تأخیر (500) ؛ }

این نرم افزار از کد منچستر برای ارسال داده ها استفاده می کند. DHT11 را می خواند و دما و رطوبت را در 2 شناور جداگانه ذخیره می کند. از آنجا که کد منچستر شناور ارسال نمی کند ، بلکه یک عدد صحیح است ، من چندین گزینه دارم: 1- شناورها را به دو عدد صحیح تقسیم کرده و آنها را ارسال کنید 2- هر شناور را به صورت یک عدد صحیح ارسال کنید 3- دو شناور را به عنوان یک عدد صحیح ارسال کنید با گزینه 1 من باید ترکیب کنم اعداد صحیح دوباره در گیرنده شناور می شود و من باید تشخیص دهم که کدام عدد صحیح چیست و کد طولانی می شود. با گزینه 2 ، من هنوز باید تشخیص دهم که کدام عدد صحیح برای رطوبت و کدام برای دما است. در صورتی که یک عدد صحیح در انتقال از بین برود ، نمی توانم به تنهایی دنبال کنم ، بنابراین باید یک شناسه متصل به یک عدد صحیح ارسال کنم. با گزینه 3 ، می توانم فقط یک عدد صحیح را ارسال کنم. بدیهی است که این امر خواندن را کمی دقیق تر می کند - در یک درجه- و نمی توان دمای زیر صفر را ارسال کرد ، اما این فقط یک کد ساده است و راه هایی برای حل آن وجود دارد. در حال حاضر این فقط در مورد اصل است. بنابراین آنچه من انجام می دهم این است که شناورها را به اعداد صحیح تبدیل می کنم و رطوبت را با 100 ضرب می کنم. سپس دما را به رطوبت ضرب شده اضافه می کنم. با توجه به این واقعیت که رطوبت هرگز 100 the نخواهد بود حداکثر عددی که من دریافت می کنم 9900 است. با توجه به این واقعیت که درجه حرارت نیز بالاتر از 100 درجه نخواهد بود ، حداکثر عدد 99 خواهد بود ، بنابراین بالاترین عددی که ارسال می کنم 9999 است و به راحتی در طرف گیرنده جدا می شود. محاسبه من که در آن از 3 عدد صحیح استفاده می کنم بیش از حد است زیرا می توان به راحتی با 1 متغیر انجام داد. من فقط می خواستم کد را آسان تر دنبال کنم. کد اکنون به صورت زیر کامپایل می شود:

اندازه طرح باینری: 2 ، 836 بایت (حداکثر 8 ، 192 بایت) به طوری که در Attiny 45 یا 85 توجه داشته باشید ، کتابخانه dht.h که من استفاده می کنم کتابخانه Rob Tillaart است. آن کتابخانه همچنین برای DHT22 مناسب است. من از نسخه 1.08 استفاده می کنم. با این حال ممکن است Attiny85 در نسخه های پایین تر کتابخانه با خواندن DHT22 مشکل داشته باشد. برای من تأیید شده است که 1.08 و 1.14 - اگرچه در Arduino معمولی کار می کنند - در خواندن DHT22 در Attiny85 مشکل دارند. اگر می خواهید از DHT22 در Attiny85 استفاده کنید ، از نسخه 1.20 این کتابخانه استفاده کنید. همه اینها با زمان بندی انجام می شود. نسخه 1.20 کتابخانه دارای خواندن سریعتر است. (با تشکر از تجربه کاربری Jeroen)

مرحله 2: ایستگاه هواشناسی کوچک با Attiny85: گیرنده

مینی ایستگاه هواشناسی با Attiny85: گیرنده
مینی ایستگاه هواشناسی با Attiny85: گیرنده

دوباره از Attiny85 در پیکربندی اولیه استفاده می شود و پین Reset با مقاومت 10 k بالا کشیده شده است. ماژول گیرنده به پین دیجیتال 1 (پایه 6 روی تراشه) متصل شده است. LCD به پین های دیجیتال 0 و دو متصل شده است. سیم 17.2 سانتی متری را به عنوان آنتن وصل کنید. کد به شرح زیر است:

#عبارتند از

#شامل LiquidCrystal_SR LCD (0 ، 2 ، TWO_WIRE) ؛ #تعریف RX_PIN 1 // = پین فیزیکی 6 void setup () {lcd.begin (16، 2)؛ lcd.home ()؛ man.setupReceive (RX_PIN ، MAN_1200) ؛ man.beginReceive ()؛ } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage ()؛ man.beginReceive ()؛ lcd.print ("مرطوب:") ؛ ال سی دی چاپ (m/100) ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("Temp") ؛ lcd.print (m 100 100) ؛ }}

کد نسبتاً ساده است: عدد صحیح منتقل شده در متغیر 'm' دریافت و ذخیره می شود. این عدد بر 100 تقسیم می شود تا رطوبت ایجاد شود و مدول 100 دما را نشان می دهد. بنابراین فرض کنید عدد صحیح دریافت شده 33253325/100 = 333325٪ 100 = 25 این کد به عنوان 3380 بایت کامپایل می شود و بنابراین فقط با attiny85 قابل استفاده است ، نه با 45

مرحله 3: ایستگاه هواشناسی کوچک با Attiny85/45: صفحه نمایش

مینی ایستگاه هواشناسی با Attiny85/45: صفحه نمایش
مینی ایستگاه هواشناسی با Attiny85/45: صفحه نمایش
مینی ایستگاه هواشناسی با Attiny85/45: صفحه نمایش
مینی ایستگاه هواشناسی با Attiny85/45: صفحه نمایش

برای صفحه نمایش بهتر است به دستورالعمل خود در صفحه دو سیم اشاره کنم. به طور خلاصه ، یک صفحه نمایش معمولی 16x2 از shiftregister استفاده می کند تا بتواند با دو پین دیجیتال کار کند. البته اگر ترجیح می دهید از صفحه نمایش آماده I2C استفاده کنید ، یعنی امکان پذیر است ، اما سپس باید پروتکل I2C را در Attiny پیاده سازی کنید. پروتکل Tinywire می تواند این کار را انجام دهد. اگرچه برخی منابع می گویند که انتظار می رود یک ساعت 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 حتی با برخی حیله ها. بنابراین می توان داده ها را از سنسورهای بیشتری ارسال کرد. در پروژه من- همانطور که در تصاویر روی نوار صفحه و روی یک PCB حرفه ای (OSHPark) دیده می شود- من داده ها را از DHT11 ، از LDR و از PIR ارسال می کنم/دریافت می کنم ، همه با استفاده از هر دو محدودیت در استفاده از attiny85 به عنوان گیرنده ارائه داده ها به سبک پر زرق و برق است. از آنجا که حافظه محدود است: متن هایی مانند "دما ، رطوبت ، سطح نور ، نزدیک شدن موضوع" فضای حافظه با ارزش را به سرعت پر می کند. با این وجود ، هیچ دلیلی برای استفاده از دو آردوینو فقط برای ارسال/دریافت دما و رطوبت وجود ندارد. علاوه بر این ، این امکان وجود دارد بخواهید فرستنده بخوابد و فقط بیدار شود تا داده ها را هر 10 دقیقه یکبار ارسال کرده و در نتیجه از سلول دکمه تغذیه کنید. بدیهی است که نه تنها داده های دما یا رطوبت قابل ارسال است بلکه می توان آرایه ای از فرستنده های کوچک را ارسال کرد رطوبت خاک را نیز بخوانید ، یا بادسنج یا باران سنج اضافه کنید

مرحله 5: ایستگاه هواشناسی کوتاه: آنتن

مینی ایستگاه هواشناسی: آنتن
مینی ایستگاه هواشناسی: آنتن

آنتن بخش مهمی از هر 433 مگاهرتز است. من آنتن استاندارد 17.2 سانتی متری "میله ای" را آزمایش کرده ام و با آنتن سیم پیچ کوتاه معاشقه کرده ام. آنچه به نظر می رسد بهترین کار را می کند ، آنتن بارگذاری شده با سیم پیچ است که ساخت آن آسان است. طراحی از بن شولر است و ظاهراً در مجله "Elektor" منتشر شده است. پیاده سازی PDF با شرح این "آنتن هوای خنک 433 مگاهرتز" آسان است. (پیوند ناپدید شد ، اینجا را بررسی کنید)

مرحله 6: افزودن BMP180

افزودن BMP180
افزودن BMP180

آیا می خواهید سنسور فشار فشار مانند BMP180 را اضافه کنید؟ دستورالعمل دیگر من را در این مورد بررسی کنید

توصیه شده: