Sadržaj:

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

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

Video: Mini meteorološka stanica sa attiny85: 6 koraka (sa slikama)
Video: Digispark attiny 85 WEATHER STATION DHT 11 ssd1306 2024, Juli
Anonim
Mini meteorološka stanica sa Attiny85
Mini meteorološka stanica sa Attiny85
Mini meteorološka stanica sa Attiny85
Mini meteorološka stanica sa Attiny85
Mini meteorološka stanica sa Attiny85
Mini meteorološka stanica sa 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 radi očitavanja 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 i primanje i slanje podataka između Attiny85 (Arduino IDE 1.06) tada je većina posla već obavljena. Potrebno je samo malo prilagoditi softver.

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

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

Prijemnik Attiny85 10k otpornik 433 MHz prijemnički modul

Ekran 74LS164 registar pomaka 1N4148 dioda 2x1k otpornik 1x1k promjenjivi otpornik LCD ekran 2x16

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

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

Odašiljač je vrlo osnovna konfiguracija Attiny85 s otpornikom na izvlačenje na liniji za resetiranje. Modul odašiljača je priključen na digitalni pin '0', a DHT11 podatkovni pin priključen 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 // biblioteke #include // Od Roba Tillaarta #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin na koji je priključen vaš odašiljač // varijable float h = 0; plovak t = 0; int prenosi_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. 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; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); kašnjenje (500); }

Softver koristi Manchester kod za slanje podataka. Očitava DHT11 i pohranjuje temperaturu i vlažnost u 2 odvojena plovka. Kako Manchester kod ne šalje float, već 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 celi brojevi ponovo plutaju u prijemniku i moram da identifikujem koji je ceo broj, što čini kôd dugim. Sa opcijom 2 još uvek moram da identifikujem koji ceo broj je 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čitavanja malo manje tačnim - unutar 1 stepen - 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 ja 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% maksimalan broj koji ću dobiti je 9900. S obzirom na činjenicu da temperatura također neće biti iznad 100 stepeni, maksimalni broj će biti 99, stoga je najveći broj koji ću poslati 9999 i to je lako odvojiti na strani prijemnika. 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 kompilira 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 biblioteka je takođe pogodna za DHT22. Koristim verziju 1.08. Međutim, Attiny85 može imati problema pri čitanju DHT22 sa nižim verzijama biblioteke. 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, koristite 1.20 verziju ove biblioteke. Sve je to moralo da se uradi sa vremenom. Verzija biblioteke 1.20 ima brže čitanje. (Hvala na korisničkom iskustvu Jeroen)

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

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

Ponovno se Attiny85 koristi u osnovnoj konfiguraciji sa pin za resetiranje visoko povučenim s 10 k otpornikom. Modul prijemnika je priključen 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:

#include

#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.print (m%100); }}

Kôd je prilično jednostavan: preneseni cijeli broj se prima i sprema u varijablu 'm'. Podijeljen je 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 se kompilira kao 3380 bajtova i stoga se može koristiti samo sa attiny85, a ne sa 45

Korak 3: Mini meteorološka stanica sa 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

Što se tiče prikaza, najbolje je da se osvrnem na uputstva na dvožilnom ekranu. Ukratko, uobičajeni ekran veličine 16x2 koristi registar pomaka tako da može raditi sa dva digitalna pina. Naravno, ako više volite koristiti ekran 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 sa ocjenama85/45: Mogućnosti/zaključci

Mini meteorološka stanica sa ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica sa ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica sa ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica sa ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica sa ocjenama85/45: mogućnosti/zaključci
Mini meteorološka stanica sa 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 sa dva attiny85 -a (čak i sa jednim attiny85+ 1 attiny45). On šalje samo vlažnost i temperaturu, koristeći DHT11. Međutim, Attiny ima 5 digitalnih pinova za upotrebu, 6 čak i sa 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 profesionalnoj PCB (OSHPark)- šaljem/primam podatke s DHT11, iz LDR-a i iz PIR-a, a sve pomoću dva attiny85 -aOgraničenje upotrebe attiny85 -a kao prijemnika je predstavljanje podataka u blještavom stilu. Kako je memorija ograničena: tekstovi poput "Temperatura, Vlažnost, nivo svjetlosti, približavanje subjekta" prilično će brzo popuniti dragocjeni memorijski prostor. Ipak, nema razloga za korištenje 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 tako ih napajao iz ćelije s gumbom. Očigledno se ne mogu slati samo podaci o temperaturi ili vlažnosti, već se može postaviti 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 bilo kojeg postavljanja od 433 Mhz. Eksperimentirao sam sa standardnom antenom od 17,2 cm sa štapom i imao sam kratak flert sa antenom u zavojnici. Ono što je izgleda najbolje funkcioniralo je antena sa zavojnicom koju je lako napraviti. Dizajn je od Ben Schuelera i očigledno je objavljen u časopisu 'Elektor'. Lako je slijediti PDF s opisom ove "zračno hlađene 433 MHz antene". (Link je nestao, provjerite ovdje)

Korak 6: Dodavanje BMP180

Dodavanje BMP180
Dodavanje BMP180

Želite li dodati senzor barometrijskog pritiska poput BMP180? provjerite moje druge instrukcije o tome.

Preporučuje se: