Auteur Florent GALLERET | Dernière modification 1/02/2024 par Florent Galleret
L298N, Arduino, Régulation de température R_gulation_de_temp_rature_gr_ce___un_pont_en_H_L298N_arduino_montage.jpg Creation
Ce projet est réalisé dans le cadre de l'UE 5Ci803 (année universitaire 2023-2024) par Florent GALLERET, Khaled SERHANE, Christelle BERAUD et Audrey Tessa TCHONLA TCHIBONSOU
Il concerne une régulation de température d'une eau dans un bécher à l'aide d'un microcontrôleur Arduino et d'un pont en H L298N.
- Pompe
- Pont en H L298N
- Sonde de température DS18B20
- Résistance 4.7 kOhm
- Microcontrôleur Arduino UNO
- Breadboard
- Alimentation 12V
- Fils électriques
- Tuyaux d'eau
- Bécher 400 mL
- Plaque chauffante
- Eau fraîche
- Gaine thermique (cuivre)
Le système a refroidir est un système matérialisé par de l'eau portée à différentes températures placée dans un bécher dans lequel est placé une gaine thermique en cuivre et chauffé par une plaque chauffante.
La pompe (ici symbolisée par Moteur) permet de pomper de l'eau fraîche d'un autre bécher, passant par les tuyaux d'eau et la gaine thermique.
Le pont en H L298N permet de faire tourner le moteur à différents régimes lorsqu'on est plus ou moins éloigné de la température de consigne. Ici, nous avons défini plusieurs valeurs de température pour lesquelles différentes vitesses de pompage sont définies. En effet, plus on s'approche de la température de régulation, plus le moteur va tourner à régime réduit, pour finalement se couper (voir étape 3). Cet élément alimente l'ensemble du système en 12V grâce à l'alimentation.
La sonde de température permet de mesurer la température à l'instant T dans le système.
Le microcontrôleur Arduino permet de faire communiquer entre eux les éléments du montage et de relier l'ensemble des composants du système ensemble, par l'intermédiaire de la breadboard.
Pour mettre en œuvre le système, nous connectons différents éléments (pont en H, microcontrôleur Arduino, pompe, sonde de température, résistance) à la breadboard afin qu'ils puissent communiquer entre eux.
Ci-contre un schéma du montage, correspondant aux éléments connectés aux broches dans le code (voir section suivante)
C'est le coeur de la régulation.
Ce code permet de définir précisément la manière dont le système sera régulé.
Ici, une température de consigne (T_regule) est définie à 28°C ainsi que différentes autres températures (delta1, delta2, delta3, delta 4 et delta5). Elles sont définies plus tard dans la boucle de configuration (void_setup) respectivement pour T_regule-3, T_regule-2, T_regule-1, T_regule+1_ Tregule+2 afin que le moteur tourne à différents régimes (régime maximal pour une température à plus de 2 degrés de la température de consigne, puis une diminution progressive du régime à mesure que l'on se rapproche de la température de consigne) pour finalement se couper lorsqu'il atteint T_regule-2. L'utilisateur voit directement sur l'interface Arduino IDE la température à laquelle est le système à l'instant T et la vitesse du moteur.
/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>
float T_regule = 28.0;
float delta1;
float delta2;
float delta3;
float delta4;
float delta5;
float Temperature;
#define borneENA 9 // On associe la borne "ENA" du L298N à la pin D9 de l'arduino
#define borneIN1 8 // On associe la borne "IN1" du L298N à la pin D8 de l'arduino
#define borneIN2 7 // On associe la borne "IN2" du L298N à la pin D7 de l'arduino
#define vitesseMinimale 60 // Rapport cylique minimal du signal PWM, pour faire tourner le moteur au minimum de sa vitesse (en pratique, on évitera de trop approcher la valeur 0)
#define vitesseMaximale 255 // Rapport cylique maximal du signal PWM, pour faire tourner le moteur au maximum de sa vitesse
int vitesse; // Spécifie la vitesse de rotation du moteur, entre son minimum (0) et son maximum (255) <= signal PWM
/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 10;
/* Code de retour de la fonction getTemperature() */
enum DS18B20_RCODES {
READ_OK, // Lecture ok
NO_SENSOR_FOUND, // Pas de capteur
INVALID_ADDRESS, // Adresse reçue invalide
INVALID_SENSOR // Capteur invalide (pas un DS18B20)
};
/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);
/**
* Fonction de lecture de la température via un capteur DS18B20.
*/
byte getTemperature(float *temperature, byte reset_search) {
byte data[9], addr[8];
// data[] : Données lues depuis le scratchpad
// addr[] : Adresse du module 1-Wire détecté
/* Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) */
if (reset_search) {
ds.reset_search();
}
/* Recherche le prochain capteur 1-Wire disponible */
if (!ds.search(addr)) {
// Pas de capteur
return NO_SENSOR_FOUND;
}
/* Vérifie que l'adresse a été correctement reçue */
crc8(addr, 7) != addr[7]) {
// Adresse invalide
return INVALID_ADDRESS;
}
/* Vérifie qu'il s'agit bien d'un DS18B20 */
if (addr[0] != 0x28) {
// Mauvais type de capteur
return INVALID_SENSOR;
}
/* Reset le bus 1-Wire et sélectionne le capteur */
ds.reset();
ds.select(addr);
/* Lance une prise de mesure de température et attend la fin de la mesure */
ds.write(0x44, 1);
delay(800);
/* Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad */
ds.reset();
ds.select(addr);
ds.write(0xBE);
/* Lecture du scratchpad */
for (byte i = 0; i < 9; i++) {
data[i] = ds.read();
}
/* Calcul de la température en degré Celsius */
*temperature = (int16_t) ((data[1] << 8)
fr none 0 Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #