Mundarija:

Attiny85: 6 qadamli mini ob -havo stantsiyasi (rasmlar bilan)
Attiny85: 6 qadamli mini ob -havo stantsiyasi (rasmlar bilan)

Video: Attiny85: 6 qadamli mini ob -havo stantsiyasi (rasmlar bilan)

Video: Attiny85: 6 qadamli mini ob -havo stantsiyasi (rasmlar bilan)
Video: Программирование МК AVR. Урок 6. Бегущие огни 2024, Iyul
Anonim
Attiny85 bilan mini -havo stantsiyasi
Attiny85 bilan mini -havo stantsiyasi
Attiny85 bilan mini -havo stantsiyasi
Attiny85 bilan mini -havo stantsiyasi
Attiny85 bilan mini -havo stantsiyasi
Attiny85 bilan mini -havo stantsiyasi

Yaqinda Indigod0g ko'rsatmasida ikkita Arduino yordamida juda yaxshi ishlaydigan mini ob -havo stantsiyasi tasvirlangan. Balki hamma ham namlik va harorat ko'rsatkichlarini olish uchun 2 Arduinoni qurbon qilishni xohlamasligi mumkin va men shunga o'xshash funktsiyani ikkita Attiny85 bilan bajarish mumkinligini aytdim. O'ylaymanki, gapirish oson, shuning uchun pulimni og'zimga qo'ygan ma'qul.

Aslida, agar men ikkita oldingi ko'rsatmalarni birlashtirsam, men shunday yozgan edim:

Arduino yoki Attiny uchun 2-simli LCD interfeysi va Attiny85 (Arduino IDE 1.06) o'rtasida ma'lumotlarni qabul qilish va jo'natish, keyin ishlarning aksariyati allaqachon bajarilgan. Faqat dasturiy ta'minotni biroz moslashtirish kerak.

Men I2C LCD emas, smenali registri bo'lgan ikkita simli LCD displeyli echimni tanladim, chunki Attinyda smenali registr I2C avtobusiga qaraganda osonroq amalga oshiriladi. Ammo, agar siz, masalan, BMP180 yoki BMP085 bosim sensori o'qishni xohlasangiz, buning uchun sizga I2C kerak bo'ladi, shuning uchun siz ham I2C LCD -dan foydalanishingiz mumkin. TinyWireM - Attiny -dagi I2C uchun yaxshi kutubxona (lekin u qo'shimcha joy talab qiladi).

BOM Transmitter: DHT11 Attiny85 10 k qarshilik 433 MGts uzatuvchi moduli

Qabul qilgich Attiny85 10k qarshilik 433 MGts qabul qiluvchi moduli

Displey 74LS164 smenali registr 1N4148 diodli 2x1k rezistorli 1x1k o'zgaruvchan qarshilikli LCD displeyi 2x16

1 -qadam: Attiny85 bilan mini -havo stantsiyasi: uzatuvchi

Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi
Attiny85 bilan mini -havo stantsiyasi: uzatuvchi

Transmitter - bu reset liniyasidagi tortishish qarshiligi bilan Attiny85 -ning asosiy konfiguratsiyasi, uzatuvchi moduli "0" raqamli piniga ulangan va DHT11 ma'lumotlar pimi raqamli pin 4 ga ulangan. Antenna sifatida 17,2 sm simni ulang. (ancha yaxshi antenna uchun 5 -qadamga qarang). Dasturiy ta'minot quyidagicha:

// Attiny -da ishlaydi // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // kutubxonalar #qo'shish // Rob Tillaartdan #qo'shish DHT11; #define DHT11PIN 4 #dexin TX_PIN 0 // uzatgichingiz ulangan pin // o'zgaruvchilar float h = 0; suzuvchi 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. namlik; t = DHT11. harorat; // Bilaman, men bu erda 3 ta tamsayı o'zgaruvchidan foydalanmoqdaman // bu erda men 1 // ishlatishim mumkin edi, lekin shuning uchun transmit_h = 100* (int) h ga amal qilish osonroq; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); kechikish (500); }

Dastur ma'lumotlarni uzatish uchun Manchester kodidan foydalanadi. U DHT11 -ni o'qiydi va harorat va namlikni 2 alohida suzgichda saqlaydi. Manchester kodi suzuvchi emas, balki butun sonli bo'lsa, menda bir nechta variant bor: 1- suzgichlarni ikkiga bo'linib, ularni yuboring2- har bir suzuvchini butun son sifatida yuboring3- ikkita suzuvchini bitta butun songa yuboring 1-variant bilan men birlashtirishim kerak. tamsayılar qabul qilgichda yana suzadi va men qaysi tamsayı ekanligini aniqlab olishim kerak, bu kodni uzoq shamollatadi 2 -variant bilan men hali ham qaysi tamsayı namlik va qaysi harorat uchun ekanligini aniqlashim kerak. Agar bitta tamsayı uzatishda yo'qolsa, ketma -ket keta olmayman, shuning uchun men butun songa biriktirilgan identifikatorni yuborishim kerak edi, 3 -variant bilan men faqat bitta tamsayı yuborishim mumkin. Shubhasiz, bu o'qishni biroz aniqroq qiladi - 1 daraja ichida va hech kim noldan past haroratni yuborolmaydi, lekin bu oddiy kod va buning yo'llari bor. Hozircha bu faqat printsip haqida. Shunday qilib, men nima qilmoqchiman, men suzgichlarni tamsayılarga aylantiraman va namlikni 100 ga ko'paytiraman. Keyin namlikni haroratga qo'shaman. Namlik hech qachon 100% bo'lmaydi. Men oladigan maksimal raqam - 9900. Harorat 100 darajadan yuqori bo'lmasligini hisobga olsak, maksimal raqam 99 bo'ladi, shuning uchun men yuboradigan eng yuqori raqam - 9999 va uni qabul qiluvchi tomondan ajratish oson. Men 3 ta tamsayı ishlatadigan hisob -kitobim juda ko'p, chunki uni 1 o'zgaruvchi bilan oson bajarish mumkin. Men kodni ta'qib qilishni osonlashtirmoqchi edim, endi kod quyidagicha tuziladi:

Ikkilik eskiz o'lchami: 2, 836 bayt (maksimal 8, 192 bayt), shuning uchun men ishlatadigan dht.h kutubxonasi Rob Tillaartdan Attiny 45 yoki 85NOTE ga mos keladi. Bu kutubxona DHT22 uchun ham mos keladi. Men 1.08 versiyasidan foydalanmoqdaman. Ammo Attiny85 kutubxonaning past versiyalari bilan DHT22 ni o'qishda muammolarga duch kelishi mumkin. Menga tasdiqlanishicha, 1.08 va 1.14 oddiy Arduino -da ishlayotgan bo'lsa -da, Attiny85 -dagi DHT22 -ni o'qishda qiynaladi. Agar siz Attiny85 da DHT22 dan foydalanmoqchi bo'lsangiz, ushbu kutubxonaning 1.20 versiyasidan foydalaning. Bularning barchasi vaqt bilan bog'liq. Kutubxonaning 1.20 versiyasi tezroq o'qiladi. (Jeroen foydalanuvchi tajribasi uchun rahmat)

2 -qadam: Attiny85 bilan mini -havo stantsiyasi: qabul qilgich

Attiny85 bilan mini -havo stantsiyasi: qabul qiluvchi
Attiny85 bilan mini -havo stantsiyasi: qabul qiluvchi

Yana Attiny85 asosiy konfiguratsiyada, 10 k rezistor bilan yuqoriga tortilgan Reset pimi ishlatiladi. Qabul qilgich moduli raqamli pin 1 ga ulangan (chipdagi 6 -pin). LCD 0 va ikkita raqamli pinlarga ulangan, antenna sifatida 17,2 sm simni ulang, kod quyidagicha:

#qo'shing

#LiquidCrystal_SR lcd (0, 2, TWO_WIRE) qo'shing; #define RX_PIN 1 // = jismoniy pin 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 ("Nam:"); lcd bosma (m/100); lcd.setCursor (0, 1); lcd.print ("Harorat"); lcd.print (m%100); }}

Kod juda oddiy: uzatilgan tamsayı "m" o'zgaruvchisida qabul qilinadi va saqlanadi. Namlikni berish uchun 100 ga bo'linadi va 100 moduli haroratni beradi. Demak, qabul qilingan tamsayı 33253325/100 = 333325 % 100 edi = 25Bu kod 3380 baytni tashkil qiladi va shuning uchun 45 bilan emas, faqat attiny85 bilan foydalanish mumkin.

3 -qadam: Attiny85/45 bilan mini -havo stantsiyasi: displey

Attiny85/45 bilan mini -havo stantsiyasi: displey
Attiny85/45 bilan mini -havo stantsiyasi: displey
Attiny85/45 bilan mini -havo stantsiyasi: displey
Attiny85/45 bilan mini -havo stantsiyasi: displey

Ko'rinib turibdiki, men ikkita simli displeyda ko'rsatma beraman. Qisqasi, umumiy 16x2 displeyda ikkita raqamli pin bilan ishlash uchun shift registr ishlatiladi. mumkin, lekin keyin siz Attinada I2C protokolini amalga oshirishingiz kerak. Tinywire protokoli buni qila oladi. Ba'zi manbalarda, bu 1 MGts soatni kutadi, deb aytilgan bo'lsa -da, men uni 8Mhzda ishlatishda hech qanday muammoga duch kelmadim (boshqa loyihada), lekin men bu erda bezovta qilmadim va smenali registrdan foydalandim.

4 -qadam: Attiny85/45 bilan mini -havo stantsiyasi: imkoniyatlar/xulosalar

Attiny85/45 bilan mini -meteorologik stansiya: imkoniyatlar/xulosalar
Attiny85/45 bilan mini -meteorologik stansiya: imkoniyatlar/xulosalar
Attiny85/45 bilan mini havo stantsiyasi: imkoniyatlar/xulosalar
Attiny85/45 bilan mini havo stantsiyasi: imkoniyatlar/xulosalar
Attiny85/45 bilan mini -meteorologik stansiya: imkoniyatlar/xulosalar
Attiny85/45 bilan mini -meteorologik stansiya: imkoniyatlar/xulosalar

Aytganimdek, men ikkita attiny85 (hatto bitta attiny85+ 1 attiny45 bilan) mini -havo stantsiyasini yasash mumkinligini ko'rsatishni ko'rsatdim, lekin u faqat namlik va haroratni DHT11 yordamida yuboradi., 6 hatto hiyla -nayrang bilan ham. Shunday qilib, boshqa sensorlardan ma'lumotlarni yuborish mumkin. Mening loyihamda- lentadagi va professional PCB (OSHPark) rasmlarida ko'rinib turganidek- men DHT11, LDR va PIRdan ma'lumotlarni yuboraman/olaman, hammasi shu. Attiny85 -ni qabul qiluvchi sifatida ishlatishning cheklanishi - bu ma'lumotlarning yorqin uslubda taqdim etilishi. Xotira cheklanganligi sababli: "Harorat, namlik, yorug'lik darajasi, mavzu yaqinlashmoqda" kabi matnlar xotira maydonini tezda to'ldiradi. Shunga qaramay, harorat va namlikni yuborish/qabul qilish uchun ikkita Arduino -dan foydalanish uchun hech qanday sabab yo'q. Ma'lumotni har 10 daqiqada yuborish va uni tugmachali hujayradan yuborish uchun faqat uyqudan uyg'otish kerak. Shubhasiz, nafaqat harorat yoki namlik ma'lumotlarini yuborish mumkin, balki kichik transmitterlar to'plami ham bo'lishi mumkin. tuproq namligi ko'rsatkichlari, yoki anemometr yoki yomg'ir o'lchagichni qo'shing

5 -qadam: Mini ob -havo stantsiyasi: antenna

Mini ob -havo stantsiyasi: antenna
Mini ob -havo stantsiyasi: antenna

Antenna 433 MGts chastotali o'rnatishning muhim qismidir, men standart 17,2 sm uzunlikdagi antenna bilan tajriba o'tkazdim va antenna bilan o'ralgan qisqa flirtga ega bo'ldim. Dizayn Ben Shuelerdan olingan va "Elektor" jurnalida chop etilgan. "Havo bilan sovutilgan 433 MGts antenna" tasvirlangan PDF -ni kuzatish oson. (Havola yo'qoldi, bu erga qarang)

6 -qadam: BMP180 qo'shish

BMP180 qo'shish
BMP180 qo'shish

BMP180 kabi barometrik bosim sensori qo'shishni xohlaysizmi? bu borada boshqa ko'rsatmalarni tekshiring.

Tavsiya: