Sezon letni trwa w najlepsze, chociaż pogoda nam ostatnio nie sprzyjała burze w tym okresie to rzecz całkiem często spotykana. A gdyby tak poza temperaturą wiedzieć nieco wcześniej, że burza jest w promieniu 50 km lub bliżej, wraz z względnie dokładnym pomiarem jak blisko? Czemu nie, zbudujmy sobie sensor burzy :)
Potrzebne elementy
- Płytka stykowa 400
- ATmega8P-PU (może być większa, np. ATmega328P-PU)
- Sensor burzy AS3935
- LCD kit 2×16
- Drabinka goldpinów (dokładnie potrzebne 8 sztuk)
- (opcjonalnie) Konwerter USB – RS232
Potrzebne biblioteki
Bibliotekę należy umieścić w folderze libraries naszego Arduino IDE. Oczywiście umieszczamy ją w folderze takim w jakim jest, nie luzem.
Czas przygotowań
Gdy mamy już niezbędne części oraz biblioteki pora przystąpić do przygotowań. Tym razem przyda nam się trochę umiejętności lutowania gdyż otrzymany sensor zawiera jedynie otwory w które należy wlutować goldpiny.
Słowem wyjaśnienia: sensor AS3935 można dostać w postaci samego modułu, jest to ta czarna część nad C4 a pod LLC – wówczas wymaga to jednak zbudowania układu zbliżonego do tego na zdjęciu, dlatego zdecydowałem się na zakup gotowej płytki od Tautic LLC. Do takiej płytki wlutowujemy goldpiny, najlepiej ich nie rozcinać pojedynczo, lecz wyciąć po 8. Chwila lutowania i mamy gotową płytkę, nadającą się do wbicia w płytkę stykową.
Schemat podłączeń
Gdy nasza płytka jest już gotowa, możemy ją wbić w płytkę stykową oraz podłączyć do Arduino według następującego schematu:
Kod dla mikroprocesora
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#include <SPI.h> #include <AS3935.h> void printAS3935Registers(); byte SPItransfer(byte sendByte); void AS3935Irq(); volatile int AS3935IrqTriggered; AS3935 AS3935(SPItransfer,SS,2); void setup() { Serial.begin(9600); SPI.begin(); SPI.setDataMode(SPI_MODE1); SPI.setClockDivider(SPI_CLOCK_DIV16); SPI.setBitOrder(MSBFIRST); AS3935.reset(); if(!AS3935.calibrate()) Serial.println("Tuning out of range, check your wiring, your sensor and make sure physics laws have not changed!"); AS3935.setIndoors(); // gdy sensor jest na zewnatrz zamieniamy na AS3935.setOutdoors(); AS3935.enableDisturbers(); AS3935.setNoiseFloor(2); // kalibracja zaklocen - patrz opis printAS3935Registers(); AS3935IrqTriggered = 0; //attachInterrupt(1,AS3935Irq,RISING); // odkomentuj dla Arduino Mega, zakomentuj dla UNO attachInterrupt(0,AS3935Irq,RISING); // odkomentuj dla Arduino UNO, zakomentuj dla MEGA } void loop() { if(AS3935IrqTriggered) { AS3935IrqTriggered = 0; int irqSource = AS3935.interruptSource(); if (irqSource & 0b0001) Serial.println("Noise level too high, try adjusting noise floor"); if (irqSource & 0b0100) Serial.println("Disturber detected"); if (irqSource & 0b1000) { int strokeDistance = AS3935.lightningDistanceKm(); if (strokeDistance == 1) Serial.println("Storm overhead, watch out!"); if (strokeDistance == 63) Serial.println("Out of range lightning detected."); if (strokeDistance < 63 && strokeDistance > 1) { Serial.print("Lightning detected "); Serial.print(strokeDistance,DEC); Serial.println(" kilometers away."); } } } } void printAS3935Registers() { int noiseFloor = AS3935.getNoiseFloor(); int spikeRejection = AS3935.getSpikeRejection(); int watchdogThreshold = AS3935.getWatchdogThreshold(); Serial.print("Noise floor is: "); Serial.println(noiseFloor,DEC); Serial.print("Spike rejection is: "); Serial.println(spikeRejection,DEC); Serial.print("Watchdog threshold is: "); Serial.println(watchdogThreshold,DEC); } byte SPItransfer(byte sendByte) { return SPI.transfer(sendByte); } void AS3935Irq() { AS3935IrqTriggered = 1; } |
Kod jest to prawie żywcem wzięty przykład z katalogu examples biblioteki, warto zwrócić tu uwagę na linijkę 34 z AS3935.setNoiseFloor(2); – po podłączeniu i uruchomieniu wszystkiego, może się zdarzyć, że widoczny będzie komunikat “Noise level too high, try adjusting noise floor” – należy wówczas zwiększać wartość podaną w tej linii do takiego poziomu, przy którym komunikat nie będzie występował. Noise level too high oznacza za dużo zakłóceń i sensor nie będzie działał.
Pierwsze uruchomienie
Jeżeli wszystko podłączyliśmy poprawnie i wysłaliśmy kod do Arduino, otwieramy teraz monitor portu szeregowego. Naszym oczom powinny okazać się komunikaty:
Widzimy tu, że nasz sensor działa i coś wykrywa. Ale jak to wykrywa, skoro nie ma burzy? No właśnie, jest tu trochę zła kalibracja gdyż mamy komunikat “Noise level too high, try adjusting noise floor”, trzeba teraz kombinować tak, aby go wyeliminować. Komunikaty “Disturber detected” świadczą o zakłóceniach, co jest normalne gdy dookoła jest dużo urządzeń elektrycznych. Aby wyłączyć ich wyświetlanie należy zakomentować linijkę 52. Na chwile obecną nie pozostaje nam nic innego jak czekać na burzę – gdy się pojawi powinna wyświetlać się przybliżona odległość burzy. Przetestowanie wymaga oczekiwania na pomoc siły wyższej ;)
Dalsza rozbudowa
Gdy siła wyższa już pomoże i wszystko będzie działać, rozbudujemy nasz projekt. Dodamy wyświetlacz LCD, aby to na nim wyświetlała się odległość i zmienimy nieco komunikację z Serial Portem. Tutaj przyda nam się właśnie opcjonalny konwerter USB TTL. Za pomocą tego konwertera będę wysyłał komunikaty do komputera (gdyż finalnie projekt zostanie odłączony od Arduino a przepięty na zwykłą ATmegę), aby zapisywać je w sposób podobny do opisanego przez Łukasza. Jak to u mnie – dane te dalej polecą w sieć i przydadzą się do dalszych celów.
Wpis ten miał być opublikowany w jednej części – jednak jako, że oczekiwanie na pomoc siły wyższej trwa już trochę zbyt długo, publikuję pierwszą część – a po najbliższej burzy przy której uda się wykonać testy – będzie kolejna :)
Pomysł fajny i zdecydowanie godny uwagi, chętnie widziałbym go w połączeniu z automatycznym wyłącznikiem zasilania routera, bo podczas burzy mam do nich pecha i często mi się palą :-(
Przydałoby się jeszcze w tekście opisać (oczywiście po wyczekiwanej burzy) jakiego rodzaju testy zostały, które sprawdzają trafność i bezbłędność urządzenia. Liczę i czekam na dalszą rozbudowę urządzenia, a autorowi życzę powodzenia i wytrwałości :-)
Z tym automatycznym wyłączaniem sprzętu, to bardzo dobry pomysł! Najpierw dałbym jakiś sygnał ostrzegawczy, żeby człowiek miał czas na podjęcie decyzji, a później (np. po 3 minutach) nastąpiłoby automatyczne wyłączenie (bez problemu można by też wysłać najpierw sygnał do kompa, żeby się uśpił albo zahibernował) :)
Jest potencjał!
Wszystko fajnie, tylko czy takie wyłączenie, realizowane przez przekaźnik lub coś podobnego – jest bezpieczne?
W sensie, czy wysokie napięcie – z wyładowania nie przeskoczy takiego przełączenia?
Ze zwykłym przekaźnikiem jest ryzyko, ale pewnie można kupić jakieś dedykowane przekaźniki (czy inne wyłączniki) przeznaczone do takich zadań. Ewentualnie można dać serwo, które będzie przełączało jakiś większy mechaniczny przełącznik.
Na upartego z samego serwa można zrobić przełącznik (do ramienia orczyka przymocować sprężynkę od długopisu, która będzie się opierała o kawałek blaszki. Później kręcisz serwem i sprężyna traci kontakt z blaszką:)
przy bezpośrednim trafieniu pioruna nic nie zabezpieczy instalacji wewnątrz budynku, warto – zainwestować w instalację odgromową, aby zminimalizować straty i ograniczyć prąd udarowy powstający przy wyładowaniu.
To przed czym warto zabezpieczać, to indukcja napięć związanych z wyładowaniem oraz przy trafieniach (indukcjach) przychodzących przez media zewnętrzne – sieć energetyczna, telefon, kablówka itp, Niestety – tylko fizyczne wyłączenie z prądu urządzeń ma jakikolwiek sens (widziałem przypadek, gdzie ktoś wyłączył komputer z przedłużacza, i położył kabel obok), piorun zawsze poszuka najlżejszej drogi (o najmniejszym oporze), więc poszedł w kabel leżący obok przedłużacza. Tego typu napięcia potrafią przebić bezpieczniki 20A, a co dopiero jakikolwiek mikrowyłącznik.
Czyli jak to mówią: gorsze od braku zabezpieczenia jest tylko złudne jego poczucie ;)
Świetny wynalazek! :)
Czekam na drugą część!
Opisz zasadę działania detektora.
Z tego co wiem, działa to jakąś metodą radiową, stąd zgodnie ze specyfikacją zasięg do 50km. Nie wnikałem w to w jaki to jednak dokładny sposób funkcjonuje – bo w sumie taka wiedza nie była mi niezbędna do stworzenia tego co chcę zrobić docelowo
Pioruny emitują fale radiowe, zapewne je wykrywa.
Wersję przenośnią jeszcze, żeby można było np. w góry zabrać na wycieczkę :)
O tak, ten pomysł mi się bardzo podoba :)
Się nie mogę edytować, to dopisuje kolejne pytania.
Jak wygląda zużycie prądu modułu? Mógłbyś sprawdzić czy robi poprawne odczyty zasilany z 3,3V?
Mogę spróbować, to tylko przesunięcie jednego kabelka u mnie. Tylko z testowaniem jest duży problem – oczekiwanie na burze i jak na złość, coś nie mogę jej doczekać
To jest bardzo ale to bardzo malutkie, myślę, że na najmniejszej stykówce można by to zainstalować gdyby nie dodatkowa rozbudowa. Później jakaś ładna obudowa, zasilanie z baterii i powinno dać radę – no i załóżmy kilka diód (zielona/zolta/czerwona) zamiast wyświetlacza
Jakiś czas temu myślałem nawet nad skonstruowaniem takiego detektora samodzielnie. Schematy są dostępne w sieci. Zacząłem dużo czytać na ten temat. Niestety opinie o tego typu detektorach nie były zbyt dobre. Z racji tego, iż pioruny generują impulsy magnetyczne z bardzo szerokiego przedziału częstotliwości ciężko jest z dużą dokładnością określić, czy aby na pewno nachodzi burza czy może to sąsiad 2 domki dalej podłączył spawarkę :) Regulując czułość urządzenia istnieje niebezpieczeństwo, że burze wykryjemy za późno. W każdym razie, zarys mojego pomysłu wyglądał następująco: część detekcyjna – detektor burzy jako pierwszy stopień wykrywania oraz fotodioda która walidowała by poprawność odczytów – jeśli detektor wykrywa burze i fotodioda odczytuje spadek natężenia światła (ciemne chmury) następuje szereg działań. Zasuwają się żaluzję oraz wyłącza sprzęt elektryczny. Jak część wykonawczą chciałem użyć serwo przełączający przycisk na listwie ;) Całość chciałem oprzeć o wersję Arduino Enternet, tak aby można było wyświetlać na kompie lub wysyłać informacje na smartphone’a.
Jak zbudować stację burzową z projektu Blithortung, można przeczytać na stronie https://sites.google.com/site/sp9hsq/home/stacja-burzowa
Tak, wiedziałem o tym zanim zdecydowałem się na takie rozwiązanie.
Problem polega na tym, że koszt jest znaczny, ponad 105,60 €
Dla mnie też cena jest zaporowa :)
Za to Twoje rozwiązanie wygląda naprawdę ciekawie.
Czekam na wyniki po burzy.
Nie ma co ukrywać, że Blitzortung jest fajniejszy, bo daje dostęp do danych z całego projektu a nie tylko z tych które odbierze Twoja stacja – fajna sprawa, dane są dokładne, jest API, można cośtam na tym budować.
Niestety cena jest faktycznie zaporowa, bo razem z antenami, tak aby kupić wszystkie części to już 188,60 €
Szukałem czegoś prostszego i znalazłem, teraz tylko potestować czy zadziała ;)
A niech Cię kotek pomizia, właśnie rozkminiałem dzisiaj coś takiego.
Teoretycznie na podstawie tego projektu można by zbudować serwis podobny do blitzortung. Wystarczyłaby mapka z oznaczonymi lokalizacjami odbiorników oraz interfejs przesyłający dane z urządzeń końcowych do głównej bazy danych na podstawie której generowane byłyby miejsca wyładowań.
Podobny projekt był na gdziejestburza.pl
Sekretem Blitzortung jest uniwersalny czas, odbierany przez GPS. To dzięki właśnie synchronizacji czasu między czujnikami, możliwe jest ustalenie gdzie nastąpiło wyładowanie. Na podstawie bardzo niewielkich różnic czasu uderzenia, wskazanych przez przynajmniej 3 stacje i znanej prędkości dźwięku, możliwe jest wyznaczenie położenia. Bez rozbudowy o gps lub odbiornik np. czasu nadawanego z Frankfurtu z zegara atomowego, baza taka będzie jedynie pokazywać że uderzyło gdzieś niedaleko.
Ponadto nie wiadomo jak tu jest tak naprawdę z dokładnością – odbiorniki blitzortunga opierają się na w miarę dużych antenach, ten ma wbudowaną, malutką
Do detektora pioruna warto dodać wykrywacz fali dźwiękowej. Uzykamy pomiar odległości na podstawie opóznienia wyładowanie->grzmot. Ja wykonałem sobie detektor samemu (wykrywa on fale e/m) , dla ciekawskich dodam ,że jest oparty na 3 tranzystorach :-) Do kompletu jakiś avr/arduino i miernik gotowy.
A może chciałbyś opisać ten swój detektor? :)
Postaram się. Spróbuje przepisać kod na arduino i być może porównać dokładność.
Gdzie można zakupić ten moduł ?
Jest podlinkowany, proszę: https://www.tindie.com/products/TAUTIC/as3935-lightning-sensor-board/ ;)
Fajna sprawa z tym detektorem burzy jednak chyba wolę skorzystać ze strony z pogodą jakieś porządniejszej. Chyba jestem zbyt leniwy :D
A tutaj burze.dzis.net to samo za free, działa rewelacyjnie a czas poświęcony na projekt to dosłownie 5 min. ;)
A ha i jeszcze jedno NIE POLECAM tego konwertera jeżeli ktoś ma Win7 x64, zwisy, blue-screeny i inne dziadostwa, jak już brać to na chipsecie ft232
Bardzo ciekawy pomysł z tym konwerterem takie problemy są?
Przyznam, że na Windowsach nie testowałem – używam go pod Linuxem Debianem i śmiga bez problemu
Ja kupiłem3 takie na ebayu po ok $1.5 za sztukę. Na razie jedynie testowałem czy działają, więc działały max z 10 minut, ale nie trafiłem na żadne problemy. Sprawdzane a dwóch windowsach 7 64-bit.
Ten konwerter owszem działa pod Win7 x64, ale jeżeli zaczynasz wysyłać coś zbyt szybko lub w dużych ilościach to dopiero wtedy zaczynają się problemy.
Ciekawostka. Musze przyznać, że do czegoś takiego nie doszedłem, z przyjemnością więc skorzystam z Twojego pomysłu. Burzami interesuje się od dawna, a informacje o nich czerpię co najwyżej z ogólno dostępnych radarów (i strony łowców oczywiście). Nie raz myślałem o tym, że fajnie byłoby mieć własny “powiadamiacz”. Z wyższą elektroniką się raczej mijam, ale myślę, że tutaj dam radę stworzyć coś sensownego.
Dodał bym jakiegoś ifa, który zwiększał by wartość tej liczby, kiedy hałas/zakłócenia były by zbyt duże i mechanizm sam by się dostrajał ;p
Witam,
z racji że zajmuje się tematyką wyładowań atmosferycznych od dawna. Zapoznałem się pokrótce z tym urządzeniem.
Według mojej oceny urządzenie to jest słabsze niż rozwiązanie oparte o radio trzaski.
Za pomocą tego urządzenia nie można określić skąd, jakiego typu było i jak daleko było wyładowanie atmosferyczne.
Bez wątpienia urządzenie jest podatne na zakłócenia obce. Jest to bardzo złożony problem i za pomocą takiego prostego układu nie można tego problemu przeskoczyć. Może część z nich odfiltrować, ale znaczną większość przypuści i błędnie sklasyfikuje.
I jak wygląda sytuacja ? Sensor działa, sprawdziłeś go podczas burzy ?
Witam
czy byłby ktoś uprzejmy żeby dopisać kawałek kodu do istniejącego już projektu.
Potrzebuje żeby podczas wykrycia burzy załączył się 2 przekaźniki na np. 1godz.
Zawsze można kupić własny na TurboEgg.com, mały mobilny detektor burz.
Obecnie przy takich nagłych burzach jakie latem przychodzą powinny być budowane systemy ostrzegania zwłaszcza jeśli wyładowania są bardzo duże. Często takie burze zalewają gwałtownymi opadami niewielkie obszary.
ja mam taki detektor, ale inny i ostrzeganie jest super, nawet obudził mnie w nocy(krótki pisk i błysk). Co do odróżnienia burzy od sąsiada, to piorunów w ciągu minuty zwykle jest w okolicy dużo, ale nie są jednostajne. Oczywiście, jeżeli chodzi o zakłócenia to jednorazowe włączanie światła, lub samochód chyba. Pioruny oczywiście są silne.