Sommario:

Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 passaggi (con immagini)
Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 passaggi (con immagini)

Video: Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 passaggi (con immagini)

Video: Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 passaggi (con immagini)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Dicembre
Anonim
Crawl Space Monitor (aka: No More Frozen Pipes!!)
Crawl Space Monitor (aka: No More Frozen Pipes!!)

L'acqua a casa mia proviene dal mio pozzo attraverso un vespaio non riscaldato. Anche tutti gli impianti idraulici della cucina e del bagno attraversano questo spazio. (L'impianto idraulico interno è stato un ripensamento a metà degli anni '70 in questa casa!) Ho usato lampade di calore su prese termostatiche "serbatoi di scorta" per mantenere una temperatura sopra lo zero. Ci sono stati un paio di problemi significativi con questa disposizione: 1 - Nessuna visibilità. La prima indicazione di lampadine bruciate sono i tubi congelati!2 - A volte le spine non si chiudevano. Ciò ha creato brutte sorprese per la bolletta elettrica.3 - Nessuna granularità. Ho tenuto 3 lampadine "in linea" (750 watt in totale) ed è stata una soluzione tutto o niente. (2 lampadine non lo gestirebbero sempre.) Dopo essere stato presentato ad Arduino e aver visto alcune delle cose che altre persone stavano facendo con esso, ho deciso che avrei fatto un giro. Devo ammettere fin dall'inizio che ho spudoratamente preso e ottimizzato il codice di esempio dai progetti di altre persone per farlo funzionare, anche se alla fine ho riscritto quasi tutto. Inizialmente, ho costruito questa "Stazione meteorologica WiFi" che ho trovato su Adafruit.com e lo ha modificato. Invece di aggiornare un sito Web, ho utilizzato Amazon Web Services per inviarmi aggiornamenti di stato tramite SMS. Ho anche aggiunto il controllo di alcuni relè da 110V (https://www.adafruit.com/products/268). Poi sono diventato "intelligente" e ho deciso di "rinforzarlo" - beh - qualcosa ha cortocircuitato qualcosa e ho avuto uno sbuffo del magico fumo blu. Tutto fritto… Non avendo un altro breakout WiFi CC3000, questa volta ho fatto le cose in modo diverso. L'ho costruito per essere monitorato in modo interattivo tramite interfaccia seriale e poi ho aggiunto un'interfaccia FTDI Bluetooth EZ-Link. (Non è più necessario trascinare il laptop sotto casa per gli aggiornamenti software!!!) Ho anche creato un'interfaccia Python che si collega all'unità tramite Bluetooth, la interroga regolarmente e visualizza le informazioni di stato sul mio Mac. (Esiste anche una "interfaccia umana" a cui è possibile accedere da qualsiasi software di emulazione di terminale.) Come risultato della riscrittura e della rimozione di tutto il codice WiFi e RTC, il progetto si è ridotto da oltre 29K a appena 10K. Ha anche migliorato l'affidabilità nella misura in cui il watchdog hardware non si è attivato affatto nelle due settimane in cui è stato eseguito e ho modificato.

17/02/16 Aggiornamento/nota: nel tentativo di ottenere una formattazione corretta su parte del codice (in particolare il rientro del codice Python), le cose sono passate da brutte a inutilizzabili. Sono sicuro che il problema è dalla mia parte da qualche parte, e cercherò di capirlo. Fino ad allora, ho aggiunto collegamenti ai file di codice tramite DropBox. Dovrebbero essere accessibili a chiunque. In caso contrario, per favore fatemelo sapere così posso portarli a voi in un altro modo!

Passaggio 1: problemi da risolvere

Il sistema doveva fare le seguenti cose per me:1 - monitorare la temperatura nel vespaio.2 - accendere le lampade termiche secondo necessità per mantenere la temperatura sopra lo zero.3 - quando non sono in funzione, testare periodicamente le lampadine e darmi visibilità del loro stato.4 - darmi visibilità sulla temperatura e sullo stato del sistema, tra cui: - il sistema è in funzione? - qual è la temperatura ORA? - qual è la temperatura più fredda che ha? - quante lampadine hanno funzionato? - quante lampadine sono buone? - qual è il mio tempo totale in "minuti luce" (aka "tempo di combustione")?5 - fai tutto quanto sopra senza che io debba strisciare sotto casa!!!Ho deciso che il modo più semplice per testare il funzionamento della lampadina era con un sensore di luce. Alcuni altri problemi che volevo affrontare erano il tempo di ciclo delle luci. Troppo lento e sto bruciando elettricità non necessaria. Troppo velocemente, e corro il rischio di bruciarli da tutte le accensioni e spegnimenti con il relativo riscaldamento e raffreddamento.

Passaggio 2: l'hardware

L'hardware
L'hardware

2 lampade termiche da 250 watt1 lampada da lavoro da 500 watt (una delle mie lampade termiche è scomparsa, quindi questa è una controfigura)Sensore di temperatura/umidità Arduino UnoDHT22Sensore di luceGA1A12S202Relè PowerSwitch 110VInterfaccia seriale e programmatore Bluefruit EZ-Link Valigetta high-tech (vasca Rubbermaid delle dimensioni di un sandwich)PressacavoBreadboard di dimensioni 1/2Piastra acrilica per breadboard e ArduinoCavi per ponticelli assortiti. Coleman "striscia da officina" a 5 uscite Ho anche usato un Adafruit Trinket come watchdog hardware, ma si è rivelato non necessario (sfiga, ovviamente!) e io ha scritto un'istruzione separata al riguardo, quindi non lo ripeterò qui. Il codino Coleman è stato una bella scoperta, in quanto mi ha fornito 4 prese per le mie lampade di calore PI una presa per l'alimentatore Arduino senza ulteriori splitter o ciabatte coinvolte. Valutato a 15 Ampere completi con un interruttore e un interruttore interno, poteva gestire tutto ciò che potevo tirare attraverso una singola presa.

Passaggio 3: l'approccio

Mentre il sistema è un'applicazione costruita per stare in attesa e per fare alcune cose in modo relativamente lento, quello che non volevo fare era costruire un sistema in cui il controller era seduto in cicli di delay() che non rispondeva. Volevo anche essere in grado di modificare i parametri di configurazione il più vicino possibile al volo, certamente non in un modo che richiedesse la riscrittura del codice o l'esecuzione di operazioni di ricerca e sostituzione di massa sul sorgente. I ho trovato gli articoli più eccellenti di Bill Earl su "Multitasking the Arduino" (inizia qui: https://learn.adafruit.com/multi-tasking-the-arduino-part-1) e mi sono dato da fare. Creando le classi "timer" e "heater" sono stato in grado di eseguire tutte le funzioni di temporizzazione che volevo senza utilizzare delay() (con solo un paio di eccezioni) e configurare le lampadine ("riscaldatori") con una singola riga di codice per ciascuna uno.

Passaggio 4: cablaggio

Cablandolo
Cablandolo
Cablandolo
Cablandolo

Il diagramma di Fritzing non include il Bluefruit EZ-Link Arduino 5V & Ground al bus breadboardDHT22 pin 1 a 5V busDHT22 pin 2 a Arduino pin 7DHT22 pin 4 a Ground bus10K resistore tra DHT22 pin 1 e 2GA1A12S202 pin VCC a 5V busGA1A12S202 pin GND a terra busGA1A12S202 Pin OUT ad Arduino A0Arduino pin 3V ad Arduino AREF pinRelè di massa conduce a massa busRelè 1 cavo di alimentazione ad Arduino A1Relè 2 cavo di alimentazione ad Arduino A2Relè 3 cavo di alimentazione ad Arduino A3Relè 4 cavo di alimentazione ad Arduino A4La maggior parte di queste connessioni può essere riorganizzata come si desidera. L'unico che è critico è che il cavo OUT sul sensore di luce deve andare a un pin analogico. Questo pin-out funzionerà con il mio codice così come è stato scritto. Se stai usando il watchdog hardware, vedrai che il mio codice mette il battito cardiaco sul pin 2 di Arduino.

Passaggio 5: il codice Arduino, schizzo principale

CrawlSpace_monitor.ino

Passaggio 6: note sul codice

Le seguenti righe di codice creano le istanze del riscaldatore e definiscono i parametri di funzionamento: // Heater(relayPin, onTemp(f), offTemp(f), minMinutes, testInterval(minutes), luxDelta)Heater riscaldatore1 = Heater(A1, 38, 43, 20, 1440, 5);Riscaldatore2 = Riscaldatore(A2, 36, 41, 20, 1440, 5);Riscaldatore3 = Riscaldatore(A3, 34, 39, 20, 1440, 5);Riscaldatore4 = Riscaldatore (A4, 32, 37, 20, 1440, 5); (E sì, ho definito tutti e 4 i riscaldatori anche se al momento ne sto usando solo 3. Avrei comunque bisogno di un altro relè, ma poi aggiungere il quarto riscaldatore sarebbe essere semplice come collegarlo.) Scagliono le loro temperature di innesco, a partire da 38 gradi per il primo e finendo a 32 per il quarto inesistente. Una delle cose che ho scoperto quando ho iniziato a mettere insieme questo è che dovevo dare un intervallo di temperatura e definire un "tempo di combustione" minimo, o accendevo e spegnevo le luci come un matto. Qui do a ciascuno di essi una diffusione di 5 gradi e un tempo di combustione minimo di 20 minuti. Ho impostato l'intervallo di prova su 24 ore e impostato 5 lux come lettura minima della luce di cui avevo bisogno per determinare che una lampadina funzionasse ancora. Praticamente tutto ciò che deve essere configurato è proprio qui in queste 4 righe di codice.

Passaggio 7: il codice Arduino, le classi

Ho creato 3 classi per questo progetto. Erano "timer", "riscaldatore" e "accumulatore". Con un po' di riflessione in più dovrei essere in grado di trasformare l'accumulatore in un timer, ma non l'ho ancora fatto. Eccoli integralmente:heater.h

timer.h

accumulatore.h

Passaggio 8: monitoraggio del sistema

Monitoraggio del sistema
Monitoraggio del sistema

Ho creato un'unica interfaccia per due monitor separati. È una sessione interattiva sulla console seriale. Nel mio caso sto usando Bluefruit EZ-Link in modo da poter accedere al sistema senza strisciare sotto casa o cercare di infilare un cavo USB tra i travetti del pavimento! Un ulteriore vantaggio di EZ-Link è che posso caricare anche un nuovo codice di programma su Arduino tramite Bluetooth. È possibile accedere all'interfaccia "umana" (Bluetooth o cavo fisico) con qualsiasi software di emulazione di terminale, incluso il seriale dell'IDE di Arduino tenere sotto controllo. Quando ti connetti inizialmente, non c'è risposta, ma premendo il tasto "u" (per "aggiorna") e "t" (per "test") otterrai l'output mostrato nella schermata. "m" ("monitor") e "s" ("sys check") forniscono gli stessi dati ma in un formato molto meno leggibile. Questi sono destinati ad essere "raschiati" da un altro programma per la visualizzazione automatica. Ho messo insieme uno script Python che fa proprio questo. Qualsiasi altra chiave ottiene il messaggio di errore visualizzato. Vedrai un valore per "tempo di combustione" - pensa a questo come "minuti lampadina" - 1 lampadina per 10 minuti = 10 minuti, 3 lampadine per 10 minuti = 30 minuti.

Passaggio 9: lo script Python

Lo script Python
Lo script Python

crawlspace_gui.py

Passaggio 10: ancora da fare…

Potrebbe non essere carino o perfetto, ma è efficace e si dimostra affidabile. E, non ho ancora avuto problemi di tubo congelato quest'inverno!!! Ho una lista di cose da fare. Ovviamente, ora che funziona, potrei o non potrei mai riuscire a realizzare la maggior parte di questi elementi: Fai funzionare il Bluetooth su uno dei miei Raspberry Pi in modo che possa creare un monitor dedicato. Impara un po' di più Python, quindi ripulisci il Python interfaccia. Quella separazione degli elementi non è voluta e non capisco perché sia lì. Aggiungi un'interfaccia a qualcosa come il servizio IO di Adafruit in modo che possa monitorarlo da qualsiasi luogo. Aggiungi avvisi di messaggi di testo. Passa a un controller più piccolo (possibilmente un Metro Mini o un Trinket Pro?), relè meno costosi e un imballaggio migliore. Scaricalo da una breadboard e su una scheda "Perma Proto". Parametri di configurazione in EEPROM. Un'interfaccia più granulare che indicherà -quali- lampadine sono buone e forse anche bruciare il tempo per le singole lampadine. Quando le avrò fatte, tornerò e aggiornerò questo Instructable.

Passaggio 11: aggiornamento 3/16, build "permanente"

Aggiornamento 16/3,
Aggiornamento 16/3,
Aggiornamento 16/3,
Aggiornamento 16/3,
Aggiornamento 16/3,
Aggiornamento 16/3,

Prendendo una buona pausa dal freddo, ho recuperato l'unità e l'ho spostata su un controller più piccolo (avevo intenzione di usare un Trinket Pro, ma avevo un Adafruit Metro Mini seduto in giro non reclamato da nessun altro progetto), l'ho saldato su una scheda Perma-Proto, e metti tutto in una custodia migliore. Sulla base di quanto sia affidabile, non ho rimesso il watchdog hardware su di esso. Sto ancora utilizzando solo 3 lampade/relè in cui il sistema ne gestirà 4. Il modulo Bluetooth si trova su un'intestazione saldata, quindi può essere rimosso se ne ho bisogno da qualche altra parte. Non sono state necessarie modifiche al codice per passare al nuovo controller: una semplice ricompilazione e caricamento mi ha reso operativo in pochi minuti. (Il Metro Mini ha un pinout identico all'Arduino Uno ed è anche un processore ATMega328.)

Passaggio 12: aggiornamento 1/12/2018 - Benvenuto nell'IoT

Il sistema ha funzionato perfettamente per noi. Dopo due inverni piuttosto rigidi, NO tubi congelati. Il sistema infatti è stato in grado di mantenere le tubazioni senza mai bruciare più di 2 lampadine. Avere la terza lampadina online è stata una bella assicurazione, ma non ne abbiamo mai avuto bisogno fino ad oggi.

Entrando nell'anno 3 per il sistema, il modulo Bluetooth non è riuscito. Abbiamo anche costruito una nuova casa, quindi il sistema di monitoraggio è ben al di fuori della portata del Bluetooth. (La vecchia casa rimane in piedi per un po', ma non per sempre.) Nel frattempo, ho fatto molto con il processore abilitato WiFi ESP8266; sia in formato Adafruit Feather che nel formato open-source "NodeMCU". Il NodeMCU può essere generalmente trovato su Amazon per circa $ 5 - molto meno se acquisti all'ingrosso e/o da qualcuno come AliExpress.

Questa nuova versione mantiene l'interfaccia seriale, quindi potrebbe essere ancora utilizzata con un modulo Bluetooth o una connessione seriale USB diretta e il precedente script Python, tuttavia, la nuova versione ha un'interfaccia a pagina web. Come scritto, include la seguente funzionalità:

Un gestore di rete WiFi per eliminare le credenziali WiFi hard-coding.

La possibilità di aggiornare il firmware via etere utilizzando l'IDE Arduino (fintanto che ci si trova sulla stessa rete WiFi - si noti che dopo aver eseguito un caricamento USB sul dispositivo, è necessario un ripristino prima che gli aggiornamenti OTA funzionino). PER FAVORE cambia la password OTA sulla riga 6 in modo che sia unica per te!!

Una pagina web che mostra gli stessi dati dello script Python, con un aggiornamento automatico ogni minuto. Non ho messo alcun tipo di sicurezza sulla pagina, perché è di sola visualizzazione.

Puoi trovare il nuovo codice qui. Si noti che i nomi dei pin cambiano quando si passa al NodeMCU.

Consigliato: