én vagyok a legszebb

Házi készítésű védőképernyő az időjárás állomás érzékelőjéhez. Projekt "időjárási állomás otthon". Hogyan működik a házi barométer

Házi készítésű védőképernyő az időjárás állomás érzékelőjéhez.  Projekt

Az időjárás-állomás a Revolution Education Ltd. Picaxe mikrokontrollerére épül, és két fő részből áll: egy kültéri egységből, amely 2 másodpercenként küldi el adatait egy 433 MHz-es adó segítségével. És egy beltéri egység, amely 20 x 4-es LCD kijelzőn jeleníti meg a kapott adatokat, valamint a légköri nyomást, amit a beltéri egységben helyben mérnek.

Arra törekedtem, hogy a design a lehető legegyszerűbb és funkcionálisabb legyen. Az eszköz a COM porton keresztül kommunikál a számítógéppel. Jelenleg a kapott értékekből folyamatosan grafikonokat építenek a számítógépen, és az értékeket a hagyományos indikátorokon is megjelenítik. A beépített webszerveren grafikonok és szenzorleolvasások érhetők el, minden adat mentésre kerül és így tovább. Bármikor megtekintheti az adatokat.

A meteorológiai állomás építése a tervezéstől a befejezésig több hónapig tartott, és összességében nagyon elégedett vagyok az eredménnyel. Annak külön örülök, hogy a megszokott eszközökkel mindent a nulláról tudtam felépíteni. Nekem teljesen megfelel, de a tökéletességnek nincs határa, és ez különösen igaz a grafikus felületre. Nem tettem kísérletet az időjárás állomás kereskedelmi forgalomba hozatalára, de ha egy meteorológiai állomás építésén gondolkodik, akkor ez egy jó választás.

Kültéri érzékelők

Az érzékelők hőmérséklet, páratartalom, csapadék, szélirány és sebesség mérésére szolgálnak. Az érzékelők mechanikus és elektronikus eszközök kombinációja.

Hőmérséklet és relatív páratartalom érzékelő

A hőmérséklet mérése talán a legegyszerűbb. Ehhez a DS18B20 érzékelőt használják. A HIH-3610 a páratartalom mérésére szolgált, 0,8-3,9 V feszültséget adva 0% és 100% közötti páratartalom mellett.

Mindkét érzékelőt egy kis NYÁK-ra szereltem. A tábla egy házi készítésű tokba van beszerelve, amely megakadályozza az esőt és más külső tényezőket.

Az egyes érzékelők egyszerűsített kódja az alábbiakban látható. Pontosabb kód, amely egy tizedesjegyig olvassa be az értékeket, Peter Anderson webhelyén látható. Kódját az időjárás állomás végleges változatában használják.

A hőmérséklet-érzékelő ± 0,5 °C pontosságot biztosít. A páratartalom érzékelő ± 2%-os pontosságot biztosít, így teljesen mindegy, hány tizedesjegy áll rendelkezésre!

Példa egy PC-n futó szoftverből származó cselekményre.

Hőfok

Fő: readtemp B.6, b1 ; beolvassa az értéket b1-be, ha b1 > 127, akkor neg ; teszt negatív sertxd-re (#b1, cr, lf) ; átviteli érték a PE terminálhoz szünet 5000 goto main neg: b1 = b1 - 128 ; módosítsa a neg értéket sertxt("-") ; negatív szimbólum továbbítása sertxt (#b1, cr, lf) ; átviteli érték a PE terminálra szünet 5000 goto main

páratartalom

Fő: readadc B.7,b1 ; páratartalom leolvasása b1 = b1 - 41 * 100 / 157 ; váltás %RH sertxd-re (#b1, "%", cr, lf) pause 5000 ; várjon 5 másodpercet, lépjen a főoldalra

Páratartalom érzékelő számítása

A számítások a Honeywell HIH-3610 érzékelő dokumentációjából származnak. A grafikon a standard görbét mutatja 0 °C-on.

Az érzékelő feszültségét a Picaxe 18M2 mikrokontroller ADC bemenetén (B.7) mérik. A fent látható kódban az érték, amely 0 és 255 közötti számként van ábrázolva (azaz 256 érték), a b1 változóban van tárolva.

Áramkörünket 5 V táplálja, így minden ADC lépés:
5/256 = 0,0195 V.

A grafikon az ADC 0,8 V kezdeti értékét mutatja:
0.8 / 0.0195 = 41

A grafikon értékeit figyelembe véve a grafikon meredeksége (figyelembe véve az eltolást) körülbelül:
Kimeneti feszültség / % RH ill
(2,65 - 0,8) / 60 = 0,0308 V % RH
(A 0.0306 dokumentációban)

Számítsuk ki az ADC lépések számát 1% páratartalom esetén:
(V/% RH) / (ADC lépés)
0.0308 / 0.0195 = 1.57

%RH = ADC érték - ADC eltolás / (ADC lépések %RH-ban), vagy
%RH = ADC érték - 41 / 1,57

A mikrokontroller végső számítási képlete így fog kinézni: %RH = ADC érték - 41 * 100/157

Védőtok

Kezdje az egyes panelek kettévágásával. Az egyik részen lévő deszkák mindkét oldalon szilárdan rögzítve lesznek, a második részen pedig csak az egyik oldalon. Ne dobja ki ezeket az alkatrészeket – használtak.

Rögzítsen két 20 mm x 20 mm-es fadarabot felül és alul az egész részekhez, és csavarja rá a többi részt.

Vágja le az egyik darabot az egyik egész oldalával méretre, és ragassza rá az egyik oldal belső oldalára. Ügyeljen arra, hogy a deszkák úgy legyenek ragasztva, hogy "^" formát alkossanak együtt. Tedd ezt minden oldalra.

Szélsebesség és irány mérő

Mechanikai

A szélsebesség- és irányérzékelők mechanikus és elektronikus alkatrészek kombinációja. A mechanikus rész mindkét érzékelőnél azonos.

A PVC cső és a cső felső végén lévő rozsdamentes acél tárcsa közé egy 12 mm-es rétegelt lemezbetét (tengeri réteg) kerül. A csapágy egy rozsdamentes acél tárcsára van ragasztva, és egy rozsdamentes acéllemez tartja a helyén.

Miután mindent teljesen összeszereltek és felállítottak, a kitett területeket tömítéssel le kell zárni a vízzáróság érdekében.

A képen látható másik három lyuk a pengékhez való. A 80 mm hosszú pengék 95 mm-es fordulási sugarat biztosítanak. 50 mm átmérőjű poharak. Ezekhez vágott kölniüvegeket használtam, amelyek szinte gömb alakúak. Nem vagyok biztos a megbízhatóságukban, ezért könnyen cserélhetővé tettem őket.

Elektronikus rész

A szélsebesség-érzékelő elektronikája csak egy tranzisztoros kapcsolóból, egy fotodiódából és két ellenállásból áll. Egy 32 mm átmérőjű kis kerek PCB-re vannak felszerelve. Szabadon vannak beépítve a csőbe, így ha bejut a nedvesség, az elektronika érintése nélkül lefolyik.

A szélmérő egyike a három kalibrálandó érzékelőnek (a másik kettő a csapadékszámláló és a légköri nyomásérzékelő)

A fotodióda fordulatonként két impulzust biztosít. Az általam megcélzott egyszerű "soros" rendszerben (minden érzékelő felváltva van lekérdezve) kompromisszumnak kell lennie az egyes szenzorok lekérdezésére fordított idő (jelen esetben az impulzusok számlálása) és a rendszer válaszkészsége között. mint egész. Ideális esetben az összes érzékelő lekérdezésének teljes ciklusa nem tarthat tovább 2-3 másodpercnél.

A fenti képen az érzékelő ellenőrzése állítható sebességű motorral.

; Az LCD-specifikus parancsok kék színben jelennek meg hsersetup B9600_4, %10000 ; Használja az LCD 1. tűt, nincs hserin hserout 0, (13) : szünet 100 ; LCD inicializálása hserout 0, (13) : szünet 100 hserout 0, (13) : szünet 100 szünet 500 hserout 0, ("ac1", 13) ; Megjelenítési szünet törlése 50 hserout 0, ("acc", 13) hserout 0, ("ac81", 13, "adcount: ", 13) ; Nyomtassa ki a fejléceket pause 10 hserout 0, ("ac95", 13, "adpulsin: ", 13) ; Nyomtassa ki a fejléceket pause 10 do count C.2, 1000, w0 ; Számolja meg az impulzusokat (fordulatonként kettő) w1 = 0, ha b8 = 1-től 2-ig; Mérje meg az impulzushosszt kétszer pulsin C.2, 1, w2 ; fordulatonként és... w1 = w1 + w2 next w1 = w1 / 2 ; ...átlagos hserout 0, ("ac89", 13, "ad ", #w0, " ", 13) kiszámítása ;Nyomtassa ki a számlálási értéket hserout 0, ("ac9d", 13, "ad", #w1, " ", 13) ;Nyomtassa ki az impulzushossz értékét, szünet 100 hurok

Vezetés közben akartam kalibrálni, de nem volt rá idő. Viszonylag sík területen élek, és néhány mérföldre van egy repülőtér, ezért úgy kalibráltam az érzékelőt, hogy összehasonlítottam a szélsebességemet a repülőtéri leolvasásokkal.

Ha 100%-os hatékonyságunk lenne, és a lapátok a szél sebességével forognának, akkor:
Rotor sugara = 3,75"
Rotor átmérője = 7,5" = 0,625 láb
A rotor kerülete = 1,9642 láb

1 láb/perc = 0,0113636 m/h,
1,9642 láb/perc = 1 ford./perc = 0,02232 m/h
1 m/h = 1 / 0,02232 ford

1 m/h = 44,8 ford./perc
? m/h = fordulat / 44,8
= (rpm * 60) / 44,8

Mivel fordulatonként két impulzus van
? m/h = (impulzus másodpercenként * 30) / 44,8
= (impulzusok másodpercenként) / 448

Szélirány-érzékelő - mechanikus rész

A szélirány-érzékelőben alumínium lemez helyett mágnest, optoelektronikai egység helyett speciális AS5040 chipet (mágneses kódolót) használnak.

Az alábbi képen egy 5 mm-es mágnes látható egy központi csavar végére. Nagyon fontos a mágnesnek a chiphez való igazítása. A mágnesnek pontosan kb. 1 mm-rel a chip felett kell középpontjában lennie. Ha minden pontosan be van állítva, az érzékelő megfelelően fog működni.

Szélirány-érzékelő - elektronikus alkatrész

Különféle sémák léteznek a szélirány mérésére. Alapvetően vagy 8 reed kapcsolóból állnak, amelyek 45 fokos távolságban vannak elhelyezve egy forgó mágnes vagy egy teljesen forgatható potenciométer között.

Mindkét módszernek megvannak a maga előnyei és hátrányai. Fő előnye, hogy mindkettőt könnyű megvalósítani. Hátránya, hogy ki vannak téve a kopásnak – különösen a potenciométerek. A reed kapcsolók alternatívája az lenne, ha Hall-effektus érzékelőt használnának a mechanikai kopás kezelésére, de ezek még mindig 8 különböző pozícióban vannak korlátozva... Ideális esetben valami mással próbálkoznék, és végül egy forgó mágneses IC érzékelő mellett döntöttem. Bár felületre szerelhető eszközről van szó (amit igyekszem elkerülni), számos előnye van, ami vonzóvá teszi a használatát!

Számos különböző kimeneti formátuma van, amelyek közül kettő a legalkalmasabb a célunknak. A legjobb pontosság az SSI interfésszel érhető el. Az AS5040 0°-on 1 µs-tól 359,6°-on 1024 µs-ig terjedő impulzusokat ad le

A szélirány-érzékelő kalibrálásának ellenőrzése:

Do readadc10 B.3, w0 ;Olvasás az AS5040 mágneses csapágy szünetből 100 w0 = w0 * 64 / 182 ; Konvertálás 0 - 360 (fok) hibakeresésre ; Megjelenítés a Prog/Edit debug ablakban

Csapadékmérő

A csapadékmérőt lehetőség szerint műanyagból és rozsdamentes acélból készítettem, az alap 3 mm vastag alumíniumból készült a merevség érdekében.

Két vödör van az esőmérőben. Minden vödör legfeljebb 6 ml vizet tartalmaz, mielőtt eltolná a súlypontját, aminek hatására vizet önt a vödörbe, és jelez egy érzékelőt. Amikor a vödör felborul, az alumínium zászló áthalad egy optikai érzékelőn, amely jelet küld a kültéri egység elektronikájának.

Egyelőre meghagytam az átlátszó falakkal (mert jó móka nézni, ahogy működik!). De gyanítom, hogy fehérre kell festeni, hogy nyáron visszaverje a hőt, hogy elkerülje a párolgást. Nem találtam kis tölcsért, így saját magamnak kellett készítenem. Ügyeljen a tölcsér belsejében és az ereszcsatorna közepén lévő vezetékre. Ez segít megállítani a víz felületi feszültségét a tölcsérben, és elősegíti a víz csepegését. A vezeték nélkül az eső hajlamos lenne "kavarni", és a pályája kiszámíthatatlan lenne.

Optoszenzorok közelről:

Az esőmérő elektronikus része

Az érzékelő véletlenszerű jellege miatt a kültéri egység MCU-jában egy szoftveres megszakítás tűnt a logikus megközelítésnek. Sajnos néhány programutasítás letiltja a megszakítási mechanizmust végrehajtásuk közben. van esély arra, hogy a jel sehova sem megy. Ezen okok miatt a csapadékmérő saját 08M Picaxe mikrokontrollerrel rendelkezik.

Egy külön chip használatával 1 órás késleltetést lehet létrehozni, amely elég pontos ahhoz, hogy óránként vödröket számoljon.

Kalibráció

A Picaxe 18m2 fogadja az aktuális vödrök számát óránként, és megjeleníti a kijelzőn és a számítógépen.

Kiindulásként a következő adatokat használom:
A tölcsér átmérője 120 mm, a tartály területe 11 311 mm2
1 mm eső = 11,311 mm3 vagy 11,3 ml.
Minden vödör 5,65 ml-es. Így 2 vödör 2 x 5,65 = 11,3 ml (vagy 1 mm) csapadék. Egy vödör = 0,5 mm csapadék.

Összehasonlításképpen vettem egy olcsó esőmérőt.

A fenti áramkör és a 08M Picaxe áramkör ugyanazt a PCB-elrendezést használja az érzékelőhöz. A készüléket 12V-os 7Ah akkumulátor táplálja egy 7805 stabilizátoron keresztül.
A 433 MHz-es vezeték nélküli RF Connect készletet használtam. A készlet egy pár speciálisan programozott PIC vezérlőt tartalmaz. A tesztek során egy vezeték nélküli modulkészlet meglehetősen megbízhatónak bizonyult.

A PP-re 08M Picaxe és 18m2 van telepítve. Mindegyiknek saját programozó csatlakozója van. Minden érzékelőhöz külön csatlakozók tartoznak, mindegyik saját +5 V-tal - kivéve a hőmérsékletet és a páratartalmat.

Felhívjuk figyelmét, hogy a rajzot a Paintshop Pro programban rajzoltam, így nem tudom garantálni a tűköz pontosságát.

beltéri egység

A beltéri egység 18m2-es Picaxe-t, nyomásérzékelőt és LCD kijelzőt használ. Van egy 5V-os feszültségszabályozó is.

Nyomásmérő

Több sikertelen próbálkozás után az MPX4115A mellett döntöttem. Bár más érzékelők mérési tartománya valamivel nagyobb, nehezen hozzáférhetők. Ezenkívül más érzékelők általában 3,3 V-ról működnek, és további szabályozót igényelnek. Az MPX4115A a nyomással arányos 3,79 V és 4,25 V közötti analóg feszültséget biztosít. Bár ez majdnem elegendő felbontás 1 mbar nyomásváltozás észleléséhez, némi fórumon folytatott vita után hozzáadtam egy MCP3422 ADC-t. A Picaxe 10 bites üzemmódjához képest 16 bites (vagy magasabb) módban is futhat. Az MCP3422 (mint az áramkörünkben) differenciál üzemmódban csatlakoztatható egy érzékelő analóg bemenetével. A fő előny az, hogy ez lehetővé teszi az érzékelő kimenetének korrigálását, ezáltal könnyen kompenzálva az MPX4115A hibákat, és egyszerű módot biztosítva az érzékelő kalibrálására.

Az MPC3422-nek valójában két differenciális bemenete van, de mivel az egyiket nem használják, rövidre vannak zárva. Az MCP3422 kimenete I2C interfésszel rendelkezik, és a 18m2-es Picaxe SDA és SCL érintkezőihez csatlakozik – B.1 és B.4 érintkezők. Az én szemszögemből az egyetlen hátránya az MCP3422 használatának, hogy kicsi felületre szerelhető eszköz, de az adapterhez forrasztottam. Az MCP3422 18m2 az I2C interfészen kívül egyszerűen feldolgozza a 433 MHz-es vezeték nélküli vevőről beérkező adatokat, megjeleníti a kijelzőn, és továbbítja a PC-re. A beltéri egység hibáinak elkerülése érdekében, amikor a számítógép nem működik, a számítógép nem válaszol. A beltéri egység továbbítja az adatokat, és továbbmegy. Körülbelül 2 másodperces időközönként továbbítja az adatokat, így a következő alkalommal gyorsan kompenzálja az adatvesztést. 18m2-en a nem használt portokat használtam az előlapi gomb csatlakoztatásához. Az S1 kapcsoló (C.5 bemenet) az LCD háttérvilágítás bekapcsolására szolgál. Az S2 kapcsoló (C.0 bemenet) visszaállítja a nyomásértéket (mbar) az LCD-kijelzőn. Az S3 kapcsoló (C.1 bemenet) átkapcsolja az LCD-kijelzőn megjelenő csapadékot az előző óra és az aktuális óra összege között. A gombokat 1 másodpercnél tovább le kell nyomva tartani, hogy reagáljanak.

A beltéri egység összeszerelése

A kültéri egység PCB-jéhez hasonlóan az elrendezést kézzel rajzoltam meg a Paintshop Pro segítségével, így előfordulhatnak hibák a távolságokban.

A tábla valamivel nagyobb a szükségesnél, hogy beleférjen az alumínium ház réseibe.
A programozó csatlakozót szándékosan enyhén "befelé" készítettem a tábla szélétől, nehogy hozzáérjen a házhoz. Az LCD-kijelző kivágása ki van fúrva és pontos méretre vágva.

A képen minden látható, ami már be van szerelve a tokba.

A táblán lévő tűk megnehezítik a tokba való beszerelést, ezért ki kellett forrasztanom, és vezetékekkel a kijelzőt a táblához forrasztani.

Kültéri egység - Picaxe kód

; ================================================= = =============== ; Fő 18M2 kód a Picaxe meteorológiai állomás kültéri (adó) egységéhez ; Tizedes pontosságú páratartalom és hőmérséklet rutinok, ; szerzői jog, Peter H Anderson, Baltimore, MD, január, "04 ; ; =================================== ============================== #Picaxe 18M2 Szimbólum HValue = w0 Szimbólum HighWord = w1 Szimbólum LowWord = w2 Szimbólum RH10 = w3 Szimbólum HQuotient = b0 Szimbólum HFract = b1 Szimbólum X = b0 Szimbólum aDig = b1 Szimbólum TFaktor = b2 Szimbólum Tc = b3 Szimbólum SignBit = b4 Szimbólum TVérték = w4 Szimbólum Thányados = b10 Szimbólum TFract = b11 Szimbólum TempC_100 = MagDir = w6 Szimbólum = b14 Szimbólum MagDirHi = b15 Szimbólum WindSpeed ​​= w8 Szimbólum WindSpeedLo = b16 Szimbólum WindSpeedHi = b17 Szimbólum ThisHour = b18 Szimbólum LastHour = b19 Szimbólum RainRequest = b20 Szimbólum RainRequest = b20 Szimbólum Hardver Szimbólum Direktív = B.7 Szimbólum B. TempR = B.7 Szimbólum B. Temp. 3 Szimbólum Sebesség = B,0 do ; Páratartalom olvasása ADC10 HumidRaw, HValue ;Pedavitás (HValue) lekérése HighWord = 1613 ** HValue ;RH kiszámítása Alacsonyszó = 1613 * HÉRTÉK RH10 = Alacsony szó / 1024 Magasszó 1W = 6 + LowWord RH10 = RH10 - 258 szünet 100 ; Rea d hőmérséklet Readtemp12 TempRaw, TValue ; Hőmérséklet lekérése SignBit = TVérték / 256 / 128 , ha SignBit = 0 , akkor pozitív ; Ez negatív, tehát TVérték = TVérték ^ $ffff + 1; vegyen kettőt, és vegyen pozitívat: TempC_100 = TVérték * 6; TC = érték * 0,0625 TVérték = TVérték * 25 / 100 TempC_100 = TempC_100 + TValue TQuotient = TempC_100 /TFrac0 TQuotient = TempC_100 /TFrac0 TempC_100 % 100 / 10 X = TQuotient / 10; Hőmérséklet-korrekciós tényező kiszámítása a páratartalomhoz, ha SignBit = 0, akkor SignBit = " " else SignBit = "-" endif, ha SignBit = "-", akkor X = 4 - X különben X = X + 4 endif GoSub TempCorection ;kompenzálja a relatív páratartalom hányadosát = RH10 / 10 ;Számítsa ki az RH hányadost és... HFract = RH10 % 10 ;...tizedes hely.if HHányados > 99 then ;Tartományon túl HHányados = 99 HFract ha HQuotient = 29 endif 1 akkor ; Tartomány alatti HQuotient = 0 HFract = 0 endif ; Olvassa be az AS540 mágneses kódolót a szélirányhoz readadc10 DirRaw, MagDir ; Olvassa ki az AS5040 mágneses csapágyból, szünet 100 ; Olvassa ki a fordulatszámot a szélsebesség számlálójából Sebesség, 1000, minden szél 30. kb. 1 perc), kérjen esőmérő adatokat a 08M inc RainRequest if RainR-től equest >= 30 majd magas C.1 szerin , C.0, N2400, ("r"), LastHour, ThisHour ; Esőszámláló alacsony C.1 RainRequest = 0 endif ; Adatok küldése a beltéri egységnek 8 bájtos blokkokban; Az első csoportot nem kell kalibrálni, ezért először itt kell elvégezni a számításokat. ; A második csoportnak „beállításra” lesz szüksége – ez könnyebben elvégezhető a beltéri oldalon. serout C.2, N2400, ("t", SignBit, TQuotient, TFract, HQuotient, HFract, "A", "B") szünet 100 serout C.2, N2400, ("m", MagDirHi, MagDirLo, WindSpeedHi, WindSpeedLo, LastHour, ThisHour, "C") ciklus TempCorection: Lookup X, (87, 89, 91, 93, 95, 97, 99, 101, 103, 106, 108, 110, 113, 116, 121,1) ), TFactor " -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 ha TFactor< 100 then aDig = TFactor / 10 RH10 = RH10 * aDig / 10 TFactor = TFactor % 10 aDig = TFactor RH10 = RH10 * aDig / 100 + RH10 else TFactor = TFactor % 100 aDig = TFactor / 10 RH10 = RH10 * aDig / 10 + RH10 TFactor = TFactor % 10 aDig = TFactor RH10 = RH10 * aDig / 100 + RH10 endif return

Felhasznált memória = 295 bájt a 2048-ból

Esőszámláló - 08M kód

#picaxe 08M Szimbólum ThisHour = b2 ; Tárolja az aktuális szenzorszámot b2-ben Szimbólum LastHour = b3 ; Mentse el az előző órák számát b3-ban ;Hardverdefiníciók Szimbólum DataRequest = pin3 Szimbólum BucketSensor = pin4 beállítás %00010000, %00010000 ; pin4 a pin fő megszakítása: w0 = 1-től 60000-ig ; Hurok 1 órán át Utolsó szünet 60 óra Frissítse az utolsó órák számát ThisHour = 0-val ; aktuális óra & aktuális óra visszaállítása goto main ; Végezze el a következő óra megszakítást: setint %00010000, %00010000 ; Állítsa vissza a megszakítást, ha DataRequest = 1, akkor ; A megszakítás a 18M2-től volt? serout 2, N2400, ("r", LastHour, ThisHour); Igen, tehát küldje el az előző óra számlálóját és aktuális számlálóját. tegye: hurok, amíg a DataRequest = 1 ; Várjon, amíg a 18M2 leállítja a kérést, mielőtt folytatná az endif-et, ha BucketSensor = 1, akkor ; Esőérzékelő okozta a megszakítást? inc ThisHour ; Igen, tehát növelje vödörhegyek száma do: hurok miközben BucketSensor = 1 ; Győződjön meg arról, hogy a zászló törölte az érzékelőt, mielőtt folytatná az endif visszatérést

Beltéri egység - Picaxe kód

;================================================ = ========================== ; Fő beltéri (vevő) program. ; ; Adatokat fogad a kültéri egységről, megjeleníti az LCD-n, és továbbítja az adatokat a számítógépre; A légnyomást is méri (köszönhetően a "motherp"-nek) ;====================================== ===================================== #PICAXE 18M2 ; Változódefiníciók (a b2-től b5-ig újra használatosak az mBar kódhoz, amikor elérhetővé válnak) szimbólum Hányados = b2 szimbólum Fract = b3 szimbólum SignBit = b4 szimbólum Páratartalom = b5 szimbólum HFract = b14 szimbólum Dir = w5 szimbólum DirLo = b10 szimbólum DirHi = b11 szimbólum Sebesség = w3 szimbólum SpeedLo = b6 szimbólum SpeedHi = b7 szimbólum RainCountThisHour = b12 szimbólum EsőszámlálóUtolsó Óra = b13 szimbólum LCDRainWhole = b21 szimbólum LCDEsőFract = b22 szimbólum UtolsóVagyEz = b23 ; MCP3422 ADC változók szimbóluma mb900 = 17429 ; ADC olvasása 900 Mbar esetén, majd adjon hozzá 72,288 számlálást mbar-onként szimbólum adj0 = 72 szimbólum mBarADCValue = w0 szimbólum adj1 = b4 ; adj2 = b5 minden 4 mbar szimbólum hozzáadására szolgál; 24 mbar-onként 1 szám hozzáadására használatos mBar = w4 ; Háztartási változók szimbóluma lastmbar = w8 ; Emlékezzen az előző mBar olvasási szimbólumra RiseFall = b18 ; A nyomás emelkedésének vagy csökkenésének jelzője (felfelé vagy lefelé mutató nyíl) szimbólum aktív = b19 ; Az ellenőrző lámpa aktivitást mutat az LCD képernyőn szimbólum LCD_Status = b20 ; Az LCD háttérvilágítás be vagy ki van kapcsolva (0 vagy 1)? ; Hardver Definíciók szimbólum Vezeték nélküli = C.7 ; Bejövő kapcsolat vezeték nélküli vevő/dekódoló szimbólum Számítógép = C.2 ; Kimenő soros kapcsolat a számítógéphez szimbólum LCD = pinC.5 ; Az elülső panel gombja az LCD háttérvilágítás szimbólumának kiürítéséhez/üresítéséhez ClearRiseFall = pinC.0 ; Az elülső panelen található gomb a nyomás „emelkedő/eső” jelzőszimbólumának törléséhez LastOrThisSwitch = pinC.1 ; Az előlapon található gomb az aktuális vagy az előző óra csapadékának megjelenítéséhez Init: hsersetup B9600_4, %10000 ; Használjon LCD 1. tűt, hserin nélkül ADC chip.hi2cout (%00011000) ;állítsa be az MCP3422-t 16 bites folyamatos konverziós szünethez 500 hserout 0, (13) : szünet 100 ;LCD hserout inicializálása 0, (13) : szünet 100 hserout 0, (13) 0 szünet hserout 0, ("ac50", 13) hserout 0, ("ad", 32, 32, 32, 32, 49, 42, 36, 32, 13) ; Határozza meg a lefelé mutató nyíl karakterét (karakter 10) hserout 0, (" ac1", 13) ; Megjelenítési szünet törlése 50 hserout 0, ("acc", 13) ; kurzor elrejtése hserout 0, ("ac81", 13, "ad ", $df, "C", 13) ; A fejlécek kinyomtatása hserout 0, ("ac88", 13, "admBar", 13) hserout 0, ("ac8e", 13, "adRH %", 13) hserout 0, ("acd5", 13, "ad", "dir" , 13) ; Láblap nyomtatása hserout 0, ("acdc", 13, "ad", "mph", 13) ; hserout 0, ("ace3", 13, "ad", "mm", 13) lastmbar = 0 Változók inicializálása LastOrThis = "c" ;==== ================================================= = ==================== ; Fő hurok ;============================================== = ========================== fő: ; Ellenőrizze, hogy meg van-e nyomva valamelyik előlapi kapcsoló. A Picaxe megszakítási mechanizmus ; a szerin és serout parancsok nagy száma miatt szinte véglegesen letiltva; így a program megszórása "gosub kapcsolókkal" a kapcsoló állapotának ellenőrzéséhez több ; hatékony, amely megszakítja. gosub kapcsolók ; Szerezze meg az első értékcsoportot a kültéri egységtől a 433 MHz-es rádiókapcsolaton keresztül. serin Wireless, N2400, ("t"), SignBit, hányados, tört, páratartalom, HFract, b15, b15 ; Villogó "visszajelző" az LCD-n, jelezve az aktivitást és a sikeres "szerint" a vezeték nélküli kapcsolatról. gosub árulkodó; Az első csoport megjelenítése az LCD-n hserout 0, ("acc0", 13) hserout 0, ("ad", SignBit, #Quotient, ".", #Fract, " ", 13) hserout 0, ("acce", 13) hserout 0, ("ad", #Humidity,".", #HFract, " ", 13) gosub kapcsolók ; Az első csoport elküldése a számítógép COM portjára ; Minden csoportnak van egy kezdőazonosítója, egy adata és egy végazonosítója: ; Kezdete = "xS", vége "xE" pl. Wind Start = WS, Wind End = WE ; A több adatot egyetlen szóköz választja el. serout Computer, N2400, ("TS", SignBit, #Quotient," ", #Fract, "TE") ; Hőmérséklet-szerszámító számítógép, N2400, ("HS", #Humidity, " ", #HFract, "HE" ); Páratartalom ; Ellenőrizze újra és rendszeres időközönként a kapcsolókat a program során. gosub kapcsolók ; Szerezze be a második értékcsoportot a kültéri egység rádiókapcsolatából. serin Wireless, N2400, ("m"), DirHi, DirLo, SpeedHi, SpeedLo, RainCountLastHour, RainCountThisHour, b15 gosub visszajelző Speed ​​​​= Sebesség * 300 / 448 ; Becsült átalakítás impulzus/sec-ről mph-ra Dir = Dir * 64 / 182 ; 0-1023 átváltása 0-359 fokra; A pontosság megőrzése érdekében a csapadékmérőt kalibrálni kell a ; mechanikus ütközők a billenőkanalon úgy, hogy 1 hegy 0,5 mm eső legyen. if LastOrThis = "c" akkor ; Döntse el, hogy az előző óra"s LCDRainWhole = RainCountThisHour / 2 ; esőzés vagy az aktuális óra"s megjelenítése. LCDRainFract = RainCountThisHour * 5 // 10 else LCDRainWhole = RainCountLastHour / 2 ; LCDRainFract = RainCountLastHour * 5 // 10 endif ; Második csoport küldése LCD-re hserout 0, ("ac95", 13) hserout 0, ("ad", #Dir, " ", 13) hserout 0, ("ac9c", 13) hserout 0, ("ad", # Sebesség, " ", 13) hserout 0, ("aca1", 13) hserout 0, ("ad", LastOrThis, " ", #LCDRainWhole, ".", #LCDRainFract, " ", 13) ; Második csoport küldése a számítógépnek COM port szerout Számítógép, N2400, ("WS", #Dir", ", #Speed, "WE") ; Wind serout Computer, N2400, ("RS", #RainCountLastHour," ", #RainCountThisHour, "RE" ); Rain gosub kapcsolók ; Köszönet a Picaxe fórum "matherp"-nek az mbar kód ciklusért: ; Légköri nyomás mérése MPX4115A-val ; Analóg-digitális átalakítás MCP3422 használatával; MPX kimenet V+-ra, 2. 5 V - V- ; ADC 16 bites módban hi2cin (b1,b0,b2) ; Olvassa be az ADC olvasást és az állapotbájtot az MCP3422-ből adj1 = 0 adj2 = 0 w1 = mb900 mbar = 900 do miközben mBarADCValue > w1 ; mBarADCValue = w0 = b1:b0 inc mbar w1 = w1 + adj0 inc adj1, ha adj1 = 4, akkor inc adj2 w1 = w1 + 1 adj1 = 0 endif, ha adj2 = 6, akkor w1 = w1 + 1 adj2 = 0 endif hurok gos ub árulkodó; Nyomás küldése a számítógépnek COM port szerout Számítógép, N2400, ("PS:", #mbar, "PE") ; Az előző nyomásérték inicializálása (lastmbar), ha még nincs beállítva, ha lastmbar = 0, akkor lastmbar = mbar RiseFall = " " endif ; A felfelé vagy lefelé mutató nyíl megjelenítése, ha a nyomás megváltozott, ha mbar > lastmbar, akkor RiseFall = "^" ; ^ lastmbar = mbar endif if mbar< lastmbar then RiseFall = 10 ; Custom LCD character. Down arrow lastmbar = mbar endif hserout 0, ("acc7", 13) hserout 0, ("ad", RiseFall, #mbar, " ",13) gosub telltale goto main ; Check if one of the front panel buttons is pressed. switches: if LCD = 1 then ; LCD Backlight on/off Button is pressed if LCD_Status = 0 then ; Backlight is on so... hserout 0, ("ab0", 13) ; Turn it off LCD_Status = 1 else hserout 0, ("ab1", 13) ; Else turn it on. LCD_Status = 0 endif do: loop while LCD = 1 ; Don"t return while button is pressed endif if ClearRiseFall = 1 then ; Pressure rise/fall button is pressed RiseFall = " " ; Clear indicator and... hserout 0, ("acc7", 13) ; ... update display. hserout 0, ("ad", RiseFall, #mbar, " ",13) do: loop while ClearRiseFall = 1 endif if LastOrThisSwitch = 1 then ; Rain Previous Hour / Last Hour button. if LastOrThis = "c" then LastOrThis = "p" LCDRainWhole = RainCountLastHour / 2 ; Recalculate values and re-display to LCDRainFract = RainCountLastHour * 5 // 10 ; give visual confirmation of button-press else LastorThis = "c" LCDRainWhole = RainCountThisHour / 2 ; LCDRainFract = RainCountThisHour * 5 // 10 endif hserout 0, ("aca1", 13) hserout 0, ("ad", LastOrThis, " ", #LCDRainWhole, ".", #LCDRainFract, " ", 13) do: loop while LastOrThisSwitch = 1 endif return ; Flash "tell-tale" on LCD display to show activity telltale: if active = "*" then active = " " else active = "*" endif hserout 0, ("ac80", 13, "ad", active, 13) return

Felhasznált memória = 764 bájt a 2048-ból

PC szoftver

A PC-n futó szoftver Borland Delphi 7-tel készült. A jelenlegi formájában elég primitív, de legalább megmutatja a Picaxe és a számítógép közötti kapcsolatot.

Kiválasztható, hogy a grafikonok 1 vagy 12 órás periódusban jelenjenek meg. A grafikonok az egérrel előre-hátra görgethetők. Megmenthetők. Ehhez kattintson rájuk a jobb gombbal, és adja meg a fájl nevét és értékét. Beállíthat egy korlátozott APRS-adatkészletet, amely percenként egyszer kerül kiírásra az APRS.TXT fájl soraiban, és ugyanabban a mappában tárolódik, mint a Weather.exe. Vegye figyelembe, hogy a hőmérséklet Fahrenheit-fokban van megadva, a csapadék pedig hüvelykenként 1/100.

A rádióelemek listája

Kijelölés típus Megnevezés Mennyiség jegyzetÜzletA jegyzettömböm
Hőmérséklet és relatív páratartalom érzékelő
hőmérséklet szenzor

DS18B20

1 Jegyzettömbhöz
Páratartalom érzékelőHIH-36101 Jegyzettömbhöz
Ellenállás

4,7 kOhm

1 Jegyzettömbhöz
Szélsebesség és irány mérő
FototranzisztorIR1 Jegyzettömbhöz
Fénykibocsátó diódaIR1 Jegyzettömbhöz
Ellenállás

220 ohm

1 Jegyzettömbhöz
Ellenállás

4,7 kOhm

1 Jegyzettömbhöz
Mágneses kódoló1 Jegyzettömbhöz
elektrolit kondenzátor10 uF4 Jegyzettömbhöz
Kondenzátor100 nF1 Jegyzettömbhöz
Ellenállás

4,7 kOhm

1 Jegyzettömbhöz
Ellenállás

10 kOhm

1 Jegyzettömbhöz
Csapadékmérő
MK PICAXE

PICAXE-08M

1 Jegyzettömbhöz
egyenirányító dióda

1N4148

2 Jegyzettömbhöz
Kondenzátor100 nF1 Jegyzettömbhöz
Ellenállás

4,7 kOhm

1 Jegyzettömbhöz
Ellenállás

10 kOhm

4 Jegyzettömbhöz
Ellenállás

22 kOhm

1 Jegyzettömbhöz
Ellenállás

220 ohm

2 Jegyzettömbhöz
Fénykibocsátó diódaIR1

(chrono-termo-higro-barométer)

Ahogy a híres dal mondja: „A legfontosabb az időjárás a házban…”. Természetesen a szerző az időjárás alatt az egy fedél alatt élő házastársak lelkiállapotára gondolt. De ha szó szerint közelíti meg ezt a kifejezést, akkor ez azt jelenti, hogy a tető alatt a lelki kényelem mellett éghajlati kényelemnek is kell lennie. A javasolt készülék a helyiség levegő hőmérsékletének és relatív páratartalmának, a légköri nyomás értékének és az aktuális időnek a mérését és kijelzését biztosítja a LED kijelzőn.

Az állomás mozgásérzékelővel van felszerelve, amely bekapcsolja, ha valaki megjelenik az érzékelő lefedettségi területén. Ezzel az üzemmóddal energiát takaríthat meg, és galvanikus elemeket használhat áramforrásként. Ezenkívül ez az üzemmód kényelmesen használható a hálószobában - az állomás kikapcsolt kijelzője nem irritálja a fényét. Ebben az esetben az állomás bekapcsolásához elegendő egy mozgást végrehajtani a kezével vagy lábával.

Az állomás megjelenése az ábrákon látható (1. ábra és 2. ábra).

1. kép
Állomás megjelenése

2. ábra.
Az állomás külső nézete (hátul)

Az állomás működését bemutató videó az alábbiakban látható:


Elektromos áramkör.

Az elektromos kapcsolási rajz a 3. ábrán látható.

3. ábra
Sematikus elektromos áramkör.

Az állomást az ATmega8 mikrokontrollerre szerelték össze. Az R1C1 lánc biztosítja a mikrokontroller kezdeti visszaállítását (Reset), amikor be van kapcsolva. Az MK áramkörön belüli programozása az XP3 "SPI programozó" csatlakozón keresztül történik.
MK ATmega8 biztosítékok: HIGH=0xD9, LOW=0xE4.

A kijelző négy számjegyű, 7 szegmenses CL5642BN típusú jelzőt használ, közös anóddal és kétpontos („:”) elválasztóval, órákra és percekre. Az indikátorszegmensek katódjai korlátozó ellenállásokon keresztül csatlakoznak az MC-hez. Az MK dinamikus jelzést biztosít a VT3…VT6 tranzisztoros kapcsolók bekapcsolásával.

A kronométer egy DS1307 chipre van felszerelve a szabványos kapcsolóáramkör szerint. Az óra pontosságáról egy Y1 kvarc rezonátor gondoskodik, melynek frekvenciája 32768 Hz. Fő tápegység hiányában (5 Volt) az óra folytonosságát egy CR2032 galvanikus cellán (3 Volt) egy tartalék áramforrás biztosítja. Az MK kölcsönhatása a DS1307 chippel a TWI (I2C) buszon keresztül történik. A TWI buszvonalakat R20, R21 ellenállások "húzzák fel" a VCC2 tápra. Az órák és percek beállítását az SA1 ("Óra +"), SA2 ("Percek +"), SA3 ("Telepítés") gombok biztosítják. Ugyanakkor meg kell nyomni és lenyomva tartani a "Beállítás" gombot az adatok kijelzőn történő megjelenítési ciklusának kezdetekor. Az "Óra +" vagy a "Percek +" gombok megnyomásával vagy lenyomva tartásával beállítható a kronométer ideje. A "Set" gomb elengedésekor a kijelzőn megjelenő óra és perc értékek a DS1307 chip megfelelő celláiba, a 0 érték pedig a másodperc cellába íródnak. pontosan szinkronizálja az időt a pontos idő külső referenciaforrásaival (például sugárzott rádióállomásokkal vagy televízióval).

A TWI buszhoz egy BMP180 barométer kártya is csatlakozik. A készülékprogram beolvassa a gyártó által beállított kalibrációs együtthatókat, és figyelembe veszi a légköri nyomás kiszámításakor.

A hőmérséklet mérését a DHT11 érzékelő végzi. Az MK az érzékelőt egy soros egyvezetékes kétirányú interfészen keresztül vezérli. Az interfész vezetéket az R19 ellenállás "felhúzza" a VCC2 tápra.

Az akkumulátor kímélése érdekében a mikrokontroller ideje nagy részét mély alvási állapotban tölti („kikapcsolás”). Ugyanakkor elalvás előtt az MC feszültségmentesíti az összes VCC2-höz csatlakoztatott mérőérzékelőt (kronométer, légköri nyomásérzékelő, páratartalom és hőmérséklet érzékelő). Az érzékelők feszültségmentesítését a VT1 és VT2 tranzisztoron lévő gombok biztosítják.

Az MK felébresztéséhez a HC-SR501 mozgásérzékelőt az állomás áramköre tartalmazza. Feladata az MK kihozása az alvó állapotból. Kioldáskor az érzékelő jelet küld az MK-nak, amely magától felébred, és árammal látja el a VCC2-t a perifériás érzékelők számára (kronométer, légköri nyomásérzékelő, páratartalom- és hőmérsékletérzékelő). A VT7 tranzisztoron lévő billentyű biztosítja a mozgásérzékelő jelének megfordítását az MK-val való koordinációhoz. A "Motion" kapcsoló lehetővé teszi a mozgásérzékelő letiltását a még nagyobb akkumulátor-megtakarítás érdekében. Ebben az esetben a "Telepítés" gomb megnyomásával alternatív parancs adható az MK felébresztéséhez.

Az állomás két alternatív forrásból táplálkozik: három AA elemről vagy egy 5 V-os hálózati tápegységről az USB buszon keresztül. Az áramforrások közötti váltáshoz a „Power” kapcsolót az „USB” vagy „Akkumulátor” állások egyikébe kell állítani. Akkumulátorról táplálva az állomás áramfelvétele alvó üzemmódban nem haladja meg a 200 μA-t, ami 2000 mAh akkumulátorkapacitás mellett 10 000 óra (több mint egy év) folyamatos működésnek felel meg.

A hálózati tápegység kiválasztásakor figyelembe kell venni, hogy az állomás csúcsáramfelvétele (mérés közben és bekapcsolt kijelző mellett) ne haladja meg a 100mA-t. Ezért szinte bármilyen töltőt használhat.

Amikor az USB-buszról táplálják, néha tanácsos gondoskodni arról, hogy az érzékelők folyamatosan mérjenek értékeket és megjelenítsék az adatokat a kijelzőn. Ehhez állítsa a „Kijelző” kapcsolót „Be” állásba. Ebben az esetben az MK nem kerül alvó állapotba.

Nyomtatott áramkörök.

A nyomtatott áramköri lapokat a Dip Trace programban tervezték. Egyoldalas fólia üvegszálra készülnek. Az alkatrészek elhelyezkedése a fő nyomtatott áramköri lapon az ábrán látható (4. ábra). Az ábrán a beépítési oldalon található jumperek színes szaggatott vonalakkal vannak kiemelve. A sínek oldalán lévő nyomtatott áramköri kártya az ábrán látható (5. ábra).

4. ábra
Nyomtatott áramköri lap (a rádió alkatrészek oldaláról nézve).

5. ábra
PCB (alulnézet, tükörkép).

Az állomási vezérlőpanel gombjai és kapcsolói külön nyomtatott áramköri lapra vannak felszerelve (6. és 7. ábra).

6. ábra
A Vezérlőpult nyomtatott áramköri lapja (felülnézet).

7. ábra
A Vezérlőpult nyomtatott áramköri lapja (nézet a pályák oldaláról).

Az USB-kábel csatlakoztatására szolgáló aljzat az AliExpresstől vásárolt külön kártyára van felszerelve (8. ábra).

8. ábra
Tábla USB aljzattal.

Telepítés.

Az állomás egy univerzális dobozba van felszerelve a "Promrukav" kábelcsatornákhoz - IP42; 400V; polisztirol GOST R 50827.1-2009 TU 3464-001-97341529-2012 40-0460. cikk.

A ház elülső oldalán ablakok vannak kivágva a kijelző és a mozgásérzékelő számára. A ház hátoldalán DHT11 páratartalom és hőmérséklet érzékelő, a vezérlőpanel gombjai és kapcsolói találhatók.

Tápegység - három AA 1,5 V-os cella egy speciális tartóba - "kiságyba" van helyezve.

A rádió alkatrészek elhelyezése a nyomtatott áramköri lapon az ábrán látható (9. ábra).

9. ábra
Az alkatrészek elhelyezésének megjelenése a táblán.

A "CTBH.rar" cikk archívuma a következőket tartalmazza:

1. CTBH mappa - C projektfájlok Atmel Studio 7 környezetben.
2. CTBH.dch - elektromos kapcsolási rajz Dip Trace formátumban.
3. CTBH.dip - a készülék nyomtatott áramköri lapja Dip Trace formátumban.
4. CTBH_Buttons.dip - a Vezérlőpult nyomtatott áramköri lapja Dip Trace formátumban.
5. CTBH.hex – indítófájl az MK-hoz.

Sok sikert a munkádhoz és minden jót!

Archívum letöltése.

A szétszórt részekből úgy döntöttem, készítek egy kis meteorológiai állomást. Két nap szünetbe telt a vezérlő firmware-ének összeállítása és megírása. Néhány napot még a szoftver többi részének írásával, tesztelésével és hibakeresésével töltöttem. A meteorológiai állomás jelenlegi változata hőmérsékletet, páratartalmat, nyomást mér, USB porton keresztül kommunikál számítógéppel, és erről táplálkozik, 9 V-os elemmel megtámogatva az adatokat az LCD-n jelenítik meg. Vannak órák is. Mivel nem volt megfelelő kvarc (és elvileg nem akartam vásárolni), ezért számítógéppel időszinkronizálást végeztem.

Ez a projekt abszolút nem kereskedelmi, így az időjárás állomás diagramja, a vezérlő firmware és az összes szükséges szoftver letölthető. Firmware forráskód.

Az állomás kenyértáblára van összeszerelve, ezért ne kérjen nyomtatott áramköri rajzot.

A következő fő összetevőket használták:
ATMega8 - vezérlő
MPX4115A - nyomásérzékelő
HIH-4000 - páratartalom érzékelő
DS18B20 - hőmérséklet-érzékelő
WH1602A - kijelző

Én PLED technológiás LCD-t használtam, lehet normál WH1602A típusút. A hőmérséklet- és páratartalom-érzékelők kívül, egy védődobozban vannak elhelyezve.

Csatlakozás számítógéphez

Az USB-porthoz való csatlakozáshoz külön leírás szükséges.

Elvileg a COM portra lehetett csatlakozni, az egyszerűbb. De elfoglalt vagyok. Nincs más választás - USB. Mivel az állomást abból állították össze, amilyen volt, egy CA-42 kábelcsonkot használtak a mobiltelefon számítógéphez való csatlakoztatására. A mobiltelefon csatlakozója működésbe lépett, de a számítógéphez csatlakozó vége megmaradt. Ezen a csatlakozón magában már van egy mikroáramkör az USB porthoz, a kimenet pedig egy szabványos UART, ami a mobiltelefonokban használatos és pont megfelelő a vezérlőhöz, tehát közvetlenül, jelátalakító nélkül forrasztjuk a vezetékeket. A kábel illesztőprogramjainak telepítése után megjelenik egy virtuális COM-port. Ezután bármilyen programmal kapcsolódhatunk időjárás-állomásunkhoz, például a HyperTerminalhoz. A kábelkiforrasztást konkrétan nem idézem, mivel a kábelek különbözőek, eltérhetnek. 3 vezetéket kell használnia TX, RX, GND. Az eszköz tápellátása a kábelről valószínűleg nem fog működni. Rossz USB-csatlakozót vettem, és egy másik USB-portról tápláltam.

Annak érdekében, hogy parancsokat tudjunk küldeni a parancssorból és választ kapjunk az időjárási állomástól, a getfromcom.exe programot írtuk.

Az időjárás állomás csak két parancsot ért:

AGOV – Az aktuális érzékelő leolvasásait adja vissza.

SETTIME [idő másodpercben a nap kezdete óta] - a parancs beállítja az időt az időjárás állomáson

Az adatok lekéréséhez futtassa a getfromcom.exe COM6 AGOV programot

Az idő beállításához futtassa a getfromcom.exe COM6 "SETTIME 72565" parancsot.

COM6 - port.
72565 – a nap eleje óta eltelt másodpercek száma.

Folyamatautomatizálás

Mostantól bármilyen programmal kiolvashatod, feldolgozhatod az adatokat, elküldheted ahova kell, szinkronizálhatod az időjárás állomás idejét. PHP script nyelvvel csináltam. Először is, gyors, és mindig gyorsan kijavíthatja a szkriptet, és nem keresi, hová tűnt a forráskód. Másodszor, folyamatosan PHP-vel dolgozom. De a programját bármilyen nyelven megírhatja. Természetesen a PHP működéséhez le kell töltenie (http://www.php.net/downloads.php) és telepítenie kell a számítógépére. Windows alatt ez alapvetően megtörténik. A getfromcom.php szkript a get_data.bat fájlból fut, lekérdezi az időjárás állomást, feldolgozza az adatokat és elküldi a get_data.php szkriptet a HTTP szervernek. A szerveren lévő szkriptekről kicsit később fogunk beszélni.

Hibernált állapotban működő számítógép

A számítógépem alvó módban van. 3 óránként felébred, lekérdezi az időjárás állomást, adatokat küld a szervernek, és újra elalszik (nem kapcsolhatja ki - mivel kényelmesebb az Ön számára.). Ez a következőképpen történik: A feladatütemezőben a get_data.bat kötegfájlt kell végrehajtani, és be van állítva a „Számítógép felébresztése a feladat végrehajtásához” opció.

A számítógép hibernált állapotban van az fShutdown.exe /hibernate fájllal
Most a megadott időpontban a számítógép felébred, és végrehajtja a get_data.bat fájlt

A get_data.bat szolgáltatásai

Csapatok:

A devcon.exe engedélyezze a PCIVEN_10EC-t
ping 127.0.0.1
RASPHONE-d Setilite

Indítson el egy hálózati kapcsolatot, és hozza létre a VPN-t az internetszolgáltatómnak.

ping 127.0.0.1 - ezért megtettem a szükséges szünetet.

Ennek megfelelően tiltsa le a parancsokat:

RASPHONE -h Setilite
A devcon.exe letiltja a PCIVEN_10EC-t

Minden más lesz az Ön számára, ezért ezeket a sorokat kommentálják a fájlban.

A hibernált állapotból való felébredés után a számítógép azt gondolta, hogy a COM portot egy másik program foglalta el. Újra kellett indítanom a virtuális COM portot a devcon.exe restart "USBVid_6547&PID_0232" paranccsal
Más eszközazonosítója lesz.

Szerver szkriptek:

Most a kiszolgálón lévő szkriptekről. Adatokat fogadó szkript: get_data.php
A szkript a pogoda.log fájlba menti az adatokat. Valójában az adatok a MySQL adatbázisba is elküldésre kerülnek. De az egyszerűség kedvéért csak fájllal dolgozunk. Az adatok elfogadásakor a szkript ellenőrzi, hogy a küldő IP-címe egyezik-e. Az engedélyezett címek az ip_allow.lst fájlban vannak felsorolva. A rendszer nem fogad el adatokat "idegen" feladótól.

Egy kollégám nemrégiben egy kisebb tudományos vásárt szervezett.
A tanárom megkért, hogy mutassak be egy elektronikai projektet főiskolai hallgatóknak. Két napom volt, hogy kitaláljak valami érdekeset és elég egyszerűt.



Mivel itt az időjárási viszonyok meglehetősen változékonyak, és a hőmérséklet 30-40 ° C között ingadozik, úgy döntöttem, hogy készítek egy otthoni meteorológiai állomást.

Milyen funkciói vannak az otthoni meteorológiai állomásnak?
A kijelzővel ellátott Arduino meteorológiai állomás egy olyan eszköz, amely különféle érzékelők segítségével adatokat gyűjt az időjárásról és a környezeti viszonyokról.

Általában ezek a következő érzékelők:

  • szél
  • páratartalom
  • eső
  • hőfok
  • nyomás
  • Magasság

Célom egy hordozható asztali meteorológiai állomás elkészítése saját kezűleg.

Képesnek kell lennie a következő paraméterek meghatározására:

  • hőfok
  • páratartalom
  • nyomás
  • magasság

1. lépés: Vásárolja meg a megfelelő alkatrészeket







  • DHT22, hőmérséklet és páratartalom érzékelő.
  • BMP180, nyomásérzékelő.
  • Forrasztó
  • Egysoros csatlakozó 40 kimenet

A felszerelésből szüksége lesz:

  • forrasztópáka
  • orrbetét fogó
  • vezetékek

2. lépés: DHT22 hőmérséklet- és páratartalom-érzékelő







A hőmérséklet mérésére különféle érzékelőket használnak. A DHT22, DHT11, SHT1x népszerűek

Elmagyarázom, miben különböznek egymástól, és miért használtam a DHT22-t.

Az AM2302 érzékelő digitális jelet használ. Ez az érzékelő egyedi kódrendszeren és érzékelőtechnológián működik, így adatai megbízhatóak. Érzékelő eleme egy 8 bites egychipes számítógéphez csatlakozik.

Ennek a modellnek minden érzékelője termikusan kompenzált és pontosan kalibrált, a kalibrációs együttható egy egyszeri programozható memóriában (OTP memória) van tárolva. Leolvasás leolvasásakor az érzékelő előhívja az együtthatót a memóriából.

A kis méret, az alacsony fogyasztás, a nagy átviteli távolság (100 m) az AM2302-t szinte minden alkalmazásra alkalmassá teszi, a 4 kimenet pedig egymás után nagyon egyszerűvé teszi a telepítést.

Nézzük a három szenzormodell előnyeit és hátrányait.

DHT11

Előnyök: nem igényel forrasztást, a három modell közül a legolcsóbb, gyors stabil jel, 20 m feletti hatótáv, erős interferencia.
Hátrányok: Könyvtár! Nincsenek felbontási lehetőségek, hőmérséklet mérési hiba +/- 2°С, relatív páratartalom mérési hiba +/- 5%, a mért hőmérsékletek nem megfelelő tartománya (0-50°С).
Felhasználási terület: kertészet, mezőgazdaság.

DHT22

Előnyök: nem igényel forrasztást, alacsony költség, sima görbék, kis mérési hibák, nagy mérési tartomány, 20 m feletti hatótáv, erős interferencia.
Hátrányok: az érzékenység nagyobb lehet, a hőmérséklet-változások lassú követése, könyvtár szükséges.
Alkalmazások: környezettanulmányok.

SHT1x

Előnyök: nincs szükség forrasztásra, sima görbék, kis mérési hibák, gyors reakció, alacsony fogyasztás, automatikus alvó mód, nagy stabilitás és adatkonzisztencia.
Hátrányok: két digitális interfész, páratartalom mérési hiba, a mért hőmérséklet tartomány 0-50°C, könyvtár szükséges.
Alkalmazások: zord környezetben és hosszú távú telepítéseknél. Mindhárom érzékelő viszonylag olcsó.

Összetett

  • Vcc - 5V vagy 3,3V
  • Gnd - Gnd-vel
  • Adatok - a második Arduino tűhöz

3. lépés: BMP180 nyomásérzékelő



A BMP180 egy barometrikus légköri nyomásérzékelő I2C interfésszel.
A légköri nyomásérzékelők a környezeti levegő abszolút értékét mérik. Ez a mutató az adott időjárási viszonyoktól és a tengerszint feletti magasságtól függ.

A BMP180-as modulban volt egy 3.3V-os 662k ohmos szabályzó, amit én saját hülyeségemből véletlenül felrobbantottam. Közvetlenül a chipre kellett erőlöketet tennem.

Stabilizátor hiánya miatt korlátozott vagyok az áramforrás kiválasztásában - a 3,3 V feletti feszültség tönkreteszi az érzékelőt.
Más modelleknél előfordulhat, hogy nincs stabilizátor, mindenképpen ellenőrizze.

Az érzékelő és az I2C busz csatlakozási rajza Arduino-val (nano vagy uno)

  • SDA-A4
  • SCL-A5
  • VCC - 3,3V
  • GND-GND

Beszéljünk egy kicsit a nyomásról, és arról, hogy ez hogyan kapcsolódik a hőmérséklethez és a magassághoz.

A légköri nyomás egyetlen ponton sem állandó. A Föld forgása és a Föld tengelyének dőlése közötti összetett kölcsönhatás számos magas és alacsony nyomású területet eredményez, ami viszont napi időjárási mintákat eredményez. A nyomásváltozás megfigyelésével rövid távú időjárás-előrejelzést készíthet.

Például a nyomásesés általában csapadékos időt, vagy zivatar közeledését jelenti (alacsony nyomású terület, ciklon közeledtével). Az emelkedő nyomás általában száraz, tiszta időt jelent (magas nyomású terület, anticiklon halad át feletted).

A légköri nyomás is változik a magassággal. Az abszolút nyomás az Everest alaptáborában (5400 m tengerszint feletti magasságban) alacsonyabb, mint Delhiben (216 m tengerszint feletti magasság).

Mivel az abszolút nyomásértékek minden helyen változnak, relatív nyomásra vagy tengerszinti nyomásra hivatkozunk.

Magasságmérés

Az átlagnyomás a tengerszinten 1013,25 GPa (vagy millibar). Ha a légkör fölé emelkedik, ez az érték nullára csökken. Az idei esés görbéje teljesen érthető, így a magasságot saját maga is kiszámíthatja a következő egyenlet segítségével: alti=44330*

Ha az 1013,25 GPa tengerszinti nyomást p0-nak tekinti, az egyenlet megoldása az Ön aktuális magassága.

Elővigyázatossági intézkedések

Ne feledje, hogy a BMP180 érzékelőnek hozzá kell férnie a légkörhöz, hogy le tudja olvasni a légnyomást, ne helyezze az érzékelőt zárt tokba. Egy kis szellőző elég lesz. De ne hagyja túl nyitva - a szél leüti a nyomást és a magasságot. Fontolja meg a szélvédelmet.

Védje a hőtől. A nyomásméréshez pontos hőmérséklet-leolvasás szükséges. Próbálja meg óvni az érzékelőt a hőmérséklet-ingadozásoktól, és ne hagyja magas hőmérsékletű források közelében.

Védje a nedvességtől. A BMP180 érzékelő érzékeny a páratartalomra, próbálja meg megakadályozni a víz esetleges behatolását az érzékelőbe.

Ne takarítsa el az érzékelőt. A meglepetést a szenzorban lévő szilikon fényérzékenysége jelentette, amely a chip fedelén lévő lyukon keresztül ráeshet. A legpontosabb mérés érdekében próbálja meg védeni az érzékelőt a környezeti fénytől.

4. lépés: Az eszköz összeszerelése







Egysoros csatlakozók telepítése Arduino Nano-hoz. Alapvetően méretre vágtuk és egy kicsit csiszoltuk őket, hogy olyanok legyenek, mint amilyenek. Aztán forrasztjuk őket. Ezt követően egysoros csatlakozókat szerelünk be a DHT22 érzékelőhöz.

Szereljen be egy 10 kΩ-os ellenállást az adatkimenetről a földre (Gnd). Mindent forrasztunk.
Ezután ugyanígy egysoros csatlakozót szerelünk a BMP180 szenzorhoz, a tápot 3,3V-ra tesszük. Mindent összekötünk az I2C busszal.

Végül az LCD kijelzőt ugyanarra az I2C buszra csatlakoztatjuk, mint a BMP180 érzékelőt.
(Később tervezem a negyedik csatlakozóra egy RTC modult (real time clock) csatlakoztatni, hogy a készülék az időt is mutassa).

5. lépés: Kódolás




Könyvtárak letöltése

A könyvtárak Arduino rendszerre való telepítéséhez kövesse a hivatkozást

#beleértve
#include #include #include "DHT.h" #include

SFE_BMP180 nyomás;

#define ALTITUDE 20.56 #define I2C_ADDR 0x27 //<<- Add your address here. #define Rs_pin 0 #define Rw_pin 1 #define En_pin 2 #define BACKLIGHT_PIN 3 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7

#define DHTPIN 2 // melyik digitális tűhöz csatlakozunk

// Törölje a megjegyzéseket a használt típushoz Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;

void setup() ( Serial.begin(9600); lcd.begin(16,2); //<<-- our LCD is a 20x4, change for your LCD if needed // LCD Backlight ON lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); // go home on LCD lcd.print("Weather Station"); delay(5000); dht.begin(); pressure.begin(); } void loop() { char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0) { delay(status);

állapot = nyomás.getTemperature(T); if (állapot != 0) ( Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Baro Temperature: "); lcd.setCursor(0,1 lcd.print(T,2); lcd.print("°C"); t1=T; késleltetés(3000);

állapot = nyomás.startNyomás(3); if (állapot != 0) ( // Várja meg a mérés befejezését: késleltetés(állapot);

állapot = nyomás.getNyomás(P,T); if (állapot != 0) (lcd.clear(); lcd.setCursor(0,0); lcd.print("abslt nyomás: "); lcd.setCursor(0,1); lcd.print(P,2 lcd.print(" mb "); delay(3000);

p0 = nyomás.tengerszint(P,MAGASSÁG); // 1655 méteren vagyunk (Boulder, CO)

a = nyomás.magasság(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("Magasság: "); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("méter"); késleltetés(3000); ) ) ) ) úszó h = dht.readHumidity(); // Hőmérséklet olvasása Celsius fokban (az alapértelmezett) float t = dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor(0,0); // ugrás a 2. sor elejére lcd.print("Páratartalom: "); lcd.setCursor(0,1);lcd.print(h); lcd.print("%"); késleltetés(3000); lcd.clear(); lcd.setCursor(0,0); // ugrás a 2. sor elejére lcd. print("DHT hőmérséklet: "); lcd.setCursor(0,1); lcd print(t); lcd.print("degC"); késleltetés(3000); lcd.clear(); lcd.setCursor(0,0); // ugrás a 2. sor elejére lcd.print("Átlagos hőmérséklet: "); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("degC"); késleltetés(3000); )

Az Arduino 1.6.5-ös verzióját használtam, a kód pontosan illeszkedik, a későbbiek is működhetnek. Ha a kód valamilyen okból nem illik, használja az 1.6.5-ös verziót alapként.



– Tehát azonnal egyezzünk meg: nem fogsz filmet készíteni Hollywoodnak. Még Csodaországban is legfeljebb az összes forgatókönyv öt százalékát hagyják jóvá, és csak egy százalék kerül gyártásba ... Szóval mindezek helyett saját Hollywoodot fogsz létrehozni.
Ed Gaskel "Digitális mozizás vagy Hollywood otthon"

Előszó

Mi, egy másik Arduino meteorológiai állomás?! Igen, még egy, és valami azt súgja, nem az utolsó a dolgok internetén.


Ahogyan minden programozónak meg kell írnia egy „Hello World!” programot, úgy minden arduinosnak tapasztalattal kell rendelkeznie egy egyszerű vagy nem túl időjárási állomás építésében.
Jelentős számú, az interneten már létrehozott meteorológiai állomás projektet ismertetünk, az olvasó bármelyiket kiválaszthatja a megvalósításhoz. Őszintén szólva alaposan tanulmányoztam körülbelül egy tucat hasonló projektet és egy csomó kapcsolódó projektet. Ezért nem lehet azt mondani, hogy mindent a nulláról alkottam, persze "óriások vállára álltam".


Azonnal meg kell mondanom, hogy terveim között nem szerepelt harmadik féltől származó szolgáltatások igénybevétele adatok tárolására és megjelenítésére. Személyesen szerettem volna átérezni és megérteni, hogyan működik mindez belülről az elejétől a végéig, A-tól Z-ig.


Tehát azok számára, akik gyorsan szeretnének valamit a semmiből szegecselni, ez a cikksorozat nagy valószínűséggel nem megfelelő. Könnyebb elmenni és vásárolni egy kész készletet összeszerelési útmutatóval. A mikroelektronikai szakembereknek itt semmi dolguk nincs, talán nyögnek és emlékeznek magukra az út elején.
De aki nagyon meg akarja érteni, annak szerintem tetszeni fog. Talán hasznos lesz az anyag oktatási segédanyagként.



Ezt a projektet még 2016-ban valósították meg, de remélem, továbbra is aktuális.

Technológia készlet

Egyszerű és összetett dolgokat fogunk tanulni és dolgozni:

  • DHT22, DHT11 típusú hőmérséklet és páratartalom érzékelők
  • BMP180 típusú légnyomás-érzékelő
  • WiFi modul ESP8266
  • nRF24 típusú rádiómodul 2,4 GHz
  • család Arduino Pro Mini, Arduino Mega
  • napelemek és akkumulátorok
  • programozási nyelv C/C++
  • PHP programozási nyelv
  • MySQL adatbázis-kezelő rendszer
  • a Java programozási nyelv és az Android keretrendszer (alkalmazás létrehozása Adnroid számára az időjárási adatok okostelefonon való megjelenítéséhez).

A felsorolt ​​témakörök egy része a fenét sem ér, és van, amelyik évekig tanulható. Ezért az összetett dolgokat csak a projekthez közvetlenül kapcsolódó részben fogjuk érinteni, hogy megértse, hogyan működik mindez.


De kezdjük a legelejéről Jobb. Mégpedig a leendő készülék leírásából és kialakításából "papíron" hogy végül minden tégla a helyén hevert.

prototípus készítés

Ahogy a Wikipédia helyesen mondja, prototípus készítés egy működő rendszer bevezetésének gyors vázlata. Ami igen, nem fog teljesen hatástalanul és néhány hibával működni, de képet ad arról, hogy érdemes-e a mesterséget ipari formatervezésre fejleszteni. A prototípus létrehozásának folyamata nem lehet hosszú. A prototípuskészítési szakaszt a rendszer elemzése és finomítása követi.


De ez egy olyan iparágban van, ahol a munkavállalókat teljes munkaidőben alkalmazzák.


Mindenki, aki esténként a „dolgok internetére” köti kisállat-projektjét, tisztában kell lennie azzal, hogy prototípust, félkész terméket készít. Nagyon messze van egy normál ipari termék szintjétől. Ezért ne bízzon amatőr mesterségeinkre semmilyen kritikus életfenntartó területetés reméljük, nem hagynak cserben.


Egy ipari termék ipari elemre épül, majd számos további szakaszon megy keresztül, beleértve a hibakeresést, a tesztelést és a karbantartást, mielőtt bestsellerré válna.


Tehát ez a sok unalom helyett saját játékot készítünk, de nem egy egyszerűt. A technikai kreativitás elemeivel, a programozás kezdeteivel és sok más kapcsolódó dolog megismerésével (az alkotás folyamatában).


Természetesen az elektronikai mérnököknek nehéz dolguk lesz a programozási szakaszban, a programozóknak pedig izzadniuk kell az áramkörökön, de a szerző megpróbál mindent a lehető legelérhetőbben megfogalmazni, és egyértelműen leírni, miért használtak bizonyos megoldásokat.

Követelmények

Általában ez a lépés kimarad. Elhatározni, hogy most valami ilyesmit csinálunk, aztán kiderülnek olyan apró részletek, amelyek zsákutcába sodorják, vagy akár elviselhetetlenné is teszik az egész projektet. Minden kívánságlistánkat rögzíteni kell, ehhez a Google Drive-ot használom, PC-ről és mobileszközről is elérhető.


Tehát a meteorológiai állomásunknak:

  • mérje meg a külső hőmérsékletet és páratartalmat
  • mérje meg a hőmérsékletet és a páratartalmat a házban
  • légköri nyomást mérni
  • a kijelzett értékek megjelenítése a kijelzőn
  • adatok átvitele egy internetes szerverre, ahol az adatokat adatbázisban tárolják és megjelenítik egy weboldalon, vagy mobilalkalmazásban használják fel.

Az érzékelők a legegyszerűbbek és a legolcsóbbak. Például előre tekintve azt mondom, hogy a DHT22 elég pontosan méri a hőmérsékletet, de a páratartalommal egy kicsit pontatlan. De ismétlem, nem számít, mert előttünk van egy prototípus, és az 5% -os páratartalom szórás nem befolyásolja semmi fontosat az életünkben.


A rendszer architektúrájának, hardverének és szoftverének lehetővé kell tennie a rendszer további bővíthetőségét új érzékelők és új képességek hozzáadásával.

Vas. Alkatrész kiválasztása

Ez a legfontosabb rész, és egyáltalán nem forrasztás vagy programozás. A rendszerrel szemben támasztott követelmények meghatározása után el kell dönteni, hogy azok pontosan mit is fognak megvalósítani.


Itt van egy árnyalat. Az alkatrészek kiválasztásához jól kell ismerni a képességeiket, ismerni kell magukat a technológiákat. Vagyis itt távol kell lennie egy kezdő elektronikai mérnöktől és programozótól. Akkor most minek töltsünk pár évet a lehetséges eszközök teljes skálájának tanulmányozásával?


Ördögi kör? Ám ördögi körök azért léteznek, hogy megtörjék őket.


Van egy kijárat. Egyszerűen átveheti és megismételheti valaki projektjét. Tanulmányoztam az időjárás állomások már meglévő projektjeit, és remélem, sikerült egy lépést előrelépnem.


Így. Az időjárás-állomás architektúrája az Arduino-n alapul. Mert az Arduinonak kicsi a belépési küszöbe és ezzel már foglalkoztam. Akkor könnyebb a választás.


Azonnal világossá vált, hogy az időjárás állomás egy távoli, ablakon kívüli érzékelőt és egy központi modult tartalmaz majd.


A központi, fő egység beltérben lesz elhelyezve. Fontos ennek meghatározása a kezdeti szakaszban, ebből olyan fontos jellemzők, mint a működési hőmérséklet és a teljesítmény „tánc”.


A távoli szenzor (vagy érzékelők) "agyak" nélkül lesznek, feladata időszakonként méréseket végezni és adatokat továbbítani a központi otthoni egységnek. A központi egység minden érzékelőtől adatokat fogad, megjeleníti a képernyőn és elküldi az internetre az adatbázisba. Nos, ott már sokkal egyszerűbb, amint az adatok az adatbázisban vannak, azt csinálhatsz vele, amit akarsz, akár grafikonokat is rajzolhatsz.


A külvilággal való kommunikációhoz egyértelműen az internetet választotta az ESP8266 WiFi modul szinte semmi alternatíva nélkül (megjegyzem, talán most megjelentek ilyen alternatívák). Ethernet bővítőkártyák kaphatók Arduino-hoz, de egyáltalán nem akartam kábelhez kötni.



Érdekes kérdés volt, hogyan biztosítható a kommunikáció a külső érzékelő (vagy érzékelők, emlékszel a rendszer bővíthetőségének követelményére?) és a központ között. A 433 MHz-es rádiójeladók biztosan nem alkalmasak (egyáltalán semmire nem alkalmasak).


Használja újra az ESP8266-ot?


A megoldás hátrányai:

    Stabil WiFi-t igényel az otthonon kívül

    kommunikációs hatótávolság nem lesz nagy

    a megbízhatóság megsérül, ha az internet meghibásodik, nem látjuk a távoli érzékelőinket

    nagyobb energiafogyasztás.

    Energiafogyasztás ESP8266:

    120-170 mA átvitelekor

    50-56 mA fogadásakor

    Mély alvó üzemmódban 10 µA (µA)

    kikapcsolt állapot 5 µA (µA).

Végül a távoli érzékelők és a fő otthoni egység összekapcsolására az nRF24L01 + chipet választották 2,4 GHz-es adóval és vevővel egy palackban, további külső antennával, hogy biztosan „áttörjön” a falakon.



Energiafogyasztás nRF24L01+ 2,4 GHz:

  • 11 mA vételekor
  • 2Mbps - 13 mA sebességű átvitelkor
  • készenléti I módban - 26 μA (μA)
  • kikapcsolt állapot 900 nA (nA).

Mind az ESP8266, mind az nRF24L01+ megfelelő működési hőmérséklet-tartományban van: -40 ℃ és +80 ℃ között.


Az nRF24L01+ körülbelül 1 dollárért, külső antennával pedig 3 dollárért vásárolható meg. Az ESP8266-01 körülbelül 4 dollárért vásárolható meg. Olvassa el figyelmesen a termékleírást! Ellenkező esetben vegyen egy antennát.


Kirajzolódott a rendszer magja. Térjünk át magukra az érzékelőkre.


Az utcán, mint tudod, a hőmérséklet elérheti a negatív értékeket, így a DHT11 érzékelő nem megfelelő, de a DHT22 pont megfelelő.



A DHT22 / AM2302 specifikációi:

  • 3,3 V - 5 V tápellátás, 5 V ajánlott
  • fogyasztás maximum 2,5mA, méréskor és adatátvitelkor
  • páratartalom mérési tartomány 0-100% 2-5% hibával
  • hőmérséklet mérési tartomány -40 és +125°C között ±0,5°C hibával
  • mérési kérés legfeljebb 0,5 Hz - 2 másodpercenként egyszer.

A házon belül remélem nem lesz negatív hőmérséklet, szóval használhatod a DHT11-et, főleg, hogy nekem már volt.


A DHT11 jellemzői:

  • 3,3V-5V tápfeszültség
  • fogyasztás legfeljebb 2,5 mA, mérés és adatátvitel időpontjában
  • páratartalom mérési tartomány 20-80%, 5%-os hibával
  • hőmérséklet mérési tartomány 0 és +50°C között ±2°C hibával
  • mérési kérés legfeljebb 1 Hz - másodpercenként egyszer.

A DHT22-t körülbelül 3 dollárért vásárolhatja meg. A DHT11 kevesebbe kerül – 1 dollár, de kevésbé pontos is.


Most pedig térjünk vissza az Arduinóhoz. Melyik táblát válasszam?


A rendszer egyes részeit teszteltem az Arduino UNO-n. Azok. Az ESP modult rákötöttem az uno-ra és áttanulmányoztam, kikapcsoltam, majd rákötöttem az nRF24-et stb. Az ablakérzékelő végső megvalósításához az Arduino Pro Minit választottam, mint az Uno-hoz legközelebbi miniatűrt.



Energiafogyasztás szempontjából az Arduino Pro Mini is jól néz ki:

  • nincs USB-TTL konverter, ami maga is sokat "eszik",
  • A LED 10k ellenálláson keresztül csatlakozik.

A fejlett energiatakarékosság érdekében a tervek szerint:

  • távolítsa el az Arduino Pro Mini LED - tápellátásjelzőjét (megbántam, hogy nem rontottam el az alaplapot)
  • vagy használjon "csupasz" szerelvényt Atmel ATmega328 mikroprocesszoron (nem használtam)
  • használja a Low Power Library-t vagy a JeeLib-et.

A könyvtárak közül a Low Power Library-t választottam, egyszerű és csak azt tartalmazza, amire szüksége van.


A központi egységhez, mivel számos perifériát terveztek rá csatlakoztatni, az Arduino Mega kártyát választották. Ezen kívül teljesen kompatibilis az UNO-val és több memóriával rendelkezik. A jövőre nézve azt mondom, hogy ez a választás teljes mértékben indokolt volt.


Az Arduino Megát körülbelül 8 dollárért vásárolhatja meg.

Teljesítmény és energiafogyasztás

Most az élelmiszerről és az áramfogyasztásról.


Kétféle Arduino Pro Mini létezik:

  • tápfeszültséghez 5V és frekvenciához 16MHz
  • 3,3 V tápfeszültséghez és 8 MHz frekvenciához.

Mivel az nRF24L01+ rádiómodul 3,3 V-ot igényel a tápellátáshoz, és a sebesség itt nem fontos, vegyél egy Arduino Pro Minit 8 MHz-en és 3,3 V-on.


Ebben az esetben az Arduino Pro Mini tápfeszültség-tartománya:

  • 3,35-12 V 3,3 V-os modellhez
  • 5-12V az 5V-os modellhez.

Volt már egy 5V-os Arduino Pro Mini, ezért is használtam. Körülbelül 4 dollárért vásárolhat egy Arduino Pro Minit.


A központi egység tápellátása a 220 V-os hálózatról lesz egy kis tápegységen keresztül, 12V, 450mA, 5W kimenettel. Valami ilyesmi 5 dollárért. 5V-nak külön kimenet is van.



És ha ez nem elég, akkor erősebben is megfogalmazhatja. Más szóval, nincs sok értelme a központi egység energiamegtakarításának. A távoli vezeték nélküli érzékelőknél azonban az energiatakarékosság a legfontosabb. De a funkcionalitást sem szeretném elveszíteni.


Ezért az Arduino Pro Mini és az nRF24 rádiómodul 4 db Ni-Mh akkumulátorból áll majd.


És emlékezz egy modern akkumulátor maximális kapacitása körülbelül 2500-2700 mAh, bármi több, vagy marketing trükk (Ansmann 2850), vagy álhír (UltraFire 3500).


Több okból nem használok Li-Ion akkumulátorokat:

  • nagyon drága
  • ha a környezeti hőmérséklet 0°C alá csökken, a lítium-ion akkumulátor teljesítménye 40-50%-ra csökken
  • az olcsók védelem nélkül készülnek és nem biztonságosak (rövidzárlat vagy kisülés során felrobbanhatnak és megéghetnek, lásd egy csomó videót a YouTube-on)
  • elöregednek, még ha nem is használják (ez azonban minden kémiai elemről elmondható), 2 év után egy Li-Ion akkumulátor kb. 20%-ot veszít a kapacitásából.

Egy prototípus esetében teljesen meg lehet boldogulni a kiváló minőségű Ni-MH AA vagy AAA elemekkel. Ráadásul nincs szükségünk nagy áramokra. A Ni-MH akkumulátorok egyetlen hátránya a hosszú töltési idő.

Az időjárás állomás általános sémája

Foglaljuk össze. Itt van egy általános diagram, hogyan működik mindez.



Folytatjuk.