Tartalomjegyzék:

NaTaLia Weather Station: Arduino Solar Powered Weather Station Helyesen: 8 lépés (képekkel)
NaTaLia Weather Station: Arduino Solar Powered Weather Station Helyesen: 8 lépés (képekkel)

Videó: NaTaLia Weather Station: Arduino Solar Powered Weather Station Helyesen: 8 lépés (képekkel)

Videó: NaTaLia Weather Station: Arduino Solar Powered Weather Station Helyesen: 8 lépés (képekkel)
Videó: High Density 2022 2024, Július
Anonim
NaTaLia meteorológiai állomás: Az Arduino napenergiával működő meteorológiai állomás a helyes módon készült
NaTaLia meteorológiai állomás: Az Arduino napenergiával működő meteorológiai állomás a helyes módon készült
NaTaLia meteorológiai állomás: Az Arduino napenergiával működő meteorológiai állomás a helyes módon készült
NaTaLia meteorológiai állomás: Az Arduino napenergiával működő meteorológiai állomás a helyes módon készült

Egy év sikeres működés után 2 különböző helyen megosztom a napelemmel működő időjárás -állomási projektterveimet, és elmagyarázom, hogyan alakult át olyan rendszerré, amely valóban képes túlélni hosszú ideig a napenergiából. Ha követi az utasításaimat, és pontosan ugyanazokat az anyagokat használja, mint a felsoroltak, akkor napelemes időjárás -állomást építhet, amely hosszú évekig üzemel. Valójában az egyetlen tényező, amely korlátozza az üzemidőt, a használt akkumulátor élettartama.

1. lépés: A meteorológiai állomás működése

1, távadó: kültéri szerelt doboz napelemmel, amely időjárási telemetriát (hőmérséklet, páratartalom, hőindex, napelemerősség) rendszeresen küld a beltéri vevőegységhez.

2, Vevő: Beltéri egység, amely Raspberry PI 2 + Arduino Mega -ból készült, és 433 Mhz -es RF vevővel van csatlakoztatva adatfogadáshoz. Az én beállításomban ez a készülék nem rendelkezik helyi LCD kijelző funkcióval. Figyelmetlenül fut. Egy fő C program gondoskodik arról, hogy a bejövő adatokat az Arduino -tól a soroson keresztül fogadja, majd naplózza az adatokat egy szöveges fájlba, és az utolsó beérkezett adatokat elérhetővé teszi a telneten keresztül más eszközök számára, hogy lekérdezzék azokat.

Az állomás a fényeket vezérli otthonomban a fényellenállás leolvasásával (amely meghatározza, hogy kint van -e nappal vagy éjszaka). A vevő fejetlen az én esetemben, de könnyedén módosíthatja a projektet LCD kijelző hozzáadásához. Az egyik eszköz, amely az állomás időjárási adatait használja, elemzi és megjeleníti, a másik projektem: Ironforge a NetBSD kenyérpirító.

2. lépés: Első verziók

Első verziók
Első verziók
Első verziók
Első verziók
Első verziók
Első verziók
Első verziók
Első verziók

Sok napelemes projekt található a neten, de sokan elkövetik azt a gyakori hibát, hogy a rendszer idővel több energiát vesz ki az akkumulátorból, amit a napelemek pótolhatnak, különösen a felhős, sötét téli hónapokban.

Ha napelemes rendszert tervez, az egyetlen dolog az energiafogyasztás, minden alkatrészen: MCU, rádióadó, feszültségszabályozó stb.

Egy nagy számítógép, például egy málna pi vagy egy éhes wifi -eszköz, például az ESP használata csak néhány bit időjárási adatok összegyűjtéséhez és szállításához túlzás lenne, de ahogy bemutatom ebben az oktatóanyagban, még egy kis Arduino tábla is az.

A legjobb mindig az áramot mérni az építési folyamat során egy mérővel vagy egy mérőórával (hasznos, ha a működés közbeni kis tüskéket próbálja meg mérni a művelet során nagyon rövid időn belül (ezredmásodperc)).

Az első képen az első (Arduino Nano alapú) állomásomat és a második Arduino Barebone Atmega 328P kártyát láthatod.

Az első verzió, bár tökéletesen működött (a környezet felügyelete és az adatok rádión keresztüli küldése), túl magas ~ 46 mA áramfogyasztással rendelkezett, és néhány hét alatt lemerült.

Minden verzió a következő akkumulátort használta:

18650 6000mAh Védett Li-ion akkumulátor, beépített védőlap

