Stap 3: De code:
Eco-douche Arduino code
Julian Arnott & James Arnott 2014
//
We gebruiken de DS18B20 temperatuursensor gemonteerd op de warm waterleiding voor de douche een 20 minuten timer activeren.
Zodra de timer heeft zijn beloop, er wordt overgeschakeld naar de steunpunten die het snijden van de macht naar de douche-pomp.
Terwijl de temperatuur van de pijp de trigger-temperatuur boven, blijft de Relais geschakelde
//
Kon toevoegen potten zodat bovenliggende de switch temperatuur en de douche tijd kan aanpassen.
overschakelen van de temperatuur tussen de 20 en 80 graden gebruik A0 (pin 23)
douche tijd tussen 5 en 40 minuten gebruik A1 (pin 24)
#include
#include
#define ONE_WIRE_BUS 3 / / Data aansluiting 3 pin op de Arduino is aangesloten
Privacy oneWire(ONE_WIRE_BUS); Opstelling van een exemplaar van de privacy om te communiceren met alle apparaten privacy
DallasTemperature sensoren (& Privacy); Onze privacy verwijzing naar Dallas temperatuur doorgeeft.
De adressen van uw 1-Wire temperatuur sensoren moet toewijzen.
Zie de tutorial over het verkrijgen van deze adressen: http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
DeviceAddress Thermometer = {0x28, 0x16, 0xA3, 0x84, 0x04, 0x00, 0x00, 0xC3};
float tempC;
int ledRED = 5; PIN D5 voor de led1
int ledGREEN = 6; PIN D6 voor de led2
int relay1 = 7; PIN D7 voor de relay1
int relay2 = 8; PIN D8 voor de relay2
int tempPot = 0; de 10K A taper (lineaire) temperatuur potentiometer verbinden met analoge input A0
int timePot = 1; de 10K A taper timer (lineaire) potentiometer verbinden met analoge input A1
int temperature_set;
int temperature_read;
int time_set;
int time_read;
int hasBeenSet = 0;
int delaytimer = 0;
void setup(void)
{
analogReference(EXTERNAL); Vertellen van de Arduino te gebruiken de Aref pin voor de analoge spanning, (5v)
Serial.begin(9600); Start van de seriële poort
sensors.begin(); Opstarten van de bibliotheek
sensors.setResolution (Thermometer, 10); de resolutie ingesteld op 10 bit (goed genoeg?)
pinMode (ledRED, OUTPUT); de rode led pincode (5) als uitgang instellen
pinMode (ledGREEN, OUTPUT); de groene led pincode (6) als uitgang instellen
pinMode (relay1, OUTPUT); stellen van de Relais pin (7) als een uitvoerapparaat
pinMode (relay2, OUTPUT); stellen van de Relais pin (8) als een uitvoerapparaat
digitalWrite (ledRED, laag);
digitalWrite (ledGREEN, laag);
digitalWrite (relay1, laag);
digitalWrite (relay2, laag);
temperature_read = analogRead(tempPot);
temperature_set = kaart (temperature_read, 0, 1023, 20, 80); min temp 20 graden C - max temp 80 graden
time_read = analogRead(timePot);
time_set = kaart (time_read, 0, 1023, 5, 40); min tijd 5 minuten - max tijd 40 minuten
}
void loop(void)
{
krijgen van de temperatuur
Serial.println ("vanaf 6 seconden vertraging");
delay(6000); 6 seconden
Serial.Print ("Getting temperature...\n\r");
sensors.requestTemperatures();
Serial.Print ("temperatuur is:");
printTemperature(Thermometer);
Merk op dat de besturingselementen voor de relay worden teruggedraaid. dwz: lage brandt en HIGH is uitgeschakeld
Dit is omdat het is omgekeerd op het relais boord
Serial.Print ("temp instelling:");
Serial.println(temperature_set);
Serial.Print ("tijdinstelling:");
Serial.println(time_set);
Als (tempC > temperature_set) {}
Serial.println ("*** Temp boven de ingestelde limiet ***");
Als (hasBeenSet < 1) {}
Serial.println ("vanaf ingestelde vertraging");
digitalWrite (ledGREEN, hoge); groene led om aan te tonen dat de timer om te beginnen
terwijl (delaytimer < time_set) {}
Serial.Print ("vertraging timer:"); Serial.Print(delaytimer); Serial.Print ("time_set:"); Serial.println(time_set);
delay(60000);
delaytimer = ++ delaytimer;
}
delaytimer = 0;
hasBeenSet = ++ hasBeenSet; willen niet de vertraging helemaal opnieuw beginnen - it's gonna nemen leeftijden voor de pijp te koelen zoals het is
Serial.println ("beurt relais op"); onder normale werking, wordt de estafette niet aangedreven, dus draaien op de macht naar de pomp zal snijden
digitalWrite (relay1, hoge);
digitalWrite (relay2, hoge);
digitalWrite (ledRED, hoge); rode led zodat wij macht hebben gesneden aan de pomp
digitalWrite (ledGREEN, laag); Nu kunt de groene resetten
}
} else {}
Serial.println ("*** Temp onder de ingestelde limiet ***");
terug naar normale werking
relay nu activeren
Serial.println ("Turn estafette af");
digitalWrite (relay1, laag);
digitalWrite (relay2, laag);
digitalWrite (ledRED, laag);
digitalWrite (ledGREEN, laag);
Nu hoeft te controleren dat de temperatuur opnieuw en wachten tot het kleiner is dan de drempelwaarde - dus ga terug naar begin
de langzame afkoeling van het water in de pijp moet geven voldoende vertraging hier (in de praktijk wanneer de drempel is ingesteld op 40 graden, de pijp neemt 23 minuten afkoelen)
het hele proces helemaal opnieuw beginnen
hasBeenSet = 0;
}
Serial.println("***");
}
VOID printTemperature(DeviceAddress deviceAddress)
{
tempC = sensors.getTempC(deviceAddress);
Als (tempC ==-127.00) {}
Serial.Print ("Error getting temperatuur");
} else {}
Serial.Print ("C:");
Serial.println(tempC);
}
}