Spisu treści:

Mini stacja pogodowa z Attiny85: 6 kroków (ze zdjęciami)
Mini stacja pogodowa z Attiny85: 6 kroków (ze zdjęciami)

Wideo: Mini stacja pogodowa z Attiny85: 6 kroków (ze zdjęciami)

Wideo: Mini stacja pogodowa z Attiny85: 6 kroków (ze zdjęciami)
Wideo: EVE Weather zewnętrzny monitor temperatury i wilgotności dla Apple HomeKit z Thread 2024, Lipiec
Anonim
Mini Stacja Pogodowa Z Attiny85
Mini Stacja Pogodowa Z Attiny85
Mini Stacja Pogodowa Z Attiny85
Mini Stacja Pogodowa Z Attiny85
Mini Stacja Pogodowa Z Attiny85
Mini Stacja Pogodowa Z Attiny85

W niedawnej instrukcji Indigod0g opisał mini stację pogodową, która działa całkiem dobrze, używając dwóch Arduino. Może nie każdy chce poświęcić 2 Arduino, aby uzyskać odczyty wilgotności i temperatury, a ja skomentowałem, że powinno być możliwe wykonanie podobnej funkcji z dwoma Attiny85. Myślę, że rozmowa jest łatwa, więc lepiej położę pieniądze tam, gdzie są moje usta.

W rzeczywistości, jeśli połączę dwie wcześniejsze instrukcje, napisałem:

2-przewodowy interfejs LCD dla Arduino lub Attiny oraz odbieranie i przesyłanie danych między Attiny85 (Arduino IDE 1.06) to większość pracy już wykonana. Wystarczy trochę dostosować oprogramowanie.

Wybrałem dwuprzewodowe rozwiązanie LCD z rejestrem przesuwnym, a nie wyświetlacz LCD I2C, ponieważ w Attiny rejestr przesuwny jest łatwiejszy do wdrożenia niż magistrala I2C. Jednak… jeśli na przykład chcesz odczytać czujnik ciśnienia BMP180 lub BMP085, i tak potrzebujesz do tego I2C, więc równie dobrze możesz użyć wyświetlacza LCD I2C. TinyWireM to dobra biblioteka dla I2C na Attiny (ale wymaga dodatkowej przestrzeni).

BOM Nadajnik: moduł nadajnika DHT11 Attiny85 10 k rezystor 433 MHz

Odbiornik Attiny85 10k rezystor 433 MHz moduł odbiornika

Wyświetlacz 74LS164 rejestr przesuwny 1N4148 dioda 2x1k rezystor 1x1k zmienny rezystor wyświetlacz LCD 2x16

Krok 1: Ministacja pogodowa z Attiny85: nadajnik

Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik
Ministacja pogodowa z Attiny85: nadajnik

Nadajnik jest bardzo podstawową konfiguracją Attiny85 z rezystorem podciągającym na linii resetowania. Moduł nadajnika jest podłączony do cyfrowego pinu „0”, a pin danych DHT11 jest podłączony do cyfrowego pinu 4. Podłącz przewód 17,2 cm jako antenę (Dla znacznie lepszej anteny patrz krok 5). Oprogramowanie wygląda następująco:

//będzie działać na Attiny//RF433=D0 pin 5

//DHT11=D4 pin 3 // biblioteki #include //Od Roba Tillaarta #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 //pin, do którego podłączony jest Twój nadajnik //zmienne float h=0; pływak t=0; int transmit_t = 0; int transmit_h = 0; int dane_transmisji = 0; void setup() { pinMode(1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); } void loop() { int chk = DHT11.read11(DHT11PIN); h=DHT11.wilgotność; t=DHT11.temperatura; // Wiem, używam tutaj 3 zmiennych całkowitych // gdzie mógłbym użyć 1 // ale po prostu łatwiej jest śledzić transmit_h=100* (int) h; transmit_t=(int) t; transmit_data=transmit_h+transmit_t; man.transmit(transmit_dane); opóźnienie (500); }

Oprogramowanie wykorzystuje kod Manchester do wysyłania danych. Odczytuje DHT11 i przechowuje temperaturę i wilgotność w 2 oddzielnych pływakach. Ponieważ kod Manchester nie wysyła liczb zmiennoprzecinkowych, ale liczbę całkowitą, mam kilka opcji: 1 - podziel liczby na dwie liczby całkowite i wyślij je 2 - wyślij każdą liczbę zmiennoprzecinkową jako liczbę całkowitą 3 - wyślij dwie liczby jako jedną liczbę całkowitą Z opcją 1 muszę połączyć liczby całkowite do pływają ponownie w odbiorniku i muszę określić, która liczba całkowita jest czym, przez co kod jest długi. Z opcją 2 nadal muszę określić, która liczba całkowita dotyczy wilgotności, a która temperatury. Nie mogę przejść przez sekwencję samą w przypadku utraty jednej liczby całkowitej podczas transmisji, więc musiałbym wysłać identyfikator dołączony do liczby całkowitej. Z opcją 3 mogę wysłać tylko jedną liczbę całkowitą. Oczywiście sprawia to, że odczyty są nieco mniej dokładne - w granicach 1 stopnia - i nie można wysyłać poniżej zera temperatur, ale to tylko prosty kod i można to obejść. Na razie chodzi tylko o zasadę. Więc co robię to zamieniam pływaki na liczby całkowite i mnożę wilgotność przez 100. Następnie dodaję temperaturę do przemnożonej wilgotności. Biorąc pod uwagę fakt, że wilgotność nigdy nie będzie 100% to maksymalna liczba jaką dostanę to 9900. Biorąc pod uwagę fakt, że temperatura również nie będzie wyższa niż 100 stopni, maksymalna liczba to 99, w związku z czym najwyższa liczba jaką wyślę to 9999 i jest to łatwe do oddzielenia po stronie odbiorcy. Oczywiście moje obliczenia, w których używam 3 liczb całkowitych, są przesadą, ponieważ można to łatwo zrobić za pomocą 1 zmiennej. Chciałem tylko, aby kod był łatwiejszy do naśladowania. Kod teraz kompiluje się jako:

Rozmiar szkicu binarnego: 2 836 bajtów (maksymalnie 8 192 bajty), aby zmieścił się w Attiny 45 lub 85 UWAGA, używam biblioteki dht.h od Roba Tillaarta. Ta biblioteka jest również odpowiednia dla DHT22. Używam wersji 1.08. Jednak Attiny85 może mieć problemy z odczytaniem DHT22 z niższymi wersjami biblioteki. Zostało mi potwierdzone, że 1.08 i 1.14 - choć pracują na zwykłym Arduino - mają problemy z odczytem DHT22 na Attiny85. Jeśli chcesz użyć DHT22 na Attiny85, użyj wersji 1.20 tej biblioteki. To wszystko ma związek z wyczuciem czasu. Wersja 1.20 biblioteki ma szybszy odczyt. (Dzięki za doświadczenie użytkownika Jeroen)

Krok 2: Mini stacja pogodowa z Attiny85: odbiornik

Ministacja pogodowa z Attiny85: odbiornik
Ministacja pogodowa z Attiny85: odbiornik

Znowu Attiny85 jest używany w podstawowej konfiguracji z pinem Reset wyciągniętym wysoko z rezystorem 10k. Moduł odbiornika jest podłączony do cyfrowego pinu 1 (pin 6 na chipie). Wyświetlacz LCD jest podłączony do cyfrowych pinów 0 i 2. Podłącz przewód 17,2 cm jako antenę. Kod wygląda następująco:

#włączać

#include LiquidCrystal_SR lcd(0, 2, TWO_WIRE); #define RX_PIN 1 //= fizyczny pin 6 void setup() { lcd.begin(16, 2); lcd.home(); man.setupReceive(RX_PIN, MAN_1200); man.początekOdbiór(); } void loop() { if (man.receiveComplete()) { uint16_t m = man.getMessage(); man.początekOdbiór(); lcd.print("Wilgotny: "); lcd.print(m/100); lcd.setCursor(0, 1); lcd.print("Temp"); lcd.print(m%100); } }

Kod jest dość prosty: przesłana liczba całkowita jest odbierana i przechowywana w zmiennej 'm'. Dzieli się ją przez 100, aby uzyskać wilgotność, a modulo 100 podaje temperaturę. Załóżmy więc, że otrzymana liczba całkowita to 33253325/100=333325 % 100 =25Ten kod kompiluje się jako 3380 bajtów i dlatego może być używany tylko z attiny85, a nie z 45

Krok 3: Mini stacja pogodowa z Attiny85/45: wyświetlacz

Mini stacja pogodowa z Attiny85/45: wyświetlacz
Mini stacja pogodowa z Attiny85/45: wyświetlacz
Mini stacja pogodowa z Attiny85/45: wyświetlacz
Mini stacja pogodowa z Attiny85/45: wyświetlacz

W przypadku wyświetlacza najlepiej jest odnieść się do mojego instruktażu na dwuprzewodowym wyświetlaczu. Krótko mówiąc, zwykły wyświetlacz 16x2 wykorzystuje rejestr zmiany biegów, dzięki czemu może działać z dwoma cyfrowymi pinami. Oczywiście, jeśli wolisz używać wyświetlacza z obsługą I2C, to znaczy to również możliwe, ale wtedy musisz zaimplementować protokół I2C na Attiny. Protokół Tinywire może to zrobić. Chociaż niektóre źródła podają, że oczekuje się zegara 1 Mhz, nie miałem żadnych problemów (w innym projekcie), aby użyć go na 8 MHz. W każdym razie po prostu nie zawracałem sobie głowy i używałem rejestru przesuwnego.

Krok 4: Mini stacja pogodowa z Attiny85/45: możliwości/wnioski

Mini Stacja Pogodowa Z Attiny85/45: Możliwości/Wnioski
Mini Stacja Pogodowa Z Attiny85/45: Możliwości/Wnioski
Mini Stacja Pogodowa Z Attiny85/45: Możliwości/Wnioski
Mini Stacja Pogodowa Z Attiny85/45: Możliwości/Wnioski
Mini Stacja Pogodowa Z Attiny85/45: Możliwości/Wnioski
Mini Stacja Pogodowa Z Attiny85/45: Możliwości/Wnioski

Jak powiedziałem, zrobiłem to, aby pokazać, że można zrobić mini stację pogodową z dwoma attiny85 (nawet z jednym attiny85 + 1 attiny45). Wysyła tylko wilgotność i temperaturę za pomocą DHT11. Jednak Attiny ma 5 cyfrowych pinów do użycia, 6 nawet z pewnym podstępem. Dzięki temu możliwe jest wysyłanie danych z większej liczby czujników. W moim projekcie - jak widać na zdjęciach na stripboardzie i na profesjonalnej płytce drukowanej (OSHPark) - wysyłam/odbieram dane z DHT11, z LDR i z PIR, wszystko za pomocą dwa attiny85 Ograniczeniem w używaniu attiny85 jako odbiornika jest jednak prezentacja danych w krzykliwym stylu. Ponieważ pamięć jest ograniczona: teksty takie jak „Temperatura, wilgotność, poziom światła, zbliżający się obiekt” dość szybko zapełnią cenną przestrzeń pamięci. Niemniej jednak nie ma powodu, aby używać dwóch Arduino tylko do wysyłania/odbierania temperatury i wilgotności. Ponadto jest to możliwe aby nadajnik był uśpiony i budził się tylko do wysyłania danych co 10 minut i w ten sposób zasilał go z komórki guzikowej. Oczywiście można wysyłać nie tylko dane dotyczące temperatury lub wilgotności, ale można mieć również szereg małych nadajników wysyłających odczyty wilgotności gleby lub dodaj anemometr lub miernik deszczu

Krok 5: Ministacja pogodowa: antena

Mini Stacja Pogodowa: Antena
Mini Stacja Pogodowa: Antena

Antena jest ważną częścią każdej konfiguracji 433 MHz. Eksperymentowałem ze standardową anteną prętową o długości 17,2 cm i miałem krótki flirt z anteną cewkową. Wydaje się, że najlepiej działa antena z cewką, która jest łatwa do wykonania. Projekt pochodzi od Bena Schuelera i podobno został opublikowany w magazynie „Elektor”. Plik PDF z opisem tej „chłodzonej powietrzem anteny 433 MHz” jest łatwy do naśladowania. (Link zniknął, sprawdź tutaj)

Krok 6: Dodawanie BMP180

Dodawanie BMP180
Dodawanie BMP180

Chcesz dodać czujnik ciśnienia atmosferycznego, taki jak BMP180? sprawdź moje inne instrukcje na ten temat.

Zalecana: