Przeznaczenie projektu
Celem mojej pracy jest pokazanie jak można zautomatyzować szczególne pomieszczenia w domu tanim kosztem. Szczególną uwagę skupiłem na podstawowe urządzenia których używamy na co dzień. Są to między innymi: oświetlenie; klimatyzacja; urządzenia podłączane do gniazd elektrycznych oraz kontrola aktualnej temperatury i wilgotności. Mój projekt ma na celu ułatwienie życia codziennego w domu, mieszkaniu poprzez sterowanie nimi bezprzewodowo za pomocą smartfonu z pokładu aplikacji. Podstawowe funkcje tych urządzen będą zachowane. Możliwe jest dalej manulane sterowanie za pomocą przycisków lub łaczników. Dodatkowo możliwa jest kontrola tempeartury i wilgotności. Wszystkie funkcje wykonywane przez sterownik będą wyświetlane na panelu lcd.
Opis rozwiązania
Projekt został zbudowany w czterech etapach. Pierwszy polegał na doborze sterownika, czyli serca całego projektu, oraz elementów składowych. Drugi etap polegał na stworzeniu programu sterującego całym systemem i elementami układu. Trzeci na stworzeniu aplikacji kompatybilnej z programem. Ostatni etap to stworzenie obudowy, połączenie i umieszczenie elementów w jej wnętrzu.
Etap I
Jako mikrokontroler sterujący całym systemem został wybrany 8-bitowy AVR, pracujący z częstotliwościa 16 MHz Atmega328p na pokładzie arduino nano, ze względu na przyjazne środowisko programowania oraz dużą ilość rozszerzeń i modułów. Jako czujnik temperatury zastosowano DHT, z zakresem temperatury od – 40 do +80°C ± 0,5 °C oraz wilgotności od 0 % do 100 % RH ±2 %RH. Łączność bezprzewodową zapewnia moduł bluetooth HC-05 o mocy +4dBm. Wyświetlacz alfanumeryczny LCD 2×16 znaków, przekaźniki o prądzie znamionowym 10A oraz mosfet 5ONO24. Układ zasilany transformatorem, obudowa PCV.
Etap II
Program został napisany językiem zbliżonym do C/C++, w środowisku Arduino IDE. W kodzie użyto funkcji dostarczanych w bibliotekach razem z kompilatorem Arduino.
Rys.1 Biblioteka Wire.h oraz LiquidCrystal_I2C.h umożliwiają wysyłanie danych poprzez magistralę I2C szynami SCL i SDA, dzięki nim do wyświetlania tekstu na panelu lcd potrzeba tylko czterech przewodów. Następnie definiujemy stałe wartości i przyporządkowywujemy im odpowiednie piny kontrolera. Dyrektywa #define pozwoli na zdefiniowanie symbolu który będzie podmieniany przed kompilacją w każdym miejscu programu, co ułatwi ewentualne zmiany w programie. Zadeklarowano zmienne typu int, do wykonywania operacji matematycznych oraz unsigned long, do przechowywania dużej ilości danych. Określamy typ czujnika DHT, oraz rodzaj wyświetlacza lcd.
|
Rys.2 Procedura setup ma za zadanie wykonać jednorazowo blok instrukcji, które się w niej znajdują, służy głównie do ustawień. Ustawiono w niej prędkość transmisji na wartośc 9600 baud-rate. Ustawiamy stany logiczne na wyjściach, aby po właczeniu programu, urządzenia do niego podpięte były wyłączone. A także ustawiono dane piny jako wyjsia i przyciski, wybrano typ czujnika temperatury i wilgotności. Zainicjowano, aby zaraz po włączeniu w dwóch linijkach pokazał się tekst „Daniel K, Inteligentny dom”.
|
|
Rys.3 W fukcji loop zawarte są instrukcje wykonywane cały czas. Wprowadzone są zmienne int odczytujące dane z czujnika temperatury i wilgotności. Wykorzystujemy w całym programie opóźnienia z millis, dlatego musimy w tej częsci programu sprawdzić aktualny czas i go zapamiętać. Wykorzystujemy instrukcje warunkowe if. W pierwszej warunkiem będzie odczyt liczby bajtów z portu szeregowego, jeśli ta wartość będzie większa od zera i będzie wynosic określoną wielkość, to arduino wykona określoną czynność. Przykładowo jeśli otrzyma wartość „a” załączy przekaźnik i poinformuje na wyświetlaczu, że światło
w kuchni jest włączone, bo właśnie za to
ten przekaźnik jest odpowiedzialny. Analogicznie
zostały zaprogramowane inne przekazniki, mosfet i czujnik.
|
Rys.4 Kolejnym warunkiem jest odczytanie stanu styków w przyciskach. Jeśli ktoryś z nich zmieni stan na niski, przypisany do niego przekaźnik lub mosfet zmienia stan na przeciwny, wykorzystana została tutaj negacja. Każda operacja wykonywana przez mikrokontroler jest wyświetlana na panelu lcd, informując użytkownika o tym co się
aktualnie dzieje.
|
Rys.5 Ostatnim warunkiem jest wyświetlenie napisu startowego, w moim przypadku „Miłego Dnia” oraz aktualna temperatura. Jest to wyświetlane po około 20 sekundach bezczynności.
Etap III
Aplikacja stworzona została w oparciu o App Inventor. Zaprojektowany został wygląd aplikacji, jak widać na rysunku (Rys.10) Przycisk „Połącz” otwiera listę dostępnych urządzen bluetooth, tam wybieramy nasz moduł HC-05. Pod nim wyświetlana jest informacja o stanie połączenia. W dolnej cześci przyciski ON i OFF odpowiadają za włączanie i wyłączanie opisanych urządzeń, po kliknięciu na nie, podświetlają się one na kolor zielony-ON, czerwony-OFF. Po wciśnięciu „Temperatura i Wilgotność” na panelu lcd wyświetlane są dane pobrane z czujnika DHT. Do każdego przycisku przypisana jest wartość którą aplikacja wysyła do arduino.
Etap IV
|
Początkowo cały układ został zamontowany na płytce stykowej (Rys.6), następie wgrany program, sprawdzona poprawnosć działania wszystkich funkcji. Ewentualne błędy zostały poprawione. Można było przejśc do właściwego montażu poprzez połączenia lutowane na uniwersalnej płytce drukowanej PCB. Elementy dobrane w etapie I zostały umieszczone w obudowie PCV o wymiarach 150x110x70mm (Rys.7). Na rysunku tym zaznaczono w kolorze czarnym strefę napięcia sieciowego, styki przekaźników oraz transformator zasilający. Kolorem czerwonym oznaczono zasilanie wiatraka klimatyzacji, oraz układ sterowania MOSFETem - sygnał wysoki z arduino poprzez rezystor wprowadza mosfet w stan przewodzenia, a gdy sygnał ten zmieni stan na niski, zastosowany rezystor między bramkę a źródło, polaryzuje mosfet zaporowo. Kolorem zielonym zaznaczono cały mikrokontroler wraz ze stabilizatorem napięcia oraz moduł do komunikacji bluetooth. Na żółto jest oznaczony czujnik DHT. Na pokrywie (Rys.8) znajduje się wyświetlacz lcd oraz trzy przyciski monostabilne.
|
|
Wyniki
W efekcie powstało urządzenie (Rys.9) które umożliwia sterować trzema odbiornikami elektrycznymi poprzez aplikację (Rys.10). Pierwszy jest zapisany jako „Światło Kuchnia”, drugi „Światło Salon”, dla odzwierciedlenia użyłem tutaj żarówek jako źródła światła. Załączane są przekaźnikiem przez którego styki może płynąć maksymalny prąd 10A przy napięciu 250V AC. Co pozwala na wpięcie innego odbiornika o mocy do 250W. Trzeci zapisany jako „Klimatyzacja” sterowany tranzystorem unipolarnym MOSFET z kanałem typu N. Podpięty jest tu silniczek elektryczny z wiatrakiem, zasilany napięciem 6V.
|
Urządzenie sterujace w stanie pracy pobiera około 40mA, przy załączaniu przekaźników i komunikacji bluetooth prąd wzrasta, lecz do jego zasilenia wystarczył transformator mocy 2W. Napięcie po stronie wtórnej o wartości 8V filtrowane jest poprzez prostownik dwupołówkowy i kondensator wygładzający, następnie przez stabilizator. Uzyskałem w ten sposób napięcie stałe wartosci bliskiej 5V, którym zasilany jest mikrokontroler i jego moduły.
|
Po włączeniu zasilania, wyświetla się ekran startowy (Rys.11) Arduino komunikuje się z telefonem poprzez bluetooth o zasięgu do 10 metrów, po wcisnięciu przycisku w aplikacji, podświetla się ona na odpowiedni kolor, wysyła dane do arduino, a ten wykonuję zadaną operację, załączając urzadzenie (Rys.12) (Rys.13) lub mierząc temperaturę (Rys.14). Gdy w przeciągu 20 sekund arduino nie otrzyma
żadnych danych z aplikacji, wyświetla napis „Miłego Dnia” oraz aktualną temperaturę (Rys.15), z aktualizacją co kilka sekund. Poprzez przyciski na obudowie także można sterować stanem urządzeń (Rys.16).
W miarę potrzeb można podpiąć większą ilość przekaźników i MOSFETów bądź czujników temperatury i wilgotności, dodając kolejne linijki kodu i przyciski w aplikacji. Tym sposobem zwykły smartfon może zamienic się w głowny łącznik, pośrednio sterując wszystkimi urządzeniami w domu lub mieszkaniu i kontrolując ich parametry.
Jest to projekt przyszłosciowy, znajdzie on zastosowanie w każdym mieszkaniu, domu, pomieszczeniu. Odbiorcą może być każdy, posiadający smartfon lub tablet. Już teraz montowane są systemy inteligentnych domów, lecz ceny ich wahają się w tysiącach złotych. A ten projekt udało się zakończyć nie przekraczając kwoty do 100zł. Sterowanie elektrycznymi urządzeniami domowymi ułatwi funkcjonowanie, gdy podczas pracy będziemy potrzebowali załączyć oświetlenie, bądź ochłodzić/ogrzać miejsce pracy, nie ruszając się z miejsca można zrealizować te czynności. Przykładów zastosowania jest wiele.
Działanie projektu na filmie: https://youtu.be/nZjgMjTdOis
Źródła
- App Inventor http://appinventor.mit.edu/explore/
- TroykaDHT, autor Igor Dementiev; https://www.arduinolibraries.info/libraries/troyka-dht
- LiquidCrystal I2C, autor Frank de Brabander; https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c
- Wire, autor Nicholas Zambetti; https://www.arduino.cc/en/Reference/Wire
Obciążenie przekaźnika to P=U*I = 2300W
O kurcze, masz rację, banalny błąd przy obliczeniu, machnąłem się o jedno zero, dzięki za czujność :)
Robiłem coś podobnego, ale na nodemcu. Zaleta jest taka, że działa po wifi. Moduł łączy się ruterem domowym i jest do niego dostęp z całego świata.
Swoją drogą pytanie odnośnie nodemcu, jeśli ktoś jest w temacie. Teraz mam podłączone dwa moduły przekaźnikowe i dwa przyciski chwilowe oraz dwie diody ws2812b. Diody są podłączone do jednego pina i każda sygnalizuje stan jednego z przekaźników. Przyciski chwilowe sterują przekaźnikami. Czyli wciśnięcie jednego przycisku przełącza przypisany do niego przekaźnik i sygnalizuje diodą jego stan. Chciałbym mój projekt jakoś uogólnić i umożliwić dodawanie nowych modułów przekaźnikowych w dowolnym momencie. Ktoś wie ile mogę podłączyć przekaźników i ile przycisków? Przycisków ma być tyle co przekaźników, żeby każdy przycisk sterował innym przekaźnikiem. Jeden pin musi zostać na diodę.
Super pomysł i ciekawe wykonanie.
Jestem strasznym entuzjastą tematów smart dom. Niestety… na wynajętym więc ciężko cudze uczynić smart, ale kiedyś dopnę swego. Osobiście bardziej preferuje rozwiązania smart stawiane na systemach androidopodobnych .
Jeśli ktoś z was szuka ciekawej i przydatnej wiedzy ze świata IT to zapraszam też do siebie :)
https://www.cyberbay.pl
Dzięki, wpadnę :)
Ja teraz wskoczyłem na RPI 4 :)
Jest moc :D