DIY Inteligentne czujniki domowe z Arduino, MySensors i OpenHAB

  • Lesley Fowler
  • 0
  • 1299
  • 285
Reklama

Inteligentne czujniki domowe kosztują absurdalnie dużo pieniędzy. Od 60 do 100 USD tylko za detektor ruchu lub czujnik wilgotności, okablowanie całego domu staje się domeną osób z głupimi kwotami dochodów do dyspozycji. Zbudujmy własne.

Na szczęście ciężka praca została już wykonana przez dobrych ludzi za MySensors.org. Dzisiaj pokażę ci, jak korzystać ze struktury MySensors, aby stworzyć tani zestaw inteligentnych czujników domowych, które mogą zasilać instalację OpenHAB (zobacz nasz przewodnik Pierwsze kroki z OpenHAB na Raspberry Pi) Pierwsze kroki z OpenHAB Home Automation na Raspberry Pi Rozpoczęcie pracy z OpenHAB Home Automation na Raspberry Pi OpenHAB to dojrzała platforma automatyki domowej open source, która działa na różnych urządzeniach i jest niezależna od protokołu, co oznacza, że ​​może łączyć się z prawie każdym sprzętem automatyki domowej na rynku. . Zakładam, że masz już działający serwer MQTT i rozumiesz podstawy formatu wiadomości MQTT; jeśli nie, zapoznaj się ze wskazówkami dotyczącymi przewodnika OpenHAB, który zawiera instrukcje dotyczące instalowania serwera MQTT Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, Zasady i tworzenie wykresów Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, Zasady i tworzenie wykresów OpenHAB , oprogramowanie do automatyzacji domu o otwartym kodzie źródłowym, znacznie przewyższa możliwości innych systemów automatyki domowej na rynku - ale konfiguracja nie jest łatwa. W rzeczywistości może być wręcz frustrujące. .

Chociaż będę zajmował się w szczególności przekazywaniem danych MySensors z sieci Arduinos, przy użyciu MQTT, do instalacji OpenHAB, powinienem zwrócić uwagę, że struktura MySensors może zasilać wiele różnych sterowników automatyki domowej. Przedstawiłem to tutaj jako kompletne rozwiązanie, które działa dla mnie, ale proszę sprawdź stronę MySensors, ponieważ może się okazać, że pasuje również do twojego podobnego celu, ale używając nieco innego sprzętu lub innego protokołu przesyłania wiadomości. Jest niezwykle wszechstronny.

Koszt sprzętu dla mojej konfiguracji wynosi mniej niż 10 USD na węzeł (nieco więcej dla bramki), ale dodatkowe czujniki i elementy wykonawcze można dodać za bardzo niewiele (na przykład czujnik wilgotności i temperatury DHT11 wynosi około 1 USD; przekaźnik wysokiego napięcia wynosi około 3 USD).

Co robimy

Podstawową ideą jest to, że zamiast dodawać do naszej istniejącej zatłoczonej sieci lokalnej za pomocą niewiarygodnego Wi-Fi lub drogich osłon Ethernet, tworzymy całkowicie oddzielną sieć z możliwością kratowania tylko dla Arduinos; następnie połącz go z siecią lokalną za pomocą pojedynczego węzła bramy, który ma zarówno połączenie Ethernet, jak i połączenie radiowe z innymi Arduinos. Tworzymy więc kilka węzłów czujnikowych, które zbierają dane; oraz węzeł bramy, który przekazuje te dane do serwera OpenHAB.

Ponownie, to działa dla mnie, ponieważ mój odbiór Wi-Fi jest tak przerażający i nie chcę zaśmiecać go niepotrzebnymi danymi. Jeśli jesteś zadowolony z Wi-Fi, skorzystaj z taniej Kompatybilny z Arduino ESP8266 Poznaj Arduino Killer: ESP8266 Poznaj Arduino Killer: ESP8266 Co jeśli powiem ci, że jest płyta deweloperska kompatybilna z Arduino z wbudowanym Wi -Fi za mniej niż 10 USD? Cóż, jest. z wbudowanymi kartami Wi-Fi - MySensors też je obsługuje.

Ważna uwaga dla użytkowników El Capitan i klonów Arduino: Apple udało się złamać sterowniki szeregowe używane do komunikacji z wieloma płytami klonowymi Arduino w najnowszej wersji El Capitan dzięki nowym środkom bezpieczeństwa. Aby sprawdzić, czy masz na to wpływ, spójrz na swoją płytkę i układ najbliżej portu USB. Jeśli mówi CH340, masz na to wpływ. Postępuj zgodnie z instrukcjami tutaj, aby wyłączyć podpisywanie tekstów sterowników, zainstaluj ponownie sterowniki szeregowe CH340.

Potrzebne komponenty

Do bramy potrzebujesz:

  • Arduino Uno
  • Ethernet Shield (oparty na W5100)
  • Moduł NRF24L01 - korzystałem z +PA + LNA wersje w całym zakresie, które mają zwiększony zasięg do 1 km. Okablowanie jest takie samo, jak wybierzesz.

Dla każdego węzła czujnika:

  • Arduino Uno
  • Moduł NRF24L01
  • Czujniki (na początek sugerowałbym moduł temperatury i wilgotności DHT11 lub DHT22)

Dodatkowe / opcjonalne:

  • Kondensatory 10 uF, po jednym dla każdego modułu RF, który masz (link jest dla paczki 50!)
  • Zasilacz z wyjściami 5 V i 3,3 V (YwRobot MB102 działa dobrze i kosztuje 1 USD) - wymagane, jeśli używasz klon Arduino. Będziesz także potrzebował zasilacza 9-12 V DC.
  • Prototypowanie osłon lub krótkich zworek męsko-żeńskich.

Praca z modułami NRF24L01

Zacznijmy od modułów NRF24L01, ponieważ są one najbardziej złożoną częścią projektu. Wybrałem ich droższą, dłuższą wersję: technicznie znaną jako NRF24L01 + PA + LNA. Są one wyposażone w obwód wzmacniający sygnał i połączenie antenowe, chociaż sugeruję, aby najpierw wypróbować tańszą wersję anteny modułów, jeśli masz normalny dom ze zwykłymi ścianami, a nie ścianą z litego kamienia o grubości metra, która Ja robię. Twierdzony zasięg wynosi około kilometra, co więcej niż wystarcza dla mnie do szopy w ogrodzie.

Jednak te rzeczy są naprawdę trudny do pracy; jeśli pójdziesz dalej i podłączysz wszystko bez uprzedniego przeczytania tych wskazówek, będziesz rozczarowany.

  • Moduł potrzebuje 3,3 V mocy wejściowej na pin VCC - nie 5v. Jeśli włożysz 5v, usmażysz go.
  • Przylutuj kondensator 10uF na zaciskach VCC / GND. Ciągła szara linia na kondensatorze wskazuje stronę ujemną / GND.
  • Używaj krótkich kabli skokowych wysokiej jakości; lub jeszcze lepiej, przylutuj je bezpośrednio do ekranu prototypowania, aby utrzymać minimalną długość kabla i solidne połączenia.
  • Jeśli używasz klonu Arduino, regulator napięcia nie zapewnia wystarczającej ilości energii na pinie 3,3 V - musisz użyć zewnętrznej płyty zasilacza (połączonej powyżej), dostępnej za około 1 USD za sztukę. Zapewniają one stabilną 3.3v. Jeśli używasz oryginalny Marka Arduino Uno, nie wydaje się to problemem.

Zdecydowanie sugeruję, aby najpierw wykonać podstawowe testy, aby ustalić, czy działa radio. Podłącz dwa radia, jak pokazano na stronie MySensors. Nie ma znaczenia, że ​​ich schemat pokazuje tablice Arduino Micro - używane są te same numery pinów. Zauważ, że schemat pokazuje NRF24L01 z Top; faktycznie będziesz podłączał rzeczy od spodu. Mentalnie dostosuj odpowiednio. Zignoruj ​​szary PIN IRQ, nie jest on aktualnie używany. W podsumowaniu:

  • VCC przechodzi do 3,3 V na zewnętrznym zasilaczu
  • GND idzie na wspólną szynę uziemiającą
  • CE do pinu 9
  • CSN / CS do pinu 10
  • MOSI do pinu 11
  • MISO do pinu 12
  • SCK do pinu 13

