La zone Adhérents est active
(Si vous ne la voyez pas, pensez à mettre à jour vos coordonnées CDZ dans le Panneau de l'Utilisateur et prévenir l'admin que c'est fait)
...
Le Bulletin du Printemps est chez l'imprimeur
(il sera distribué à partir de mi-mai)

Gestion d'un PN (Barrières oscillantes)

Ici on traite de tout ce qui concerne les alimentations et les automatismes, quelques soient les technologies mises en œuvre. Depuis le simple transformateur jusqu'aux divers systèmes de "pilotage" (DCC, DCS, …) en passant par les micro processeurs (Arduino et autres).
Avatar du membre
stratus
Platinum
Messages : 3139
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 8 fois
A été remercié : 76 fois

Re: Gestion d'un PN (Barrières oscillantes)

Message par stratus »

stratus a écrit : 09 avr. 2020, 13:18J'y publierai également le programme dès que l'opération SOS outils de développement sera achevée.
Voili, voilou, c'est fait.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
MIMINE DU 03
Senior
Messages : 62
Enregistré le : 06 avr. 2020, 17:39

Re: Gestion d'un PN (Barrières oscillantes)

Message par MIMINE DU 03 »

Je viens de voir votre montage sur YouTube, c’est un jolie PN pour une exposition avec un montage clair.
Dommage que cela donne des à-coups .
La carte 4 relais à quoi serre t-elle ? Et surtout que la carte relais est aussi cher qu’un Arduino. Peut-être pour la commande des servomoteurs ? .
Avec une commande des servos par demarage relais, forcement avec un montage pareil il y a des à-coups.
Pourquoi mettre un oscillateur de feux alors que l’arduino est capable ?
Donc je reste sur ma programmation avec deux modules arduino indépendants pour chaque servo et donnera de la souplesse à la vitesse, à l’angle et de synchronisation avec une possibilité de rebond des bras choisi pour que l’ensemble reste fluide et ne coutera pas plus cher.
Bonne soirée les amis du zéro
Avatar du membre
stratus
Platinum
Messages : 3139
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 8 fois
A été remercié : 76 fois

Re: Gestion d'un PN (Barrières oscillantes)

Message par stratus »

J’ai expliqué le pourquoi de cette carte 4 relais.

Un des relais sert à ouvrir/fermer l’alimentation dédiée aux servos (l’Arduino, ne peut effectivement pas fournir la puissance pour 2 servos, peut-être même pas pour un seul s’il est puissant) Pourquoi ce dispositif de mise sous/coupure de tension ? Tout simplement parce que, à l’usage, j’avais constaté des “grognements“ voire de brefs soubresauts intempestifs des servos hors périodes des mouvements souhaités.

Quant aux “à-coups“ c’est la conception même du PN qui les provoques, les servos eux-mêmes n’en n’ont pas (d’à-coup). Peut-être que quand tes servos (avec 1 ou 2 Arduino) actionneront tes propres barrières tu constateras ce phénomène, quoique les produits ne soient pas identiques ; le modèle LMJ reproduit fidèlement le fonctionnement des barrières réelles (came de la roue dans une gorge en forme de S allongé) qui, en réalité, fonctionnent par à-coups (du moins au démarrage de chaque levage et/ou abaissement).

J’ai fait le choix de déléguer le clignotement à un circuit dédié, donc le second relais sert à cela. Comme précisé j’avais cette carte 4 relais de dispo dont je l’ai utilisée (qui peut le plus…).

Entre le montage de validation (avec juste les servos "à vide") et la mise en œuvre en situation j’ai été confronté à quelques déconvenues comme celle du microcontrôleur qui ne déroulait pas son programme comme attendu dès qu’il n’était plus alimenté par le câble USB mais par l’alimentation 12v unique que j’avais initialement prévue.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
stratus
Platinum
Messages : 3139
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 8 fois
A été remercié : 76 fois

Re: Gestion d'un PN (Barrières oscillantes)

Message par stratus »

MIMINE DU 03 a écrit : 09 avr. 2020, 15:43 Donc je reste sur ma programmation avec deux modules arduino indépendants pour chaque servo et donnera de la souplesse à la vitesse, à l’angle et de synchronisation avec une possibilité de rebond des bras choisi pour que l’ensemble reste fluide…
Tout ça c'est possible avec un seul Arduino.

MIMINE DU 03 a écrit : 09 avr. 2020, 15:43... et ne coutera pas plus cher.
Si, un deuxième Arduino.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
MIMINE DU 03
Senior
Messages : 62
Enregistré le : 06 avr. 2020, 17:39

Re: Gestion d'un PN (Barrières oscillantes)

Message par MIMINE DU 03 »

Et oui c'est bien ce que je disait, l’arduino ne peut pas commander deux servomoteurs pour des réglages différent en même temps. CQFD
Et pour l'alimentation du servo à forte consommation sur la carte arduino,j'utilise des transistors type 2n1711 ou 2n2222 ,bc337 etc...
Maintenant je comprends l'à-coups du servo, si il a une rupture de courant ou mise en tension du servo par la carte relais, cela provoque le défaut d'à-coup.
Bonne soirée a toutes et tous
Avatar du membre
stratus
Platinum
Messages : 3139
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 8 fois
A été remercié : 76 fois

Re: Gestion d'un PN (Barrières oscillantes)

Message par stratus »

MIMINE DU 03 a écrit : 09 avr. 2020, 18:12 Et oui c'est bien ce que je disait, l’arduino ne peut pas commander deux servomoteurs pour des réglages différent en même temps. CQFD
Bien sûr que si ! C'est une question de programmation. Des valeurs de progression différentes, voire variables au cours des mouvements, sont possibles, des arrêts ou redémarrage de mouvement pour l'un ou pour l'autre sont possibles, etc...
MIMINE DU 03 a écrit : 09 avr. 2020, 18:12Maintenant je comprends l'à-coups du servo, si il a une rupture de courant ou mise en tension du servo par la carte relais, cela provoque le défaut d'à-coup.
Je viens d'écrire que les servos N'ONT PAS D'A-COUP ! Ce sont les barrières, qui par leur conception, en ont ; comme les vraies.

Puisque, apparemment, je m'exprime mal, je vais m'arrêter là.

Bonne mise au point de ton système.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
MIMINE DU 03
Senior
Messages : 62
Enregistré le : 06 avr. 2020, 17:39

Re: Gestion d'un PN (Barrières oscillantes)

Message par MIMINE DU 03 »

Code : Tout sélectionner

//CODE POUR FAIRE UN TEST D UN SERVOMOTEUR OU DEUX SERVOMOTEURS EN //

// SERVOMOTEUR**********************************************************************************
#include <Servo.h>
Servo myservo2;  // création du servomoteur myservo 
Servo myservo1;  // création du servomoteur myservo 
int pin_servo1 = 9;       // Pin sur lequel est branché le servo
int pin_servo2 = 10;       // Pin sur lequel est branché le servo
int pos = 0;             // variable permettant de conserver la position du servo
int angle_initial = 25;   //angle initial du point zero 
int angle_final = 180;   //angle final
int increment = 1;       //incrément entre chaque position  par pas de 1 degrée 
bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur

//BOUTON CONTACT***************************************************************************************
boolean DigitalRead(int pinNumber)
{
  pinMode(pinNumber, INPUT);
  return digitalRead(pinNumber);
}
void setup()
{
  myservo1.attach(pin_servo1);  // attache le servo au pin 9 spécifié sur l'objet myservo
  myservo2.attach(pin_servo2);  // attache le servo au pin 10 spécifié sur l'objet myservo
  delay(50);// DUREE DU SERVOMOTEUR
  
}

void loop()
{
  //if (DigitalRead(A0))// CONTACT A0 POUR DESCENDRE LA BARRIERE
  {

//**************SERVO*********************************************

  for
  (pos = angle_initial; pos <= angle_final; pos += increment)
  
  { // Déplace le servo de 0 à 180 degrées par pas de 1 degrée 
    myservo1.write(pos); // Demande au servo de se déplacer à cette position angulaire
    myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire
    delay(20); // Attend 20ms entre chaque changement de position vitesse de deplacement du servo 
              //si 20ms = vitesse rapide et si 100 ms vitesse lente
    }
//*****************************************************************
 
  }
   // SI CONTACT SUR LE PLOT A1 = OUVERTURE BARRIERE
  
  //if (DigitalRead(A1))// CONTACT POUR OUVRIR LA BARRIERE
  {
       
    
//*********** SERVO ******************************************************

  for (pos = angle_final; pos >= angle_initial; pos -= increment) 
  
  { // Fait le chemin inverse
    myservo1.write(pos); 
    myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire             
    delay(20);    // Attend 20ms entre chaque changement de position vitesse deplacement du servo
                  //si 20ms = vitesse rapide et si 100 ms vitesse lente
  }
//***********************************************************************

    delay(100);//RAFRAICHISSEMENT 
  }
}

// FIN DU LOOP
Modifié en dernier par MIMINE DU 03 le 14 avr. 2020, 15:20, modifié 2 fois.
Avatar du membre
MIMINE DU 03
Senior
Messages : 62
Enregistré le : 06 avr. 2020, 17:39

Re: Gestion d'un PN (Barrières oscillantes)

Message par MIMINE DU 03 »

PANNE SUR ARDUINO :evil:
Voiçi une panne recurente sur arduino le regulateur 5v
mettre un 7805 ou 78l05 ,c'est comme un MARS et ça REPART
Fichiers joints
20200410_080125.jpg
Avatar du membre
MIMINE DU 03
Senior
Messages : 62
Enregistré le : 06 avr. 2020, 17:39

Re: Gestion d'un PN (Barrières oscillantes)

Message par MIMINE DU 03 »

Bonjour
voiçi un code arduino pour le rebond des bras d'un PN a partir d'un servo moteur ou deux (0 a 180 degres).
La video pour bientot.
cordialement

Code : Tout sélectionner

// SERVOMOTEUR AVEC REBOND**********************************************************************************
 #include <Servo.h>
 Servo myservo2; // création du servomoteur pour le bras gauche myservo2 
 Servo myservo1; // création du servomoteur pour le bras droit myservo1
 int pin_servo1 = 9; // Pin sur lequel est branché le servo bras droit
 int pin_servo2 = 10; // Pin sur lequel est branché le servo brat gauche
 int pos = 0; // variable permettant de conserver la position du servo
 int angle_initial = 0; //angle initial du point zero 
 int angle_final = 130; //angle final
 int increment = 1; //incrément entre chaque position par pas de 1 degrée 
 //***************************************************

 int angle_initial7 =125; //angle initial du point REBOND
 int angle_final7 = 130; //angle final

 //**************************************************************
 bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur

 //BOUTON CONTACT***************************************************************************************
 boolean DigitalRead(int pinNumber)
 {
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
 }
 void setup()
 {
myservo1.attach(pin_servo1); // attache le servo au pin 9 spécifié sur l'objet myservo
myservo2.attach(pin_servo2); // attache le servo au pin 10 spécifié sur l'objet myservo
delay(200);//



pos = angle_initial;// MISE EN PLACE DES BRAS 

 }

 void loop()
{
//if (DigitalRead(A0))// CONTACT A0 POUR DESCENDRE LA BARRIERE (mise a la masse sinon mettre A0 au 5v pour demarage du servo)


 //***************************SERVO***************************************

//****************************REBOND**************************************



       for  (pos = angle_initial; pos <= angle_final; pos += increment)
      {
      myservo1.write(pos); 
      myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire 
      delay(150); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
                 // si 20ms = vitesse rapide et si 100 ms vitesse lente
      }
//*************************************************************************

              for
      (pos = angle_initial7; pos <= angle_final7; pos += increment)

      {
      myservo1.write(pos); 
      myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire 
      delay(150); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
                 // si 20ms = vitesse rapide et si 100 ms vitesse lente
//*************** FIN DE LA DESCENTE DE LA BARRIERE*************************

}
//*********************************OUVERTURE BARRIERE***************************************************************

delay(6000);//ATTENTE pour test

// SI CONTACT SUR LE PLOT A1 = OUVERTURE BARRIERE

//if (DigitalRead(A1))// CONTACT POUR OUVRIR LA BARRIERE(mise a la masse sinon mettre A1 au 5v pour demarage du servo)



 //*************************** SERVO ******************************************************

for (pos = angle_final; pos >= angle_initial; pos -= increment) 
{
 // Fait le chemin inverse
myservo1.write(pos); 
myservo2.write(pos); // Demande au servo de se déplacer à cette position angulaire 
delay(150); // Attend 20ms entre chaque changement de position vitesse deplacement du servo
//si 20ms = vitesse rapide et si 100 ms vitesse lente
}

 //***********************************************************************

delay(9000);//RAFRAICHISSEMENT ET ATTENTE DE 9S pour test
 }
 // FIN DU LOOP
 
Avatar du membre
MIMINE DU 03
Senior
Messages : 62
Enregistré le : 06 avr. 2020, 17:39

Re: Gestion d'un PN (Barrières oscillantes)

Message par MIMINE DU 03 »


Rebond du bras en test sur arduino et servomoteur .
Répondre