Réalisation régulation chauffage

Portrait de elamothe

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);}}

Portrait de Cédric29

Salut

As tu regarder les fonctions while et if?

Il va falloir que tu penses a gerer un hysteresis.

Portrait de Alex

Salut,

Oui je confirme le besoin de gérer une hysteresis.