Do przetestowania potrzebne będą dwa węzły w pełni okablowane. Pobierz bibliotekę RF24 i załaduj najprostszy Pierwsze kroki przykład. Włącz oba moduły, ale pozostaw jeden podłączony przez USB i otwórz konsolę szeregową. Rodzaj “T.” i wyślij, aby przełączyć go w tryb nadawania, w którym to momencie powinieneś otrzymać komunikaty debugujące, mówiąc, że pomyślnie pinguje komunikat do drugiego węzła.

Budowanie bramy klienta MySensors MQTT

Ok, teraz, kiedy wiemy, że radiotelefony RF24 są podłączone i działają poprawnie, śmiało i pobierz gałąź rozwoju pakietu MySensors Arduino. Ten samouczek został napisany w wersji 1.5, ale powinien być w porządku również z późniejszymi wersjami. Używamy gałęzi programistycznej, ponieważ w chwili pisania tego tekstu MQTT klient bramka nie jest jeszcze częścią pakietu głównego.

Chociaż w gałęzi master dostępny jest MQTTGateway, działa on również jako serwer, czego nie chcemy, ponieważ mamy już stabilny serwer MQTT działający na Raspberry Pi. Chcemy tylko przesłać na to dane MySensors. Ponownie, jeśli to nie jest to, czego chcesz - jeśli w ogóle nie chcesz używać MQTT - spójrz na EthernetGateway lub SerialGateway, które są również kompatybilne z OpenHAB.

Warto zauważyć, że pakiet do pobrania zawiera nie tylko niezbędne pliki MySensors, ale także kompatybilne biblioteki potrzebne dla każdego możliwego czujnika. Aby uniknąć konfliktów, proponuję po prostu wykonać kopię zapasową całego bieżącego folderu bibliotek i zastąpić to wszystko tym z pakietu pobierania.

Okablowanie bramy jest trochę inne; po uzyskaniu osłony Ethernet użyj następujących styków modułu radiowego:

  • CE do pinu 5
  • CSN do pinu 6
  • SCK do pinu A0
  • MOSI do pinu A1
  • MISO do pinu A2

Musisz także włączyć # zdefiniować SOFTSPI linia w biblioteki / mySensors / MyConfig.h plik. Zrób to, usuwając //, aby go odkomentować, jest na linii 309 na mojej.

Musimy to zrobić, ponieważ zarówno moduł radiowy, jak i osłona sieci korzystają z SPI i są one niezgodne; więc po prostu przestawiamy moduł radiowy SPI na inne piny i zamiast tego przeprowadzamy komunikację SPI w oprogramowaniu (stąd, miękki SPI).

Załaduj MySensors / GatewayW5100MQTTClient naszkicować. Jeśli nie widzisz tego w menu MySensors, nie masz gałąź rozwoju zainstalowany. Skorzystaj z linku podanego powyżej, aby ponownie pobrać całą bibliotekę.

Musisz zdefiniować statyczny adres IP kontrolera, adres IP routera sieciowego i podsieci oraz adres IP istniejącego serwera MQTT. Jeśli chcesz, możesz również zmodyfikować prefiksy tematu. Prześlij i podłącz to urządzenie do sieci. Krótko sprawdź konsolę szeregową pod kątem rażących błędów, takich jak niemożność połączenia się z serwerem MQTT, w przeciwnym razie odłóż go na bok (ale pozostaw go włączony).

Budowanie węzłów czujnika

Po pierwsze, skomentuj to # zdefiniować SOFTSPI linia w MyConfig.h plik ponownie, umieszczając // z powrotem na początku. Jest potrzebny tylko dla bramy - używamy standardowego okablowania NRF24L01 dla węzłów czujnikowych, które używają sprzętowego SPI. Jeśli potrzebujesz przypomnienia:

  • VCC przechodzi do 3,3 V na zewnętrznym zasilaczu (lub na samym Arduino, jeśli jest to oryginał, a nie klon)
  • GND idzie na wspólną szynę uziemiającą
  • CE do pinu 9
  • CSN / CS do pinu 10
  • MOSI do pinu 11
  • MISO do pinu 12
  • SCK do pinu 13

Następnie podłącz swój wybór czujnika; Do testowania używam czujnika wilgotności i temperatury DHT11, ale jeśli przewiniesz listę czujników i elementów wykonawczych na pasku bocznym strony MySensors, znajdziesz ogromny wybór innych opcji: drzwi, miernik deszczu, światło, ruch, a nawet RFID - i ładuje więcej. Możesz zobaczyć, że dodałem także przekaźnik do węzła przedstawionego poniżej, ale więcej o tym później.

Na koniec załaduj Czujnik wilgotności przykład z menu MySensors i dodaj następujący wiersz bezpośrednio po komentarzach.

# zdefiniować MY_NODE_ID 2

Ponieważ używamy specjalnej wersji kontrolera, który po prostu przesyła rzeczy na nasz własny serwer MQTT, nie ma on standardowej funkcji kontrolera, która automatycznie przypisywałaby identyfikatory węzłów do każdego nowego węzła. Zamiast tego będziemy za każdym razem ręcznie go definiować. Zanotuj gdzieś tę liczbę dla własnych rekordów i zmień ją dla każdego węzła.

Włącz także wyjście debugowania:

# zdefiniować MY_DEBUG

Na koniec sprawdź, czy pin danych czujnika DHT11 jest prawidłowy.

# zdefiniować HUMIDITY_SENSOR_DIGITAL_PIN 7

Następnie prześlij!

Warto otworzyć konsolę szeregową, aby zobaczyć. Kluczową kwestią do zobaczenia jest st =, który jest statusem wiadomości. st = niepowodzenie oznacza, że ​​wiadomość nie została wysłana. Możliwe, że nie zdefiniowałeś unikalnego identyfikatora węzła lub twoja brama jest w trybie offline. Udawałem te błędy, po prostu odłączając bramę:

Jeśli wszystko działa, powinieneś zacząć widzieć odczyty danych przychodzące na twój serwer MQTT. Umieszczanie ich w OpenHAB jest poza zakresem tego samouczka, ale zostało omówione w części 2 przewodnika OpenHAB Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, Reguły i wykresy Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, Zasady i tworzenie wykresów OpenHAB, oprogramowanie do automatyzacji domu o otwartym kodzie źródłowym znacznie przewyższa możliwości innych dostępnych na rynku systemów automatyki domowej - ale ich konfiguracja nie jest łatwa. W rzeczywistości może być wręcz frustrujące. abyś mógł tam wrócić.

Łączenie kodu czujnika

Chociaż uruchomienie i uruchomienie pojedynczego węzła czujnika jest stosunkowo proste, staje się nieco trudniejsze, gdy chcesz dodać wiele czujników do każdego węzła. Zasadniczo zamierzasz połączyć fragmenty kodu z dwóch różnych przykładów. Najłatwiej to pokazać na przykładzie wideo! Tutaj łączę nasz podstawowy czujnik wilgotności z przekaźnikiem.

Kompletny kod czujnika wilgotności i przekaźnika można znaleźć tutaj, który został już zmodyfikowany za pomocą nieblokującej pętli, jak wspomniałem na filmie. Aby dowiedzieć się więcej na temat struktury poleceń MQTT potrzebnej do aktywacji przekaźnika, sprawdź Serial API - ale wystarczy powiedzieć, że następujący kanał kontroluje pierwszy przekaźnik w podanym przeze mnie kodzie (z treścią komunikatu 0 lub 1):

mysensors-in / 9/1/1/0/2

Twoim jedynym ograniczeniem jest teraz ilość pamięci w Arduino, i powiem to - najbardziej niezawodnymi czujnikami w moim inteligentnym domu nie są komercyjne moduły Z-Wave, które kosztują 80 USD, ale niestandardowe moduły MySensors.

Skończę to dzisiaj, ale jeśli masz problemy, możesz zapytać w komentarzach lub na bardzo aktywnych forach użytkowników MySensors. Czy zbudujesz własne tanie węzły czujników? Jak nadchodzi twój inteligentny dom?




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.