Étape 3: Le code :
Eco-douche Arduino code
Julian Arnott & James Arnott 2014
//
Nous utilisons le capteur de température DS18B20 monté sur le tuyau d’eau chaude pour la douche pour déclencher une minuterie de 20 minutes.
Une fois que le timer a suivre son cours, il passe les relais qui coupent le courant à la pompe de douche.
Alors que la température de la conduite est supérieure à la température de déclenchement, les relais reste commutés
//
Pourrait ajouter pots ce parent permet de régler la température de commande et l’heure de la douche.
commutation de température comprise entre 20 et 80 degrés utilisation A0 (broche 23)
douche de temps entre 5 et 40 minutes utilisation A1 (24 broches)
#include
#include
#define ONE_WIRE_BUS 3 / / données fil est branché sur la broche 3 sur l’Arduino
OneWire oneWire(ONE_WIRE_BUS) ; Configurer une instance oneWire pour communiquer avec les périphériques OneWire
Capteurs DallasTemperature (& oneWire) ; Passez notre référence oneWire à température de Dallas.
Affectez les adresses de vos capteurs de température 1-Wire.
Voir le tutoriel sur la façon d’obtenir ces adresses : http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
DeviceAddress thermomètre = {0 x 28, 0 x 16, 0xA3, 0 x 84, 0 x 04, 0 x 00, 0 x 00, 0xC3} ;
flotteur NC ;
int ledRED = 5 ; axe D5 pour la led1
int ledGREEN = 6 ; axe D6 pour la led2
Relais 1 int = 7 ; broche D7 pour les relais 1
Relais 2 int = 8 ; broche D8 pour le relais 2
int tempPot = 0 ; Connectez le potentiomètre de température (linéaire) conique A 10K à A0 d’entrée analogique
int timePot = 1 ; Connectez le potentiomètre (linéaire) de 10K A minuterie conique à A1 d’entrée analogique
int temperature_set ;
int temperature_read ;
int time_set ;
int time_read ;
int hasBeenSet = 0 ;
int delaytimer = 0 ;
Sub setup(void)
{
analogReference(EXTERNAL) ; Dire l’Arduino pour utiliser la broche Aref pour la tension analogique, (5v)
Serial.Begin(9600) ; serial port de départ
sensors.Begin() ; Démarrage de la bibliothèque
sensors.setResolution (thermomètre, 10) ; Sélectionnez une résolution de 10 bits (assez bon?)
pinMode (ledRED, sortie) ; mettre la goupille rouge led (5) en tant que sortie
pinMode (ledGREEN, sortie) ; la valeur de l’axe vert led (6) en tant que sortie
pinMode (relais 1, sortie) ; la valeur de la broche de relais (7) en tant que sortie
pinMode (sortie relais 2,) ; la valeur de la broche de relais (8) en tant que sortie
digitalWrite (ledRED, basse) ;
digitalWrite (ledGREEN, basse) ;
digitalWrite (relais 1, faible) ;
digitalWrite (relais 2, basse) ;
temperature_read = analogRead(tempPot) ;
temperature_set = carte (temperature_read, 0, 1023, 20, 80) ; temp min 20 degrés C - temp 80 degrés
time_read = analogRead(timePot) ;
time_set = carte (time_read, 0, 1023, 5, 40) ; min temps 5 minutes - temps max 40 minutes
}
Sub loop(void)
{
obtenir la température
Serial.println ("6 seconde de délai de départ ») ;
Delay(6000) ; 6 secondes
Serial.Print ("Getting temperature...\n\r") ;
sensors.requestTemperatures() ;
Serial.Print ("température est:") ;
printTemperature(Thermometer) ;
Notez que les contrôles pour le relais sont inversés. C’est à dire: basse et haute est hors
C’est parce qu’il est inversé sur la carte relais
Serial.Print ("paramètre temp:") ;
Serial.println(temperature_set) ;
Serial.Print ("réglage du temps:") ;
Serial.println(time_set) ;
Si (NC > temperature_set) {}
Serial.println ("*** Temp sur imparti ***") ;
Si (hasBeenSet < 1) {}
Serial.println (« délai fixé de départ ») ;
digitalWrite (ledGREEN, HIGH) ; led verte pour montrer que la minuterie est sur le point de commencer
tandis que (delaytimer < time_set) {}
Serial.Print ("départ différé:") ; Serial.Print(delaytimer) ; Serial.Print ("time_set:") ; Serial.println(time_set) ;
Delay(60000) ;
delaytimer = ++ delaytimer ;
}
delaytimer = 0 ;
hasBeenSet = ++ hasBeenSet ; ne veux pas le retard tout recommencer - il va prendre les âges pour la pipe se refroidir car il est
Serial.println ("tour relais sur") ; en fonctionnement normal, le relais n’est pas alimenté, afin de mettre en marche coupe le courant à la pompe
digitalWrite (relais 1, haute) ;
digitalWrite (relais 2, HIGH) ;
digitalWrite (ledRED, HIGH) ; led rouge pour montrer nous avons couper l’alimentation de la pompe
digitalWrite (ledGREEN, basse) ; peut réinitialiser le vert maintenant
}
} else {}
Serial.println ("*** Temp sous plafond ***") ;
retour au fonctionnement normal
activer le relais maintenant
Serial.println ("tour relais off") ;
digitalWrite (relais 1, faible) ;
digitalWrite (relais 2, basse) ;
digitalWrite (ledRED, basse) ;
digitalWrite (ledGREEN, basse) ;
maintenant besoin de vérifier que la température à nouveau et attendre jusqu'à ce qu’elle tombe en-dessous du seuil - oui aller retour au début
le lent refroidissement de l’eau dans le tuyau devrait donner suffisamment retard ici (dans la pratique lorsque le seuil est fixé à 40 degrés, la conduite prend 23 minutes pour refroidir)
l’ensemble du processus tout recommencer
hasBeenSet = 0 ;
}
Serial.println("***") ;
}
Sub printTemperature(DeviceAddress deviceAddress)
{
NC = sensors.getTempC(deviceAddress) ;
Si (NC ==-127.00) {}
Serial.Print ("Error getting température") ;
} else {}
Serial.Print ("C:") ;
Serial.println(tempC) ;
}
}