Auteur Sofia SAHRANE | Dernière modification 9/12/2019 par Clementflipo
Arduino, Régulation Régulation_de_Température_par_Arduino_photo_wiki.jpg fr none Technique 0
Porteurs du projet: Mohamed-Ouassim BEHLOUL , Sofia SAHRANE , Katia MEDJBER, Saoussene KITOUNI , Katia MEHDI .
Encadré par M. Shayan TABIBIAN
Ce projet a été développé dans le cadre de relier le domaine électronique et chimique, intégré dans l'unité d'enseignement 5C803 (Optimisation et contrôle des procédés) en Ingénierie Chimique.
Responsable d'UE : M. Jerome PULPYTEL.
Il s'agit de réguler la température et le niveau d'eau par Arduino.
Ce système est souvent utilisé à l’échelle industrielle, dans les réacteurs à haute température pour éviter le risque d'emballement thermique.
Mp4
On chauffe de l'eau dans un bécher jusqu'à une température de 50 °C.
A l'instant où la température dépasse les 50 °C, le buzzer déclenche, et donne l'ordre à la pompe d'aspirer l'eau froide, afin de la faire circuler dans le tuyau qui est autour du bécher, sous forme de serpentin, qui sert à refroidir l'eau chaude.
La pompe aspire l'eau froide à partir d'un bac, qui sera constitué d'un capteur de niveau, et relié à une électrovanne. Quand le niveau d'eau dans le bac diminue, le buzzer déclenche et donne l'ordre à l'électrovanne de s'ouvrir, pour ajuster le niveau d'eau afin d'éviter la cavitation de la pompe et sa défaillance.
A l’aide d’une découpeuse laser, on découpe 4 plaques de bois pour construire un boitier qui nous sert de support pour la carte Arduino et la Bred Board, auxquels sont reliés tous les autres outils utilisés dans le projet, et cela pour être au niveau avec le bécher quand celui-là est mis sur la plaque chauffante.
On relie chaque instrument ( électrovanne, pompe, alarme, sondes de température, relay), à la carte Arduino, via des fils de connexion.
// Code Echangeur thermique!
#include "Adafruit_MAX31855.h"
// Pin de controle de la pompe
#define POMPE 7
// Pin de l'electrovanne
#define EV 6
// Pin du capteur de niveau
#define LL 13
// Pins du capteurs de température du reacteur
int T_React_DO = 5;
int T_React_CS = 4;
int T_React_CLK = 3;
// Pins du capteurs de température du liquide de refroidissement !
int T_froid_DO = 12;
int T_froid_CS = 11;
int T_froid_CLK = 10;
const int buzzer = 9; // Buzzer vers arduino Pin 9
int cpt = 0;
const int NombreDeBip = 5;
// température de déclenchement de l'alarme !
const double T_Limit = 55;
// température de fonction du reacteur
// valeur a maintenir par régulation
const double T_stable = 50;
// Constante d'amortissement de la régulation
const double Delta = 5;
// Capteur de niveau
int liquidLevel = 0;
int cntLevel = 0;
int LimitCntLevel = 10;
Adafruit_MAX31855 TC_react(T_React_CLK, T_React_CS, T_React_DO);
Adafruit_MAX31855 TC_froid(T_froid_CLK, T_froid_CS, T_froid_DO);
void buzzerTone() {
while (cpt < NombreDeBip) {
tone(buzzer, 1000);
delay(1000);
noTone(buzzer);
delay(1000);
cpt++;
}
cpt = 0;
}
void buzzerTemp(double temp) {
if (temp > T_Limit) {
tone(buzzer, 1000);
delay(500);
noTone(buzzer);
delay(500);
}
}
// fonction de régulation de la température
void TR_control(double temp_react, double temp_froid) {
// Déclenche la pompe si la température dépasse le seuil de stabilité
if (temp_react > T_stable){
tone(buzzer, 1000);
digitalWrite(POMPE, HIGH);
digitalWrite(EV, HIGH);
delay(1000);
noTone(buzzer);
}
// Arrête la pompe si on revient à une température stable - Delta
// le Delta correspond à la valeur d'amortissement de la température
else if((temp_react - Delta) <= T_stable){
digitalWrite(POMPE, LOW);
digitalWrite(EV, LOW);
noTone(buzzer);
}
}
// command de l'electrovanne
void EV_control(int level) {
if (liquidLevel == HIGH && cntLevel >= LimitCntLevel) {
// Open ElectroVanne
cntLevel++;
if (cntLevel >= LimitCntLevel){
digitalWrite(EV, HIGH);
}
}
else {
// Close ElectroVanne
cntLevel = 0;
digitalWrite(EV, LOW);
}
}
void setup() {
pinMode(POMPE, OUTPUT); //Set Pompe as an output//
pinMode(EV, OUTPUT); //Set ElectroVanne as an output//
pinMode(LL, INPUT); //Set Liquid sensor as an input//
Serial.begin(9600);
Serial.println("MAX31855 test");
// Attendre que le circuit MAX se stabilise.
delay(500);
}
void loop() {
// Affichage de la température courante de la température du reacteur
// Serial.print("Internal Reactor Temp = ");
// Serial.println(TC_react.readInternal());
// Lecture en degrés Celcius de la température du reacteur
double c_react = TC_react.readCelsius();
if (isnan(c_react)) {
Serial.println("Quelque chose ne fonctionne pas avec le TC_react!");
} else {
Serial.print("C_react = ");
Serial.println(c_react);
}
// Affichage de la température courante de la température de l'eau de refroidissement
// Serial.print("Cooling Fluid Temp = ");
// Serial.println(TC_froid.readInternal());
double c_froid = TC_froid.readCelsius();
if (isnan(c_froid)) {
Serial.println("Quelque chose ne fonctionne pas avec le TC_froid!");
} else {
Serial.print("C_froid = ");
Serial.println(c_froid);
}
// Declanche l'alarme si la température dépasse le seuil critique!
buzzerTemp(c_react);
// déclenchement de la pompe pour la régulation de la température du reacteur
TR_control(c_react, c_froid);
// Remplissage bac du liquide de refroidissement
// en fonction du capteur de niveau
// liquidLevel = digitalRead(LL);
// Serial.print("Level : ");
// Serial.println(liquidLevel);
// EV_control(liquidLevel);
// Attendre une 0.1 seconde
delay(100);
}
Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #