CO2 Laser vatten Chiller (8 / 12 steg)
Steg 8: Termostat skissen
Prerequisite bibliotek
Arduino skiss bifogas. Du behöver följande bibliotek installerad för att kompilera och använda den:
- OneWire - används för att läsa IP65 Digital vattentät termometer
- LiquidCrystal_I2C - används för seriell LCD
Jag rekommenderar bygga en liten krets och skiss för att testa varje komponent innan byggnaden en större krets, bara i fall något har förändrats och du behöver ett annat bibliotek.
Filen skiss
Om du vill använda min skiss som-är, den är kopplad till detta steg som Thermostat.ino. Det ska funka med Arduino Uno (eller klon) utan förändringar om du följt min krets.
Hur det fungerar...
Termostaten är ganska enkel och inte till skillnad från termostaten du använda för att styra temperaturen i ditt hem. LCD-skärmen visar den aktuella vattentemperaturen i Fahrenheit och Celsius på första raden, och den aktuella inställningen på den andra raden. När vattentemperaturen ligger över inställningen, är pump och kylaggregat aktiverade. När temperaturen sjunker 1,75 F ° under inställningen, stängs kylaggregat, pump och fans alla av tills temperaturen stiger igen över inställningen.
Ingående Lockout
På grund av de svåra att få en ren signal från Arduino avbryta stiften (kanske detta är ett problem med min gamla över använda Arduino Uno? Eller kanske är det på grund av buller från resten av kretsen), jag har lagt till en "Inställningen Lock" funktion. För att ändra termostaten inställning du måste hålla ned både upp och ner knappar för 1 sekund. När detta har upptäckts, LCD-skärmen visas meddelandet "---olåst---" på den översta raden och "Ange Temp:" på den andra raden för 3/4 av en sekund. Medan olåst, kan UP och DOWN knapparna användas att öka eller sänka termostatinställningen. Om inga knappar trycks i 10 sekunder, återinförs den input lockouten. Om båda knapparna trycks och höll samtidigt igen i 1 sekund låsa också återinförs, men en varning att det kan vara svårt att trycka båda knapparna samtidigt utan studsar orsakar temperaturen att öka eller minska av en eller två. För det anledning kanske du föredrar att bara låta systemet åter låsa på sin egen av lämnar knapparna orörd i 10 sekunder.
Läst temperaturen
Vänligen läs igenom skissen för alla detaljer om hur koden fungerar. Här kommer jag bara lyfta fram delar av det. Särskilt använder den TemperatureModule klassen OneWire 2 bibliotek för att läsa temperaturen från DS18B20 i den IP65 Digital vattentät temperatur sond. Klassen TemperatureModule är baserad på kod i DS18x20_Temperature, OneWire 2 exempel skiss. Det erbjuder bara två metoder: Initialize() och ReadTemperatureF(). Initialize() måste anropas innan ReadTemperatureF anropas för första gången. ReadTemperatureF kommer tillbaka temperaturen i Fahrenheit och kommer att fylla i en godkänd variabel med temperaturen i Celsius. En instans av TemperatureModule förklaras på linje 171 av skiss, efter definitionen av klassen:
Du kommer också att märka g_lcd på linje 172 - en instans av LiquidCrystal_I2C. Båda dessa globala objekt använder makron definieras överst i filen. Dessa makron också definiera varje Arduino PIN används av skissen:
Setup
Raderna 1 till 3 innehåller de bibliotek som används av denna skiss. På linje 3 ser du inkludera av EEPROM.h. Detta kommer att användas under installationen, och efter termostatinställningen justeras att spara temperaturen i Arduino's EEPROM så att det är ihågkommen över makt återställs. Temperaturen är lagras som en enda byte och tillåtna temperatur inställningar gå från 35° F till 85° F. Detta verkar vara ett rimligt intervall för våra ändamål och med en enda byte för att lagra värdet saker är enklare.
Funktionen setup() av skiss kommer att först ange ett par globala variabler brukade Dämpningstid våra tryckknapp växlar. Efter detta är det kommer att ange Pin läget för varje stift kommer vi använda (linjer 255 genom 260):
På linje 261, vi satt Chiller Off staten och på linje 263 genom 269 temperaturinställning läses från EEPROM och satt till 56° F om det aktuella värdet är utanför intervallet. Linjerna 271 genom 273 starta I2C LCD-biblioteket och eftersom det tar ungefär en sekund att initiera TemperatureModule, meddelandet "Initierar..." visas på LCD-skärmen tills temperaturgivaren upptäckt (linjer 278 genom 280). Ytterligare 1 sekund tvingas vänta på linje 281--detta verkar krävas av OneWire biblioteket för att ordentligt läsa temperaturgivare.
Med allt annars initieras vi fäster avbrott 0 till funktionen BumpSettingsUp på rad 283, och avbryta 1 till BumpSettingsDown på rad 284 och aktivera avbrott (linje 285).
Funktionerna BumpSettingsUp och BumpSettingsDown kontrollera om indata är låst. Om det inte är, kommer att de öka eller minska g_uiTemperatureSetting, så länge avbrottet (utlöst av en push) uppfyller kraven på tid att inte kvalificera sig som en switch studs. Dessa två funktioner också säkerställa den inställning stannar mellan 35 och 85 grader.
Inte visas här BumpSettingsDown() som är identisk med BumpSettingsUp förutom att det sjunker värdet i g_uiTemperatureSettings. Det finns också några andra funktioner som används som hjälpare som OutputLCDLine() som visar en sträng på raden en eller två av LCD-skärmen. Funktionen TurnCoolingOnOrOff visas nedan används för att ange alla 4 reläer till ON eller OFF position och till post om saker är ON eller OFF i g_bCooling:
Funktionen ToggleInputMode anropas när båda knapparna är nedtryckt i en sekund, eller efter 10 sekunder av inga knappar trycks medan input är olåst. Som ni kan se det registrerar en ny inställning i EEPROM kortplats 0:
Denna dubbel-knapp tryck kontroll görs av hjälpare funktionen CheckLockUnlock():
Allt detta leder till den viktigaste loopen:
I denna första halvlek finns det en kontroll för att se om användaren är upplåsning input. Om 10 sekunder har gått sedan en knapp har nere, medan input är olåst, kommer att koden på linjer 373 genom 379 säkerställa att låsa återinförs.
På rad 383 nuvarande termostatinställningen visas på andra raden av LCD-skärmen, och på rad 387 aktuell temperatur avläses från termometern. Det visas sedan på den första raden i LCD: N på rad 397. Eftersom termostatinställningen konverterades till en float på linje 385 kan en enkel jämförelse göras för att se om Chiller behöver vara påslagen:
Om aktuell temperatur överstiger termostatinställningen är Chiller alltid påslagen (linje 406). Annars skulle kontrollera vi om temperaturen är 1,75 grader under inställningen och så kylaggregat är avstängd.
På rad 418 en en andra förseningen inträffar för att ge tid för termometern skall läsas ordentligt igen och loopen är in igen.