FRISSÍTSE ezeket a ScamFire akkumulátorokat. Bár ez egy meglehetősen régi Instructable, még mindig kénytelen voltam kijavítani ezt a hamis akkumulátort. NE vásárolja meg az említett akkumulátort, végezzen saját kutatást a többi LION/LIPO akkumulátorról, minden 3,7 V -os akkumulátor működni fog ezzel a projekttel.

Végül volt időm lebontani a ScamFire akkumulátort, hogy lássam, mekkora a valós kapacitása. Ezért két számítást fogunk végrehajtani egymás mellett a valós és a "meghirdetett" kapacitásokkal.

Először is ez az egyetlen dolog, hogy ez az akkumulátor hamis, és semmi sem igaz, amit állítanak róla, az új verziók még rosszabbak, mert lemásolták a hamisítványt, és kihagyták a 2 centes védőáramkört, így semmi sem akadályozza meg, hogy lemerüljenek nullára.

Egy kis cikk az LION/LIPO akkumulátorokról:

TLDR:

Ez azt jelenti, hogy a cella maximális feszültsége 4,2 V, és a „névleges” (átlagos) feszültség 3,7 V.

Például itt van egy „klasszikus” 3,7 V/4,2 V -os akkumulátor feszültségprofilja. A feszültség 4,2 maximumról indul, és gyorsan lecsökken körülbelül 3,7 V -ra az akkumulátor élettartamának nagy részében. Miután elérte a 3,4 V -ot, az akkumulátor lemerült, és 3,0 V -nál a leválasztó áramkör leválasztja az akkumulátort.

Saját terheléses méréseim:

Akkumulátor feltöltve: 4.1V

A határérték beállítása: 3.4V

Terhelésszimuláció: 0,15A (az eszközömnek volt egy kis problémája, hogy ennél alacsonyabb lett.)

Mért kapacitás: 0,77Ah, adjon neki egy ingyenes 0,8 Ah -t, ami 800mAh a meghirdetett 6000mAh helyett!

Mivel ennek az akkumulátornak még védőáramköre sem volt, szabadon lemehettem, de 3,4 V -nál 10 perc múlva már összeomlik 3,0 V -ra.

Ezért az akkumulátor egyszerű számításokkal biztosítja:

Elméleti

Akkumulátor feszültsége = 3,7V

Teljesítmény = 3,7x6000 = 22000 mWh

Igazi

Akkumulátor feszültsége = 3,7V Teljesítmény = 3,7x800 = 2960 mWh

Verzió: 0.1 ARDUINO NANO BASED

Még az LowPower könyvtár esetén is az Arduino nano ~ 16 mA -t fogyaszt (alvó üzemmódban) -> FAIL.

Elméleti

Pavg = VxIavg = 5Vx16mA = 80 mW

Az akkumulátor élettartama = 22000/80 = 275 óra = körülbelül 11 nap

RealPavg = VxIavg = 5Vx16mA = 80 mW

Az akkumulátor élettartama = 800/80 = 10 óra

Verzió: 0.2 Atmega 328P Barebone

Az ATmega328 által fogyasztott energia nagyban függ attól, hogy mit csinál vele. Csak ott ül alapértelmezett állapotban, és 16MA @ 5V -ot tud használni, miközben 16MHz -en fut.

Amikor az ATmega328P aktív módban van, folyamatosan több millió utasítást hajt végre másodpercenként. Továbbá, a fedélzeti perifériák analóg-digitális átalakítója (ADC), soros perifériás interfész (SPI), 0., 1., 2. időzítő, kétvezetékes interfész (I2C), USART, Watchdog Timer (WDT) és a Brown-out Detection (BOD) fogyaszt áramot.

Az energiatakarékosság érdekében az ATmega328P MCU számos alvó üzemmódot támogat, és a nem használt perifériákat ki lehet kapcsolni. Az alvási módok abban különböznek, hogy mely részek maradnak aktívak, az alvás időtartama és az ébredéshez szükséges idő (ébresztési időszak) szerint. Az alvó üzemmód és az aktív perifériák az AVR alvó- és tápkönyvtáraival, vagy röviden a kiváló alacsony fogyasztású könyvtárral vezérelhetők.

Az alacsony fogyasztású könyvtár használata egyszerű, de nagyon hatékony. Az utasítás LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); az MCU -t SLEEP_MODE_PWR_DOWN -ba helyezi 16 ms és 8 s között, az első argumentumtól függően. Letiltja az ADC -t és a BOD -t. A kikapcsolási alvás azt jelenti, hogy az összes chip funkció le van tiltva a következő megszakításig. Továbbá a külső oszcillátor leáll. Csak az INT1 és INT2 szintmegszakításai, a PIN -váltás megszakításai, a TWI/I2C cím egyezése vagy a WDT, ha engedélyezve van, felébreszthetik az MCU -t. Tehát egyetlen állítással minimalizálja az energiafogyasztást. A 3,3 V -os Pro Mini tápellátás LED és szabályozó nélkül (lásd alább), amely a nyilatkozatot futtatja, az energiafogyasztás 4,5 μA. Ez nagyon közel áll ahhoz, amit az ATmega328P adatlapja tartalmaz a kikapcsolási alvásról, és a WDT engedélyezett 4,2 μA (adatlap linkelve a forrásokhoz). Ezért nagyon bízom benne, hogy a powerDown funkció leáll mindent, ami ésszerűen lehetséges. Az LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF) utasítással a WDT le lesz tiltva, és nem ébred fel, amíg megszakítást nem váltanak ki.

Tehát a barebone beállítással 5 percre alvó üzemmódba állíthatjuk a chipet, miközben nagyon kevés energiát fogyaszt (perifériák nélkül 0,04 mA). Ez azonban csak az Atmega 328P chip kristályoszcillátorával és semmi más, az ebben a konfigurációban használt feszültségnövelő, amely az akkumulátor feszültségének 3,7 V -> 5,0 V -ról történő felemelésére szolgál, szintén 0,01 mA -t fogyaszt.

Az egyik állandó feszültségcsökkenés a hozzáadott fotóellenállás volt, amely alvó üzemmódban 1 mA -re növelte a fogyasztást (ez az összes összetevőt tartalmazza).

Az eszköz pontos fogyasztásának kiszámítására szolgáló képlet alvó és ébresztési módban a következő:

Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)

Ion = 13 mA

Ez leginkább az RF433 Mhz adóból származik:

Adó:

Üzemi feszültség: 3V - 12V max. Áramfelvétel: 12V Működési áram: max Kevesebb mint 40mA, és min 9mAR Rezonancia mód: (SAW) Modulációs mód: ASK Munkafrekvencia: Eve 315MHz vagy 433MHz Átviteli teljesítmény: 25mW (315MHz 12V -on) Frekvencia hiba: +150kHz (max) Sebesség: kevesebb mint 10Kbps

Alvás = 1mA

Lényegesen kevesebb lenne a fényellenállás nélkül.

Trunon idő Ton = 250 mS = 0,25 s

Alvási idő Tsleep = 5 perc = 300 másodperc

Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)

Iavg = (0,25s*13mA + 300s*1mA) / (0,25s + 300s)

Iavg = 1,26 mA

Pavg = VxIavg = 5Vx1.26mA = 6 mW

Elméleti

Az akkumulátor élettartama = 22000mWh/6mW = 3666 óra = körülbelül 152 nap

Igazi

Az akkumulátor élettartama = 800mWh/6mW = 133 óra = körülbelül 5,5 nap

Bár ezek még mindig egy jobb UltraFire sorozatok voltak, amit kezdetben használtam, láthatta, hogy a napelem vagy az alacsony 1 mA -es fogyasztás nélkül ez a projekt nem marad túl sokáig.

Nyugodtan építse fel az állomást, és írja le a megállapításait és számításait a megjegyzésekhez, és frissítem a cikket. Nagyra értékelem a különböző MCU -k és a boost konverterek eredményeit is.

3. lépés: Sikeres időjárás -állomás építése

Sikeres időjárás állomás építése
Sikeres időjárás állomás építése
Sikeres időjárás állomás építése
Sikeres időjárás állomás építése
Sikeres időjárás állomás építése
Sikeres időjárás állomás építése
Sikeres időjárás állomás építése
Sikeres időjárás állomás építése

Bár ez az első sikeres verzió, tartalmaz egy kis sikertelenséget a képeken, és ezeket nem tudom újra elkészíteni, mert az állomások már telepítve vannak. A képen látható két feszültségnövelő az írás idején beszerezhető légi modellezéshez és más alkalmazásokhoz. Amikor átalakítottam az állomást, arra gondoltam, hogy szerezzek egy kisebb és hatékonyabb feszültségfokozó táblát, bár a kisebb méret biztosan nem jelenti azt, hogy hatékonyabb.

A képen látható új kis modul, amely még csak nem is rendelkezik LED -del, valójában 3mA (*FAIL*) lemerült, így maradtam a régi táblámnál:

PFM vezérlő DC-DC USB 0.9V-5V-5V dc Boost fokozatos tápegység modul

A cikk írásakor ez a modul 99 centért még elérhető az Ebay -en, de ha úgy dönt, hogy egy másik emlékeztetőt használ, mindig ellenőrizze a készenléti energiafogyasztást. Egy jó minőségű emlékeztetővel nem lehet több, mint az enyém (0,01 mA), bár a fedélzeten lévő kis LED-et forrasztani kellett.

4. lépés: Hardverlista

Hardverlista
Hardverlista
  • 18650 6000mAh Védett Li-ion akkumulátor, beépített védőlap
  • Atmega 328P16M 5V rendszerbetöltővel
  • Adafruit DC Boarduino (Arduino -kompatibilis) készlet (w/ATmega328) <ez jó befektetés lesz, ha jövőbeli csupasz projekteket hajt végre
  • Fényfényre érzékeny ellenállás Fotorezisztor Optoresistor 5mm GL5539
  • 1A 1000V dióda 1N4007 IN4007 DO-41 egyenirányító diódák
  • PFM vezérlő DC-DC USB 0.9V-5V-5V dc Boost fokozatos tápegység modul
  • 1.6W 5.5V 266mA mini napelemes modulrendszer epoxi cella töltő DIY
  • TP405 5V mini USB 1A lítium akkumulátor töltő modul töltő modul
  • 433 MHz -es RF adó- és vevőegység -készlet Arduino/ARM/MC távirányítóhoz
  • IP65 kapcsolóvédő csatlakozódoboz kültéri vízálló ház 150x110x70mm
  • Új DHT22 hőmérséklet- és relatív páratartalom -érzékelő modul az Arduino számára
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1x Mini Switch, 1x1N4007diode
  • Adafruit 16 MHz kerámia rezonátor / oszcillátor [ADA1873]
  • Arduino UNO/Mega stb. A vevőállomáshoz + Raspberry PI 1/2/3
  • Átlátszó akril műanyag doboz (opcionális)

Mindezeket megtalálod az Ebay -en, nem akarok eladókat népszerűsíteni az oldalaikra hivatkozással, és a linkek a jövőben úgyis elhalnak.

Megjegyzések a hardverlistához:

Abban az esetben, ha az Atmega -t valahogy programozással téglából vásárolja, vásároljon többet, ugyanez vonatkozik a feszültségfokozóra és a napelemes töltésszabályozóra is.

A szolártöltő 2 kis színes LED-et tartalmaz, amelyek csak napelemes töltés esetén kapcsolnak be és jelzik (piros-> töltés, kék-> teljesen feltöltött állapot). Ezeket is ki lehet forrasztani. Inkább egy kicsit több levet ad az akkumulátornak töltés közben.

Amint látja, nincs elemtartó a listámban. Miért? Mert megbízhatatlanok. Számtalan alkalom volt, amikor az akkumulátor kimozdult a tartójából, és megszakadt a kapcsolat. Különösen akkor, ha a berendezés egy olyan magas edényrúdra van felszerelve, mint az enyém, nyitva minden zord időjárási körülmény között. Az akkumulátort még 2 cipzárral is behúztam a tartóba, és még mindig sikerült kimozdulni. Ne tegye ezt, csak távolítsa el a külső bevonatot az akkumulátorról, és forrasztja a vezetékeket közvetlenül az akkumulátor aljába, amely tartalmazza a túltöltés elleni áramkört (ne kerülje el a védelmet). Az elemtartó csak az akkumulátor helyén tartására használható a készülékben.

TP405 5V mini USB 1A lítium akkumulátor töltőlap: sajnos ez a kártya nem tartalmazza a napelemek fordított áramvédelmét, ehhez további 1 diódát kell elhelyezni a napelem egyik lába és a töltőáramkör között, hogy leállítsa az áramot hogy éjjel visszafolyjon a napelembe.

5. lépés: Összeszerelés

Összeszerelés
Összeszerelés
Összeszerelés
Összeszerelés
Összeszerelés
Összeszerelés

Ez a tábla viszonylag kevés összetevőt tartalmaz, és a táblán lévő jelölések meglehetősen egyszerűek.

Győződjön meg arról, hogy NE helyezze rossz irányba az Atmega328P -t (ez felmelegítheti és feldarabolhatja a chipet, tönkreteheti a feszültségfokozót is).

Ebben a beállításban a chip lefelé néz (kis U lyuk jelölő PIN1). Minden más összetevőnek nyilvánvalónak kell lennie.

Használjon árnyékolt kábelt (pl.: a CDrom audio kábele jól működik) az LDR -hez. Bizonyos esetekben (több hetes teszt során) kiderült, hogy zavarja a rádiójelek továbbítását. Ez volt az egyik olyan hiba, amelyet nehéz elhárítani, így ha nem akar bajt, használjon árnyékolt kábelt, a történet vége.

LED: A doboz alján lévő LED -et eredetileg villogni kezdték, amikor kimenő rádióadás van, de később energiapazarlásnak tekintettem, és csak 3 -szor villog a rendszerindítási folyamat során.

TP: a teljes áramkör áramának mérésére szolgáló tesztpont.

DHT22: Ne vásárolja meg az olcsó DHT11 -et, fordítson 50 centtel többet, hogy megszerezze a fehér DHT22 -et, amely a negatív hőmérsékletet is képes mérni.

6. lépés: A tok tervezése

Tok tervezése
Tok tervezése
Tok tervezése
Tok tervezése
Tok tervezése
Tok tervezése

Bár kissé túlzás, 3D nyomtatott kocka (weather_cube) készült a DHT22 hőmérséklet -érzékelő helyén tartására. A kocka az IP -doboz aljára van ragasztva, mindössze 1 lyukkal, ahol a levegő eléri az érzékelőt. Hozzáadtam egy hálót a lyukhoz méhek, darazsak és más kis legyek ellen.

Egy külső doboz opcionálisan használható az állomás vízállóságának növelésére abban az esetben, ha azt egy nyitott edényrúdra szereli.

Ötlet 1 hasznos funkcióhoz: egy nagy fém tetőlemez hozzáadása 1-2 cm-re a doboz tetejére, amely árnyékot nyújt a naptól a nyár folyamán, bár ez elveheti a hasznos napfényt is a panelről. Jöhet egy olyan kialakítás, amely elválasztja a panelt és a dobozt (a panelt a napon hagyja, a dobozt árnyékban).

A képeken: az egyik állomás 1 év után eltávolításra került a munkakörnyezetből, az akkumulátor feszültsége lenyűgöző 3,9 V -on, a doboz bármely részén nincs vízkár, bár a kocka aljára ragasztott háló szét volt szakadva. Az állomás szervizelését az LDR csatlakozó hibája okozta, bár az áthidaló kábel még mindig a helyén volt, a kapcsolat megszakadt, ezért a csap néha lebegtetett, és rossz LDR analóg leolvasást eredményezett. Javaslat: Ha szabványos számítógépes áthidaló kábeleket használ, akkor ezt elkerülendő, ha az állomás tökéletesen működik, ragasztja fel őket.

7. lépés: Szoftver

Szoftver
Szoftver

A szoftverkódhoz 3 külső könyvtár szükséges (LowPower, DHT, VirtualWire). Az utóbbi időben gondot okozott, hogy néhányat könnyen megtalálok az interneten, ezért külön ZIP -fájlban csatoltam őket. Függetlenül attól, hogy milyen operációs rendszert használ Linux/Windows rendszeren, csak keresse meg az Arduino IDE könyvtármappáját, és bontsa ki ott.

Csak egy megjegyzés, attól függetlenül, hogy már nem javaslom a DHT11 megvásárlását, ha rossz típusú DHT érzékelőt használ, a program örökre lógni fog az elején az inicializálás szakaszban (nem is fogja látni, hogy az indítási LED háromszor villog).

A fő cikluskód nagyon egyszerű, először beolvassa a környezeti értékeket (hőmérséklet, hőindex, páratartalom, napenergia), elküldi őket a rádión keresztül, majd az alacsony energiafogyasztású könyvtár segítségével az Arduino -t 5 percre alvó állapotba helyezi.

Azt tapasztaltam, hogy a baudrate csökkentése növeli a rádióadások stabilitását. Az állomás nagyon kevés adatot küld, 300 bps több mint elegendő. Ne felejtse el azt sem, hogy az adó csak kb. 4.8V, a jövőbeli 3.3V -os verzióban ez még rosszabb átviteli minőséghez vezethet (adatok falakon keresztüli küldése és egyéb akadályok). Olyan problémába ütköztem, hogy egy Raspberry PI 2 -hez csatlakoztatott Arduino Mega -t használtam, amely a Mega -t táplálja a PI -ről, és nem kaptam átvitelt. A megoldás az volt, hogy a Mega -t külön külső 12 V -os tápegységről táplálják.

8. lépés: 2. verzió (ESP32 alapú)

2. verzió (ESP32 alapú)
2. verzió (ESP32 alapú)
2. verzió (ESP32 alapú)
2. verzió (ESP32 alapú)
2. verzió (ESP32 alapú)
2. verzió (ESP32 alapú)

Minden, ami megtörhet, tönkremegy, hogy idézzük a jó öreg Murphy -t, és végül évek után az állomások rejtélyes módon kudarcot vallottak. Az egyik elkezdett trágár napelemes adatokat küldeni, amelyek tízezrekre nőttek, ami lehetetlen a következők miatt: Az Arduino kártya 6 csatornát tartalmaz (8 csatorna a Mini és Nano, 16 a Mega), 10 bites analóg-digitális átalakítót. Ez azt jelenti, hogy a 0 és 5 volt közötti bemeneti feszültségeket 0 és 1023 közötti egész értékekre képezi le. Így a rádió, az LDR cseréje és az Atmega 328P többszörös átprogramozása után feladtam, és úgy döntöttem, itt az ideje az innovációnak. Menjünk az ESP32 -re.

A használt tábla a következő volt: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi és Bluetooth kártya Rev1 MicroPython 4MB FLASH

wiki.wemos.cc/products:lolin32:lolin32_lit…

ESP-32 mikrokontroller

Üzemi feszültség 3.3V digitális I/O érintkezők 19 analóg bemeneti érintkező 6 órajel (max.) 240Mhz vaku 4M bájt hosszúság 5mm szélesség 2,54 mm súly 4g

Ami a képen láthatóval ellentétben nem rendelkezik LOLIN logóval (hamisított Kínából). Az első kellemes meglepetésem az volt, hogy a táblára nyomtatott pinout illeszkedett az Arduino pinouthoz! Miután rengeteg noname táblával foglalkoztam, ahol egész nap pinoutokat kellett keresnem, halottan fáradtan, hibázva, végre egy táblát, ahol a pinout egyenesen előre van WoW!

Itt van azonban a történet sötét oldala:

Kezdetben az LDR -t az A15 -hez kötöttem, amely a 12 -es érintkező, mert könnyebb volt a csapokat összeragasztani. Ekkor 4095 leolvasást kaptam (ez a maximum, amit az AnlogRead segítségével lehet elérni az ESP32 -en), ami megőrjített, mert az állomás újjáépítésének oka az volt, hogy a régi LDR -leolvasások megszakadtak (a DHT még mindig jól működött)). Tehát kiderül, hogy:

Az esp 32 két 12 bites ACD regisztert integrál. Az ADC1 8 csatornával a 32-39-es GPIO-khoz csatlakozik, és az ADC2 10 csatornával egy másik csapban. A helyzet az, hogy az ESP32 az ADC2 -t használja a wifi funkciók kezelésére, tehát ha Wifit használ, akkor nem tudja használni ezt a regisztert. Az ADC illesztőprogram API támogatja az ADC1 (8 csatorna, 32–39. GPIO -khoz csatlakoztatva) és az ADC2 (10 csatorna, 0, 2, 4, 12–15 és 25–27 GPIO -khoz csatlakoztatva) csatornákat. Az ADC2 használata azonban bizonyos korlátozásokat tartalmaz az alkalmazás számára:

Az ADC2-t a Wi-Fi illesztőprogram használja. Ezért az alkalmazás csak akkor használhatja az ADC2-t, ha a Wi-Fi illesztőprogram nem indult el. Az ADC2 csapok egy részét pántként használják (GPIO 0, 2, 15), így nem szabadon használhatók. Ez a helyzet a következő hivatalos fejlesztői készletekben:

Tehát az LDR csatlakoztatása a 12 -es tűről az A0 -ra, ami a VP, mindent megoldott, de nem értem, miért is sorolják fel az ADC2 -es csapokat a gyártók számára elérhetőként. Hány más hobbista vesztegetett rengeteg időt, amíg rájött erre? Legalább jelölje pirossal vagy ilyesmivel a használhatatlan csapokat, vagy ne említse a kézikönyvben, hogy a többi gyártó csak akkor tudjon meg róluk, ha valóban szükség van rájuk. Az ESP32 teljes célja, hogy WIFI -vel használja, mindenki használja WIFI -vel.

Jó kezdet az Arduino IDE beállításához ehhez a táblához:

Bár ide beírtam a kódba, ez megint így megy:

Előfordulhat, hogy ezt a kódot nem lehet más ESP32 modellekhez fordítani, mint a Weemos LOLIN 32!

Építési beállítások: -Feltöltés/soros: 115200 -CPU/ram: 240Mhz (Wifi | BT) -Használt vakufrekvencia: 80 Mhz

Rengeteg ESP32 alapú meteorológiai állomás található a neten, ezek sokkal gyakrabban fordulnak elő, mint az én 1 -es verzióm a barebone chipnél, mert könnyebben beállíthatók, nincs szükség programozóra, csak csatlakoztassa az eszközt az USB -n, és programozza be A mély alvás üzemmód kiválóan alkalmas hosszú ideig akkumulátorról történő működésre. Rögtön ez volt az első dolog, amit még a kitörőcsapok forrasztása előtt teszteltem, mert ahogy több helyen is megjegyeztem ebben a projektben, a LEGFONTOSABB dolog az energiafogyasztás, és a jelenlegi (hamis) akkumulátorral és a kisméretű napelemmel a készenléti állapot A teljesítmény nem haladhatja meg az 1-2 mA-t, mivel különben a projekt nem lesz képes fenntartani önmagát hosszú távon.

Megint kellemes meglepetés volt, hogy a mély alvás mód a meghirdetett módon működik. A mély alvás alatt olyan alacsony volt az áram, hogy az olcsó multiméterem nem is tudta megmérni (nekem működik).

Az adatok küldése során az áram körülbelül 80 mA volt (ami körülbelül ötször annyi, mint amikor az Atmega 328P ébredt és adott), de ne felejtsük el, hogy a V1 -nél átlagosan 1 mA áramkimaradás volt az LDR -en alvó üzemmódban (ami a fényviszonyoktól is függött, és 0,5mA - 1mA -ról ment), ami mára megszűnt.

Most, hogy az UltraFire akkumulátort lebontották, ha ugyanazt az akkumulátort használja, itt számíthat:

Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)

Iavg = (2s*80mA + 300s*0,01mA) / (2s + 300s) Iavg = 0,5mA

Pavg = VxIavg = 5Vx0,5mA = 2,5 mW

Elméleti

Az akkumulátor élettartama = 22000 mWh/2,5 mW = 8800 óra = körülbelül 366 nap

Igazi

Az akkumulátor élettartama = 800 mWh/2,5 mW = 320 óra = körülbelül 13 nap

Nem volt lehetőségem pontosan mérni a bekapcsolási időt, de a csípéseimmel 2 másodperc körül tetőzik.

Nem akartam a délutánt minden egyedi kódolással tölteni, ezért az Instructables ESP32 alapú egyéb időjárás -állomásait kerestem, hogy lássam, mit tesznek az adattárolás érdekében. Sajnos észrevettük, hogy rugalmatlan és korlátozott webhelyeket használnak, mint például weathercloud. Mivel nem rajongok a "felhőért", és a kódjuk sokáig tönkrement, mert a webhely azóta megváltoztatta az API -ját, ezért 10 percembe telt egy egyedi megoldás elkészítése, mert nem olyan nehéz, mint gondolnánk. Lássunk neki!

Először is, ehhez a projekthez nincs külön nyomtatott áramköri kártya, mert pontosan ugyanazokat az alkatrészeket használja (bocsánat a csúnya kenyérlemez képen forrasztottért), mint a V1, azzal a különbséggel, hogy minden 3.3V -ról lemerül. A DHT felhúzással csatlakozott a VCC -hez, az LDR pedig 10k -val húzta le. Az a probléma, amelyet az 18650 elemekkel láthat, mint az én kínai hamisítványom (6500 mAh -s ultra nap tűz lol: D), az, hogy a kisülési görbét körülbelül 4,1 V -os új korban kezdik, és mindaddig tartanak, amíg a lekapcsolási áramkörük be nem indul, hogy megállítsa a sejtkárosodást (akiknek szerencséjük van hozzá). Ez sehol sem jó nekünk 3.3V bemenetként. Bár ez a LOLIN kártya lítium akkumulátor csatlakozóval és töltőáramkörrel rendelkezik ebben a projektben, a lehető legtöbbet szerettem volna felújítani a régi állomásról, így a régi 18650 készülékkel NEM használhatja ezt a beépített töltőt. A megoldás halottan egyszerű volt: levágtam az 5V -ba forrasztott mikro USB -kábelt a régi feszültségnövelőből, és a voila probléma megoldódott, mivel a microUSB tábláján van szabályozó.

Tehát a különbség a régi és az új verzió között, amely a régi akkumulátorban 3,7 V -ot biztosít -> 5 V -ra növelve -> az ardu 5 V -on működik -> minden alkatrész 5 V -on működik.

Az újban: az akkumulátor 3,7 V feszültséget biztosít -> 5 V -ra növelve -> az ESP32 fedélzeti szabályozásán keresztül szabályozható -> minden alkatrész 3,3 V feszültséggel működik.

Szoftveresen szükségünk lesz egy másik DHT könyvtárra is, az Arduino DHT nem kompatibilis az ESP -vel. Amire szükségünk van, az DHT ESP.

Elkezdtem a kódomat a DHT példa alapján alapozni, amelyet ez a kód biztosított. A kód működése a következő:

1, Szerezze be a környezeti adatokat a DHT + Solar adatokból a fotocellából

2, Csatlakozás wifi -hez statikus IP -címmel

3, POST POST az adatokat egy php szkriptbe

4, Menj aludni 10 percre

Amint észre fogja venni, a hatékonyság érdekében a kódot úgy állítottam be, hogy abszolút minimálisra csökkentse az ébredési időt, mivel ötször kevesebb energiát fogyaszt, mint a régi projekt, amikor be van kapcsolva. Hogyan csináltam ezt? Először is, ha BÁRMILYEN hiba van, a getTemperature () függvény hamis értékkel tér vissza (ami azt jelenti, hogy ismét 10 perc alvás). Ez olyan lehet, hogy a DHT érzékelőt nem lehet elindítani, vagy a wifi kapcsolat nem érhető el. Amint észreveszi a szokásos while () hurkot a wifi társítás örökre történő kipróbálására, szintén eltávolításra került, de 1 másodperces késleltetést kellett ott hagyni, különben nem fog mindig csatlakozni, és ez függ az AP típusától, terhelésétől stb. meg fog történni, 0,5 másodperccel inkonzisztens viselkedést kaptam (néha nem tudott csatlakozni). Ha valaki tud erre jobb módszert, írja meg kommentben. Csak akkor olvassa el a DHT adatokat és ÉS a wifi kapcsolat felépül, akkor megpróbálja közzétenni az adatokat a webkiszolgáló szkriptjében. A Serial.println () mindenféle időpazarlási funkciója normál üzemmódban is le van tiltva. Szerverként IP -t is használok a felesleges DNS -keresés elkerülése érdekében, a kódomban mind az alapértelmezett átjáró, mind a DNS -kiszolgáló 0.0.0.0 értékre van állítva.

Nem értem, miért olyan nehéz saját API -t létrehozni, ha ehhez csak annyi kell:

sprintf (válasz, "temp =%d & hum =%d & hi =%d & sol =%d", temp, hum, hi, sol);

int httpResponseCode = http. POST (válasz);

Ezt a kis php kódot bármelyik málna pi -hez behelyezheti, és azonnal elvégezheti a rendszer () feladatokat a telemetria alapján, például kapcsolja be a ventilátorokat, vagy kapcsolja be a lámpákat, ha elég sötét lesz.

Néhány megjegyzés a kóddal kapcsolatban:

WiFi.config (staticIP, átjáró, alhálózat, dns); // KELL lennie a Wifi után, milyen hülyén kell kezdeni…

WiFi.mód (WIFI_STA); // KELL, különben nem kívánt AP -t is létrehoz

Igen, most már tudod. Az IP konfigurációk sorrendje is változhat a platformokon keresztül, először más példákat próbáltam ki, ahol az átjáró és az alhálózat értékei váltottak. Miért kell statikus IP -t beállítani? Nos, teljesen nyilvánvaló, hogy ha van egy dedikált doboza a hálózaton, mint például az isc dhcpd -t futtató linuxos szerver, akkor nem szeretne százmillió naplóbejegyzést onnan, amikor az ESP felébred, és megkapja az IP -t a DHCP -től. Az útválasztók általában nem naplóznak társításokat, így azok láthatatlanok maradnak. Ez az energiatakarékosság ára.

A V2 soha nem volt képes fenntartani magát a rossz minőségű akkumulátor miatt, és egyszerűen egy adapterre tettem, így ha a V1 -et vagy a V2 -t szeretné megépíteni, akkor ne vegye meg az említett akkumulátort, végezzen saját kutatást az elemekről (bármely 18650 az Ebay -en meghirdetett kapacitás több mint 2000mAh nagy valószínűséggel csalás).

Ajánlott: