Kazalo:

Mini vremenska postaja z Attiny85: 6 korakov (s slikami)
Mini vremenska postaja z Attiny85: 6 korakov (s slikami)

Video: Mini vremenska postaja z Attiny85: 6 korakov (s slikami)

Video: Mini vremenska postaja z Attiny85: 6 korakov (s slikami)
Video: Метеостанция + беспроводные датчики термогигрометр с выносными датчиками для дома и улицы 2024, Julij
Anonim
Mini vremenska postaja z Attiny85
Mini vremenska postaja z Attiny85
Mini vremenska postaja z Attiny85
Mini vremenska postaja z Attiny85
Mini vremenska postaja z Attiny85
Mini vremenska postaja z Attiny85

Nedavno je Indigod0g opisal mini vremensko postajo, ki deluje zelo dobro, z uporabo dveh Arduino. Morda ne želijo vsi žrtvovati 2 Arduina, da bi dobili odčitke vlažnosti in temperature, in komentiral sem, da bi bilo treba omogočiti podobno funkcijo z dvema Attiny85. Mislim, da je govorjenje enostavno, zato denar raje položim na usta.

Pravzaprav, če združim dva prejšnja navodila, sem napisal:

2-žični vmesnik LCD za Arduino ali Attiny in prejemanje in pošiljanje podatkov med Attiny85 (Arduino IDE 1.06), potem je večina dela že opravljena. Potrebno je le malo prilagoditi programsko opremo.

Za dvožično LCD rešitev s premičnim registrom sem se odločil namesto I2C LCD, ker je na Attinyju premični register lažje izvesti kot vodilo I2C. Če pa želite na primer prebrati senzor tlaka BMP180 ali BMP085, za to vseeno potrebujete I2C, tako da lahko uporabite tudi LCD I2C. TinyWireM je dobra knjižnica za I2C na Attinyju (vendar zahteva dodaten prostor).

BOM Oddajnik: DHT11 Attiny85 10 k upor 433MHz oddajni modul

Sprejemnik Attiny85 10k upor 433 MHz sprejemni modul

Zaslon 74LS164 premični register 1N4148 dioda 2x1k upor 1x1k spremenljiv upor LCD zaslon 2x16

Korak: Mini vremenska postaja z Attiny85: oddajnik

Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik
Mini vremenska postaja z Attiny85: oddajnik

Oddajnik je zelo osnovna konfiguracija Attiny85 z izvlečnim uporom na liniji za ponastavitev. Oddajniški modul je priključen na digitalni zatič "0", podatkovni zatič DHT11 pa na digitalni zatič 4. Priključite žico 17,2 cm kot anteno (za veliko boljšo anteno glejte korak 5). Programska oprema je naslednja:

// bo delovalo na Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // knjižnice #include // Od Roba Tillaarta #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin, kamor je priključen vaš oddajnik // spremenljivke plavajo h = 0; plovec t = 0; int transmit_t = 0; int transmit_h = 0; int prenos_podatkov = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. vlažnost; t = temperatura DHT11; // Vem, tukaj uporabljam 3 celoštevilske spremenljivke // kjer bi lahko uporabil 1 // ampak to je samo zato, da je lažje slediti transmit_h = 100* (int) h; transmit_t = (int) t; prenos_podatkov = prenos_h+prenos_t; človeški prenos (prenos_podatkov); zamuda (500); }

Za pošiljanje podatkov programska oprema uporablja kodo Manchester. Odčitava DHT11 in shranjuje temperaturo in vlažnost v 2 ločenih plavajočih plovcih. Ker Manchester koda ne pošilja floats, ampak celo število, imam več možnosti: 1- razdelite floats na dve celi številki in jih pošljite2- vsak float pošljite kot celo število3- dva floatta pošljite kot eno celo število Z možnostjo 1 moram združiti cela števila spet plavajo v sprejemniku in moram ugotoviti, katero celo število je, zaradi česar je koda dolga. Z možnostjo 2 moram še ugotoviti, katero celo število je za vlažnost in katero za temperaturo. Ne morem iti sam po zaporedju, če se pri prenosu izgubi eno celo število, zato bi moral poslati celo identifikator, priložen celemu številu. Pri možnosti 3 lahko pošljem samo eno celo število. Očitno so zaradi tega odčitki nekoliko manj natančni - v 1 stopinji - in temperatur pod ničlo ni mogoče poslati, vendar je to preprosto koda in obstajajo načini za to. Zaenkrat gre le za načelo. Torej naredim, da spremenim plovce v cela števila in pomnožim vlažnost s 100. Nato pomnoženo vlago dodam temperaturo. Glede na dejstvo, da vlaga nikoli ne bo 100% največje število, ki ga bom dobil, je 9900. Glede na dejstvo, da temperatura prav tako ne bo višja od 100 stopinj, bo največje število 99, zato je najvišje število, ki ga bom poslal, 9999 in ga je enostavno ločiti na strani sprejemnika. moj izračun, v katerem uporabljam 3 cela števila, je preveč, saj bi ga bilo mogoče enostavno narediti z eno spremenljivko. Želel sem samo olajšati sledenje kodi. Koda se zdaj sestavi kot:

Velikost binarne skice: 2, 836 bajtov (od največ 8, 192 bajtov), tako da se prilega Attiny 45 ali 85 OPOMBA, knjižnica dht.h, ki jo uporabljam, je tista iz Roba Tillaarta. Ta knjižnica je primerna tudi za DHT22. Uporabljam različico 1.08. Vendar ima lahko Attiny85 težave pri branju DHT22 z nižjimi različicami knjižnice. Potrjeno mi je, da imata 1.08 in 1.14, čeprav delata na običajnem Arduinu, težave pri branju DHT22 na Attiny85. Če želite uporabiti DHT22 na Attiny85, uporabite 1.20 različico te knjižnice. Vse je treba narediti s časom. Različica knjižnice 1.20 omogoča hitrejše branje. (Hvala za to uporabniško izkušnjo Jeroen)

Korak: Mini vremenska postaja z Attiny85: sprejemnik

Mini vremenska postaja z Attiny85: sprejemnik
Mini vremenska postaja z Attiny85: sprejemnik

Spet se Attiny85 uporablja v osnovni konfiguraciji z zatičem za ponastavitev visoko z 10 k uporom. Sprejemniški modul je pritrjen na digitalni pin 1 (pin 6 na čipu). LCD je pritrjen na digitalni nožici 0 in 2. Priključite žico dolžine 17,2 cm kot anteno. Koda je naslednja:

#vključi

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

Koda je dokaj preprosta: preneseno celo število je sprejeto in shranjeno v spremenljivki 'm'. Deljeno je s 100, da dobi vlažnost, po modulu 100 pa s temperaturo. Predpostavimo, da je bilo sprejeto celo število 33253325/100 = 333325 % 100 = 25Ta koda je sestavljena kot 3380 bajtov in jo je zato mogoče uporabiti samo z attiny85, ne pa s 45

3. korak: Mini vremenska postaja z Attiny85/45: Zaslon

Mini vremenska postaja z Attiny85/45: zaslon
Mini vremenska postaja z Attiny85/45: zaslon
Mini vremenska postaja z Attiny85/45: zaslon
Mini vremenska postaja z Attiny85/45: zaslon

Za zaslon je najbolje, da se obrnem na moje navodilo na dvožičnem zaslonu. Skratka, običajni zaslon 16x2 uporablja shift shift register, tako da lahko deluje z dvema digitalnima nožicama. Seveda, če želite uporabiti zaslon, pripravljen za I2C, to je mogoče tudi, potem pa morate na Attinyju implementirati protokol I2C. Protokol Tinywire lahko to stori. Čeprav nekateri viri pravijo, da to pričakuje uro 1 Mhz, nisem imel težav (v drugem projektu), da bi jo uporabil na 8 MHz.

4. korak: Mini vremenska postaja z attiny85/45: možnosti/zaključki

Mini vremenska postaja z attiny85/45: možnosti/zaključki
Mini vremenska postaja z attiny85/45: možnosti/zaključki
Mini vremenska postaja z attiny85/45: možnosti/zaključki
Mini vremenska postaja z attiny85/45: možnosti/zaključki
Mini vremenska postaja z attiny85/45: možnosti/zaključki
Mini vremenska postaja z attiny85/45: možnosti/zaključki

Kot rečeno, sem naredil to navodilo, da pokažem, da je mogoče narediti mini vremensko postajo z dvema atiny85 (tudi z enim attiny85+ 1 attiny45). Pošilja samo vlažnost in temperaturo z uporabo DHT11. Vendar ima Attiny 5 digitalnih zatičev za uporabo., 6 tudi z nekaj zvijače. Zato je mogoče pošiljati podatke iz več senzorjev. V mojem projektu- kot je razvidno iz slik na traku in na profesionalnem tiskanem vezju (OSHPark)- pošiljam/prejemam podatke iz DHT11, iz LDR in iz PIR, vse z uporabo Dva attiny85 -a Omejitev pri uporabi attiny85 kot sprejemnika je predstavitev podatkov v bleščečem slogu. Ker je pomnilnik omejen: besedila, kot sta »Temperatura, vlažnost, raven svetlobe, približevanje predmeta«, bodo zelo hitro zapolnila dragocen pomnilniški prostor. Kljub temu ni razloga za uporabo dveh Arduino samo za pošiljanje/sprejemanje temperature in vlažnosti. da oddajnik zaspi in da se le zbudi, da pošlje podatke, recimo vsakih 10 minut, in jih tako vnese iz celice z gumbom. Očitno je, da se ne morejo pošiljati samo podatki o temperaturi ali vlažnosti, ampak lahko imamo niz majhnih oddajnikov, ki pošiljajo odčitajte tudi vlažnost tal ali dodajte anemometer ali merilnik dežja

5. korak: Mini vremenska postaja: antena

Mini vremenska postaja: antena
Mini vremenska postaja: antena

Antena je pomemben del vsake nastavitve 433 MHz. Eksperimentiral sem s standardno 17,2 cm "palico" anteno in imel kratek spogled z anteno v tuljavi. Najbolj se je zdelo, da je anteno, ki je enostavna za izdelavo. Oblikovanje je prišlo od Ben Schuelerja in je bilo očitno objavljeno v reviji 'Elektor'. PDF -ju z opisom te "zračno hlajene 433 MHz antene" je enostavno slediti. (Povezava je izginila, preverite tukaj)

6. korak: Dodajanje BMP180

Dodajanje BMP180
Dodajanje BMP180

Želite dodati barometrični senzor tlaka, kot je BMP180? preverite moje druge napotke o tem.

Priporočena: