Od jakiegoś czasu mam stację pogodową Auriol z Lidla. Może ona obsługiwać do trzech termometrów zewnętrznych, w zestawie był jeden taki czujnik. Udało mi się ustalić, że może pasować czujnik do stacji Hama czasem dostępny w sklepie Conrad ale cena nie była zbyt zachęcająca i nie miałem pewności, że to zadziała. Postanowiłem samemu wykonać taki czujnik.
Pierwszym krokiem było ustalenie protokołu komunikacji używanego przez stację. Po przeszukaniu internetów znalazłem kilka stron opisujących dekodowanie sygnału z czujnika stacji pogodowej. Na przykład
https://rayshobby.net/wordpress/reverse-engineer-wireless-temperature-humidity-rain-sensors-part-1/
Można się też posłużyć odbiornikiem do RTL_SDR i programem rtl_433 który potrafi odebrać i zdekodować dość sporo różnych czujników.
Lidlowski czujnik jest rozpoznawany przez ten soft jako TFA_pool. Używana jest modulacja PPM (modulacja położenia pulsu). Długość impulsu 460us, długość przerwy dla zera 1800us, dla jeden 4200us. Ramka danych jest poprzedzona sygnałem startowym (puls + przerwa 9600us) i zawiera 28bitów w formacie:
Ramka jest powtarzana 10 razy a transmisja odbywa się co 56 sekund.
Wygrzebałem z szuflady mikrokontroler stm8s103 a dokładniej użyłem mini płytki rozwojowej za 0.6$ i nadajnik 433MHz który kosztuje jeszcze mniej.
Żeby zmniejszyć zużycie prądu z płytki wylutowałem stabilizator napięcia i rezystor led zasilania. Drugi LED na użyłem do sygnalizacji transmisji. Zasilanie z akumulatorka li-ion lub dwóch baterii. Do pomiaru temperatury jest używany termistor NTC 10K.
Program jest napisany w C, kompilowany za pomocą SDCC bazując na przykładach z https://lujji.github.io/blog/bare-metal-programming-stm8/
Numer kanału jest ustawiany zworkami. Opcjonalnie podczas kompilacji można włączyć wysyłanie napięcia baterii na kanale 0 (nie odbieranym przez stację pogody) - można monitorować zużycie baterii ale ze świadomością, że będzie większa przez dodatkowe transmisje
Dla celów debugowych można też skompilować kod z wypisywaniem danych na serial port.
Procesor nie jest zbyt energooszczędny (mimo wprowadzania w tryb uśpienia), na akumulatorku 600mAh działa około 1miesiąca. Przeportuję kiedyś na attiny412 może będzie lepiej.
W załączniku kod źródłowy i wersja skompilowana.
Pierwszym krokiem było ustalenie protokołu komunikacji używanego przez stację. Po przeszukaniu internetów znalazłem kilka stron opisujących dekodowanie sygnału z czujnika stacji pogodowej. Na przykład
https://rayshobby.net/wordpress/reverse-engineer-wireless-temperature-humidity-rain-sensors-part-1/
Można się też posłużyć odbiornikiem do RTL_SDR i programem rtl_433 który potrafi odebrać i zdekodować dość sporo różnych czujników.
Lidlowski czujnik jest rozpoznawany przez ten soft jako TFA_pool. Używana jest modulacja PPM (modulacja położenia pulsu). Długość impulsu 460us, długość przerwy dla zera 1800us, dla jeden 4200us. Ramka danych jest poprzedzona sygnałem startowym (puls + przerwa 9600us) i zawiera 28bitów w formacie:
/*
AAAABBBB BBBBCCCC CCCCCCCC DDEF
A: suma kontrolna - (sum nibles -1) mod 16
B: numer czujnika (losowany po restarcie)
C: temperatura (w dziesiątych stopnia)
D: numer kanału (stacja odbiera kanały 1-3)
E: stan baterii
F: 1 jeżeli transmisja wymuszona przyciskiem
*/
Ramka jest powtarzana 10 razy a transmisja odbywa się co 56 sekund.
Wygrzebałem z szuflady mikrokontroler stm8s103 a dokładniej użyłem mini płytki rozwojowej za 0.6$ i nadajnik 433MHz który kosztuje jeszcze mniej.


Żeby zmniejszyć zużycie prądu z płytki wylutowałem stabilizator napięcia i rezystor led zasilania. Drugi LED na użyłem do sygnalizacji transmisji. Zasilanie z akumulatorka li-ion lub dwóch baterii. Do pomiaru temperatury jest używany termistor NTC 10K.

Program jest napisany w C, kompilowany za pomocą SDCC bazując na przykładach z https://lujji.github.io/blog/bare-metal-programming-stm8/
Numer kanału jest ustawiany zworkami. Opcjonalnie podczas kompilacji można włączyć wysyłanie napięcia baterii na kanale 0 (nie odbieranym przez stację pogody) - można monitorować zużycie baterii ale ze świadomością, że będzie większa przez dodatkowe transmisje
Dla celów debugowych można też skompilować kod z wypisywaniem danych na serial port.
Procesor nie jest zbyt energooszczędny (mimo wprowadzania w tryb uśpienia), na akumulatorku 600mAh działa około 1miesiąca. Przeportuję kiedyś na attiny412 może będzie lepiej.
W załączniku kod źródłowy i wersja skompilowana.
Cool? Ranking DIY