19
Système automatique de pompage avec Arduino FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr Objectifs Savoir le principe de fonctionnement d’un système de pompage automatique Savoir faire le chronogramme des taches d’un système automatique (Grafcet) Se familiariser avec l’implémentation d’un GRAFCET Savoir comment implémenter un Grafcet avec Arduino Savoir comment simuler le fonctionnement d’un système Avec Arduino Etc. Vidéo démonstration

Système automatique de pompage avec Arduino

  • Upload
    others

  • View
    13

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

ObjectifsSavoir le principe de fonctionnement d’un système de pompage automatiqueSavoir faire le chronogramme des taches d’un système automatique (Grafcet)Se familiariser avec l’implémentation d’un GRAFCETSavoir comment implémenter un Grafcet avec ArduinoSavoir comment simuler le fonctionnement d’un système Avec ArduinoEtc.

Vidéo démonstration

Page 2: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

FonctionnementLe mini projet est un système automatique de pompage. Il sert à contrôler le remplissaged’un réservoir d’eau (ou fluide) d’une manière automatique en utilisant une pompeélectrique. Le montage est constitué des éléments suivants :

Pompe (P) : Elle permet de remplir le réservoir avec de l’eau lorsque le niveau d’eau estfaible. La pompe est mise en marche lorsque le niveau d’eau est atteint de niveau bas (B).Elle s’arrête lorsque le niveau d’eau arrive au niveau haut (H).

Carte relais : Mise en marche/arrêt de la pompe. La carte relais contient un relais depuissance (AC/DC) qui assure la mise sous tension de la pompe. Les caractéristiques du relaisdoivent être adéquates avec celle de la pompe (tension, puissance). Nous utiliserons dans ceprojet un relais (250V/10A) menu avec un étage de puissance (isolation optique, transistor,diode de retour, etc.). En effet une tension TOR 5V à faible courant permet de déclencher lerelais. Le relais ne nécessite pas un transistor de puissance, tout est intègre dans la carterelais !

Page 3: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Page 4: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Détecteurs de niveaux : Le réservoir dispose de deux détecteur TOR de niveaux Haut (H)et Bas (B). Les deux détecteurs fournissent un signal logique de la façon suivante :

« 0 » : Lorsque le fluide n’attient pas le détecteur, ce dernier fournit un niveau logiquebas ou une tension égale à 0V« 1 » : Lorsque le fluide attient le détecteur, ce dernier fournit un niveau logique haut ou une tension égale à 5V

LEDs indicatrices : On dispose de trois voyants lumineux (LEDs) indiquent l’état desdétecteurs et celui de la pompe :

LED (P) : Illustre l’état de la pompe. Elle s’allume lorsque la pompe est mise en routeLED (H) : Illustre l’état du détecteur (H). Elle s’allume lorsque le fluide attient le niveauhautLED (B): Illustre l’état du détecteur (B). Elle s’allume lorsque le fluide attient le niveaubas

Carte Arduino : Il sert à contrôler l’ensemble du système (lecture des détecteurs et envoiedes consignes aux LEDs et à la pompe)

Comment fabriquer facilement undétecteur du niveau ?

Voir le projet: Capteur de niveau d’eau avec Arduino

Chronogramme du systèmeOn considère la variable HB sur deux bits : Bit du poids fort H indique l’état du détecteur, Bpour celui du bas. Exemples : HB=00 : Les deux détecteurs sont inactifs, HB=01 : Détecteur

Page 5: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

bas actif, etc. Le programme principal contient 4 états :

Phase de remplissageÉtat « 1 » : Il est la position initiale du système. Il faut assurer que le réservoir est videavant de lancer le programme. En effet, lorsque le réservoir est vide HB=00. Durant cetétat, le programme mis en route la pompe (P=1) tant que HB=00. Lorsque HB=01, leprogramme transit à l’état suivantÉtat « 2 » : Le programme mis en route la pompe (P=1) tant que HB=01. Autrementdit, le pompe continue de remplir le réservoir tant le détecteur H n’est pas attient. Unefois HB=11, le programme passe à l’état suivant

Phase de vidangeÉtat « 3 » : Le programme met en arrêt la pompe tant le réservoir est plient (HB=11)ou défaut du détecteur bas (HB=10). En effet, l’état 10 n’est pas envisageable dans caspratique car il ‘est pas possible que le fluide atteigne le niveau haut (H=1) sans que leniveau bas soit actif (B=1). Par conséquent, la présence de l’état HB=10 estcertainement un défaut du détecteur bas. Le programme transit à l’état suivant le fluidequitte le détecteur haut (HB=01)État « 4 » : La pompe reste en état d’arrêt (P=0) tant que le détecteur B est actif(HB=01) (fluide entre H et B). Lorsque le fluide arrive au dessous du détecteur B(HB=00) on relance le cycle de fonctionnent. Ci-dessous le chronogramme du système.

Chronogramme

Page 6: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Page 7: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Page 8: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Page 9: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Câblage des composantsDétecteur B: Pin 2Détecteur H: 3LED (B): 5LED (H): 6LED (P): 9Pompe (P): 10

Programme principal

Lecture des détecteurs : GetHB()La fonction GetHB() permet de lire les états des détecteurs H et B et renvoie une valeurcomprise entre 0 et 3. En effet la valeur de retour est notre variable HB !

HB=0 lorsque H=0 & B=0HB=1 lorsque H=0 & B=1HB=2 lorsque H=1 & B=0HB=3 lorsque H=1 & B=1

int GetHB(int H_Pin, int B_Pin){ int HB=0; if(digitalRead(B_Pin)==1) HB=HB+1; if(digitalRead(H_Pin)==1) HB=HB+2; return HB;}

Page 10: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Mise en marche de la pompe et son indicateurSetPompe()La LED (P) reflète l’état de la pompe P en revanche le relais est activé niveau bas. Autrementdit, le relais est actif lorsque la sortie numérique 10 de la carte Arduino est égale à « 0 »(inactif à « 1 »). Par conséquent, les états des sorties 9 et 10 doivent être complémentaireset déclenchés en parallèle. La fonction SetPompe() permet d’activer les deux sorties enrespectant l’état de chacune.

void SetPompe(byte P_val, int PP, int P_LEDD ){ if(P_val==0) { digitalWrite(P_LEDD, LOW); digitalWrite(PP, HIGH); } else { digitalWrite(P_LEDD, HIGH); digitalWrite(PP, LOW); }}

Activation des voyants H et B SetLED()La fonction SetLED() active les LED H et B en fonction de l’état de la variable HB

HB=0 : Deux LED éteintesHB=1 : LED B alluméeHB=2: LED H alluméeHB=3 : Deux LED allumées

Page 11: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

void SetLED(byte HB_val, int Flag_BB, int Flag_HH ){ switch (HB_val) { case 0: digitalWrite(Flag_BB, LOW); digitalWrite(Flag_HH, LOW); break; case 1: digitalWrite(Flag_BB, HIGH); digitalWrite(Flag_HH, LOW); break; case 2: digitalWrite(Flag_BB, LOW); digitalWrite(Flag_HH, HIGH); break; case 3: digitalWrite(Flag_BB, HIGH); digitalWrite(Flag_HH, HIGH); break; }}

Comment programmer un état ?On peut considérer un état comme une boucle infinie. On active une ou plusieurs sorties àl’intérieur de la boucle. La sortie de boucle est assurée par la validation de la transition versl’état suivant. Dans notre cas, durant l’état « 1 », on active la pompe et son indicateurlorsque HB=0 en boucle. Puis, on passe à l’état « 2 » lorsque HB=1. Ci-dessous laprogrammation de l’état « 1 » :

… // Etat '1' while(1) { // Lectures H & B HB_val=GetHB(H, B);

Page 12: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

// Condition de l'activation des sorties if(HB_val==0) { SetPompe(1, P,P_LED); SetLED(HB_val,Flag_B, Flag_H); } // Condition de passage à l'état suivant if(HB_val==1) break;

// Délais (pas nécessaire) delay(200); } …

Problème de démarrageNous constatons que la mise en marche de la pompe durant l’état « 1 » exige l’inactivationdes deux détecteurs (HB=0) ou le vidange du réservoir. Il est intéressant d’intégrer le modevidage (ou nettoyage) du réservoir d’une façon manuelle en utilisant par exemple uninterrupteur (« 1 » : Mode normal, « 0 » : Mode manuel). Durant ce mode on désactive lapompe (P=0) puis on affiche les états des LEDs. On met en marche par la suite le systèmelorsque les deux LED (H et B) sont éteintes.

void loop(){ if(Mode_Sel=1) { Mode Normal; } else { Mode vidange; }}

Page 13: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Programme principal// Entrées détecteur de niveauxconst int B = 2; // Basconst int H = 3; // Haut

// Sorties indicateurs (LEDs)const int Flag_B = 5;const int Flag_H = 6;int HB_val=0;

// Sortie pompeconst int P_LED = 9;const int P = 10;void setup(){ Serial.begin(9600); //Init pinMode(B,INPUT); pinMode(H,INPUT); pinMode(Flag_B,OUTPUT); pinMode(Flag_H,OUTPUT); pinMode(P,OUTPUT); pinMode(P_LED,OUTPUT); digitalWrite(Flag_B, LOW); digitalWrite(Flag_H, LOW); digitalWrite(P_LED, LOW); digitalWrite(P, HIGH);}

void loop(){ /*Serial.println(GetHB(H, B)); delay(1000); */ // Etat '1' while(1) { // Lectures H & B HB_val=GetHB(H, B);

// Condition de l'activation des sorties if(HB_val==0)

Page 14: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

{ SetPompe(1, P,P_LED); SetLED(HB_val,Flag_B, Flag_H); } // Condition de passage à l'état suivant if(HB_val==1) break;

// Délais (pas nécessaire) delay(200); } // Etat '2' while(1) { HB_val=GetHB(H, B); if(HB_val==1) { SetPompe(1, P,P_LED); SetLED(HB_val,Flag_B, Flag_H); } if(HB_val==3) break; delay(200); }

// Etat '3' while(1) { HB_val=GetHB(H, B); if((HB_val==3)||(HB_val==2)) { SetPompe(0, P,P_LED); SetLED(HB_val,Flag_B, Flag_H); } if(HB_val==1) break; delay(200); }

// Etat '4' while(1) { HB_val=GetHB(H, B); if(HB_val==1)

Page 15: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

{ SetPompe(0, P,P_LED); SetLED(HB_val,Flag_B, Flag_H); } if(HB_val==0) break;

delay(200); }}

int GetHB(int H_Pin, int B_Pin){ int HB=0; if(digitalRead(B_Pin)==1) HB=HB+1; if(digitalRead(H_Pin)==1) HB=HB+2; return HB;}

void SetLED(byte HB_val, int Flag_BB, int Flag_HH ){ switch (HB_val) { case 0: digitalWrite(Flag_BB, LOW); digitalWrite(Flag_HH, LOW); break; case 1: digitalWrite(Flag_BB, HIGH); digitalWrite(Flag_HH, LOW); break; case 2: digitalWrite(Flag_BB, LOW); digitalWrite(Flag_HH, HIGH); break; case 3: digitalWrite(Flag_BB, HIGH); digitalWrite(Flag_HH, HIGH); break; }}

Page 16: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

void SetPompe(byte P_val, int PP, int P_LEDD ){ if(P_val==0) { digitalWrite(P_LEDD, LOW); digitalWrite(PP, HIGH); } else { digitalWrite(P_LEDD, HIGH); digitalWrite(PP, LOW); }}

TéléchargementArduino: Système automatique de pompage avec Arduino

Photos du projet

Page 17: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Page 18: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Page 19: Système automatique de pompage avec Arduino

Système automatique de pompage avec Arduino

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Tout les projets microcontrôleur