Detekcja wyładowań atmosferycznych to bardzo ciekawa i przydatna sprawa w domowych stacjach meteorologicznych. Jakiś czas temu opisywana była stacja meteorologiczna oparta o Raspberry Pi - Link. W tym artykule skupimy się na zastosowanym w tym urządzeniu detektorze wyładowań atmosferycznych.
W artykule omówimy:
Jak działa detektor wyładowań.
Jak podłączyć detektor do Raspberry Pi poprzez multiplekser I²C.
Jak najlepiej umieścić detektor w urządzeniu
Jak zbierać dane i je prezentować.
Obejrzymy elementy wykonane w technologii druku 3D, do montażu detektora.
Poznamy oprogramowanie w języku Python, jakie kontroluje detektor wyładowań atmosferycznych.
Czym jest Weather Pi
WeatherPi to zasilana ogniwami fotowoltaicznymi kompletna stacja meteorologiczna, komunikująca się po WiFi. Najważniejszymi własnościami i funkcjami stacji są:
Zbieranie 20 różnych zmiennych środowiskowych.
Zasilanie ogniwami fotowoltaicznymi.
Monitorowanie napięć, prądów i obciążeń w instalacji zasilającej,
Zintegrowany kontroler zasilania.
Zintegrowana baza danych MySQL do przechowywania odczytów.
Możliwość zdalnego zmieniania programu.
Możliwość pobierania danych na PC w celu ich przetwarzania i prezentacji.
Można dodać funkcje korzystając z API do pisania SMSów, Twittów itp.
Kontrola zdalna z pomocą iPada.
Detekcja błyskawic
Poniższy opis pokazuje czym jest i jak podłączyć do Raspberry Pi moduł Embedded Adventures MOD-1016 oparty o układ scalony AS3935.
Czym jest i jak działa układ AS3935
AS3935 firmy Austrian Microsystems to w pełni programowalny scalony detektor wyładowań atmosferycznych, który pozwala na detekcję obecności potencjalnie niebezpiecznych wyładowań w otoczeniu układu scalonego. Pozwala on także na ocenę odległości w jakiej nastąpiło wyładowanie atmosferyczne, co umożliwia określenie jak daleko znajduje się np. front burzowy. Wbudowane algorytmy detekcji, pozwalają na wykrywanie naturalnych wyładowań i odróżnianie ich od zakłóceń antropogenicznych
AS3935 dostarcza także istotnych informacji odnośnie szumu w otoczeniu elektromagnetycznym układów scalonych. Pozwala to na informowanie innych układów, na przykład mikrokontrolera o wysokim poziomie szumu elektromagnetycznego w otoczeniu.
Opisywany układ może być programowany poprzez standardowy interfejs SPI lub też I²C. Jeśli wybrany zostanie ten drugi, możliwy jest wybór jednego z czterech adresów sprzętowych. Układ posiada dwa wewnętrzne generatory zegarowe: TRCO i SRCO, a specjalny algorytm pozwala na podnoszenie ich precyzji w układzie. AS3925 zasilany może być napięciem stabilizowanym lub poprzez wbudowany stabilizator napięcia.
Układ wykrywa wyładowania chmury-ziemia i chmury-chmury z odległości do 40 km. Rozdzielczość pomiaru odległości może wynosić zaledwie 1 km.
MOD-1016 to moduł oparty o układ AS3935, który służy do detekcji wyładowań atmosferycznych. Moduł jest wstępnie skalibrowany, co oznacza, że nie trzeba przeprowadzać procedury kalibracji po montażu układu wymagającej dosyć skomplikowanych obliczeń. MOD-1016 jest wynikiem wielu testów i iteracji prototypu, dzięki czemu oferuje on maksymalnie ile można wyciągnąć z układu AS3935.
MOD-1016 może być zasilany napięciem od 2,4 V do 5,5 V. Zużywa 8 µA w trybie power down i 65 µA nasłuchując błyskawic. Podczas analizy wykrytego błysku, przeprowadzania obliczeń odległości i transmisji danych układu zużywa 350 µA.
Poniżej zaprezentowano schemat modułu MOD-1016 i rysunek ścieżek płytki.
Poniżej znajduje się opis, jak zintegrować w kilku prostych krokach MOD-1016 z Raspberry Pi.
Krok 1: Podłączenie detektora błyskawic do Weather Pi.
Jako że MOD-1016 ma ustalony na sztywno adres I²C (0x03) konieczne jest zastosowanie multipleksera tej szyny, gdyż inaczej występuje konflikt adresu, dlatego też moduł zostanie podłączony na drugiej szynie I²C.
Czterokanałowy multiplekser I²C
Aby obejść problem z konfliktem adresów, do Weather Pi dodany jest multiplekser adresowy tego interfejsu. Pozwala on na podłączenie wielu urządzeń do RPi, nawet jeśli chcą one współdzielić adres. Aktualnie adresy w Weather Pi prezentują się następująco:
| Moduł | Adres | Numer szyny I²C |
| BarometrBMP180 | 0x77 | Bus 0 |
| Zegar czasu rzeczywistegoDS3231 | 0x68 | Bus 0 |
| ATC EEPROM | 0x56 (or 0x57) | Bus 0 |
| Konwerter ADC ADS1015 | 0x49 | Bus 0 |
| Pamięć FRAM | 0x50 | Bus 0 |
| Konwerter ADC ADS1015 w module SunAirPlus | 0x48 | Bus 1 |
| Trójkanałowy monitor prądu i napięcia INA3221 w module SunAirPlus | 0x40 | Bus 1 |
| MOD-1016 | 0x03 | Bus 0 |
| Kolejny MOD-1016 | 0x03 | Bus 2 |
| Termometr/higrometr AM2315 | 0x5C | Bus 1 |
| Czterokanałowy multiplekser I²C | 0x73 | Na wszystkich szynach |
| Higrometr HTU21D-F | 0x40 | Bus 0 |
Jak widać szereg układów ma taki sam adres, więc zastosowanie multipleksera jest koniecznością.
Poniżej widać jak wygląda, z punktu widzenia Raspberry Pi, sieć interfejsów I²C. Poniższy tekst jest wyjściem przykładowego kodu zrealizowanego na systemie, pozwalającego na monitorowanie wszystkich czterech szyn I²C multipleksera. Weather Pi korzysta tylko z szyn 0, 1 i 2. Na szynie 2 znajduje się jedynie moduł MOD-1016.
Test SDL_Pi_TCA9545 Version 1.0 - SwitchDoc Labs
Sample uses 0x73
Program Started at:2015-05-19 02:45:59
-----------BUS 0-------------------
addr = 0x73 returndata = 0x81
tca9545 control register B3-B0 = 0x1
ignore Interrupts if INT3' - INT0' not connected
tca9545 control register Interrupts = 0x8
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 03 -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- 49 -- -- -- -- -- --
50: 50 -- -- -- -- -- 56 -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- 73 -- -- -- 77
-----------------------------------
-----------BUS 1-------------------
addr = 0x73 returndata = 0xa2
tca9545 control register B3-B0 = 0x2
ignore Interrupts if INT3' - INT0' not connected
tca9545 control register Interrupts = 0xa
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- 73 -- -- -- --
-----------------------------------
-----------BUS 2-------------------
addr = 0x73 returndata = 0x84
tca9545 control register B3-B0 = 0x4
ignore Interrupts if INT3' - INT0' not connected
tca9545 control register Interrupts = 0x8
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 03 -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- 73 -- -- -- --
-----------------------------------Krok 2: testowanie detektora błyskawic
Nie powinno być wielkim zaskoczeniem, że detektor błyskawic jest układem czułym na zakłócenia radiowe (RFI). Jeśli umieści się detektor obok monitora, telefonu komórkowego itp. może on działać niepoprawnie. Jak pokazane zostanie poniżej, konieczne było zamontowanie układu z daleka od RPi, aby działał on niezawodnie.
Jednym z problemów, jaki napotyka się wykorzystując układ AS3935 w swoich układach, jest problem z testowaniem jego działania. Oczywiście umieszczając układ w zaszumionym otoczeniu przekonać się można, że działa, ale nie daje to realnie przydatnych informacji, odnośnie czułości i detekcji pożądanych sygnałów. Udało się w ten sposób wygenerować kilka 'błyskawic', ale nie w powtarzalny i zaplanowany sposób.
Problem rozwiązany został zakupem specjalnego modułu, pozwalającego na generację "sztucznych błyskawic" w zaplanowany sposób. Wydatek 230 dolarów na ten moduł, pozwolił na rozwiązanie szeregu problemów z pierwszymi wersjami projektu. Okazało się jednocześnie, że pod koniec tworzenia tego układu nadarzyła się burza, która pozwoliła na przetestowanie jego funkcji w realnym otoczeniu.
Około 6 km od miejsca, gdzie realizowany był projekt przeszła burza z piorunami. Interfejs RasPiConnect pozwalał na odbieranie poprzez WLAN informacji o wyładowaniach i ich bliskości.
Krok 3: druk uchwytu do układu.
Początkowo MOD-1016 zainstalowany był bezpośrednio na wyprowadzeniach płytki WeatherPiArduino. Widać go na poniższym zdjęciu.
Okazało się nie być to najlepszą lokacją dla tego modułu. Duże natężenie szumu elektromagnetycznego, pochodzące z otaczających układów elektronicznych, powodowało, że układ informował o wysokim poziomie szumów, a detektor błyskawic funkcjonował tylko z testerem nastawionym bardzo wysoko. Konieczne było odsunięcie układu od reszty elektroniki, co można było przewidzieć wcześniej.
Układ został zamontowany w osobnej obudowie, zamontowanej poza główną obudową systemu. Wykonana została ona w technologii druku 3D w formie wysuniętego pylona w którym znajduje się jedynie płytka drukowana z modułem z układem AS3935. Dokumentację tego elementu można pobrać z strony z opisem.
Krok 4: oprogramowanie detektora wyładowań atmosferycznych.
Po poszukiwaniach odpowiedniego pakietu, udało znaleźć się kod napisany przez Phila Fenstermachera. Po drobnych przeróbkach związanych z ustawieniem przerwań udało się uruchomić ten kod.
Kompletne oprogramowanie WeatherPi dostępne jest na githubie. Poniżej zaprezentowano kod obsługujący AS3935.
Kod: C / C++
Oraz kod przetwarzający przerwania:
Kod: C / C++
Oraz ich obsługa:
Kod: C / C++
I finalnie przekazywanie informacji dalej:
Kod: C / C++
Krok 5: rezultaty
Moduł z AS3935 działał przez 5 dni, w tym czasie wykrył dwie burze. Pierwsza była niewielka, przesuwająca się na północ od miejsca gdzie zainstalowany był Weather Pi. Kierownik laboratorium grał wtedy w golfa nieopodal i zadzwonił do firmy z informacją o burzy. Odpowiedź była taka, że wiedzieli już o niej.
Kolejna burza, dwa dni później, była jedną z większych. Poniżej znajduje się log, pokazujący, że front przesunął się około 6 km od Weather Pi.
Podsumowując - dodanie detektora błyskawic do Weather Pi nie było wcale trudne. Analogicznie można dodać ten moduł do każdej płytki rozwojowej z Weather Pi, lub Arduino, gdyż MOD-1016 i AS3935, dzięki rozmaitości interfejsów pozwala na proste podłączenie do tych układów.
Źródła:
http://www.instructables.com/id/Lightning-Detector-for-Raspberry-Pi-WeatherPi-Weat/?ALLSTEPS
http://www.embeddedadventures.com/as3935_lightning_sensor_module_mod-1016.html
