PabloX - elektrotechnika

  • Zväčšiť veľkosť písma
  • Predvolená veľkosť písma
  • Zmenšiť veľkosť písma

Meteostanica s AS3935 a ESP8266

Tlačiť PDF
Užívateľské hodnotenie: / 0
SlabéDobré 
Konštrukcia meteostanice vychádza z pôvodného zapojenia detektora bleskov s obvodom AS3935, ktorú som publikoval na tejto stránke niekoľko rokov dozadu.
foto


Vtedy som použil upravený firmware, ktorý čítal dáta zo snímačov teploty, vlhkosti, atmosférického tlaku a intenzity vonkajšieho osvetlenia. Údaje sú odosielané na stránku mojej meteostanice na adrese www.teplomer.pablox.net.

Namerané údaje boli odosielané do Raspberry PI verzia 1, ktoré ich odosielalo na server. Riešenie bolo poplatné dobe vzniku a komponentami, ktoré som mal po ruke.

V dobe dostupnosti dosky NODEMCU s obvodom ESP8266 za pár eur, ktorá má wifi rozhranie som mohol vynechať RaspberryPI, ktoré bolo v tejto aplikácii ako kanón na vrabce.

Ako základ som použil firmware "Kaminari" z tejto stránky GitHub - shred/kaminari: AS3935 and ESP8266 based Franklin Lightning Detector ktorý som upravil a doplnil o ďalšie funkcie.

Upozorňujem, že firmware zo stránky vyššie nie je kompatibilný s mojim zapojením, keďže som musel prehodiť funkciu niektorých pinov. Ak teda chcete použiť moje zapojenie, treba použiť aj upravený firmware NA STIAHNUTIE TU
Firmware obsahuje aj mnou použité knižnice pre senzory + komunikáciu s LCD cez i2c. Zdroják bol kompilovaný pod Arduino IDE 1.8.18

Mnou doplnené úpravy zahrnuté do firmware (časť funkcií je prevzatá z pôvodného detektora bleskov):
- doplnenie znakového LCD 20x4 s radičom HD44780 s i2c komunikáciou
- meranie vlhkosti čidlom HTU21D
- meranie teploty a atmosférického tlaku čidlom BMP180
- meranie intenzity vonkajšieho osvetlenia čidlom BH1750
- meranie UV indexu senzorom VEML6075. Namerané hodnoty som ale nemal ako skalibrovať (bola jeseň, zima) - brať zatiaľ len orientačne (do leta... )
- možnosť odosielania zachytených bleskov cez PHP POST na externý server (nutná znalosť PHP)
- možnosť odosielania nameraných hodnôt cez PHP POST na externý server (nutná znalosť PHP)

Snímače a LCD display sú pripojené cez i2c zbernicu, čo zjednodušilo konštrukciu. Napájanie snímačov je 3,3V z dosky ESP8266, LCD a indikačná LED sú napájané napätím 5V zo stabilizátora 7805. Samotný modul s obvodom AS3935 detekujúcim blesky je pripojený cez SPI rozhranie a napájaný napätím 3,3V.

schema
Schéma zapojenia (kliknite pre zväčšenie). Snímač UV žiarenia VEML6075 sa pripája rovnako ako ostatné snímače, na i2c zbernicu.


Tu by som upozornil na jednu zákernosť, s ktorou som sa stretol u svojej dosky NODEMCU ESP8266 (označená je V0.9) a tou je napájacie napätie cez pin VIN. Na internete sa uvádza, že na tento pin môže byť privedené napätie vyššie ako 5V (7 až 12V). To ale nebola pravda, tento pin som mal priamo spojený s +5V z USB konektora a tiež s napájaním USB-UART prevodníka. Takže privedenie vyššieho napätia zničí prevodník a toto napätie sa dostane aj na (prípadne) pripojený USB port počítača cez kábel a môže spôsobiť jeho odpálenie. Novšie dosky by tento neduh nemali mať, mňa to ale stálo odpálenie prevodníka na doske ESP8266.

Základom je teda:
1. nemať pripojené napätie na pin VIN keď máte pripojený USB kábel z PC
2. nepripájať na pin VIN vyššie napätie ako 5V ak nemáte overené, že máte novšiu dosku, ktorá má oddeľovacie diódy na napájacej vetve zabraňujúce zavlečeniu napätia z VIN na prevodník USB-UART a na USB konektor na doske

Meteostanicu napájam napätím 12V, preto som použil stabilizátor 7805, ktorý zabezpečuje aj napájanie pre LCD a indikačnú LED. Bál som sa použiť spínaný step-down menič kvôli možnému rušeniu (a na to je AS3935 extrémne citlivý).

Ako som si overil už v minulosti, obvod AS3935 je značne citlivý na rušenie, preto pre dobrú detekciu odporúčam:
- umiestniť ho do osobitnej krabičky a vonku za okno, mimo kovových predmetov a antén
- meraciu celu zo snímačmi dať aspoň 1m od detektora, určite nie vedľa seba (odskúšané, i2c spoľahlivo rušila detektor)
- kábel na pripojenie snímačov použiť tienený. Modul s AS3935 som pripojil cez ethernetový kábel, na snímače som použil tienený USB kábel. Vyhnúť sa zbytočne dlhému súbehu oboch káblov a slučkám
- ESP8266 dať mimo AS3935, keďže WIFI spoľahlivo generovala náhodné blesky - takto som detektor testoval - priblížením cievky k anténe modulu a pripojením sa na webserver v meteostanici
- na dosku s obvodom AS3935 dať na napájacie piny kondenzátor 100uF + 100nF a napájacie vodiče na strane modulu prevliecť cez feritový toroid (odrušenie)
- dosku s AS3935 umiestniť do horizontálnej polohy (lepšie výsledky)
- vodiče i2c zbernice (SDA, SCL) prevliecť cez feritový toroid z dôvodu eliminácie rušenia z i2c zbernice

Nakoľko som pri konštrukcii riešil problémy s rušením, bolo časovo náročné čakať po každej úprave na búrku. Nakoniec som objednal simulátor bleskov priamo pre testovanie obvodu AS3935 - GitHub - PlayingWithFusion/PWFusion_Lightning_Emulator: Arduino Code for SEN-39002, Lightning Emulator for AS3935 Lightning Sensor
Ten mi umožnil testovanie a ladenie celej konštrukcie aj keď som omeškal búrku.


foto
AS3935 v krabičke nastavený na SPI režim

foto
Meracia cela so snímačmi z pôvodnej meteostanice, odspodu je umiestnený ventilátor na cirkuláciu vzduchu. Vrchný kryt som vymenil za priehľadný kvôli presnejšiemu meraniu intenzity osvetlenia. Snímač UV žiarenia VEML6075 je umiestnený zboku a natočený na oblohu. 

Prevádzkové stavy a udalosti hlási meteostanica pomocou jednej RGBW adresovateľnej LED SK6812 nasledovne:
Žltá - kalibrácia antény detektora, doba trvania asi 5 sekúnd
Blikajúca červená - strata WIFI pripojenia
Stála modrá - meteostanica je v normálnom prevádzkovom režime. Intenzita svitu indikuje úroveň aktuálneho šumu na rezoznančnom obvode
Blikajúca modrá - prekročenie maximálnej úrovne šumu na rezonančnom obvode, detektor je potrebné presunúť na iné miesto s menšou úrovňou rušenia alebo nastaviť režim na "vonku"
Záblesk bielej - zachytený blesk
Slabnúca červená, žltá, zelená - indikuje približnú vzdialenosť zachyteného blesku (farba) a jeho intenzitu (jas). Zelená - okolo 40km, červená - okolo 1km, odtiene medzi týmito dvoma farbami - interval medzi.
Slabnúca ružová/červená bez bieleho záblesku - zachytenie rušenia

Pripojenie a zobrazenie na LCD, štart zariadenia
Údaje z meteostanice sú zobrazené na znakovom LCD 20x4 znakov s radičom HD44780. Pre jednoduchšie pripojenie a nedostatok pinov som použil prevodník na i2c zbernicu s obvodom PCF8574 - je bežne dostupný, prípadne sa dá jednoducho zapojiť na univerzálnej doske.
Treba si len zistiť správnu i2c adresu - buď cez zdroják i2c scan (google) alebo, ak sú adresné vstupy na prevodníku i2c-LCD (A0-A2) neprepojené = 0x27 alebo prepojené = 0x20. Cez zdroják i2c scan sa dajú overiť aj adresy pripojených čidiel
Po štarte zariadenia sa vykoná reset a kalibrácia detektora a následne je zobrazená frekvencia, na ktorú je naladený rezonančný obvod v Hz. Frekvencia má byť 500kHz +/-3,5%, takže v intervale 482500-517500Hz.
Následne sa vykoná pripojenie k nastavenej Wifi sieti, na LCD sa zobrazuje názov siete, MAC adresa a IP adresa. Ak je pripojenie neúspešné, LCD vypíše hlásenie Wifi con err.
Tieto údaje sa vypisujú aj na UART.

