
Witam, dziś prezentuje swój bezprzewodowy termometr pracujący na częstotliwości 433 MHz. Urządzenie składa się z nadajnika i odbiornika. Nadajnik odczytuje temperaturę pieca C.O. i wysyła ją do odbiornika. W odbiorniku mamy możliwość ustalenia górnego i dolnego progu załączenia alarmu, który informuje użytkownika o zbyt niskiej lub wysokiej temperaturze na piecu. Dodatkowo ustalamy histerezę dla alarmu oraz mamy możliwość włączenia trybu oszczędzania energii, ale o tym później.
Nadajnik:
Sercem nadajnika jest Attiny2313, czujnik temperatury to sławetny DS18B20, a nadajnik 433 MHz to najtańszy i najprostszy TX433N. Nie ma nad czym się tu rozwodzić, procesor co około 30s odczytuje temperaturę z DSa i w dwóch częściach wysyła ją w eter. Dodatkowo zastosowałem załączanie nadajnika kluczem w celu oszczędzania energii, gdybym w przyszłości chciał zasilać układ z baterii. Poniżej zdjęcie, schemat i wzór płytki:



Protokół transmisji danych:
Dane są przesyłane do modułów z wykorzystaniem sprzętowego UART. Na początku ramka wyglądała w następujący sposób:

Na początku był wysyłany znacznik początku ramki o wartości 170. Następnie dwa bajty danych Temp1 i Temp2 i na koniec suma kontrolna CRC = Temp1 xor Temp2 xor 170. Działało to dobrze, jednak co jakiś czas przychodziły do odbiornika śmieci które on akceptował. W konsekwencji odbiornik co jakiś czas wyświetlał bzdury. Aby temu zapobiec rozbudowałem ramkę do takiej postaci:

Zmniejszyło to efektywną szybkość transmisji danych jednak polepszyło pracę odbiornika. Teraz aby ramka została zaakceptowana nie wystarczy że CRC będzie zgodne, ale muszą być spełnione następujące warunki:
- 4 bajt musi być równy 85
- 3 i 5 bajt muszą być sobie równe
- 2 i 6 bajt muszą być sobie równe
- suma kontrolna musi być zgodna.
Taka budowa ramki pozwoliła na bezbłędną transmisje danych.
Odbiornik:
Sercem odbiornika jest ATmega32. Do dyspozycji użytkownika są dwa przyciski umożliwiające ustawianie parametrów. Odbiornik również posiada swój czujnik temperatury który odczytuje temperaturę w pokoju. Dane są zapisywane na kartę SD. Odbiór danych z odbiornika RX433N następuje w przerwaniu. Odbiornik został wykonany na dwóch płytkach połączonych przewodami. W przyszłości będą umieszczone jedna pod drugą na jakiejś ładnej plexi. Teraz co nieco o funkcjach:
- zdalny odczyt temperatury
- możliwość ustawienia dolnego i górnego progu załączenia alarmu
- możliwość ustawienia histerezy dla progów załączenia alarmów
- adaptacyjna regulacja podświetlenia
- tryb energooszczędny
- zapis danych na kartę SD
Adaptacyjna regulacja podświetlenia wyświetlacza LCD jest oparta o fotorezystor i wbudowany przetwornik A/C Atmegi, podświetlenie regulowane przez PWM, opierałem się na tym projekcie Ducha: https://www.elektroda.pl/rtvforum/topic1654862.html
Tryb energooszczędny można włączyć, np gdy zasilamy odbiornik z baterii, wtedy wyświetlacz jest podświetlony tylko na 2s po odebraniu każdej ramki, czyli na około 2s co około 30s.
Poniżej zdjęcia i schematy:






Kod programu:
Poniżej listingi programów nadajnika i odbiornika. Największy problem stanowiło zestawienie transmisji danych, na forum nigdzie nie udało mi się znaleźć gotowych kodów bo jak już ktoś to zrobił to kodów nie umieszczał. Poniżej całe kompletne kody, w odbiorniku cały odbiór realizowany jest w podprogramie Odbierz
Nadajnik:
Odbiornik:
Myślę, że program dałoby się jeszcze poprawić, ale to jak znajdę trochę więcej czasu. Na sam koniec film, Jak widać kolejne ramki przychodzą co około 30s. Pierwszy pomiar z pokoju to 85 stopni, czyli pierwszy pomiar z czujnika DS. Kolejne już są poprawne. Na filmie nie słychać buzzera który wydaje dźwięki przy naciskaniu przycisków, prawdopodobnie mikrofon z telefonu nie rejestruje tak wysokich częstotliwości.
Mile widziane wszelkie komentarze, mam nadzieje że projekt okaże się pomocny.
Na koniec wielkie podziękowania dla kolegi Saabotaz za pomoc w zrealizowaniu transmisji danych.
Pozdrawiam
Dodaje projekty płytek z eagla w załączniku
Cool? Ranking DIY