stacja dozymetryczno-pogodowa


cel projektu

W internecie jest wiele projektów stacji pogodowych, których celem jest rejestracja podstawowych parametrów pogodowych, jak np. temperatura, wilgotność, ciśnienie atmosferyczne. Brakowało mi jednak stacji mierzącej dodatkowo poziom radiacji. Jak wiadomo z promieniowaniem jest ten problem, że go NIE WIDAĆ, ani NIE MOŻNA GO POCZUĆ. Można je rozpoznać jedynie odpowiednim przyrządem, albo czekać na pierwsze objawy choroby popromiennej...(warto w tym miejscu przypomnieć, że dzień po katastrofie czarnobylskiej ludzie w Prypeci brali śluby, dzieci bawiły się na dworze, a w całym regionie trwały przygotowania do obchodów święta 1-szego maja).

Celem stacji jest cykliczny pomiar promieniowania i publikowanie wyników w internecie (w postaci wykresu na stronie WWW).

W praktyce wykorzystamy tutaj platformę IoT „Blynk”, ponieważ dostępne są dla niej gotowe biblioteki dla środowiska Arduino, a także świetna appka na Smartfona (Android & IOS). Dzięki czemu obsługa mikrokontrolera z chmury i/lub telefonu jest naprawdę prosta. Blynk dostarcza też bardzo przyjazdne REST-API, dzięki któremu możemy kontrolować działanie programu także przez zewnętrzne skrypty (np. uruchamiane na jakimś dedykowanym VPS-ie).


pomiar elektrody spawalniczej z domieszką TOR-u


w trakcie prac nad układem...

widok aplikacji Blynk na smartfonie

działanie i potrzebne części (najważniejsze elementy)

Tworząc układ wzorowałem się na świetnym tutorialu pana Tomasza Bartusia. Oprogramowanie mikrokontrolera napisałem jednak od postaw, inne były bowiem moje założenia. W przypadku stacji dozymetrycznej nie interesuje nas szybkość zwracanego wyniku, zatem pomiary robione są w cyklach minutowych. W oryginale nie było także obsługi urządzenia przez aplikację w smartfonie/chmurę. W obwodzie elektrycznym też nastąpiła pewna modyfikacja. Otóz do wyjścia układu Darlingtona w moim przypadku podłączona jest dioda podczerwieni (IR), do pinu mikrokontrolera zaś podłączony jest odbiornik podczerwieni (przerobiony moduł LM393), który reaguje na odbierane światło w postaci „wystawienia” niskiego stanu (LOW) na pin mikrokontrolera. Podejście takie zapewnia galwaniczną separację układu wysokiego napięcia (tuba Geigera), od układu mikrokontrolera. Dodatkowo zasilanie przetwornicy wysokiego napięcia przechodzi przez przekaźnik sterowany chmurą/smartfonem. Dzięki czemu, napięcie na tubę GM podawane jest tylko na czas robienia pomiaru (czyli 1 raz na godzinę przez okres około 3 minut).

szkło uranowe w świetle UV. Po prawej także tuba Geigera-Müllera - model CTC-5.


zasada działania / obsługa


Urządzenie zasilane jest przez port USB (standardowy zasilacz lub port komputera) i połączone z siecią WiFi. Pomiar temperatury i wilgotności robiony jest na bieżąco w odstępach 30-sto sekundowych (wyzwalanych timerem) i pokazywany na wyświetlaczu LCD. Poprzez wywołania do REST-API platformy Blynk można odpytać o te wartości, które API zwraca w formie JSON-a. Ja odpytuję o temperaturę i wilgotność co pół godziny, a następnie wyniki zapisuję w bazie PostgreSQL.
W przypadku pomiaru promieniowania, sprawa jest bardziej złożona. Raz na godzinę, wysyłam (poprzez skrypt uruchamiany z Crona) żądanie włączenia przekaźnika, który to przekaźnik „podaje” zasilanie (5V) na wejście przetwornicy. Dzięki czemu po chwili na tubie Geigera-Müllera pojawia się napięcie rzędu 360V i tuba zaczyna działać, tj. reagować wyładowaniem w przypadku pojawienia się cząstki jonizującej. Następnie w odstępach minutowych odpytuję 3x API o wartość zliczonej dawki promieniowania wyrażonej w μS/h. Wartości zapisuję w bazie PostgreSQL, a następnie wysyłam żądanie API o wyłączenie przekaźnika. Po paru minutach ponownie wysyłam żądanie wyłączenia przekaźnika (just in case). Przeliczenia ilości zarejestrowanych „impulsów” (tzw. CPM - counts per minute) na dawkę promieniowaniaw μS/h realizuje już program w mikrokontrolerze (1x na minutę podczas cyklu pomiaru). Na wyświetlaczu LCD urządzenia podawane są dwie wartości - CPM oraz dawka promieniowania w μ/Sh. Odczytane wartości promieniowania zapisywane są w bazie PostgreSQL.

Jako że jestem adminem starej daty, myślałem, że do rysowania wykresów użyję poczciwego MRTG. Okazało się jednak, że ma problem z wartościami ułamkowymi ; ostatecznie kumpel polecił mi bibliotekę CanvasJS, która sprawdza się całkiem fajnie. Dane z SQL-a wystawiam JSONem, można więc mdowolnie dobrać kryteria czasowe.

wygenerowany wykres dla uśrednionych wartości godzinowych
(wartości na dworze będą nieznacznie wyższe - urządzenie póki co znajduje się w piwnicy)


o godzinie 11-tej z tyłu licznika przyłożono elektrodę z domieszką TOR-u


trochę fotek okołoprojektowych :-)

trochę podstaw teoretycznych ;-)gdzieś w Czarnobylskiej Strefie Wykluczenia