Sommario:
- Passaggio 1: problemi da risolvere
- Passaggio 2: l'hardware
- Passaggio 3: l'approccio
- Passaggio 4: cablaggio
- Passaggio 5: il codice Arduino, schizzo principale
- Passaggio 6: note sul codice
- Passaggio 7: il codice Arduino, le classi
- Passaggio 8: monitoraggio del sistema
- Passaggio 9: lo script Python
- Passaggio 10: ancora da fare…
- Passaggio 11: aggiornamento 3/16, build "permanente"
- Passaggio 12: aggiornamento 1/12/2018 - Benvenuto nell'IoT
Video: Crawl Space Monitor (aka: No More Frozen Pipes!!): 12 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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
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
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
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"
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:
Privacy Monitor hackerato da un vecchio monitor LCD: 7 passaggi (con immagini)
Privacy Monitor hackerato da un vecchio monitor LCD: finalmente puoi fare qualcosa con quel vecchio monitor LCD che hai in garage. Puoi trasformarlo in un monitor della privacy! Sembra tutto bianco a tutti tranne che a te, perché indossi "magic" bicchieri! Tutto quello che devi davvero avere è un pa
Orologio Nixie con tenda veneziana in legno Aka La sorellina di Sara.: 7 passaggi (con immagini)
Orologio Nixie con veneziane in legno Aka La sorellina di Sara.: Recentemente ho preso alcune veneziane in legno di seconda mano che erano troppo grandi per adattarsi alle finestre su cui avevo intenzione di usarle. Dopo un'attenta ristrutturazione di loro mi è rimasto un carico di sezioni tagliate e le ho conservate per qualche futuro pr
Riparare un monitor con una macchina per il pane: AKA Non buttarlo fuori!: 5 passaggi (con immagini)
Riparare un monitor con una macchina per il pane: AKA Don't Butth It Out!: A livello locale a Victoria, BC, abbiamo un ragazzo che prende apparecchiature informatiche scartate ma utilizzabili e le restituisce gratuitamente alla comunità. I suoi sforzi sono mantenere l'elettronica usata fuori dalle discariche e aiutare le persone a uscire, il che è fantastico. ho preso un
Orologio Space Invaders (con un budget!): 6 passaggi (con immagini)
Orologio Space Invaders (con un budget!): Recentemente ho visto una bella build di GeckoDiode e ho subito voluto costruirla da solo. L'Instructable è Space Invaders Desktop Clock e ti consiglio di dargli un'occhiata dopo aver letto questo. Il progetto è stato quasi esclusivamente costruito con parti provenienti
Gioca a qualsiasi cosa, da NES a Xbox con lo Skittlespider A.T.S Aka "The Contraption": 11 passaggi (con immagini)
Gioca a qualsiasi cosa da NES a Xbox con lo Skittlespider A.T.S Aka "The Contraption": questo Instructable è per lo Skittlespider A.T.S (All Together System) noto anche come "The Contraption"Questo progetto si è rivelato più difficile di quanto mi aspettassi. In un certo senso è stato anche più facile, quindi non posso dire che sia stato un progetto complessivamente difficile o facile