Obsah:

Mini meteorologická stanica s Attiny85: 6 krokov (s obrázkami)
Mini meteorologická stanica s Attiny85: 6 krokov (s obrázkami)

Video: Mini meteorologická stanica s Attiny85: 6 krokov (s obrázkami)

Video: Mini meteorologická stanica s Attiny85: 6 krokov (s obrázkami)
Video: Digitemp Server 2024, November
Anonim
Mini meteorologická stanica s Attiny85
Mini meteorologická stanica s Attiny85
Mini meteorologická stanica s Attiny85
Mini meteorologická stanica s Attiny85
Mini meteorologická stanica s Attiny85
Mini meteorologická stanica s Attiny85

V nedávnom pokyne Indigod0g popísal mini meteorologickú stanicu, ktorá funguje celkom dobre a používa dve Arduino. Možno nie každý chce obetovať 2 Arduino, aby získal hodnoty vlhkosti a teploty, a ja som poznamenal, že podobnú funkciu by malo byť možné vykonávať aj s dvoma počítačmi Attiny85. Myslím si, že rozprávanie je jednoduché, a tak radšej vložím svoje peniaze tam, kde mám ústa.

V skutočnosti, ak spojím dva predchádzajúce pokyny, napísal som:

2-drôtové LCD rozhranie pre Arduino alebo Attiny aPrijímanie a odosielanie dát medzi Attiny85 (Arduino IDE 1.06), potom je väčšina práce už hotová. Softvér je potrebné iba trochu prispôsobiť.

Rozhodol som sa pre dvojvodičové riešenie LCD s posuvným registrom, a nie pre I2C LCD, pretože na Attiny je posuvný register implementovateľnejší než zbernica I2C. Avšak … ak napríklad chcete čítať snímač tlaku BMP180 alebo BMP085, potrebujete na to aj tak I2C, aby ste potom mohli použiť aj I2C LCD. TinyWireM je dobrá knižnica pre I2C na serveri Attiny (vyžaduje si však viac miesta).

Kusovník Vysielač: modul vysielača DHT11 Attiny85 10 k odpor 433 MHz

Prijímač Attiny85 10k odporový modul 433 MHz

Posuvný register 74LS164 posuvný register 1N4148 dióda 2x1k odpor 1x1k variabilný odpor LCD displej 2x16

Krok 1: Mini meteorologická stanica s Attiny85: vysielačom

Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač
Mini meteorologická stanica s Attiny85: vysielač

Vysielač je veľmi základnou konfiguráciou Attiny85 s vyťahovacím odporom na resetovacej linke. Modul vysielača je pripojený k digitálnemu kolíku „0“a dátový kolík DHT11 sa pripája k digitálnemu kolíku 4. Pripojte drôt s dĺžkou 17,2 cm ako anténu (oveľa lepšiu anténu nájdete v kroku 5). Softvér je nasledujúci:

// bude fungovať na Attiny // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // knižnice #include // Od Roba Tillaarta #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin, kde je pripojený tvoj vysielač // premenné float h = 0; plavák t = 0; int prenos_t = 0; int prenos_h = 0; int prenos_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. vlhkosť; t = DHT11.teplota; // Viem, používam tu 3 celočíselné premenné // kde by som mohol používať 1 //, ale to je len preto, aby bolo jednoduchšie sledovať prenos_h = 100* (int) h; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (prenosove_data); oneskorenie (500); }

Softvér používa na odosielanie údajov kód Manchester. Číta DHT11 a ukladá teplotu a vlhkosť do 2 oddelených plavákov. Keďže kód Manchester neposiela plaváky, ale celé číslo, mám niekoľko možností: 1- rozdeliť plaváky na dve celé čísla a odoslať ich 2- odoslať každý float ako celé číslo 3- odoslať dva plaváky ako jedno celé číslo. S možnosťou 1 potrebujem skombinovať celé čísla opäť plávajú v prijímači a musím identifikovať, ktoré celé číslo je čo, čo robí kód dlhým. S možnosťou 2 stále potrebujem zistiť, ktoré celé číslo je pre vlhkosť a ktoré pre teplotu. V prípade straty celého čísla pri prenose nemôžem postupovať sám podľa sekvencie, takže by som potreboval odoslať identifikátor pripojený k celému číslu. S možnosťou 3 môžem odoslať iba jedno celé číslo. Očividne to robí údaje o niečo menej presné - do 1 stupňa - a nie je možné odosielať teploty pod nulou, ale je to len jednoduchý kód a existujú spôsoby, ako to dosiahnuť. Teraz je to len o princípe. Takže urobím to, že plaváky premením na celé čísla a vlhkosť vynásobím 100. Potom pripočítam teplotu k násobenej vlhkosti. Vzhľadom na skutočnosť, že vlhkosť nikdy nebude 100%, maximálne číslo, ktoré dostanem, je 9900. Vzhľadom na skutočnosť, že teplota tiež nebude vyššia ako 100 stupňov, bude maximálne číslo 99, preto najvyššie číslo, ktoré pošlem, je 9999 a je ľahké ho oddeliť na strane prijímača. môj výpočet, v ktorom používam 3 celé čísla, je nadbytočný, pretože sa dá ľahko vykonať s 1 premennou. Chcel som len uľahčiť sledovanie kódu. Kód sa teraz kompiluje ako:

Veľkosť binárneho náčrtu: 2 836 bajtov (maximálne 8 192 bajtov), takže sa zmestí do knižnice Attiny 45 alebo 85 UPOZORNENIE, že používam knižnicu dht.h od Roba Tillaarta. Táto knižnica je vhodná aj pre DHT22. Používam verziu 1.08. Attiny85 však môže mať problémy s čítaním DHT22 s nižšími verziami knižnice. Potvrdilo sa mi, že 1.08 a 1.14 - aj keď pracujú na bežnom Arduine - majú problémy s čítaním DHT22 na Attiny85. Ak chcete na serveri Attiny85 používať DHT22, použite verziu 1.20 tejto knižnice. Všetko to má do činenia s načasovaním. Verzia knižnice 1.20 sa číta rýchlejšie. (Ďakujem za túto používateľskú skúsenosť, Jeroen)

Krok 2: Mini meteorologická stanica s Attiny85: prijímač

Mini meteorologická stanica s Attiny85: prijímač
Mini meteorologická stanica s Attiny85: prijímač

Attiny85 sa opäť používa v základnej konfigurácii s kolíkom Reset vytiahnutým vysoko s odporom 10 k. Modul prijímača je pripojený k digitálnemu kolíku 1 (kolík 6 na čipe). LCD je pripevnený k digitálnym kolíkom 0 a 2. Pripojte kábel s dĺžkou 17,2 cm ako anténu. Kód je nasledujúci:

#zahrnúť

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fyzický 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 ("Vlhký:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("teplota"); lcd.print (m%100); }}

Kód je pomerne jednoduchý: prenášané celé číslo je prijaté a uložené v premennej „m“. Delí sa 100, aby sa získala vlhkosť, a modulo 100 dáva teplotu. Predpokladajme, že prijaté celé číslo bolo 33253325/100 = 333325 % 100 = 25 Tento kód sa kompiluje ako 3 380 bajtov, a preto ho možno použiť iba s atiny85, nie so 45

Krok 3: Mini meteorologická stanica s Attiny85/45: displej

Mini meteorologická stanica s Attiny85/45: displej
Mini meteorologická stanica s Attiny85/45: displej
Mini meteorologická stanica s Attiny85/45: displej
Mini meteorologická stanica s Attiny85/45: displej

Pokiaľ ide o displej, je najlepšie, aby som sa odvolal na môj pokyn na dvojvodičovom displeji. Stručne povedané, bežný displej 16x2 používa register posunov, takže môže pracovať s dvoma digitálnymi kolíkmi. Samozrejme, ak dávate prednosť použitiu displeja pripraveného na I2C, tj. Tiež je to možné, ale potom musíte na Attiny implementovať protokol I2C. Protokol Tinywire to dokáže. Aj keď niektoré zdroje uvádzajú, že to očakáva hodiny 1 Mhz, nemal som problémy (v inom projekte) s ich použitím na 8 MHz. Každopádne som sa tu neobťažoval a použil posuvný register.

Krok 4: Mini meteorologická stanica s Attiny85/45: Možnosti/závery

Mini meteorologická stanica s Attiny85/45: Možnosti/závery
Mini meteorologická stanica s Attiny85/45: Možnosti/závery
Mini meteorologická stanica s Attiny85/45: Možnosti/závery
Mini meteorologická stanica s Attiny85/45: Možnosti/závery
Mini meteorologická stanica s Attiny85/45: Možnosti/závery
Mini meteorologická stanica s Attiny85/45: Možnosti/závery

Ako som už povedal, urobil som tento návod, aby som ukázal, že je možné vytvoriť malú meteorologickú stanicu s dvoma Attiny85 (dokonca s jedným Attiny85+ 1 Attiny45). Odosiela iba vlhkosť a teplotu pomocou DHT11. Attiny má však 5 digitálnych pinov, ktoré je možné použiť., 6 aj s nejakým podvodom. Preto je možné odosielať údaje z viacerých senzorov. V mojom projekte- ako je vidieť na obrázkoch na stripboarde a na profesionálnom PCB (OSHPark)- odosielam/prijímam údaje z DHT11, z LDR a z PIR, všetko pomocou dva attiny85's Obmedzenie v použití attiny85 ako prijímača je však prezentácia údajov v honosnom štýle. Pretože je pamäť obmedzená: Texty ako „Teplota, Vlhkosť, úroveň svetla, blížiaci sa predmet“zaplnia cenný priestor v pamäti pomerne rýchlo. Napriek tomu nie je dôvod používať iba dve zariadenia Arduino na odosielanie/prijímanie teploty a vlhkosti. Okrem toho je možné nechať vysielač spať a iba ho zobudiť, aby odosielal údaje, povedzme každých 10 minút, a tak ich napájal z gombíkovej bunky. Je zrejmé, že nie je možné odosielať iba údaje o teplote alebo vlhkosti, ale je možné odosielať aj množstvo malých vysielačov. Tiež odčítajte vlhkosť pôdy alebo pridajte anemometer alebo dažďový meter

Krok 5: Mini meteorologická stanica: anténa

Mini meteorologická stanica: anténa
Mini meteorologická stanica: anténa

Anténa je dôležitou súčasťou akéhokoľvek nastavenia 433 MHz. Experimentoval som so štandardnou 17,2 cm „tyčovou“anténou a krátko som flirtoval s cievkovou anténou. Zdá sa, že najlepšie funguje anténa s cievkou a ľahko sa vyrába. Dizajn pochádza od Bena Schuelera a zjavne bol publikovaný v časopise „Elektor“. PDF s popisom tejto „vzduchom chladenej antény 433 MHz“je ľahké sledovať. (Odkaz zmizol, skontrolujte tu)

Krok 6: Pridanie BMP180

Pridanie BMP180
Pridanie BMP180

Chcete pridať snímač barometrického tlaku ako BMP180? pozrite sa na moje ďalšie pokyny k tomu.

Odporúča: