Catégories
Arduino automatique Grafcet Projets Arduino Projets électroniques

GRAFCET | Arduino #26: Inverseur de source – Réseau de secours – Partie III

Objectifs

  1. Savoir comment ça marche l’inverseur réseau
  2. Savoir commander un inverseur réseau avec Arduino
  3. Savoir comment détecter la présence d’un réseau
  4. Savoir convertir une entrée analogique en entrée digitale
  5. Etc.

Voir le tuto pour plus de détails.

Grafcet des transitions

Grafect arduino

Programme Arduino

Un extrait du code est disponible ci-dessous. Vous pouvez consulter le tuto pour plus de détails. Les codes des projets seront accessibles gratuitement en ligne à la fin de la série et à la publication du livre.

Conversion des entrées

word Analog2LogiV1(word in, word seuil)
{
if (in>=seuil) return 1;
else return 0;
}

word Analog2LogiV2(word nn, int pinAx, word seuil)
{
float somme=0.0, vmoy=0.0;

switch (pinAx)
{
case 0:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A0);
vmoy=somme/(float)nn;
//Serial.print(vmoy); Serial.print(",");
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 1:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A1);
vmoy=somme/(float)nn;
//Serial.print(vmoy);Serial.print(","); Serial.println((float)analogRead(A1));
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 2:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A2);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 3:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A3);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 4:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A4);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;

case 5:
for(word i=0;i<nn; i++)somme+=(float)analogRead(A5);
vmoy=somme/(float)nn;
if((word)vmoy>=seuil) return 1;
else return 0; break;


default:
return 0;
}
}

Initialisation des E/S

void InitStateIO(bool *Etapes, word numEtapes, word *Inputs,word numIn,  word *Outputs, word numOut)
{
// Désactivation des étapes
for(word i=0;i<numEtapes;i++)
Etapes[i]=false;

// Activation d'une ou plusieurs étapes par défaut
Etapes[0]=true;

// Initialisation des entrées
for(word i=0;i<numIn;i++)
Inputs[i]=false;

// Initialisation des sorties
for(word i=0;i<numOut;i++)
Outputs[i]=false;

// Init des pins des entrées
pinMode(2, INPUT); // Dcy - Inputs[0]
// PrinActif -A0- Inputs[1]
// SecActif -A1- Inputs[2]

// Init des pins des sorties
pinMode(3, OUTPUT); // PSec - Outputs[0]
pinMode(4, OUTPUT); // StartSec
pinMode(5, OUTPUT); // P
pinMode(6, OUTPUT); // S - Inputs[4]
}

Lecture des entrées

void GetInputs(word *Inputss)
{
// Entrées digitales
Inputss[0]=digitalRead(2); // D2
Inputss[1]=Analog2LogiV2(N,0,VSeuil); // A0
Inputss[2]=Analog2LogiV2(N,1,VSeuil); // A1
}

Programme Arduino

La série GRAFCET…

Obtenir le livre « Codage en C du GRAFCET avec ARDUINO« 

Laisser un commentaire