Module antigel pour abreuvoir du poulailler

Application du LM35DZ avec Arduino
Module antigel pour abreuvoir du poulailler

Description du besoin :
Des que la temperature de l’eau s’approche de 0°C ou risque de geler (différence subtile), mettre en marche une résistance chauffante pour ramener l’eau à un état liquide.

Analyse fonctionnelle:
Mesurer périodiquement la temperature de l’eau
Activer/arrêter l’alimentation de la résistance chauffante en fonction de la température mesurée

Caractéristiques techniques :
Si la temperature de l’eau < 3°C chauffer l’eau
Si la temperature de l’eau > 5°C ne pas chauffer l’eau
Sécurité (option):
La résistance ne doit pas rester allumée plus de X mn
La résistance doit rester à l’arrêt au moins Y mn consécutives

Principe de solution matérielle
ARDUINO
LM35DZ (car dispo)
Module relais
Thermo plongeur 22V (récup)

Principe de solution logicielle
variable : valeurLue
variable : frequence de mesure (frequence_mesure = 5000 ms) entre 2 mesures
variable : temperature
variable : nombre_echantillons (20)
variable : seuil_temperature_chauffageON (3.0°)
variable : seuil_temperature_chauffageOFF (5.0°)
variable : pin arduino Led
variable : pin arduino relais

// —————————————–

Initialisation
Périodiquement (fréquence de mesure)
//Décider de l’action
mesurer_temperature
Si temperature < seuil_temperature_chauffageON –> allumer chauffage
Si temperature > seuil_temperature_chauffageOFF –> fermer chauffage
Attendre fréquence_de_mesure

// —————————————–

Conception :

Initialisation

fonction : mesurer_temperature() // avec lissage
// attention : prends nombre_echantillons x 1000 ms de délai (20 s ici )
for(i=1;i< =nombre_echantillons;i++){ // moyenne sur 20 mesures
temperature_t = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
temperature = temperature + temperature_t;
delay(1000);
}
return temperature = temperature/nombre_echantillons;

fonction allumer_chauffage
activer sortie digitale relais

fonction fermer_chauffage
desactiver sortie digitale relais

fonction allumer_led
activer sortie digitale led

fonction eteindre_led
activer sortie digitale led

/*
* module antigel pour abreuvoir de poulailler
* thierry.gaillot@orange.com
* 25 janvier 2015
*/

int temperaturePin = A0; // pin centrale du LM35DZ (OUTPUT)
int pin_arduino_led_mesure = 13; // pin pour la LED témoin MESURE
int pin_arduino_led_chauffage = 12; // pin pour la LED témoin CHAUFFAGE
int pin_arduino_relais1 = 7; // pin pour le relais
int valeurLue = 0; //
double temperature = 0;
double temp = 0;
double tension = 0;
int frequence_mesure = 5000; // ms duree entre 2 mesures
int nombre_echantillons = 20; // pour le lissage et la moyenne (20)
int seuil_temperature_chauffageON = 2.0; // seuil d’allumage du chauffage (3.0°)
int seuil_temperature_chauffageOFF = 4.0; // seuil extinction du chauffage (5.0°)
//test
//int seuil_temperature_chauffageON = 23.0; // seuil d’allumage du chauffage (3.0°)
//int seuil_temperature_chauffageOFF = 25.0; // seuil extinction du chauffage (5.0°)

void setup() { // initialisation
// declare les pins comme sorties : OUTPUT
pinMode(pin_arduino_led_mesure, OUTPUT);
digitalWrite(pin_arduino_led_mesure, LOW);

pinMode(pin_arduino_led_chauffage, OUTPUT);
digitalWrite(pin_arduino_led_chauffage, LOW);

pinMode(pin_arduino_relais1, OUTPUT);
fermer_chauffage();

Serial.begin(9600); // pour mise au point et gestion du Serial.print
}

void loop() {

// boucle principale

int temp;

//mesurer_temperature
temp = mesurer_temperature();

//Si temperature < seuil_temperature_chauffageON –> allumer chauffage
if (temp < seuil_temperature_chauffageON) { allumer_chauffage(); } //Si temperature > seuil_temperature_chauffageOFF --> fermer chauffage if (temp > seuil_temperature_chauffageOFF)
{
fermer_chauffage();
}

//Attendre fréquence_de_mesure
delay(1000); //ms
clignoter_led_mesure();

}

int mesurer_temperature() // avec lissage
{

int i=0;
int temperature_t = 0;
temperature = 0;
// attention : prends nombre_echantillons x 1000 ms de délai (20 s ici )
//tension = 5.0*valeurLue*1000/1024;
//temperature = tension/10;
for(i=1;i < =nombre_echantillons;i++) { // moyenne sur 20 mesures allumer_led_mesure(); valeurLue = analogRead(temperaturePin); temperature_t = ( 5.0 * valeurLue * 100.0) / 1024.0; temperature = temperature + temperature_t; delay(500); eteindre_led_mesure(); delay(500); } temperature = temperature/nombre_echantillons; Serial.print(valeurLue); Serial.print(" -->« );
Serial.print(temperature);Serial.println( » C »);

return temperature;
}

void allumer_chauffage() {
//activer sortie digitale relais
digitalWrite(pin_arduino_relais1, LOW);
allumer_led_chauffage();
}

void fermer_chauffage() {
//desactiver sortie digitale relais
digitalWrite(pin_arduino_relais1, HIGH);
eteindre_led_chauffage();
}

void allumer_led_mesure() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_mesure, HIGH);
}

void eteindre_led_mesure() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_mesure, LOW);
}
void clignoter_led_mesure() {
allumer_led_mesure();
delay(250);
eteindre_led_mesure();
delay(250);
}
void allumer_led_chauffage() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_chauffage, HIGH);
}

void eteindre_led_chauffage() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_chauffage, LOW);
}

Laisser un commentaire