Následne je zobrazená hlavná obrazovka na LCD, kde sa zobrazuje:
1. riadok - teplota, vlhkosť
2. riadok - atmosférický tlak, intenzita vonkajšieho osvetlenia
3. riadok - údaje o poslednom zachytenom blesku - vzdialenosť, intenzita
4. riadok - čas od posledného detekovaného blesku a celkový počet zachytených bleskov + UV index (údaje sa striedajú každých 10s pri obnovení LCD)
Čas obnovovania LCD je 10 sekúnd - definované v premennej LCDupdate_interval
Čas čítania údajov zo snímačov je každých 15 minút - z dôvodu eliminácie rušenia som sa snažil minimalizovať komunikáciu cez i2c

OTA aktualizácia FW:
Firmware je možné aktualizovať cez wifi, cez OTA s použitím Arduino IDE. 

Synchronizácia času cez NTP server:
Túto funkciu som doplnil z dôvodu presného odosielania údajov na môj server (každých 15 minút) a ovládanie podsvietenia LCD podľa nastaveného času. Časom z NTP je synchronizovaný RTC v ESP8266. RTC je vytvorený softvérovo, keďže doska ho neobsahuje.

lcd
Dva režimy zobrazenia údajov na LCD - v spodnom riadku sa strieda hodnota UV indexu a čas od posledného zachyteného blesku

senzor
UV senzor VEML6075 umiestnený v hliníkovom profile a zaliaty čírym expoxidom - epoxid siaha len po okraje samotného senzoru UV svetla, nesmie sa dostať naň.

foto
Vnútro meteostanice


Knižnice potrebné pre skompilovanie zdrojáku:
Arduino on ESP8266 (cez Manažér dosiek v Arduino IDE)
ArduinoJson
Adafruit NeoPixel
EEPROM_Rotate
PubSubClient
ArduinoOTA.h
WiFiUdp.h
ESP8266HTTPClient.h
VEML6075.h
BH1750.h
HTU21D.h
SFE_BMP180.h
LiquidCrystal_I2C.h


Pred kompiláciou a nahratím zdrojáku je potrebné:
1. v súbore AS3935_ESP8266_meteo_WEB.ino
#define alt 475 - nastaviť správnu nadmorskú výšku podľa lokality, v ktorej sa meteostanica nachádza v riadku
LiquidCrystal_I2C lcd(0x20,20,4); - i2C adresa prevodníka pre LCD s obvodom PCF8574, prepojky A0-A2 uzemnené (prepojené). V prípade potreby použite zdroják i2c scanner na zistenie správnej adresy

2. v súbore myWiFi.h
#define MY_SSID "" - do úvodzoviek dať názov WIFI siete, ku ktorej sa bude pripájať
#define MY_PSK "" - do úvodzoviek dať heslo k danej WIFI sieti
#define MY_APIKEY "" - do úvodzoviek dať vlastné heslo pre zmenu nastavení detektora
Ak chcete použiť ďalšie nastavenia, ktoré autor zakomponoval (odosielanie správ cez MQTT, použitie mDNS atď), je potrebné upraviť ďalšie nastavenia, ktoré autor popisuje na stránke projektu.

jsons
Výpis stavu meteostanice v JSON formáte. Na karte settings sú nastavenia detektora a posledné dva riadky obsahujú nastavenie časov, kedy sa zapne/vypne podsvietenie LCD. Na karte status je zobrazených posledných 64 bleskov, nastavenia detektora, jeho stav, údaje zo snímačov a systémový čas získaný cez NTP.

Po úspešnom nahratí a pripojení modulu na wifi sieť, otvorte webový prehliadač a pripojte sa na webserver, ktorý meteostanica obsahuje a slúži na zobrazenie údajov + úpravu konfigurácie.
http://<IP ADRESA>/status - zobrazuje stav detektora vo formáte JSON
lightnings: pole zachytených bleskov. Age - čas od zachytenia daného blesku v sekundách, distance - vzdialenosť blesku, energy - energia blesku (bez jednotky, na LCD je prevedená na škálu 1-10). Zaznamenaných je 64 posledných bleskov, následne sa najstaršie záznamy postupne mažú. Pole je prázdne ak neboli zaznamenané žiadne blesky.
distance, energy - podľa autora použité iba na odlaďovanie, preto sa ich popisu nevenujem
noiseFloorLevel - aktuálna úroveň šumu na rezonančnom obvode v uVrms. Detektor automaticky upravuje danú úroveň na základe okolitého rušenia
disturbersPerMinute - počet zaznamenaných rušení za minútu. Táto hodnota by mala byť čo najmenšia, aby sa predišlo rušeniu detektora a detekcia bleskov bola spoľahlivá. Vyššia hodnota = vysoká úroveň rušenia v okolí.
watchdogThreshold - aktuálna prahová úroveň detekcie v rozsahu 0-10. Vyššia hodnota = menšia citlivosť na rušenia, ale tiež nižšia citlivosť na vzdialenejšie blesky
wifiSignalStrength - sila wifi signálu v dBm
temperature_celsius - teplota v °C
humidity_percent - vlhkosť v %
pressure_mBar - atmosférický tlak prepočítaný na hladinu mora v mBar
lightIntensity_lux - intenzita vonkjašie osvetlenia v lux

/settings - zobrazí aktuálne nastavenia detektora
tuning: frekvencia rezonančného obvodu v Hz
noiseFloorLevel : aktuálna úroveň šumu na rezonančnom obvode v uVrms
outdoorMode true/false : prepínanie režimu detektoru podľa umiestnenia (vnútri/vonku). Ak indikačná LED bliká na modro, skúste zapnúť tento režim - detektor bude menej citlivý na okolité rušenia
watchdogTreshold : aktuálne nastavenie, viď datasheet AS3935
minimumNumberOfLightning : minimálny počet zaznamenaných bleskov pre vykonanie prerušenia
spikeRejection : aktuálne nastavenie, viď datasheet
statusLed : nastavenie indikačnej LED. True = LED zobrazuje všetky udalosti, false = LED zobrazuje len dôležité upozornenia - výpadok Wifi, prebiehajúca kalibrácia, inak je zhasnutá
blueBrightness : maximálny svit modrej LED pri indikácii úrovne šumu
disturberBrightness : svit LED pri detekcii rušenia
lcdONhour, lcdOFFhour : hodina zapnutia a vypnutia podsvietenia LCD

/update - slúži na nastavenie parametrov detektora, cez URL. Nutné použiť nastavené heslo v premennej MY_APIKEY v súbore myWifi.h
Tvar: http://<IP ADRESA>/update?api_key=<heslo>&<parametre>
Podporované nastavenia:
outdoorMode true/false : zapnutie alebo vypnutie režimu vonku
watchdogThreshold : hodnota 0-10, vyššia hodnota zabezpečí vyššiu odolnosť voči rušeniam ale menšiu citlivosť detektora na blesky
minimumNumberOfLightning - minimálna hodnota zachytených bleksov na vyvolanie prerušenia, akceptované hodnoty 1, 5, 9, 16. Iné hodnoty sú ignorované
spikeRejection : hodnota 0-11, viď datasheet AS3935. Vyššia hodnota zabezpečí vyššiu odolnosť voči rušeniam ale menšiu citlivosť detektora na blesky
statusLed : true/false, zapne alebo vypne režim indikačnej LED (viď popis vyššie)
blueBrightness : 0-255, maximálny svit modrej LED indikujúcej úroveň šumu na rezonančnom obvode
disturberBrightness : 0-255, maximálny svit LED pri zachytení rušenia
lcdON : hodina, kedy sa zapne podsvietenie LCD
lcdOFF : hodina, kedy sa vypne podsvietenie LCD
Nastavenia sú trvalo uložené v pamäti.


/calibrate - vykoná novú kalibráciu detektora. Trvanie je asi 5 sekúnd, následne je zobrazená hodnota frekvencie rezonančného obvodu (okolo 500kHz). Kalibráciu treba spraviť vždy po zmene umiestnenia detektora.
Zápis v tvare http://<IP ADRESA>/calibrate?api_key=<heslo>

/clear - maže zoznam zachytených bleskov, čas od detekcie posledného narušiteľa, počítadlo narušiteľov za poslednú minútu, počet bleskov a čas od posledného blesku
Zápis v tvare http://<IP ADRESA>/clear?api_key=<heslo>

/reset - resetuje celý obvod detektora. Použitie pri problémoch s detekciou alebo ak dôjde k rozladeniu detektora. Vykoná kalibráciu a resetuje štatistiky.
Zápis v tvare http://<IP ADRESA>/reset?api_key=<heslo>

Detektor som úspešne otestoval počas búrok, pri vhodnom umiestnení je detekcia pomerne presná, chce to ale hodne trpezlivosti a pohrať sa s nastaveniami. Vyššie uvedený simulátor bleskov mi ušetril dosť času pri ladení.

Posledná úprava Piatok, 19 Január 2024 17:43