0% ont trouvé ce document utile (0 vote)
29 vues8 pages

Arduino Grafcet Simulation

Transféré par

MENGA MENGA patrick
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
29 vues8 pages

Arduino Grafcet Simulation

Transféré par

MENGA MENGA patrick
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 PDF, TXT ou lisez en ligne sur Scribd

Automatisme avec Arduino - Simulation GRAFCET

Projet de simulation d'une machine d'encaissage industrielle en utilisant Arduino et


des servomoteurs pour remplacer les vérins pneumatiques. Le programme reproduit
le GRAFCET fourni et permet de simuler le cycle complet avec des entrees/sorties
adaptees.
1. Probleme
La machine d'encaissage suit un GRAFCET industriel impliquant plusieurs verins pneumatiques,
vannes et moteurs.
L'objectif est de remplacer ces composants par des equivalents Arduino pour simuler le cycle
complet sur table.

Les verins sont remplaces par des servomoteurs, les vannes et moteurs sont simules par des LEDs
ou des sorties logiques, et les capteurs sont simules par des boutons poussoirs (fin de course,
detection presence).

Le GRAFCET fourni dans l'enonce decrit les etapes du cycle de production, de la mise en place des
bouteilles jusqu'au vissage des bouchons.
2. Composants
Table de correspondance entre les composants industriels et leurs equivalents Arduino :
Composant industriel Fonction Equivalent Arduino

Verin A Mise en place bouteille Servo A

Verin B Transfert convoyeur Servo B

Verin C Remplissage Servo C

Verin G Mise en place bouchon Servo G

Verin E Vissage Servo E

Vanne D Ouverture/fermeture remplissage LED / relais

Convoyeur Deplacement bouteilles Moteur DC

Capteurs fin de course Detection position verin Boutons poussoirs

BP Marche Lancement cycle Bouton

BP Arret Arret en fin de cycle Bouton

Arret d'urgence Arret immediat Bouton rouge


3. Mini-cours Arduino
Arduino est une plateforme microcontroleur qui permet de lire des capteurs (entrees) et de
commander des actionneurs (sorties).

Structure d'un programme :


- setup() : initialisation des entrees/sorties
- loop() : boucle principale executee en continu

Les composants sont relies a des broches numeriques ou analogiques, configurees en INPUT ou
OUTPUT.

int bouton = 2;
int led = 13;

void setup() {
pinMode(bouton, INPUT);
pinMode(led, OUTPUT);
}

void loop() {
int etat = digitalRead(bouton);
if (etat == HIGH) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
4. Exemples de programmation
Voici quelques exemples pour programmer chaque composant separement avant d'aborder le
GRAFCET complet.
// LED + bouton poussoir
int bouton = 2;
int led = 13;

void setup() {
pinMode(bouton, INPUT_PULLUP);
pinMode(led, OUTPUT);
}

void loop() {
if (digitalRead(bouton) == LOW) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
// Servo moteur
#include <Servo.h>
Servo verin;
int boutonServo = 2;

void setup() {
[Link](9);
pinMode(boutonServo, INPUT_PULLUP);
}

void loop() {
if (digitalRead(boutonServo) == LOW) {
[Link](90);
} else {
[Link](0);
}
}
5. Programmation du GRAFCET complet
#include <Servo.h>

#define BP_MARCHE 2
#define BP_ARRET 3
#define BP_URGENCE 4
#define FC_A 5
#define FC_B 6
#define FC_C 7
#define FC_G 8

#define MOTEUR_CONV 9
#define VANNE_D 10
#define LED_VISSE A2

Servo servoA, servoB, servoC, servoG, servoE;

int etape = 0;
bool marche = false;

void setup() {
pinMode(BP_MARCHE, INPUT_PULLUP);
pinMode(BP_ARRET, INPUT_PULLUP);
pinMode(BP_URGENCE, INPUT_PULLUP);
pinMode(FC_A, INPUT_PULLUP);
pinMode(FC_B, INPUT_PULLUP);
pinMode(FC_C, INPUT_PULLUP);
pinMode(FC_G, INPUT_PULLUP);
pinMode(MOTEUR_CONV, OUTPUT);
pinMode(VANNE_D, OUTPUT);
pinMode(LED_VISSE, OUTPUT);
[Link](11);
[Link](12);
[Link](13);
[Link](A0);
[Link](A1);
stopAll();
}

void loop() {
if (digitalRead(BP_MARCHE) == LOW) marche = true;
if (digitalRead(BP_ARRET) == LOW) marche = false;
if (digitalRead(BP_URGENCE) == LOW) {
marche = false;
stopAll();
etape = 0;
}
if (!marche) return;
switch (etape) {
case 0:
etape = 1;
break;
case 1:
[Link](90);
if (digitalRead(FC_B) == LOW) etape = 2;
break;
case 2:
[Link](90);
if (digitalRead(FC_A) == LOW) {
[Link](0);
etape = 3;
}
break;
case 3:
[Link](90);
digitalWrite(VANNE_D, HIGH);
delay(2000);
digitalWrite(VANNE_D, LOW);
[Link](0);
etape = 4;
break;
case 4:
[Link](90);
if (digitalRead(FC_G) == LOW) {
[Link](90);
digitalWrite(LED_VISSE, HIGH);
delay(2000);
digitalWrite(LED_VISSE, LOW);
[Link](0);
[Link](0);
etape = 1;
}
break;
}
}

void stopAll() {
digitalWrite(MOTEUR_CONV, LOW);
digitalWrite(VANNE_D, LOW);
digitalWrite(LED_VISSE, LOW);
[Link](0);
[Link](0);
[Link](0);
[Link](0);
[Link](0);
}

Vous aimerez peut-être aussi