Sisällysluettelo:

Mini sääasema Attiny85: 6 askelta (kuvilla)
Mini sääasema Attiny85: 6 askelta (kuvilla)

Video: Mini sääasema Attiny85: 6 askelta (kuvilla)

Video: Mini sääasema Attiny85: 6 askelta (kuvilla)
Video: Digispark attiny 85 WEATHER STATION DHT 11 ssd1306 2024, Marraskuu
Anonim
Mini Sääasema Attiny85: llä
Mini Sääasema Attiny85: llä
Minisääasema Attiny85: llä
Minisääasema Attiny85: llä
Minisääasema Attiny85: llä
Minisääasema Attiny85: llä

Äskettäin ohjeistettavassa Indigod0g kuvasi pientä sääasemaa, joka toimii melko hyvin käyttäen kahta Arduinoa. Ehkä kaikki eivät halua uhrata 2 Arduinoa saadakseen kosteus- ja lämpötilalukemat, ja kommentoin, että samanlaisen toiminnon pitäisi olla mahdollista kahdella Attiny85: llä. Luulen, että puhuminen on helppoa, joten minun on parempi laittaa rahani suuhuni.

Itse asiassa, jos yhdistän kaksi aikaisempaa ohjetta, kirjoitin:

2-johtiminen LCD-liitäntä Arduinoa tai Attinyä varten ja tietojen vastaanottaminen ja lähettäminen Attiny85: n välillä (Arduino IDE 1.06), jolloin suurin osa työstä on jo tehty. Ohjelmistoa tarvitsee vain hieman muokata.

Valitsin kaksijohtimisen lcd -ratkaisun, jossa on siirtorekisteri, eikä I2C -nestekidenäyttöä, koska Attiny -järjestelmässä siirtorekisteri on helpompi toteuttaa kuin I2C -väylä. Kuitenkin… jos esimerkiksi haluat lukea BMP180- tai BMP085 -paineanturia, tarvitset siihen I2C: tä joka tapauksessa, joten voit myös käyttää I2C -nestekidenäyttöä. TinyWireM on hyvä kirjasto I2C: lle Attinyssä (mutta se vaatii lisätilaa).

BOM Lähetin: DHT11 Attiny85 10 k vastuksen 433MHz lähetinmoduuli

Vastaanotin Attiny85 10k vastus 433 MHz vastaanotinmoduuli

Näyttö 74LS164 siirtorekisteri 1N4148 diodi 2x1k vastus 1x1k muuttuva vastus LCD -näyttö 2x16

Vaihe 1: Minisääasema, jossa Attiny85: lähetin

Minisääasema Attiny85: lähettimellä
Minisääasema Attiny85: lähettimellä
Mini sääasema Attiny85: lähettimellä
Mini sääasema Attiny85: lähettimellä
Mini sääasema Attiny85: lähettimellä
Mini sääasema Attiny85: lähettimellä
Mini sääasema Attiny85: lähettimellä
Mini sääasema Attiny85: lähettimellä

Lähetin on Attiny85: n hyvin peruskokoonpano, jossa on ylösvetovastus nollauslinjalla. Lähetinmoduuli on kiinnitetty digitaaliseen nastaan '0' ja DHT11 -datatappi kiinnittyy digitaaliseen nastaan 4. (katso paljon parempi antenni, katso vaihe 5) Ohjelmisto on seuraava:

// toimii Attiny // RF433 = D0 nasta 5

// DHT11 = D4 pin 3 // kirjastot #include // Rob Tillaartilta #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // nasta, johon lähetin on kytketty // muuttujat float h = 0; kellua t = 0; int lähetys_t = 0; int lähetys_h = 0; int lähetystiedot = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. kosteus; t = DHT11 lämpötila; // Tiedän, käytän tässä 3 kokonaislukumuuttujaa // missä voisin käyttää 1 //, mutta se on vain niin, että on helpompaa seurata lähetystä_h = 100* (int) h; lähettää_t = (int) t; lähetystiedot = lähetys_h+lähetys_t; mies.lähetys (lähetystiedot); viive (500); }

Ohjelmisto käyttää tietojen lähettämiseen Manchester -koodia. Se lukee DHT11 ja tallentaa lämpötilan ja kosteuden kahteen erilliseen kellukkeeseen. Koska Manchester-koodi ei lähetä kellukkeita, vaan kokonaisluku, minulla on useita vaihtoehtoja: 1- jaa kellukkeet kahteen kokonaislukuun ja lähetä ne2- lähetä jokainen uimuri kokonaislukuna3- lähetä kaksi kelluketta yhdeksi kokonaisluvuksi Vaihtoehdolla 1 minun on yhdistettävä kokonaisluvut kelluvat jälleen vastaanottimessa ja minun on tunnistettava, mikä kokonaisluku on mikä, jolloin koodi on pitkä. Vaihtoehdolla 2 minun on vielä tunnistettava, mikä kokonaisluku on kosteus ja mikä lämpötila. En voi mennä yksin järjestyksessä, jos yksi kokonaisluku häviää lähetyksessä, joten minun on lähetettävä kokonaislukuun liitetty tunniste. Vaihtoehdolla 3 voin lähettää vain yhden kokonaisluvun. On selvää, että tämä tekee lukemista hieman epätarkempia - 1 asteen sisällä - eikä nollan lämpötiloja voi lähettää, mutta se on vain yksinkertainen koodi ja siihen on olemassa tapoja. Toistaiseksi kyse on periaatteesta, joten muutan kellukkeet kokonaisluvuiksi ja kerron kosteuden 100: lla. Sitten lisään lämpötilan kerrottuun kosteuteen. Maksimiluku, jonka saan, on 9900. Koska lämpötila ei myöskään ole yli 100 astetta, enimmäislukema on 99, joten suurin lähettämäni numero on 9999 ja se on helppo erottaa vastaanottimen puolelta. laskelmani, jossa käytän 3 kokonaislukua, on yliarvostettu, koska se voitaisiin helposti tehdä yhdellä muuttujalla. Halusin vain helpottaa koodin seuraamista. Koodi kootaan nyt seuraavasti:

Binääriluonnoksen koko: 2, 836 tavua (enintään 8, 192 tavua), joten se mahtuu Attiny 45: een tai 85: een. HUOMAUTUS käyttämäni dht.h -kirjasto on Rob Tillaart. Tämä kirjasto soveltuu myös DHT22: lle. Käytän versiota 1.08. Attiny85: llä voi kuitenkin olla ongelmia DHT22: n lukemisessa kirjaston alempien versioiden kanssa. Minulle on vahvistettu, että 1.08: lla ja 1.14: llä - vaikka ne työskentelevät tavallisen Arduinon parissa - on ongelmia DHT22: n lukemisessa Attiny85: ssä. Jos haluat käyttää DHT22 -laitetta Attiny85 -laitteessa, käytä tämän kirjaston versiota 1.20. Kaikki liittyy ajoitukseen. Kirjaston 1.20 -version luku on nopeampaa. (Kiitos tästä käyttäjäkokemuksesta Jeroen)

Vaihe 2: Minisääasema, jossa Attiny85: vastaanotin

Mini sääasema Attiny85: vastaanottimella
Mini sääasema Attiny85: vastaanottimella

Jälleen Attiny85: tä käytetään peruskonfiguraatiossa, kun Reset -tappi vedetään korkealle 10 k: n vastuksella. Vastaanotinmoduuli on kiinnitetty digitaaliseen nastaan 1 (sirun nasta 6). Nestekidenäyttö on kiinnitetty digitaalisiin nastoihin 0 ja 2.

#sisältää

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = fyysinen nasta 6 void setup () {lcd.begin (16, 2); lcd.home (); man.setupRecept (RX_PIN, MAN_1200); man.beginRecept (); } void loop () {if (man.receptComplete ()) {uint16_t m = man.getMessage (); man.beginRecept (); lcd.print ("Kostea:"); lcd -tulostus (m/100); lcd.setCursor (0, 1); lcd.print ("Lämpötila"); lcd.print (m%100); }}

Koodi on melko yksinkertainen: lähetetty kokonaisluku vastaanotetaan ja tallennetaan muuttujaan 'm'. Se jaetaan 100: lla kosteuden antamiseksi ja 100: n modulo antaa lämpötilan. = 25Tämä koodi on 3380 tavua, joten sitä voidaan käyttää vain attiny85: n kanssa, ei 45

Vaihe 3: Minisääasema, jossa Attiny85/45: näyttö

Minisääasema Attiny85/45: Näyttö
Minisääasema Attiny85/45: Näyttö
Minisääasema Attiny85/45: Näyttö
Minisääasema Attiny85/45: Näyttö

Näytön kannalta on parasta, että viittaan ohjeeseeni kaksijohtimisessa näytössä. Lyhyesti sanottuna, yhteinen 16x2 -näyttö käyttää siirtorekisteriä, joten se voi toimia kahdella digitaalisella nastalla. mahdollista, mutta sitten sinun on otettava käyttöön I2C -protokolla Attinyssä. Tinywire -protokolla voi tehdä sen. Vaikka jotkut lähteet sanovat, että se odottaa 1 Mhz: n kelloa, minulla ei ollut vaikeuksia (toisessa projektissa) käyttää sitä 8Mhz: ssä. Joka tapauksessa en vain vaivautunut täällä ja käytin vuororekisteriä.

Vaihe 4: Minisääasema, jossa Attiny85/45: Mahdollisuudet/Johtopäätökset

Minisääasema Attiny85/45: Mahdollisuudet/Johtopäätökset
Minisääasema Attiny85/45: Mahdollisuudet/Johtopäätökset
Minisääasema Attiny85/45: Mahdollisuudet/Johtopäätökset
Minisääasema Attiny85/45: Mahdollisuudet/Johtopäätökset
Minisääasema Attiny85/45: Mahdollisuudet/Johtopäätökset
Minisääasema Attiny85/45: Mahdollisuudet/Johtopäätökset

Kuten sanottu, tein tämän ohjeelliseksi osoittaakseni, että voidaan tehdä mini -sääasema, jossa on kaksi attiny85: tä (jopa yhdellä attiny85+ 1 attiny45). Se lähettää vain kosteutta ja lämpötilaa DHT11: n avulla., 6 jopa pienellä temppelillä. Siksi on mahdollista lähettää tietoja useista antureista. Projektissani- kuten kuvista stripboardilla ja ammattimaisella piirilevyllä (OSHPark)- lähetän/vastaanotan tietoja DHT11: stä, LDR: stä ja PIR: stä Kaksi attiny85: tä Rajoitusta käytettäessä attiny85: tä vastaanottimena on kuitenkin tietojen esittäminen räikeässä tyylissä. Koska muisti on rajallinen: tekstit, kuten 'Lämpötila, kosteus, valotaso, kohde lähestyy', täyttävät arvokkaan muistitilan melko nopeasti. Ei kuitenkaan ole syytä käyttää kahta Arduinoa vain lämpötilan ja kosteuden lähettämiseen/vastaanottamiseen. Jos haluat lähettimen menevän nukkumaan ja herättämään sen vain lähettämään tietoja sanomalla 10 minuutin välein ja syöttämällä sen siten napin solusta. myös maaperän kosteuslukemat tai lisää tuulemittari tai sademittari

Vaihe 5: Mini Weather Station: antenni

Mini sääasema: antenni
Mini sääasema: antenni

Antenni on tärkeä osa 433 MHz: n kokoonpanoa. Olen kokeillut 17,2 cm: n vakiomallista antennia ja flirttailin kela -antennin kanssa. Parhaiten näytti toimivan kelalla ladattu antenni, joka on helppo valmistaa. Malli on Ben Schuelerilta ja ilmeisesti julkaistu Elektor -lehdessä. Tämän ilmajäähdytteisen 433 MHz: n antennin kuvauksen sisältävä PDF -tiedosto on helppo seurata. (Linkki kadonnut, katso täältä)

Vaihe 6: BMP180: n lisääminen

BMP180 lisääminen
BMP180 lisääminen

Haluatko lisätä ilmanpaineanturin, kuten BMP180? tarkista muut ohjeeni siitä.

Suositeltava: