Sadržaj:

Mini meteorološka stanica s attiny85: 6 koraka (sa slikama)
Mini meteorološka stanica s attiny85: 6 koraka (sa slikama)

Video: Mini meteorološka stanica s attiny85: 6 koraka (sa slikama)

Video: Mini meteorološka stanica s attiny85: 6 koraka (sa slikama)
Video: Meteorološka stanica - Srednja škola Novi Marof! 2024, Srpanj
Anonim
Mini meteorološka stanica s Attiny85
Mini meteorološka stanica s Attiny85
Mini meteorološka stanica s Attiny85
Mini meteorološka stanica s Attiny85
Mini meteorološka stanica s Attiny85
Mini meteorološka stanica s Attiny85

Nedavno je Indigod0g opisao mini vremensku stanicu koja radi prilično dobro, koristeći dva Arduina. Možda ne žele svi žrtvovati 2 Arduina kako bi dobili očitanja vlažnosti i temperature, a ja sam komentirao da bi trebalo biti moguće izvesti sličnu funkciju s dva Attiny85. Pretpostavljam da je razgovor lak, pa bolje da svoj novac stavim na usta.

Zapravo, ako kombiniram dvije ranije upute, napisao sam:

2-žično LCD sučelje za Arduino ili Attiny iPrimanje i slanje podataka između Attiny85 (Arduino IDE 1.06) tada je većina posla već obavljena. Potrebno je samo malo prilagoditi softver.

Odlučio sam se za dvožično LCD rješenje s pomakom registara, a ne I2C LCD jer je na Attinyu registar pomaka lakše implementirati od I2C sabirnice. Međutim … ako, na primjer, želite pročitati senzor tlaka BMP180 ili BMP085, za to vam je ionako potreban I2C pa biste i tada mogli koristiti I2C LCD. TinyWireM je dobra knjižnica za I2C na Attinyju (ali zahtijeva dodatni prostor).

BOM Odašiljač: DHT11 Attiny85 10 k otpornički modul odašiljača 433MHz

Prijemnik Attiny85 10k otpornik 433 MHz prijemnički modul

Zaslon 74LS164 registar pomaka 1N4148 dioda 2x1k otpornik 1x1k promjenjivi otpornik LCD zaslon 2x16

Korak 1: Mini meteorološka stanica s Attiny85: odašiljač

Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač
Mini meteorološka stanica s Attiny85: odašiljač

Odašiljač je vrlo osnovna konfiguracija Attiny85 s otpornikom na izvlačenje na liniji za resetiranje. Modul odašiljača priključen je na digitalni pin '0', a DHT11 podatkovni pin na digitalni pin 4. Priključite žicu od 17,2 cm kao antenu (za mnogo bolju antenu pogledajte korak 5). Softver je sljedeći:

// radit će na Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // knjižnice #include // From Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin gdje je spojen vaš odašiljač // varijable plutaju h = 0; plovak t = 0; int prijenos_t = 0; int prijenos_h = 0; int prijenos_podataka = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. vlažnost; t = DHT11.temperatura; // Znam, ovdje koristim 3 cjelobrojne varijable // gdje bih mogao koristiti 1 // ali to je samo zato da je lakše slijediti transmit_h = 100* (int) h; prijenos_t = (int) t; prijenos_podataka = prijenos_h+prijenos_t; čovjek.prijenosi (odašilja_podatke); kašnjenje (500); }

Softver koristi Manchester kod za slanje podataka. Očitava DHT11 i pohranjuje temperaturu i vlagu u 2 odvojena plovka. Kako Manchester kod ne šalje float, nego cijeli broj, imam nekoliko mogućnosti: 1- podijeliti float na dva cijela broja i poslati ih2- poslati svaki float kao cijeli broj3- poslati dva floatta kao jedan cijeli broj S opcijom 1 moram kombinirati cijeli brojevi ponovno plutaju u prijemniku i moram identificirati koji je cijeli broj što čini šifru dugo namotanom. Uz opciju 2 još uvijek moram identificirati koji je cijeli broj za vlažnost, a koji za temperaturu. Ne mogu ići sam po redoslijedu u slučaju da se jedan cijeli broj izgubi u prijenosu, pa bih morao poslati identifikator pridružen cijelom broju. Uz opciju 3, mogu poslati samo jedan cijeli broj. Očigledno ovo čini očitanja malo manje točnim - unutar 1 stupnja - i ne mogu se slati temperature ispod nule, ali to je samo jednostavan kôd i postoje načini da se to zaobiđe. Zasad se radi samo o principu. Dakle, ono što radim je da pretvorim plovke u cijele brojeve i pomnožim vlažnost sa 100. Zatim dodam temperaturu umnoženoj vlažnosti. S obzirom na činjenicu da vlažnost nikada neće biti 100% najveći broj koji ću dobiti je 9900. S obzirom na činjenicu da temperatura također neće biti iznad 100 stupnjeva, maksimalni broj bit će 99, stoga je najveći broj koji ću poslati 9999 i to je lako odvojiti na strani prijemnika. Naravno moj izračun u kojem koristim 3 cijela broja je pretjeran jer bi se to lako moglo učiniti s 1 varijablom. Samo sam htio olakšati praćenje koda. Kôd se sada sastavlja kao:

