Spisu treści:

Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 kroków (ze zdjęciami)
Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 kroków (ze zdjęciami)

Wideo: Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 kroków (ze zdjęciami)

Wideo: Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 kroków (ze zdjęciami)
Wideo: Part 1 - The Last of the Plainsmen Audiobook by Zane Grey (Chs 01-05) 2024, Listopad
Anonim
Crawl Space Monitor (aka: Nigdy więcej zamrożonych rur!!)
Crawl Space Monitor (aka: Nigdy więcej zamrożonych rur!!)

Woda do mojego domu płynie z mojej studni przez nieogrzewaną przestrzeń pełzającą. Przez tę przestrzeń przebiega również cała instalacja wodno-kanalizacyjna w kuchni i łazience. (Instalacja wodociągowa była w połowie lat 70. refleksją nad tym domem!) Używałem lamp grzewczych na wtyczkach termostatycznych „zbiornika zapasowego”, aby utrzymać temperaturę powyżej zera. Było kilka poważnych problemów z tym układem: 1 - Brak widoczności. Pierwszą oznaką przepalonych żarówek są zamarznięte rury!2 - Czasami wtyczki nie odcinały się. Niemiłe niespodzianki sprawiły nam rachunki za prąd.3 – Bez szczegółowości. Trzymałem 3 żarówki „online” (łącznie 750 watów) i było to rozwiązanie typu wszystko albo nic. (2 żarówki nie zawsze sobie z tym poradzą). Przyznam od razu, że bezwstydnie wyłowiłem i poprawiłem przykładowy kod z projektów innych ludzi, aby to zadziałało, chociaż ostatecznie napisałem prawie wszystko od nowa. Początkowo zbudowałem tę „stację pogodową WiFi”, którą znalazłem na Adafruit.com i zmodyfikował go. Zamiast aktualizować witrynę internetową, korzystałem z usług Amazon Web Services, aby wysyłać mi SMS-y z aktualizacjami statusu. Dodałem też sterowanie niektórymi przekaźnikami 110V (https://www.adafruit.com/products/268). Wtedy stałem się „inteligentny” i postanowiłem go „wzmocnić” – cóż – coś zwarło się i dostałem obłoczek magicznego niebieskiego dymu. Wszystko się usmażyło… Nie mając kolejnego przełomu Wi-Fi CC3000, tym razem zrobiłem rzeczy inaczej. Zbudowałem go do interaktywnego monitorowania przez interfejs szeregowy, a następnie dodałem interfejs EZ-Link Bluetooth FTDI. (Koniec z przeciąganiem laptopa pod dom w celu aktualizacji oprogramowania!!!) Zbudowałem również interfejs Pythona, który łączy się z urządzeniem przez Bluetooth, regularnie wysyła zapytania i wyświetla informacje o stanie na moim Macu. (Istnieje również „interfejs człowieka”, do którego można uzyskać dostęp za pomocą dowolnego oprogramowania do emulacji terminala.) W wyniku przepisania i usunięcia całego kodu WiFi i RTC projekt skurczył się z ponad 29 tys. do zaledwie 10 tys. Poprawiła również niezawodność do tego stopnia, że watchdog sprzętowy w ogóle się nie uruchomił w ciągu kilku tygodni, w których działał i poprawiałem.

17.02.16 Aktualizacja/uwaga: Próbując uzyskać właściwe formatowanie części kodu (zwłaszcza wcięcia kodu Pythona), sprawy zmieniły się z brzydkich na bezużyteczne. Jestem pewien, że problem jest gdzieś po mojej stronie i postaram się to rozgryźć. Do tego czasu dodawałem linki do plików kodu poprzez DropBox. Powinny być dostępne dla każdego. Jeśli nie, daj mi znać, abym mógł je do Ciebie dostarczyć w inny sposób!

Krok 1: Problemy do rozwiązania

System musiał wykonać dla mnie następujące rzeczy: 1 - monitorować temperaturę w przestrzeni. 2 - w razie potrzeby włączać lampy grzewcze, aby utrzymać temperaturę powyżej zera. 3 - gdy nie działają, okresowo testuj żarówki i daj mi widoczność ich stanu.4 - daj mi widoczność temperatury i stanu systemu, w tym: - czy system działa? - jaka jest temperatura TERAZ? - jaka jest najniższa temperatura? - ile żarówek się paliło? - ile żarówek testuje dobrze? - jaki jest mój całkowity czas w "minutach świetlnych" (czyli "czasie świecenia")?5 - wykonaj wszystkie powyższe czynności bez konieczności czołgania się pod domem!!!Zdecydowałem, że najłatwiejszym sposobem sprawdzenia działania żarówki jest użycie czujnik światła. Inne problemy, które chciałem rozwiązać, to czas cyklu na światłach. Za wolno i spalam niepotrzebny prąd. Zbyt szybko i ryzykuję wypalenie ich przez wszystkie włączanie i wyłączanie z powiązanym nagrzewaniem i ochładzaniem.

Krok 2: Sprzęt

Sprzęt
Sprzęt

2 250-watowe lampy grzewcze1 500-watowa lampa robocza (jedna z moich lamp grzewczych zniknęła, więc jest to podstawka)Czujnik temperatury/wilgotności Arduino UnoDHT22Czujnik światła GA1A12S202Przekaźniki PowerSwitch 110V Interfejs szeregowy i programator Bluefruit EZ-LinkZaawansowana technologicznie obudowa (wanna Rubbermaid wielkości kanapki)Płyta stykowa o rozmiarze 1/2 dławika kablowegoPłytka akrylowa do płytki stykowej i ArduinoPosortowane przewody połączeniowe. 5-gniazdowy „listwa warsztatowa” Coleman Użyłem również Adafruit Trinket jako watchdoga sprzętowego, ale okazał się on niepotrzebny (oczywiście jinx!) i ja napisałem osobną instrukcję na ten temat, więc nie będę tego tutaj powtarzał. Warkocz Colemana był miłym znaleziskiem, ponieważ dał mi 4 gniazda dla moich lamp grzewczych PLUS gniazdo dla zasilacza Arduino bez żadnych dodatkowych rozgałęźników lub listew zasilających. Oceniany na pełne 15 amperów z przełącznikiem i wewnętrznym wyłącznikiem, mógł obsłużyć wszystko, co mogłem wyciągnąć przez jedno gniazdko.

Krok 3: Podejście

Podczas gdy system jest zbudowany tak, aby siedzieć i czekać i robić pewne rzeczy stosunkowo wolno, to czego nie chciałem robić, to budować system, w którym kontroler siedział w cyklach delay() i nie odpowiadał. Chciałem również mieć możliwość zmiany parametrów konfiguracyjnych tak blisko, jak to tylko możliwe w locie – na pewno nie w sposób, który wymagałby ponownego pisania kodu lub wykonywania masowych operacji wyszukiwania i zastępowania na źródle. znalazłem najlepsze artykuły Billa Earla na temat „Multitasking the Arduino” (zacznij tutaj: https://learn.adafruit.com/multi-tasking-the-arduino-part-1) i zacząłem się zajmować. Tworząc klasy "timer" i "heater" mogłem wykonać wszystkie funkcje czasowe, jakie chciałem, bez użycia delay() (z kilkoma wyjątkami) i skonfigurować żarówki ("heater") za pomocą jednej linijki kodu dla każdego jeden.

Krok 4: Okablowanie

Okablowanie
Okablowanie
Okablowanie
Okablowanie

Schemat Fritzing nie obejmuje Bluefruit EZ-LinkArduino 5V i uziemienia do szyny stykowej DHT22 pin 1 do szyny 5VDHT22 pin 2 do pinu Arduino 7DHT22 pin 4 do szyny uziemiającej Rezystor 10K między pinami DHT22 1 i 2GA1A12S202 VCC do szyny 5V GA1A12S202 GND pin do masy busGA1A12S202 Pin OUT do Arduino A0 Pin Arduino 3V do Arduino AREF pinRelay Przewody uziemienia do magistrali uziemienia Przewód zasilający Relay 1 do Arduino Przewód zasilający A1Relay 2 do Arduino Przewód zasilający A2Relay 3 do Arduino Przewód zasilający A3Relay 4 do Arduino A4 Większość z tych połączeń można dowolnie zmieniać. Jedynym, który jest krytyczny, jest to, że przewód OUT czujnika światła musi iść do pinu analogowego. Ten pin-out będzie działał z moim kodem tak, jak został napisany. Jeśli używasz sprzętowego watchdoga, zobaczysz, że mój kod wysyła bicie serca na pin 2 Arduino.

Krok 5: Kod Arduino, główny szkic

CrawlSpace_monitor.ino

Krok 6: Uwagi dotyczące Kodeksu

Poniższe wiersze kodu tworzą instancje grzałki i definiują parametry pracy::// Heater(relayPin, onTemp(f), offTemp(f), minMinutes, testInterval(minutes), luxDelta)Heater heater1 = Heater(A1, 38, 43, 20, 1440, 5); Grzałka2 = Grzałka(A2, 36, 41, 20, 1440, 5); Grzałka3 = Grzałka(A3, 34, 39, 20, 1440, 5); Grzałka4 = Grzałka (A4, 32, 37, 20, 1440, 5);(I tak, zdefiniowałem wszystkie 4 grzałki mimo, że w tej chwili uruchamiam tylko 3. Musiałbym jeszcze zdobyć inny przekaźnik, ale potem dołożenie 4 grzałki by być tak proste, jak podłączenie go.) Zmieniam ich temperatury wyzwalania, zaczynając od 38 stopni dla pierwszego i kończąc na 32 dla nieistniejącego czwartego. Jedną z rzeczy, które odkryłem, kiedy po raz pierwszy zacząłem to łączyć, było to, że musiałem podać zakres temperatury, a także zdefiniować minimalny „czas spalania”, lub włączałem i wyłączałem światła jak szalony. Tutaj podaję każdemu z nich rozpiętość 5 stopni oraz minimalny czas palenia 20 minut. Ustawiłem interwał testu na 24 godziny i ustawiłem 5 luksów jako minimalny odczyt światła, którego potrzebowałem, aby stwierdzić, że żarówka nadal działa. Prawie wszystko, co wymaga konfiguracji, znajduje się w tych 4 wierszach kodu.

Krok 7: Kod Arduino, klasy

Stworzyłem 3 zajęcia do tego projektu. Były to „timer”, „grzałka” i „akumulator”. Przy odrobinie namysłu powinienem być w stanie złożyć akumulator w timer, ale jeszcze tego nie zrobiłem. Tutaj są w całości:heater.h

timer.h

akumulator.h

Krok 8: Monitorowanie systemu

Monitorowanie systemu
Monitorowanie systemu

Stworzyłem pojedynczy interfejs do dwóch oddzielnych monitorów. Jest to sesja interaktywna za pośrednictwem konsoli szeregowej. W moim przypadku używam Bluefruit EZ-Link, dzięki czemu mogę uzyskać dostęp do systemu bez pełzania pod domem lub próbowania wciągnięcia kabla USB między legary podłogowe! Dodatkową zaletą EZ-Link jest to, że mogę przesłać nowy kod programu do Arduino również przez Bluetooth. Dostęp do interfejsu „ludzkiego” (Bluetooth lub fizyczny kabel) można uzyskać za pomocą dowolnego oprogramowania do emulacji terminala, w tym portu szeregowego Arduino IDE monitor. Przy pierwszym połączeniu nie ma odpowiedzi, ale naciśnięcie klawisza „u” (dla aktualizacji) i t (dla testu) spowoduje wyświetlenie danych wyjściowych pokazanych na zrzucie ekranu. „m” („monitor”) i „s” („kontrola sys”) dają te same dane, ale w znacznie mniej czytelnym formacie. Są one przeznaczone do „zeskrobania” przez inny program w celu automatycznego wyświetlenia. Stworzyłem skrypt Pythona, który właśnie to robi. Każdy inny klucz zbiera wyświetlony komunikat o błędzie. Zobaczysz wartość „czasu świecenia” – pomyśl o tym jako „minuty żarówki” – 1 żarówka na 10 minut = 10 minut, 3 żarówki na 10 minut = 30 minut.

Krok 9: Skrypt Pythona

Skrypt Pythona
Skrypt Pythona

crawlspace_gui.py

Krok 10: Jeszcze do zrobienia…

Może nie jest ładna ani idealna, ale jest skuteczna i okazuje się, że jest niezawodna. I nie miałem jeszcze żadnych problemów z zamarzniętą rurą tej zimy!!! Mam listę rzeczy do zrobienia. Oczywiście, teraz, kiedy to działa, mogę, ale nie musi, przejść do większości z tych elementów: Uruchom Bluetooth na jednym z moich Raspberry Pi, abym mógł utworzyć dedykowany monitor. Dowiedz się więcej Pythona - a następnie wyczyść Pythona berło. Ta separacja elementów nie jest celowa i nie rozumiem, dlaczego tam jest. Dodaj interfejs do czegoś takiego jak usługa IO Adafruit, abym mógł monitorować go z dowolnego miejsca. Dodaj alerty SMS. Mini czy Trinket Pro?), tańsze przekaźniki i lepsze opakowanie. Zdejmij go z płytki stykowej i na płytkę „Perma Proto”. być może nawet spalić czas dla poszczególnych żarówek. Kiedy je zrobię, wrócę i zaktualizuję ten Instruktaż.

Krok 11: Aktualizacja 3/16, „stała” kompilacja

Aktualizacja 16.03.,
Aktualizacja 16.03.,
Aktualizacja 16.03.,
Aktualizacja 16.03.,
Aktualizacja 16.03.,
Aktualizacja 16.03.,

Dostając dobrą przerwę w chłodne dni, odzyskałem urządzenie i przeniosłem je do mniejszego kontrolera (miałem zamiar użyć Trinket Pro, ale miałem Adafruit Metro Mini siedzący w pobliżu nieodebrany przez żaden inny projekt), przylutowałem go na płytkę Perma-Proto i umieść to wszystko w lepszym przypadku. Opierając się na tym, jak niezawodny był, nie umieściłem na nim z powrotem watchdoga sprzętowego. Nadal używam tylko 3 lamp/przekaźników, w których system obsłuży 4. Moduł Bluetooth jest na lutowanym gnieździe, więc można go usunąć, jeśli potrzebuję go gdzie indziej. Nie było żadnych zmian w kodzie koniecznych do przejścia na nowy kontroler - prosta rekompilacja i ładowanie uruchomiły mnie w ciągu kilku minut. (Metro Mini ma identyczne wyprowadzenia jak Arduino Uno i jest również procesorem ATMega328.)

Krok 12: Aktualizacja 12.01.2018 – Witamy w IoT

System działał dla nas bezbłędnie. Po dwóch raczej surowych zimach ŻADNYCH zamarzniętych rur. W rzeczywistości system był w stanie utrzymać rury bez spalania więcej niż 2 żarówek. Posiadanie trzeciej żarówki online było dobrym ubezpieczeniem, ale do tej pory nigdy jej nie potrzebowaliśmy.

W trzecim roku systemu moduł Bluetooth uległ awarii. Zbudowaliśmy również nowy dom, więc system monitoringu znajduje się daleko poza zasięgiem Bluetootha. (Stary dom stoi na chwilę, ale nie na zawsze.) W międzyczasie dużo robiłem z procesorem obsługującym WiFi ESP8266; zarówno w formacie Adafruit Feather, jak i w formacie open-source „NodeMCU”. NodeMCU można ogólnie znaleźć na Amazon za około 5 USD – znacznie mniej, jeśli kupujesz hurtowo i/lub od kogoś takiego jak AliExpress.

Ta nowa wersja utrzymuje interfejs szeregowy, więc nadal może być używana z modułem Bluetooth lub bezpośrednim połączeniem szeregowym USB i poprzednim skryptem Pythona, jednak nowa wersja ma interfejs strony internetowej. Jak napisano, zawiera następującą funkcję:

Menedżer sieci Wi-Fi, aby wyeliminować kodowanie danych uwierzytelniających Wi-Fi.

Możliwość aktualizacji oprogramowania układowego bezprzewodowo za pomocą Arduino IDE (o ile jesteś w tej samej sieci Wi-Fi - pamiętaj, że po wykonaniu wgrania USB do urządzenia, konieczne jest zresetowanie, zanim aktualizacje OTA będą działać). PROSZĘ zmień hasło OTA w linii 6, aby było unikalne dla Ciebie !!

Strona internetowa, która wyświetla te same dane co skrypt Pythona, z automatycznym odświeżaniem co minutę. Nie umieściłem żadnych zabezpieczeń na stronie, ponieważ jest tylko do wyświetlania.

Nowy kod znajdziesz tutaj. Zwróć uwagę, że nazwy pinów zmieniają się podczas przenoszenia do NodeMCU.

Zalecana: