Piloter un vérin pneumatique avec une Arduino

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

Ah merci!
Je vais essayer de faire fonctionner la simulation :yum:

Bonjour,

J'ai tenté la simulation.
Quand j'appui sur le BP, le voyant vert dcy s'allume, en revanche le moteur (qui symbolise le distributeur) ne bouge pas ...
Peu être ais-je mal branché le relais?

damienzd

Tu devrait mettre un lien sur ta simulation et la rendre publique.

Cordialement
jpbbricole

Pas faux! le voici ^^

liens vers TINKERCAD

Bonjour damienzd

Tu as été victime du copier/coller :wink::

  pinMode(relai, INPUT_PULLUP);
// Au lieu de
  pinMode(relai, OUTPUT);

et le câblage du relais passe de
image

ä
image
Il faut bien regarder le schéma sur le boîtier du relais
image

A+
Cordialement
jpbbricole

1 Like

Super! ca fonctionne !!!!! Merci!

Du coup.... mon système ne fonction que si on reste appuyé sur le BP...
Y'as possibilité de le gérer en bouton poussoir je crois.... y'as un sujet.... faut que je regarde ^^