Veličina binarne skice: 2, 836 bajta (od maksimalnih 8, 192 bajta) tako da stane u Attiny 45 ili 85NAPOMENU dht.h biblioteka koju koristim je ona iz Roba Tillaarta. Ta je knjižnica prikladna i za DHT22. Koristim verziju 1.08. Međutim, Attiny85 može imati problema s čitanjem DHT22 s nižim verzijama knjižnice. Potvrđeno mi je da 1,08 i 1,14 - iako rade na običnom Arduinu - imaju problema s čitanjem DHT22 na Attiny85. Ako želite koristiti DHT22 na Attiny85, upotrijebite 1.20 verziju ove biblioteke. Sve je to trebalo učiniti s vremenom. Verzija knjižnice 1.20 ima brže čitanje. (Hvala na korisničkom iskustvu, Jeroen)

Korak 2: Mini meteorološka stanica s Attiny85: prijemnik

Mini meteorološka stanica s Attiny85: prijemnik
Mini meteorološka stanica s Attiny85: prijemnik

Ponovno se Attiny85 koristi u osnovnoj konfiguraciji s pin za resetiranje visoko povučenim s 10 k otpornikom. Modul prijemnika priključen je na digitalni pin 1 (pin 6 na čipu). LCD je pričvršćen na digitalne pinove 0 i dva. Priključite žicu od 17,2 cm kao antenu. Kôd je sljedeći:

#uključi

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fizički 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 ("Vlažno:"); lcd.tisak (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.tisak (m%100); }}

Kôd je prilično jednostavan: preneseni cijeli broj se prima i sprema u varijablu 'm'. Dijeli se sa 100 kako bi se dobila vlažnost, a po modulu 100 daje temperaturu. Pretpostavimo da je cijeli broj primljen 33253325/100 = 333325 % 100 = 25Ovaj kôd kompilira 3380 bajta i stoga se može koristiti samo s attiny85, a ne s 45

Korak 3: Mini meteorološka stanica s Attiny85/45: Zaslon

Mini meteorološka stanica s attiny85/45: zaslon
Mini meteorološka stanica s attiny85/45: zaslon
Mini meteorološka stanica s attiny85/45: zaslon
Mini meteorološka stanica s attiny85/45: zaslon

Za zaslon je najbolje da se referiram na instrukcije na dvožilnom zaslonu. Ukratko, uobičajeni zaslon veličine 16x2 koristi shiftregister tako da može raditi s dva digitalna pina. Naravno, ako više volite koristiti zaslon spreman za I2C, tj. moguće, ali tada morate implementirati I2C protokol na Attinyju. Tinywire protokol to može učiniti. Iako neki izvori kažu da se od njih očekuje sat od 1 MHz, nisam imao problema (u drugom projektu) da ga koristim na 8 MHz.

Korak 4: Mini meteorološka stanica s ocjenama85/45: Mogućnosti/zaključci

Mini meteorološka stanica s ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica s ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica s ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica s ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica s ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica s ocjenama85/45: mogućnosti/zaključci

Kao što je rečeno, napravio sam ovo uputstvo kako bih pokazao da se može napraviti mini meteorološka stanica s dvije attiny85 (čak i s jednom attiny85+ 1 attiny45). Ona šalje samo vlažnost i temperaturu, koristeći DHT11. Međutim, Attiny ima 5 digitalnih pinova za korištenje, 6 čak i s nekim trikom. Stoga je moguće slati podatke s više senzora. U mom projektu- kao što se vidi na slikama na stripboard-u i na profesionalnom PCB-u (OSHPark)- šaljem/primam podatke s DHT11, iz LDR-a i iz PIR-a, a sve pomoću dva attiny85 -aOgraničenje u korištenju attiny85 -a kao prijemnika ipak je predstavljanje podataka u blještavom stilu. Kako je memorija ograničena: tekstovi poput 'Temperatura, Vlažnost, razina svjetlosti, približavanje subjekta' prilično će brzo popuniti dragocjeni memorijski prostor. Ipak, nema razloga koristiti dva Arduina samo za slanje/primanje temperature i vlažnosti. Dodatno, moguće je da odašiljač zaspi i da se samo probudi kako bi slao podatke recimo svakih 10 minuta i na taj način ih napajao iz ćelije gumba. Očito se ne mogu slati samo podaci o temperaturi ili vlažnosti, već se može poslati niz malih odašiljača koji šalju očitajte i vlažnost tla ili dodajte anemometar ili mjerač kiše

Korak 5: Mini meteorološka stanica: antena

Mini meteorološka stanica: Antena
Mini meteorološka stanica: Antena

Antena je važan dio svakog postavljenog 433Mhz. Eksperimentirao sam sa standardnom 17,2 cm 'štapnom' antenom i kratko sam flertovao s antenom u zavojnici. Činilo se da najbolje radi antena sa zavojnicom koju je lako napraviti. Dizajn je od Ben Schuelera i očito je objavljen u časopisu 'Elektor'. Lako je slijediti PDF s opisom ove "zračno hlađene 433 MHz antene". (Veza je nestala, provjerite ovdje)

Korak 6: Dodavanje BMP180

Dodavanje BMP180
Dodavanje BMP180

Želite li dodati senzor barometrijskog tlaka poput BMP180? provjerite moje druge upute o tome.

Preporučeni: