0% ont trouvé ce document utile (0 vote)
5 vues10 pages

Four Arduino Programme

Transféré par

dikwajonas1
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues10 pages

Four Arduino Programme

Transféré par

dikwajonas1
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

FOUR ÉLECTRIQUE TRIPHASÉ D'ÉTUVAGE


DE MOTEURS ASYNCHRONES
Avec Régulation PID — Simulation Proteus ISIS

Programme Arduino — Code Source Complet & Documenté

Conception et simulation d'un four électrique triphasé


Thème
d'étuvage

Filière DUT Génie Électrique

Microcontrôleur Arduino Uno (ATmega328P)

Logiciel sim. Proteus ISIS / Arduino IDE

Régulateur PID numérique discret (Kp=3.0 / Ki=0.25 / Kd=1.5)

Mémoire de Fin d'Études Page 1 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

1. Déclarations — Broches et Constantes

1.1 Tableau des broches Arduino


Broche Nom Type Rôle

A0 CAPTEUR_PIN Entrée analogique Lecture LM35 (température)

Commande résistances
D12 RELAIS_CHAUFFE Sortie numérique
chauffantes

Commande moteurs
D13 RELAIS_MOTEURS Sortie numérique
asynchrones (convection)

Alarme sonore/visuelle (T >


A1 RELAIS_ALARME Sortie numérique
270°C)

D8 BTN_START Entrée numérique Bouton démarrage cycle

D9 BTN_RESET Entrée numérique Bouton reset alarme


RS=D7, EN=D6, D4=D5,
D2–D7 LCD 16x2 Sorties 4 bits
D5=D4, D6=D3, D7=D2

1.2 Tableau des paramètres PID


Paramètre Valeur Unité Description

Gain proportionnel —
Kp 3.0 sans dimension
réactivité immédiate

Gain intégral — annule


Ki 0.25 sans dimension
l'erreur résiduelle

Gain dérivé — anticipe,


Kd 1.5 sans dimension
amortit les oscillations

Période d'échantillonnage
Te 100 millisecondes
(boucle 100 ms)

T_CONSIGNE 250 °C Consigne d'étuvage

T_PRECHAUFFA Cible de préchauffe avant


120 °C
GE étuvage

Seuil de déclenchement
T_ALARME 270 °C
alarme sécurité

Température de fin de
T_FIN 60 °C
refroidissement

Mémoire de Fin d'Études Page 2 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

2. Code Source Arduino Complet

2.1 En-tête et includes


Arduino Code
// ════════════════════════════════════════════════════════════
// FOUR ÉLECTRIQUE TRIPHASÉ D'ÉTUVAGE DE MOTEURS ASYNCHRONES
// Régulation PID numérique — Machine à 6 états
// Plateforme : Arduino Uno (ATmega328P)
// Simulation : Proteus ISIS
// ════════════════════════════════════════════════════════════

#include <LiquidCrystal.h>

2.2 Définition des broches


Arduino Code
// ─── Broches physiques ───────────────────────────────────────
#define CAPTEUR_PIN A0 // LM35 : sortie analogique
#define RELAIS_CHAUFFE 12 // Résistances chauffantes triphasées
#define RELAIS_MOTEURS 13 // Moteurs asynchrones (convection forcée)
#define RELAIS_ALARME A1 // Alarme sonore / LED rouge
#define BTN_START 8 // Bouton démarrage cycle
#define BTN_RESET 9 // Bouton reset alarme

// ─── LCD 16x2 mode 4 bits (RS, EN, D4, D5, D6, D7) ─────────
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

2.3 Constantes thermiques


Arduino Code
// ─── Seuils de température (°C) ──────────────────────────────
const float T_PRECHAUFFAGE = 120.0;
const float T_CONSIGNE = 250.0;
const float T_ALARME = 270.0;
const float T_FIN = 60.0;

// ─── Durée d'étuvage : 1 heure = 3 600 000 ms ────────────────


const unsigned long DUREE_ETUVAGE = 3600000UL;

2.4 Paramètres PID


Arduino Code
// ─── Gains PID ────────────────────────────────────────────────
const float Kp = 3.0;
const float Ki = 0.25;
const float Kd = 1.5;
const unsigned long Te = 100; // Période d'échantillonnage (ms)

// ─── Variables internes PID ───────────────────────────────────


float erreur = 0.0;
float erreurPrecedente = 0.0;
float sommeErreurs = 0.0; // Terme intégral accumulé
float commande = 0.0; // Sortie PID bornée [0, 255]

Mémoire de Fin d'Études Page 3 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

2.5 Machine à états — Enum et variables globales


Arduino Code
// ─── 6 états du four ──────────────────────────────────────────
enum Etat {
ATTENTE, // Four en veille, prêt au démarrage
PRECHAUFFAGE, // Montée vers 120°C
ETUVAGE, // Maintien à 250°C pendant la durée programmée
REFROIDISSEMENT, // Descente naturelle/forcée jusqu'à 60°C
ALARME, // T >= 270°C — sécurité activée
FIN // Cycle terminé
};

Etat etatActuel = ATTENTE;

// ─── Gestion temporelle ───────────────────────────────────────


unsigned long tPrecedent = 0; // Dernier instant d'échantillonnage
unsigned long chronoEtuvage = 0; // Instant de début d'étuvage
float temperature = 0.0; // Température mesurée courante

Mémoire de Fin d'Études Page 4 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

2.6 Fonction lireTemperature()


Le capteur LM35 délivre 10 mV par degré Celsius. L'ADC 10 bits de l'Arduino mesure une tension
entre 0 et 5 V, soit 1024 niveaux. La conversion est donc :
Arduino Code
float lireTemperature() {
int valADC = analogRead(CAPTEUR_PIN);
// Conversion ADC → tension (0..5V)
float tension = (valADC * 5.0) / 1023.0;
// LM35 : 10 mV/°C → tension * 100 = température en °C
return tension * 100.0;
}

2.7 Fonction reinitialiserPID()


Appelée à chaque transition d'état pour éviter le phénomène de windup intégral. Si cette
réinitialisation est omise, l'intégrale accumulée dans l'état précédent provoque un dépassement
brutal en début du nouvel état.
Arduino Code
void reinitialiserPID() {
erreur = 0.0;
erreurPrecedente = 0.0;
sommeErreurs = 0.0;
commande = 0.0;
}

2.8 Fonction calculerPID()


Implémentation numérique discrète (méthode d'Euler) du correcteur PID :
Arduino Code
float calculerPID(float consigne, float mesure) {

// ── Calcul de l'erreur courante ─────────────────────────


erreur = consigne - mesure;

// ── Terme intégral avec anti-windup ─────────────────────


sommeErreurs += erreur * (Te / 1000.0);
sommeErreurs = constrain(sommeErreurs, -1000.0, 1000.0);

// ── Terme dérivé (vitesse de variation de l'erreur) ─────


float derivee = (erreur - erreurPrecedente) / (Te / 1000.0);
erreurPrecedente = erreur; // Mémorisation pour le prochain cycle

// ── Commande PID totale bornée entre 0 et 255 ───────────


float u = Kp * erreur + Ki * sommeErreurs + Kd * derivee;
return constrain(u, 0.0, 255.0);
}

2.9 Fonction afficherLCD()


Arduino Code
void afficherLCD(const char* etatStr, float temp, float consigne) {
// Ligne 0 : État courant
[Link](0, 0);
[Link](etatStr);
// Complète avec espaces pour effacer les caractères restants
for (int i = strlen(etatStr); i < 16; i++) [Link](" ");

// Ligne 1 : T mesurée et consigne


[Link](0, 1);

Mémoire de Fin d'Études Page 5 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique
[Link]("T=");
[Link](temp, 1);
[Link]((char)223); // Symbole degré °
[Link]("C C=");
[Link](consigne, 0);
[Link]((char)223);
[Link]("C ");
}

Mémoire de Fin d'Études Page 6 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

3. Machine à États Finis — Fonction gererEtat()

La fonction gererEtat() est appelée toutes les 100 ms par la boucle principale. Elle lit la
température, vérifie l'alarme en priorité absolue, puis exécute la logique de l'état courant via un
switch/case.

3.1 Vérification alarme prioritaire + switch principal


Arduino Code
void gererEtat() {

// ── Lecture capteur ──────────────────────────────────────


temperature = lireTemperature();

// ── ALARME : priorité absolue, vérifiée avant tout ───────


if (temperature >= T_ALARME && etatActuel != FIN) {
etatActuel = ALARME;
}

switch (etatActuel) {

3.2 État ATTENTE


Arduino Code
// ════════════════════════════════════════════════════════
case ATTENTE:
digitalWrite(RELAIS_CHAUFFE, LOW);
digitalWrite(RELAIS_MOTEURS, LOW);
digitalWrite(RELAIS_ALARME, LOW);
[Link](0, 0); [Link]("FOUR PRET ");
[Link](0, 1); [Link]("Appuyer START ");
// Transition → PRECHAUFFAGE sur appui bouton
if (digitalRead(BTN_START) == HIGH) {
reinitialiserPID();
etatActuel = PRECHAUFFAGE;
}
break;

3.3 État PRECHAUFFAGE


Arduino Code
// ════════════════════════════════════════════════════════
case PRECHAUFFAGE:
digitalWrite(RELAIS_MOTEURS, HIGH); // Ventilateurs ON
commande = calculerPID(T_PRECHAUFFAGE, temperature);
digitalWrite(RELAIS_CHAUFFE, commande > 10.0 ? HIGH : LOW);
afficherLCD("PRECHAUFFAGE", temperature, T_PRECHAUFFAGE);
// Transition → ETUVAGE quand T atteint 120°C
if (temperature >= T_PRECHAUFFAGE) {
reinitialiserPID();
chronoEtuvage = millis(); // Démarrage chronomètre
etatActuel = ETUVAGE;
}
break;

3.4 État ETUVAGE


Arduino Code

Mémoire de Fin d'Études Page 7 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique
// ════════════════════════════════════════════════════════
case ETUVAGE:
digitalWrite(RELAIS_MOTEURS, HIGH);
commande = calculerPID(T_CONSIGNE, temperature);
digitalWrite(RELAIS_CHAUFFE, commande > 10.0 ? HIGH : LOW);
afficherLCD("ETUVAGE 250C", temperature, T_CONSIGNE);
// Transition → REFROIDISSEMENT après durée programmée
if (millis() - chronoEtuvage >= DUREE_ETUVAGE) {
reinitialiserPID();
etatActuel = REFROIDISSEMENT;
}
break;

3.5 État REFROIDISSEMENT


Arduino Code
// ════════════════════════════════════════════════════════
case REFROIDISSEMENT:
digitalWrite(RELAIS_CHAUFFE, LOW); // Chauffe coupée
digitalWrite(RELAIS_MOTEURS, HIGH); // Ventilation forcée ON
afficherLCD("REFROIDISSEMENT", temperature, 0.0);
// Transition → FIN quand T <= 60°C
if (temperature <= T_FIN) {
etatActuel = FIN;
}
break;

3.6 État ALARME


Arduino Code
// ════════════════════════════════════════════════════════
case ALARME:
digitalWrite(RELAIS_CHAUFFE, LOW);
digitalWrite(RELAIS_MOTEURS, LOW);
digitalWrite(RELAIS_ALARME, HIGH); // Sirène / LED rouge ON
[Link](0, 0); [Link]("!! ALARME !! ");
[Link](0, 1);
[Link]("T="); [Link](temperature, 1);
[Link]((char)223); [Link]("C DANGER!");
// Retour → ATTENTE après reset manuel opérateur
if (digitalRead(BTN_RESET) == HIGH) {
digitalWrite(RELAIS_ALARME, LOW);
reinitialiserPID();
etatActuel = ATTENTE;
}
break;

3.7 État FIN


Arduino Code
// ════════════════════════════════════════════════════════
case FIN:
digitalWrite(RELAIS_CHAUFFE, LOW);
digitalWrite(RELAIS_MOTEURS, LOW);
digitalWrite(RELAIS_ALARME, LOW);
[Link](0, 0); [Link]("CYCLE TERMINE ");
[Link](0, 1); [Link]("Moteur pret :) ");
break;

} // fin switch
} // fin gererEtat()

Mémoire de Fin d'Études Page 8 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

4. Fonctions setup() et loop()

4.1 setup() — Initialisation


Arduino Code
void setup() {
// ── LCD 16x2 ─────────────────────────────────────────────
[Link](16, 2);
[Link]();

// ── Modes des broches ─────────────────────────────────────


pinMode(RELAIS_CHAUFFE, OUTPUT);
pinMode(RELAIS_MOTEURS, OUTPUT);
pinMode(RELAIS_ALARME, OUTPUT);
pinMode(BTN_START, INPUT);
pinMode(BTN_RESET, INPUT);

// ── État initial sûr (tout OFF) ───────────────────────────


digitalWrite(RELAIS_CHAUFFE, LOW);
digitalWrite(RELAIS_MOTEURS, LOW);
digitalWrite(RELAIS_ALARME, LOW);

// ── Message d'accueil ─────────────────────────────────────


[Link](0, 0); [Link]("FOUR ETUVAGE");
[Link](0, 1); [Link]("Initialisation..");
delay(1500);
[Link]();
}

4.2 loop() — Boucle principale non bloquante


Arduino Code
void loop() {
unsigned long tActuel = millis();

// Exécution toutes les 100 ms (Te) — non bloquant


if (tActuel - tPrecedent >= Te) {
tPrecedent = tActuel;
gererEtat(); // Cœur du programme
}
}

Point clé Explication pour la soutenance

millis() est non bloquant : l'Arduino reste réactif entre deux cycles
millis() vs delay()
de 100ms. delay() fige tout le programme.

constrain() empêche la sommeErreurs de dépasser ±1000, évitant


Anti-windup
un dépassement brutal au démarrage d'un nouvel état.

Remet l'intégrale à zéro à chaque transition d'état pour éviter les


reinitialiserPID()
transitoires. C'est une pratique industrielle standard.

Vérifiée AVANT le switch() : garantit que même en plein étuvage,


Alarme prioritaire
une surchauffe déclenche immédiatement la sécurité.

Rend le code lisible et maintenable. Chaque état est un nom


enum Etat
explicite, pas un chiffre arbitraire.

Mémoire de Fin d'Études Page 9 / 10


Four Électrique Triphasé d'Étuvage — Programme Arduino | DUT Génie Électrique

5. Déploiement dans Proteus ISIS

5.1 Étapes de compilation et transfert

Éta
Action Détail
pe

1 Compiler dans Arduino IDE Sketch → Export compiled Binary → génère le fichier .hex

Double-cliquer sur le composant Arduino Uno dans le


2 Ouvrir Proteus ISIS
schéma

3 Charger le fichier .hex Propriétés → Program File → sélectionner le .hex compilé

Remplacer par une source de tension variable (10mV/°C)


4 Configurer le LM35 simulé
sur A0

Bouton Play ► — Observer le LCD et les relais qui


5 Lancer la simulation
commutent

Faire varier la tension source pour simuler


6 Valider les transitions
montée/descente en température

5.2 Composants Proteus requis


Composant Proteus Référence ISIS Rôle dans la simulation

Arduino Uno ARDUINO UNO R3 Microcontrôleur principal, reçoit le .hex

LCD 16x2 LM016L Affichage température et état courant

Source 0–2.5V (= 0–250°C) pilotée


LM35 (simulé) DC Voltage Source
manuellement

Simulation commande chauffe, moteurs,


Relais 5V × 3 RELAY
alarme

Résistances 10kΩ RES Pull-down sur BTN_START et BTN_RESET

✔ Note de déploiement : Le code est optimisé pour une fréquence d'horloge de 16 MHz
(Arduino Uno). Pour modifier la durée d'étuvage, changer uniquement la constante
DUREE_ETUVAGE. Pour ajuster la régulation, modifier Kp, Ki, Kd dans la section des paramètres
PID.

Mémoire de Fin d'Études Page 10 / 10

Vous aimerez peut-être aussi