- Odczyt temperatury wewnątrz i na zewnątrz pomieszczenia.
- Odczyt ciśnienia i wilgotności oraz ilości opadów dobowych.
- Pomiar prędkości i kierunku wiatru w czasie rzeczywistym.
- Monitorowanie odległości do wyładowań atmosferycznych.
- Wyświetlanie aktualnej godziny, daty oraz godzin wschodu i zachodu słońca dla danej szerokości geograficznej.
- Informacja głosowa o pełnej godzinie – czas, temperatura i ciśnienie.
Urządzenie jest złożone z dwóch bloków:
- Płytki czujników temperatury, ciśnienia, wilgotności, sensora wyładowań, prędkości i kierunku wiatru oraz ilości opadów umieszczonej na zewnątrz budynku.
- Interfejsu użytkownika z wyświetlaczem TFT 4,3”, na którym są prezentowane wszystkie mierzone wartości.
Zastosowano następujące czujniki: czujnik temperatury DS18B20, czujnik ciśnienia BMP280, czujnik wilgotności SI7021 (HUT21), sensor burzy – układ scalony AS3935, czujnik kierunku i prędkości wiatru oraz ilości opadów zakupione w firmie Maplin w Wielkiej Brytanii. Można je kupić również w krajowych sklepach, ponieważ Maplin raczej jest nastawiony na sprzedaż do dystrybutorów i nie zawsze chce przesłać do Polski paczkę z pojedynczymi czujnikami.
Czujnik prędkości wiatru generuje jeden impuls na obrót, co według producenta daje wartość 1,492 mph, a więc w zaokrągleniu 2,4 km/godz. Impulsy są zliczane w procedurze obsługi przerwania. Następnie funkcja wywoływana co 3 sek. oblicza wartość i zeruje zmienną „b” (listing 1). Minimalna prędkość mierzona to 0,8 km/godzinę. Jeżeli chcielibyśmy uzyskać większą rozdzielczość, to należałoby zsumować liczbę impulsów np. z 4 sekund – wtedy minimalna wyznaczona prędkość mogłaby wynosić 0,6 km/godz. Oczywiście, funkcję wywołujemy co 4 sekundy.
Listing 1. Zliczanie impulsów w przerwaniu INT1 i obliczenie prędkości wiatru
//obsługa przerwania zewnętrznego od INT1
ISR(INT1_vect)
{
b++; //licznik impulsów wiatromierza
}
//obliczanie prędkości wiatru
void wind_speed(void)
{
speed = b*240/3; //liczba impulsów jest mnożona przez 240, aby działania
//odbywały się na liczbach całkowitych; /3 bo funkcja
speed_dz = speed/100; //wywoływana co 3 sek. 1 imp. = 2,4 km/godz.
speed_u = speed/10%10;
b=0; //zerowanie licznika impulsów
}