Réalisation régulation chauffage

elamothe
lun, 03/14/2016 - 22:46
Bonsoir,
J'ai comme projet la réalisation d'un module qui me permettra de réguler un chauffage en fonction de la température de la pièce et d'une température consigne.
Pour cela j'ai déjà réussi a coupler un écran LCD,
-avec un capteur de température DS18B20(pour la prise de température de la pièce,
-un potentiomètre pour afficher une température consigne variable
J'arrive à afficher les deux températures sur mon écran,
Là ou je coince, c'est pour faire comparer ces 2 T° et actionner un relais pour faire lancer ma chaudière
j'aimerai coder la consigne suivante:
si la T° de la pièce est < à la T° consigne
alors le relais est HIGH
si non le relais est LOW
Merci d'avance pour votre aide.
Voici le code :
const int relais = 9;
#include "LiquidCrystal.h" //ajout de la librairie
#include <OneWire.h> // Inclusion de la librairie OneWire
#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp) {
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté
if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return false; // Retourne une erreur
}
if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return false; // Si le message est corrompu on retourne une erreur
if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
return false; // Si ce n'est pas le cas on retourne une erreur
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0x44, 1); // On lance une prise de mesure de température
delay(800); // Et on attend la fin de la mesure
ds.reset(); // On reset le bus 1-Wire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les octets reçus
// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;
// Pas d'erreur
return true;
}
LiquidCrystal lcd(11,10,5,4,3,2); //liaison 4 bits de données
void setup()
{
lcd.begin(8,2); //utilisation d'un écran 8 colonnes et 2 lignes
pinMode (relais,OUTPUT);
}
void loop() {{
float temp;
if(getTemperature(&temp)){
lcd.setCursor(0,0);
lcd.print("T:");//affiche la temperature de la piece
lcd.print(temp);
delay(1000);}
}
{
int sensorValue = analogRead(A0); // lit la valeur analogique sur la broche A0
// et met le résultat dans la variable
lcd.setCursor(0,1);
lcd.print("RGL T:");//affiche la temperature cosigne
lcd.print(sensorValue/40, DEC);
delay(500);}}
Cédric29
lun, 03/14/2016 - 23:19
Salut
As tu regarder les fonctions while et if?
Il va falloir que tu penses a gerer un hysteresis.
Alex
mar, 03/15/2016 - 20:31
Salut,
Oui je confirme le besoin de gérer une hysteresis.