Inhoudsopgave:

Crawl Space Monitor (ook bekend als: No More Frozen Pipes!!): 12 stappen (met afbeeldingen)
Crawl Space Monitor (ook bekend als: No More Frozen Pipes!!): 12 stappen (met afbeeldingen)

Video: Crawl Space Monitor (ook bekend als: No More Frozen Pipes!!): 12 stappen (met afbeeldingen)

Video: Crawl Space Monitor (ook bekend als: No More Frozen Pipes!!): 12 stappen (met afbeeldingen)
Video: 3-часовой марафон паранормальных и необъяснимых историй - 3 2024, November
Anonim
Crawl Space Monitor (ook bekend als: No More Frozen Pipes!!)
Crawl Space Monitor (ook bekend als: No More Frozen Pipes!!)

Water naar mijn huis komt uit mijn put via een onverwarmde kruipruimte. Al het sanitair in de keuken en badkamer loopt ook door deze ruimte. (Binnen sanitair was een bijzaak in het midden van de jaren 70 voor dit huis!) Ik heb warmtelampen op "voorraadtank" thermostatische pluggen gebruikt om een temperatuur boven het vriespunt te houden. Er waren een paar belangrijke problemen met deze regeling: 1 - Geen zichtbaarheid. De eerste indicatie van doorgebrande lampen zijn bevroren leidingen!2 - Soms wilden de stekkers niet afsluiten. Dat zorgde voor vervelende verrassingen met de elektriciteitsrekening.3 - Geen granulariteit. Ik hield 3 lampen "online" (750 watt totaal) en het was een alles of niets oplossing. (2 lampen zouden het niet altijd aankunnen.) Nadat ik kennis had gemaakt met Arduino en zag wat andere mensen ermee deden, besloot ik het eens te proberen. Ik zal direct vanuit de parachute toegeven dat ik schaamteloos voorbeeldcode van projecten van andere mensen heb vastgehaakt en aangepast om dit te laten werken, hoewel ik uiteindelijk bijna alles heb herschreven. Aanvankelijk bouwde ik dit "WiFi-weerstation" dat ik vond op Adafruit.com en heeft het aangepast. In plaats van een website bij te werken, gebruikte ik Amazon Web Services om me statusupdates per sms te sturen. Ik heb ook de besturing van enkele 110V-relais toegevoegd (https://www.adafruit.com/products/268). Ik werd toen "slim" en besloot het "robuust" te maken -- nou ja -- er was iets kortgesloten en ik kreeg een trekje van de magische blauwe rook. Alles gefrituurd … Omdat ik geen nieuwe CC3000 WiFi-uitbraak had, deed ik het deze keer anders. Ik heb het gebouwd om interactief te worden gecontroleerd via een seriële interface en heb vervolgens een EZ-Link Bluetooth FTDI-interface toegevoegd. (Niet meer de laptop onder het huis slepen voor software-updates!!!) Ik heb ook een Python-interface gebouwd die via Bluetooth verbinding maakt met het apparaat, deze regelmatig opvraagt en statusinformatie op mijn Mac weergeeft. (Er is ook een "menselijke interface" die toegankelijk is voor alle terminalemulatiesoftware.) Als gevolg van het herschrijven en verwijderen van alle WiFi- en RTC-code is het project in omvang gekrompen van meer dan 29K tot amper 10K. Het heeft ook de betrouwbaarheid verbeterd in die mate dat de hardware-waakhond helemaal niet is geactiveerd in de paar weken dat het draait en ik heb aangepast.

2/17/16 Update/opmerking: in een poging om een deel van de code correct te formatteren (vooral het inspringen van de Python-code), ging het van lelijk naar onbruikbaar. Ik weet zeker dat het probleem ergens aan mijn kant ligt, en ik zal proberen het op te lossen. Tot die tijd heb ik via DropBox links naar de codebestanden toegevoegd. Ze moeten voor iedereen toegankelijk zijn. Zo niet, laat het me weten zodat ik ze op een andere manier bij je kan krijgen!

Stap 1: Op te lossen problemen

Het systeem moest de volgende dingen voor mij doen: - de temperatuur in de kruipruimte bewaken.2 - indien nodig warmtelampen inschakelen om de temperatuur boven het vriespunt te houden.3 - als het systeem niet werkt, de lampen regelmatig testen en me zicht geven van hun status.4 - geef mij inzicht in de temperatuur en systeemstatus, inclusief: - draait het systeem? - wat is de temperatuur NU? - wat is de koudste die de temperatuur kreeg? - hoeveel lampen liepen er? - hoeveel lampen testen goed? - wat is mijn totale tijd in "lichtminuten" (ook bekend als "brandtijd")? 5 - doe al het bovenstaande zonder dat ik onder het huis hoef te kruipen!!! Ik besloot dat de gemakkelijkste manier om de werking van de lamp te testen was met een lichtsensor. Enkele andere problemen die ik wilde aanpakken, was de cyclustijd van de lichten. Te langzaam en ik verbrand onnodige elektriciteit. Te snel, en ik loop het risico ze te verbranden door al het in- en uitschakelen met de bijbehorende opwarming en afkoeling.

Stap 2: De hardware

de hardware
de hardware

2 250 watt warmtelampen1 500 watt werklamp (een van mijn warmtelampen is verdwenen, dus dit is een stand-in)Arduino UnoDHT22 Temperatuur/vochtigheidssensorGA1A12S202 lichtsensorPowerSwitch 110V relaisBluefruit EZ-Link seriële interface & programmerHightech koffer (sandwich-sized Rubbermaid-kuip)Kabelwartel1/2 sized breadboardAcryl plaat voor breadboard en ArduinoGeassorteerde jumperdraden. Coleman 5-outlet "workshop strip"Ik gebruikte ook een Adafruit Trinket als hardware waakhond, maar het is onnodig gebleken (jinx, natuurlijk!) schreef er een aparte instructable over, dus ik zal dat hier niet herhalen. De Coleman-pigtail was een leuke vondst, want het gaf me 4 stopcontacten voor mijn warmtelampen PLUS een stopcontact voor de Arduino-voeding zonder extra splitters of stekkerdozen. Met een nominaal vermogen van 15 ampère met een schakelaar en een interne stroomonderbreker, kon het alles aan wat ik door een enkel stopcontact kon trekken.

Stap 3: De aanpak

Hoewel het systeem een applicatie is die is gebouwd om te wachten en om sommige dingen relatief langzaam te doen, wilde ik niet een systeem bouwen waarbij de controller in delay()-cycli zat en niet meer reageerde. Ik wilde ook in staat zijn om de configuratieparameters zo on-the-fly te wijzigen als ik kon krijgen - zeker niet op een manier die het herschrijven van code of het uitvoeren van massale zoek-en-vervang-operaties op de bron vereiste. vond de meest uitstekende artikelen van Bill Earl over "Multitasking the Arduino" (start hier: https://learn.adafruit.com/multi-tasking-the-arduino-part-1) en kreeg het druk. Door de klassen "timer" en "heater" te maken, kon ik alle timingfuncties doen die ik wilde zonder delay() te gebruiken (met slechts een paar uitzonderingen) en de lampen ("heaters") configureren met een enkele regel code voor elk een.

Stap 4: Bedrading het omhoog

Bedrading erop
Bedrading erop
Bedrading erop
Bedrading erop

Het Fritzing-diagram bevat niet de Bluefruit EZ-LinkArduino 5V & Ground naar de breadboard-busDHT22 pin 1 naar 5V busDHT22 pin 2 naar Arduino pin 7DHT22 pin 4 naar Ground bus10K weerstand tussen DHT22 pins 1 en 2GA1A12S202 VCC pin naar 5V busGA1A12S202 GND pin naar Ground busGA1A12S202 OUT pin naar Arduino A0Arduino 3V pin naar Arduino AREF pinRelay Massakabels naar massa busRelais 1 voedingskabel naar Arduino A1Relay 2 voedingskabel naar Arduino A2Relay 3 voedingskabel naar Arduino A3Relais 4 voedingskabel naar Arduino A4De meeste van deze verbindingen kunnen naar wens worden herschikt. De enige die kritisch is, is dat de OUT-kabel op de lichtsensor naar een analoge pin moet gaan. Deze pin-out werkt met mijn code zoals deze is geschreven. Als je de hardware-waakhond gebruikt, zul je zien dat mijn code de hartslag op Arduino-pin 2 zet.

Stap 5: De Arduino-code, hoofdschets

CrawlSpace_monitor.ino

Stap 6: Opmerkingen over de code

De volgende coderegels creëren de instanties van de verwarming en definiëren de bedrijfsparameters:// Heater(relayPin, onTemp(f), offTemp(f), minMinutes, testInterval(minutes), luxDelta)Heater heater1 = Heater(A1, 38, 43, 20, 1440, 5); Kachelverwarmer2 = Verwarmer (A2, 36, 41, 20, 1440, 5);Verwarmerverwarmer3 =Verwarmer (A3, 34, 39, 20, 1440, 5);Verwarmerverwarmer4 =Verwarmer (A4, 32, 37, 20, 1440, 5);(En ja, ik heb alle 4 kachels gedefinieerd, ook al gebruik ik er momenteel maar 3. Ik zou nog steeds een ander relais moeten hebben, maar dan zou het toevoegen van de 4e kachel wees zo simpel als het inpluggen.) Ik spreid hun triggertemperaturen, beginnend bij 38 graden voor de eerste en eindigend bij 32 voor de niet-bestaande 4e. Een van de dingen die ik ontdekte toen ik dit voor het eerst in elkaar zette, was dat ik een bereik voor de temperatuur moest geven en een minimale "brandtijd" moest definiëren, of ik fietste als een gek de lichten aan en uit. Hier geef ik elk van hen een spreiding van 5 graden en een minimale brandtijd van 20 minuten. Ik stelde het testinterval in op 24 uur en stelde 5 lux in als de minimale lichtwaarde die ik nodig had om te bepalen dat een lamp nog werkte. Vrijwel alles dat moet worden geconfigureerd, bevindt zich hier in deze 4 regels code.

Stap 7: De Arduino-code, klassen

Voor dit project heb ik 3 lessen gemaakt. Ze waren "timer", "verwarmer" en "accumulator". Met een beetje meer nadenken zou ik de accu in een timer moeten kunnen vouwen, maar dat heb ik nog niet gedaan. Hier zijn ze voluit:heater.h

timer.h

accumulator.h

Stap 8: Het systeem bewaken

Het systeem bewaken
Het systeem bewaken

Ik heb een enkele interface gemaakt voor twee afzonderlijke monitoren. Het is een interactieve sessie via de seriële console. In mijn geval gebruik ik de Bluefruit EZ-Link, zodat ik toegang heb tot het systeem zonder onder het huis door te kruipen of een USB-kabel tussen de vloerbalken te moeten schuiven! Een bijkomend voordeel van de EZ-Link is dat ik via Bluetooth ook nieuwe programmacode naar de Arduino kan uploaden. De "menselijke" interface is toegankelijk (Bluetooth of fysieke kabel) met elke terminalemulatiesoftware, inclusief de seriële toezicht houden op. Wanneer u voor het eerst verbinding maakt, is er geen reactie, maar als u op "u" (voor "update") en "t" (voor "test") drukt, krijgt u de uitvoer die wordt weergegeven in de schermafbeelding. "m" ("monitor") en "s" ("sys check") leveren dezelfde gegevens op, maar in een veel minder leesbaar formaat. Deze zijn bedoeld om te worden "geschraapt" door een ander programma voor automatische weergave. Ik heb een Python-script samengesteld dat precies dat doet. Elke andere toets genereert de weergegeven foutmelding. U ziet een waarde voor "brandtijd" - denk hierbij aan "bulbminuten" - 1 lamp voor 10 minuten = 10 minuten, 3 lampen voor 10 minuten = 30 minuten.

Stap 9: Het Python-script

Het Python-script
Het Python-script

crawlspace_gui.py

Stap 10: Nog te doen…

Het is misschien niet mooi of perfect, maar het is effectief en bewijst zichzelf als betrouwbaar. EN ik heb deze winter nog geen problemen met bevroren leidingen gehad!!! Ik heb een lijst met dingen die ik moet doen. Natuurlijk, nu het werkt, kan ik er misschien nooit toe komen om de meeste van deze items te bereiken: Bluetooth op een van mijn Raspberry Pi's laten draaien, zodat ik een speciale monitor kan maken. Leer wat meer Python - en ruim vervolgens de Python op koppel. Die scheiding van elementen is niet met opzet en ik begrijp niet waarom het er is. Voeg een interface toe aan iets als Adafruit's IO-service, zodat ik het overal kan volgen. Voeg sms-waarschuwingen toe. Ga naar een kleinere controller (mogelijk een Metro Mini of een Trinket Pro?), goedkopere relais en een betere verpakking. Haal het van een breadboard en op een "Perma Proto" -bord. Configuratieparameters in EEPROM. Een meer gedetailleerde interface die aangeeft welke lampen goed zijn, en mogelijk zelfs tijd verbranden voor de afzonderlijke lampen. Als ik ze klaar heb, zal ik terugkomen en deze Instructable bijwerken.

Stap 11: Update 3/16, "permanente" build

Update 16-03,
Update 16-03,
Update 16-03,
Update 16-03,
Update 16-03,
Update 16-03,

Ik kreeg een goede pauze in het koude weer, ik heb het apparaat opgehaald en naar een kleinere controller verplaatst (ik was van plan een Trinket Pro te gebruiken, maar had een Adafruit Metro Mini rondhangen die niet werd opgeëist door een ander project), het vastgesoldeerd op een Perma-Proto-bord, en zet het allemaal in een betere behuizing. Op basis van hoe betrouwbaar het was, heb ik de hardware-waakhond er niet weer op gezet. Ik gebruik nog steeds maar 3 lampen/relais waar het systeem 4 aankan. De Bluetooth-module zit op een gesoldeerde header, dus kan worden verwijderd als ik hem ergens anders nodig heb. Er waren geen codewijzigingen nodig om naar de nieuwe controller te gaan - een eenvoudige hercompilatie en load hadden me binnen enkele minuten aan de slag. (De Metro Mini heeft een identieke pinout als de Arduino Uno en is ook een ATMega328-processor.)

Stap 12: Update 1-12-2018 - Welkom bij het IoT

Het systeem heeft bij ons perfect gewerkt. Na twee vrij strenge winters GEEN bevroren leidingen. In feite was het systeem in staat om de leidingen te onderhouden zonder ooit meer dan 2 lampen te verbranden. Het online hebben van de 3e lamp was een mooie verzekering, maar tot op heden hebben we deze nog nooit nodig gehad.

Toen het systeem in jaar 3 kwam, faalde de Bluetooth-module. We hebben ook een nieuw huis gebouwd, dus het monitoringsysteem ligt ver buiten het Bluetooth-bereik. (Het oude huis blijft een tijdje staan, maar niet voor altijd.) In de tussenliggende tijd heb ik veel gedaan met de ESP8266 WiFi-enabled processor; zowel in Adafruit Feather-formaat als in het open-source "NodeMCU"-formaat. De NodeMCU is over het algemeen te vinden op Amazon voor ongeveer $ 5 - veel minder als je in bulk koopt en / of van iemand als AliExpress.

Deze nieuwe versie behoudt de seriële interface, dus het kan nog steeds worden gebruikt met een Bluetooth-module of directe seriële USB-verbinding en het vorige Python-script, maar de nieuwe versie heeft een webpagina-interface. Zoals geschreven, bevat het de volgende functie:

Een WiFi-netwerkbeheerder om hard-coderende WiFi-inloggegevens te elimineren.

De mogelijkheid om de firmware over-the-air bij te werken met behulp van de Arduino IDE (zolang u zich op hetzelfde WiFi-netwerk bevindt - houd er rekening mee dat na het uitvoeren van een USB-upload naar het apparaat, een reset nodig is voordat OTA-updates werken). WIJZIG AUB het OTA-wachtwoord op regel 6 om uniek voor u te zijn!!

Een webpagina die dezelfde gegevens weergeeft als het Python-script, met elke minuut een automatische verversing. Ik heb geen enkele vorm van beveiliging op de pagina gezet, omdat deze alleen voor weergave is.

De nieuwe code vind je hier. Houd er rekening mee dat de pinnamen veranderen wanneer u naar de NodeMCU gaat.

Aanbevolen: