Piloter un vérin pneumatique avec une Arduino

Bonjour,

Dans le cadre d'un projet mécanique, je souhaiterai piloter un vérin pneumatique avec une tempo.

Pour ce faire je penser utiliser une ARDUINO pour piloter le distributeur du vérin.

Dans le principe, le systèmes est simple:

Fonctionnement:

1 - Départ cycle via Bouton poussoir

2 - Descente vérin (Capteur vérin ouvert)

3 - Tempo 3s

4 - Montée vérin ( Capteur vérin fermé)

Le matériel:

le distributeur (FESTO VUVG-L10) tension de service 5V DC

Les 2 capteurs (IFM MK5101 ou FESTO SME-8-ZS-KL-LED-24) tension de service 24 V DC de type PNP

Les questions:

Les capteurs de type PNP sont ils compatible Arduino?

Puis-piloter le distributeur avec la carte ARDUINO?

Merci d'avance,

Damien

Bonjour,

Tout dépend de la puissance consommée par le distributeur mais il est probable qu'une interface soit utile

Il faudrait plus de précision sur le montage de tes capteurs. Le raccordement des capteurs n'est qu'un problème d'interface

Pour avoir plus de réponses, au lieu de mettre la référence d'un dispositif, y mettre un lien sur la documentation, le lieu d'achat...
Au lieu que tous ceux qui veulent bien aider aient tous à chercher, seul le demandeur va perdre un peu de son temps.

Bien sur, je vous transmet les infos:

lien du distributeur:
distributeur FESTO
Interface distributeur:
interface FESTO

Pour les capteurs, j ai 2 marques qui font des capteurs qui se montent directement dans la rainure du vérin:
Les capteur IFM : MK5101
Les capteurs FESTO : SMT-8M-A

J'espère que ca va vous aidez...

Bonjour damienzd

Oui, les deux,
IFM MK5101
image
SMT-8M-A
image

Avec une résistance de 10k en PULL-DOWN. Mettre le +5V sur L+ ou BN +.
L- ou BU - au GND.

La commande étant en 5V et consomme 0.35W et est déjà protégée
image

Un simple transistor NPN peut suffire à interfacer.
S'il y a plusieurs distributeurs, utiliser, plutôt, un ULN2803.

Le GND du 5V du capteur et du distributeur doivent être connectés avec le GND de l'Arduino.

Cordialement
jpbbricole

1 Like

Merci beaucoup ^^

Enfin non parce qu'il fonctionnent l'un en 24V et l'autre de 10 à 30V, donc ce sera un peu plus compliqué.
Il faut fractionner la résistance de charge pour avoir un diviseur de tension et garantir que la tension sur l'entrée de l'arduino ne dépassera jamais 5V.

1 Like

Fractionner la résistance de charge?
ceci dis... c'est une bonne remarque.... comment utiliser un capteur 24V avec une arduino?

Les capteur me permettent de connaitre la position du vérin, je doit pouvoir utiliser d'autres capteurs au besoin.

Bonjour fdufnews

Juste! Je n'avais vu que les contacts "secs" sur les symboles

Cordialement
jpbbricole

Bonjour damienzd

Avec un pont diviseur entre 4 ou BK et GND:
image
Exemple pour 24V.

Cordialement
jpbbricole

Et bien par exemple au lieu de placer une résistance de 10k entre L- et la sortie tu utilises 2 résistances en série. Une de 8,2k et une de 2,2k. La 8,2k connectée à la sortie, la 2,2k connectée à L-, le point milieu sur l'entrée de l'arduino.

Bonjour fdufnews

Avec ces valeurs, on arrive à 5.077V., avec la tolérance des résistances à 5%, on arrive jusqu'à 5.489V. Ne serais ce pas mieux de descendre R2 à 2k pour avoir, ainsi, 4.706V. max 5.096. 4.706V. étant suffisant pour voire ça comme un HIGH sur une entrée digitale de l'Arduino?
On assure, ainsi, une meilleur sécurité.
Calculés avec Calcul : pont diviseur de tension

Cordialement
jpbbricole

Ok... donc là....vous m avez perdu lol
Je doit brancher de cette manière?

Bonjour damienzd

Oui, avec 3 au GND commun. C'est pas Sortie Arduino mais Entrée Arduino :wink:
Comme j'ai proposé ici, je remplacerai la résistance de 2.2K par une de 2K pour plus de sécurité. Avec un Vout minimum de 4.339v. le HIGH (3V.) est assuré.

Cordialement
jpbbricole

Donc comme ceci ^^

Autre question...
Puis-je partager ici le code que j'ai pondu?
J ai tenter de faire une simulation avec THINKERCAD mais ca ne marche pas...

Bonjour damienzd

Oui, bien sûre!

Cordialement
jpbbricole

Alors le schéma de principe:


//Machine de bouterollage
//2021-07-28


int led01 = 5;// Led dcy = LED01
int led02 = 4;// Led defaut
int dcy = 9;// Bouton A = dcy
int C1 = 8;// Capteur vérin rentré = C1
int C2 = 7;// Capteur vérin sorti = C2
int relai = 3;// Distributeur = D1

void setup() 
{
  
  // Init sorties PWM
  pinMode(led01, OUTPUT);
  pinMode(led02, OUTPUT); 
  pinMode(dcy, INPUT);
  pinMode(C1, INPUT);
  pinMode(C2, INPUT);
  pinMode(relai, OUTPUT);
  
}

void loop() 
{
  int etat;
  etat=digitalRead(dcy)and digitalRead(C1);//regarde l'etat du boutton et du capteur C1
  if(etat=HIGH) {
  digitalWrite(relai,HIGH); // active le relais 5V et actionne D1
  digitalWrite(led01,HIGH); // allume la led01
  int etat1;
  etat1=digitalRead(C2);//regarde si vérin en position basse
  if(etat1=HIGH) {
    delay (3000); // tempo 3s
    digitalWrite(relai,LOW); // désactive le relais 5V
    digitalWrite(led01,LOW); // eteins la led
    }
    else {
    digitalWrite(led02,HIGH);
    delay(1000);
    digitalWrite(led02,LOW);
    delay(1000);
    }
  }
  else {
  digitalWrite(led02,HIGH);
  delay(1000);
  digitalWrite(led02,LOW);
  delay(1000);
  }
}

Et maintenant l'objectif:

1 - Appui su bouton poussoir "dcy" et vérin rentré (capteur C1);
2 - Le vérin descend via le distributeur "relai" et la led verte (led01) est allumé;
3 - le vérin arrive en fin de course et actionne le capteur C2;
4 - Tempo de 3s;
5 - le vérin rentre jusqu'au capteur C1;
6 - Fin de cycle la lumière verte s'éteins

Voila.... j'espère être clair... :smiley:
bien sur... pour thinkercad j ai remplacer le vérin par un moteur et les capteurs par des boutons

Bonjour damienzd

Je t'ai fait une simulation du pont diviseur:
image

A+
Cordialement
jpbbricole

Ah oui, je comprend!
Donc je doit faire 2 fois ce montage pour mes capteurs!

Bonjour damienzd
J'ai "revu" la partie "haute" de ton programme et y ai apporté quelques modifications, quand à la déclaration des ports, ce n'est pas utile d'utiliser des cases mémoires pour des choses, comme des pin de sortie et d'entrée qui sont fixe, int utilise de la mémoire, #define pas.

Pour ce qui est de l'initialisation de ces ports et au vu de ton schéma, quand les contacts sont ouverts, tes entrées sont "en l'air" parce qu'elles n'ont pas de résistances de PULL_UP, ce qui est très néfaste, ces entrées font, un peu, comme une antenne et peuvent bouger dans tout les sens. Ce défaut est corrigé par un:
pinMode(C1, INPUT_PULLUP);
qui mets la résistance interne de l'Arduino comme PULL_UP.
Montés ainsi, tes boutons ou commutateurs donnent un LOW quand ils sont fermés.

J'ai modifié mais pas testé ton programme pour fonctionner avec des états LOW.

Attention, sur ton schéma, les commutateurs qui représentes les capteurs fonctionnent à l'envers des capteurs, un capteur de vérin fermé == HIGH, un commutateur fermé == LOW, c'est pourquoi j'ai introduit ceci:

#define etatCapteurOn LOW     // Etat lu d'un capteur ferm

Le programme

//Machine de bouterollage
//2021-07-28

#define led01 5  // Led dcy = LED01
#define led02 4  // Led defaut
#define dcy 9  // Bouton A = dcy
#define C1 8  // Capteur vérin rentré = C1
#define C2 7  // Capteur vérin sorti = C2
#define relai 3 // Distributeur = D1

#define etatCapteurOn LOW     // Etat lu d'un capteur fermé

void setup()
{
	
	// Init sorties PWM
	pinMode(led01, OUTPUT);
	pinMode(led02, OUTPUT);
	pinMode(dcy, INPUT_PULLUP);
	pinMode(C1, INPUT_PULLUP);
	pinMode(C2, INPUT_PULLUP);
	pinMode(relai, INPUT_PULLUP);
	
}

void loop()
{
	//int etat;
	//etat=digitalRead(dcy)and digitalRead(C1);//regarde l'etat du boutton et du capteur C1
	if(digitalRead(dcy) == LOW && digitalRead(C1) == etatCapteurOn) {
		digitalWrite(relai,HIGH); // active le relais 5V et actionne D1
		digitalWrite(led01,HIGH); // allume la led01
		//int etat1;
		//etat1=digitalRead(C2);//regarde si vérin en position basse
		if(digitalRead(C2) == etatCapteurOn) {
			delay (3000); // tempo 3s
			digitalWrite(relai,LOW); // désactive le relais 5V
			digitalWrite(led01,LOW); // eteins la led
		}
		else {
			digitalWrite(led02,HIGH);
			delay(1000);
			digitalWrite(led02,LOW);
			delay(1000);
		}
	}
	else {
		digitalWrite(led02,HIGH);
		delay(1000);
		digitalWrite(led02,LOW);
		delay(1000);
	}
}

Oui

A+
Cordialement
jpbbricole