Régulation de la température d'une réaction exothermique simulée
Régulation de la température d'une réaction exothermique simulée
L’objectif de notre projet est de réguler la température à l’intérieur d’un réacteur à 20°C par la mise en place d’un système automatisé qui va selon les conditions va activer une pompe pour permettre au fluide caloporteur de circuler et ainsi abaisser la température dans le réacteur. L’eau présente à l’intérieur du réacteur chauffe car nous avons introduit dans le réacteur un gel qui libère progressivement de la chaleur. L’objectif est donc de simuler une réaction exothermique et de contrôler la température du réacteur afin d’éviter tout emballement thermique.
:
Nous avons dans un premier temps fait un grafcet de notre projet pour décrire les différentes étapes de notre système de régulation pour pouvoir ensuite faire une liste des différents composants qui vont être demandés.
Capteur de température numérique DS18B20 étanche |
× 1 |
Pompe |
× 2 |
Motor Shield V2.0 |
× 1 |
Arduino Uno |
× 1 |
Résistance pull-up de 4,7 kΩ |
× 1 |
Fils de liaison |
~ 15 |
Résistance led |
× 1 |
Câble USB type A/B |
× 1 |
Alimentation de 12V |
X 1 |
Double enveloppe |
X 1 |
Tuyaux |
X 4 |
fig.1 Tableau des différents composants électroniques utilisés
Jour 2:
Le deuxième jour était consacré au capteur de température. Nous avons tout d’abord simulé sur Tinkercad le montage du circuit pour voir si le code que nous avons implémenté était opérationnel.
fig.2A Schéma de montage du capteur de température étanche sur la carte arduino
Fil noir (GND) |
Terre |
Fil jaune (DQ) |
Pin 2 Arduino et via une résistance de 4,7 kΩ à 5V |
Fil rouge (Vdd ) |
5V |
fig.2B Tableau des connexions du capteur de température numérique
Une fois que le code est fonctionnel, nous avons assemblé le capteur de température sur la carte arduino en utilisant des fils de liaisons. L’assemblage a été réalisé par soudage en utilisant de l'étain. Après avoir monté le circuit électrique, l'objectif était de déterminer si le capteur de température était directement fonctionnel ou bien nécessitant une étape de calibrage. Pour cela, nous avons implémenté un code qui avait pour rôle de mesurer la température du milieu et de l’afficher sur le driver. Le capteur de température DS18B20 intègrent des circuits de commande qui simplifient la programmation grâce à des bibliothèques préconfigurées, permettant ainsi de convertir le signal électrique en température. Un test à été ensuite réalisé qui consistait à mesurer la température du milieu (Eau chaude, Eau froide) via notre capteur et de la comparer avec la valeur fournie par un thermomètre. Dans notre cas, le capteur de température était déjà calibré et prêt à l’emploi.
Jour 3:
L’objectif de la seconde étape était de réussir à faire fonctionner la pompe avec une alimentation supplémentaire de 12V sans endommager la carte arduino. Nous avons donc décidé d’utiliser un “motor shield” qui est un dispositif conçu pour contrôler et alimenter des moteurs. Il s'agit d'une carte d'extension que l'on place sur une carte Arduino pour faciliter le contrôle des moteurs. Les motor shields intègrent des circuits de commande de moteurs et simplifient la programmation grâce à des bibliothèques préconfigurées, permettant ainsi de contrôler facilement la vitesse, la direction, et d'autres aspects des moteurs. Tout comme le capteur de température, la liaison entre la pompe et la carte arduino nécessite l’utilisation de fils de liaison et l’assemblage a été réalisé par soudage. Après assemblage du motor shield sur la carte arduino et montage du circuit électrique, nous avons testé la pompe en implémentant un code qui avait pour but d’activer la pompe pendant 2s puis de l’arrêter 5s et cela de manière répétitive.
Montage de la pompe sur le moteur 1 su shield motor
Jour 4:
La troisième étape était de réaliser le circuit électrique qui est la combinaison des deux premières étapes. Nous avons ensuite fusionné les deux premiers code en ajoutant une condition sur la température. La carte arduino avait donc pour rôle de faire fonctionner la pompe si et seulement si la température du milieu était supérieure à 20°C. Nous avons ensuite fait un test qui consistait à mesurer la température du milieu (eau chaude) pour voir si la pompe s'actionne bien lorsque la température était bien au-dessus de 20°C.
Le code final est donc le suivant:
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// Pin de données du capteur DS18B20
const int pinDonneesDS18B20 = 2; // Remplacez le numéro de la broche par celui que vous utilisez
// Seuil de température pour activer la pompe (30°C)
const float seuilTemperature = 20.0;
// Création d'une instance OneWire pour la communication avec le capteur
OneWire oneWire(pinDonneesDS18B20);
// Création d'une instance DallasTemperature pour la gestion du capteur
DallasTemperature sensors(&oneWire);
// Initialisation du shield moteur
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Création d'une instance du moteur 1
Adafruit_DCMotor *moteurPompe = AFMS.getMotor(1);
void setup() {
// Initialisation du port série
Serial.begin(9600);
Serial.println("Adafruit Motorshield v2 - Pompe Activation");
// Initialisation du capteur
sensors.begin();
// Initialisation du shield moteur
AFMS.begin();
}
void loop() {
// Demande au capteur de lire la température
sensors.requestTemperatures();
// Lecture de la température en degrés Celsius
float temperatureCelsius = sensors.getTempCByIndex(0);
// Vérification si la lecture est valide
if (temperatureCelsius != DEVICE_DISCONNECTED_C) {
// Affichage de la température sur le moniteur série
Serial.print("Température : ");
Serial.print(temperatureCelsius);
Serial.println(" degrés Celsius");
// Activation de la pompe si la température est supérieure au seuil
if (temperatureCelsius > seuilTemperature) {
moteurPompe->setSpeed(255); // Vitesse maximale
moteurPompe->run(FORWARD); // Sens horaire
Serial.println("Pompe activée !");
} else {
moteurPompe->setSpeed(0); // Arrêt du moteur
Serial.println("Pompe désactivée");
}
} else {
Serial.println("Erreur de lecture du capteur");
}
// Attente d'une seconde avant la prochaine mesure
delay(1000);
}
Jour 5:
Nous avons assemblé tout d’abord le support qui nous a été fourni afin de fixer les différents composants. Une fois que le support est monté, nous avons fixé les pompes, la carte arduino et le breadboard sur le support en perçant des trous. Nous avons ensuite pris les dimensions pour pouvoir couper les différents tuyaux dans lesquels le fluide caloporteur va circuler. Comme la double enveloppe ne nous a pas été fournie pour des raisons financières, nous avons placé un bocal (réacteur) dans un bocal plus grand qui fait office de double enveloppe.