Tartalomjegyzék:

Mini időjárás állomás Attiny -val85: 6 lépés (képekkel)
Mini időjárás állomás Attiny -val85: 6 lépés (képekkel)

Videó: Mini időjárás állomás Attiny -val85: 6 lépés (képekkel)

Videó: Mini időjárás állomás Attiny -val85: 6 lépés (képekkel)
Videó: Digispark attiny 85 WEATHER STATION DHT 11 ssd1306 2024, Július
Anonim
Mini időjárás állomás Attiny85 -vel
Mini időjárás állomás Attiny85 -vel
Mini időjárás állomás Attiny85 -vel
Mini időjárás állomás Attiny85 -vel
Mini időjárás állomás Attiny85 -vel
Mini időjárás állomás Attiny85 -vel

Egy nemrégiben oktatható Indigod0g leírt egy mini időjárás -állomást, amely nagyon jól működik, két Arduinót használva. Talán nem mindenki akar feláldozni 2 Arduinót a páratartalom és a hőmérséklet leolvasásához, és megjegyzem, hogy két Attiny85 -vel hasonló funkciót kell elvégezni. Azt hiszem, a beszéd könnyű, ezért jobb, ha a pénzemet oda teszem, ahol a szám van.

Valójában, ha két korábbi utasítást kombinálok, akkor ezt írtam:

2 vezetékes LCD interfész az Arduino vagy az Attiny számára Csak egy kicsit módosítani kell a szoftvert.

Az I2C LCD helyett kétvezetékes lcd megoldást választottam váltóregiszterrel, nem pedig I2C LCD -vel, mert az Attiny -on a váltóregiszter könnyebben megvalósítható, mint az I2C busz. Azonban… ha például egy BMP180 vagy BMP085 nyomásérzékelőt szeretne olvasni, akkor mindenképpen szüksége van I2C -re, így akkor is használhat I2C LCD -t. A TinyWireM jó könyvtár az I2C -hez egy Attiny -on (de ez több helyet igényel).

BOM Az adó: DHT11 Attiny85 10 k ellenállású 433MHz adó modul

A vevő Attiny85 10k ellenállású 433 MHz -es vevőmodul

A kijelző 74LS164 váltásregiszter 1N4148 dióda 2x1k ellenállás 1x1k változó ellenállás LCD kijelző 2x16

1. lépés: Mini időjárás állomás Attiny85 -vel: az adó

Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó
Mini időjárás állomás Attiny85 -vel: az adó

Az adó az Attiny85 alapvető konfigurációja, felhúzó ellenállással a visszaállítási vonalon. Az adómodul a „0” digitális tűhöz van csatlakoztatva, a DHT11 adatcsap pedig a 4 -es digitális tűhöz. Csatlakoztasson egy 17,2 cm -es vezetéket antennaként (a sokkal jobb antennához lásd az 5. lépést). A szoftver a következő:

// az Attinyon fog működni // RF433 = D0 pin 5

// DHT11 = D4 pin 3 // könyvtárak #include // Rob Tillaarttól #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pin, ahol az adó csatlakozik // változók float h = 0; úszó t = 0; int átvitel_t = 0; int átvitel_h = 0; int átviteli_adatok = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } void loop () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. páratartalom; t = DHT11. hőmérséklet; // Tudom, itt 3 egész változót használok // ahol az 1 // -et használhatnám, de ez csak azért van, hogy könnyebb legyen követni az átvitel_h = 100* (int) h; átvitel_t = (int) t; átvitel_adatok = átvitel_h+átvitel_t; man.transmit (átvitel_adatok); késleltetés (500); }

A szoftver manchesteri kódot használ az adatok elküldéséhez. Beolvassa a DHT11 -et, és két különálló úszóban tárolja a hőmérsékletet és a páratartalmat. Mivel a manchesteri kód nem úsztatókat, hanem egész számokat küld, több lehetőségem van: 1- ossza fel az úszókat két egész számra, és küldje el azokat2- küldje el mindegyik úszót egész számként3- küldje el a két úszót egy egész számként Az 1-es lehetőséggel kombinálnom kell az egész számok ismét lebegnek a vevőkészülékben, és meg kell határoznom, hogy melyik egész szám mi, így a kód hosszú lesz. Nem tudok egyedül sorrend szerint haladni, ha egy egész szám elveszik az átvitel során, ezért egy egész számhoz csatolt azonosítót kell küldenem. A 3. opcióval csak egy egész számot tudok küldeni. Nyilvánvaló, hogy ez kissé kevésbé pontos a leolvasást - 1 fokon belül -, és nem lehet nulla alatti hőmérsékletet küldeni, de ez csak egy egyszerű kód, és ennek vannak módjai. Egyelőre csak az elvről van szó. Tehát amit teszek, az úszókat egész számokká alakítom, és a páratartalmat megszorozom 100 -zal. Ezután hozzáadom a hőmérsékletet a többszörös páratartalomhoz. Tekintettel arra, hogy a páratartalom soha nem lesz 100% -os A maximális szám, amit kapok, 9900. Tekintettel arra, hogy a hőmérséklet szintén nem lesz 100 fok fölött, a maximális szám 99 lesz, ezért a legnagyobb szám, amit elküldök, 9999, és ezt könnyen el lehet különíteni a vevő oldalán. a számításom, amelyben 3 egész számot használok, túlzás, mivel könnyen elvégezhető 1 változóval. Csak meg akartam könnyíteni a kód követését. A kód most így áll össze:

Bináris vázlat mérete: 2, 836 bájt (maximum 8, 192 bájt), így illeszkedik egy Attiny 45 vagy 85 -be. MEGJEGYZÉS: az általam használt dht.h könyvtár Rob Tillaart könyvtára. Ez a könyvtár alkalmas DHT22 -re is. 1.08 -as verziót használok. Azonban az Attiny85 -nek problémái lehetnek a DHT22 olvasásával a könyvtár alacsonyabb verzióival. Megerősítést nyert számomra, hogy az 1.08 -nak és az 1.14 -nek - bár rendszeres Arduino -n dolgoznak - nehézségeik vannak a DHT22 olvasásával az Attiny85 -n. Ha DHT22 -t szeretne használni az Attiny85 készüléken, használja a könyvtár 1.20 -as verzióját. Mindez összefügg az időzítéssel. A könyvtár 1.20 -as verziója gyorsabban olvasható. (Köszönöm ezt a felhasználói élményt Jeroen)

2. lépés: Mini időjárás állomás Attiny85 -vel: a vevő

Mini időjárás állomás Attiny85 -vel: a vevő
Mini időjárás állomás Attiny85 -vel: a vevő

Ismét az Attiny85 -öt használják alapkonfigurációban, a Reset csapot magasra húzva, 10 k ellenállással. A vevőmodul az 1. digitális tűhöz van rögzítve (a chip 6 -os tűje). Az LCD a 0 -as és 2 -es digitális tüskékhez van rögzítve. Csatlakoztasson 17,2 cm -es vezetéket antennaként. A kód a következő:

#befoglalni

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); #define RX_PIN 1 // = 6 -os fizikai pin 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 ("Nedves:"); lcd.nyomtatás (m/100); lcd.setCursor (0, 1); lcd.print ("Hőmérséklet"); lcd.print (m%100); }}

A kód meglehetősen egyszerű: az átvitt egész számot az „m” változó fogadja és tárolja. 100 -zal osztva adja meg a páratartalmat, a 100 -as modulus pedig a hőmérsékletet. Tehát tegyük fel, hogy a kapott egész szám 33253325/100 = 333325 % 100 = 25Ez a kód 3380 bájtban áll össze, ezért csak attiny85 -vel használható, nem 45

3. lépés: Mini meteorológiai állomás Attiny85/45 -vel: a kijelző

Mini meteorológiai állomás Attiny85/45 -vel: a kijelző
Mini meteorológiai állomás Attiny85/45 -vel: a kijelző
Mini meteorológiai állomás Attiny85/45 -vel: a kijelző
Mini meteorológiai állomás Attiny85/45 -vel: a kijelző

A kijelző esetében a legjobb, ha a kétvezetékes kijelzőn olvasható utasításokra hivatkozom. Röviden, egy közös 16x2 -es kijelző váltóregisztert használ, így két digitális tűvel is működhet. Természetesen, ha inkább I2C -kész kijelzőt használ, lehetséges, de akkor végre kell hajtania egy I2C protokollt az Attiny -on. A Tinywire protokoll képes erre. Bár egyes források azt mondják, hogy ez 1 Mhz -es órát vár, nem okozott gondot (egy másik projektben) a 8Mhz -en való használat.

4. lépés: Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések

Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések
Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések
Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések
Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések
Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések
Mini meteorológiai állomás Attiny85/45 -vel: Lehetőségek/Következtetések

Mint mondtam, taníthatóvá tettem, hogy megmutassam, hogy két attiny85 -zel (akár egy attiny85+ 1 attiny45 -el) is készíthető egy mini időjárás -állomás. Csak a DHT11 segítségével küld páratartalmat és hőmérsékletet. Az Attiny azonban 5 digitális tűt használ, 6 még némi trükközéssel is. Ezért lehetséges több érzékelőből adatokat küldeni. A projektemben- amint azt a szalagfotón és a professzionális NYÁK-on (OSHPark) lévő képek is látják- adatokat küldök/fogadok DHT11-ből, LDR-ből és PIR-ből, minden Az attiny85 vevőként való használatának korlátozása azonban az adatok mutatós stílusban történő megjelenítése. Mivel a memória korlátozott: Az olyan szövegek, mint a „Hőmérséklet, páratartalom, fényszint, a téma közeledik”, elég gyorsan feltöltik az értékes memóriaterületet. Mindazonáltal nincs ok arra, hogy két Arduino -t használjon csak a hőmérséklet és a páratartalom küldésére/fogadására. Ezenkívül lehetséges hogy az adó alvó állapotba kerüljön, és csak akkor ébredjen fel, hogy 10 percenként küldjön adatokat, és így betáplálja őket egy gombelemből. Nyilvánvaló, hogy nem csak a hőmérsékletre vagy a páratartalomra vonatkozó adatokat lehet elküldeni, hanem egy sor kis távadót is küldhet a talajnedvesség leolvasását is, vagy adjon hozzá szélmérőt vagy esőmérőt

5. lépés: Mini Weather Station: az antenna

Mini időjárás állomás: az antenna
Mini időjárás állomás: az antenna

Az antenna fontos része minden 433 MHz -es beállításnak. Kísérleteztem a szabványos 17,2 cm -es „rúd” antennával, és röviden flörtöltem egy tekercsantennával. A legjobbnak tűnő tekercses antenna könnyen elkészíthető. A design Ben Schueler -től származik, és nyilvánvalóan az "Elektor" magazinban jelent meg. Ennek a 'léghűtéses 433 MHz -es antennának' leírását tartalmazó PDF -fájl könnyen követhető. (A link eltűnt, nézd meg itt)

6. lépés: BMP180 hozzáadása

BMP180 hozzáadása
BMP180 hozzáadása

Szeretne olyan légnyomás -érzékelőt hozzáadni, mint a BMP180? nézd meg a másik utasítást ezzel kapcsolatban.

Ajánlott: