(Si vous ne voyez pas la zone adhérent, mettez à jour vos coordonnées CDZ dans le Panneau de l'Utilisateur et prévenez l'admin)

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
CC6559
Platinum
Messages : 628
Enregistré le : 22 avr. 2019, 17:35
Localisation : Entre Jura et Savoie
A été remercié : 1 fois

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

Message par CC6559 »

Merci pour la vidéo. 8)

Sinon à Virieu-le-Grand on avait un PN gardé avec feux clignotants jusqu'en 1992.
Ici à la fin des années 70 un Express Genève - Lyon redémarre de Virieu :

DSCN4904 - Copie.JPG
- Les trains à l'échelle Zéro sont vraiment les meilleurs.
- Zéro incertitude là-dessus !
Sheldon Cooper
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 »

Le servo pour arduino a 180 degrés
Fichiers joints
20200408_182423.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 »

Servo
Fichiers joints
20200408_182434.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 »

montage servo avec arduino ,son et servo a 90 positif + 90 negatif =180


bonne soiree
Avatar du membre
stratus
Platinum
Messages : 3442
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 23 fois
A été remercié : 137 fois

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

Message par stratus »

Pas besoin de 2 Arduino pour piloter 2 servos de façon indépendante, ce qui sera probablement nécessaire puisque compliqué d'obtenir un point haut et un point bas identiques pour deux barrières.

Mais dans le même programme tu fais progresser les mouvements des 2 servos parallèlement, voire prendre de l'avance sur l'un (ou l'autre) et/ou continuer le mouvement sur l'un (oui l'autre) à l'abaissement ou au relevage ; c'est ce que j'ai dû pratiquer.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
jld31250
Platinum
Messages : 984
Enregistré le : 04 janv. 2015, 19:18
A remercié : 3 fois
A été remercié : 26 fois

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

Message par jld31250 »

bonsoir Mimine, un RS200, çà nous rajeunit pas!!!
oui il faut un servo avec +/- 90 degrés et des grands guignols. Et du coup il faut prévoir de la place sous la table pour permettre la rotation complète de tout ceci

Vidéo intéressante, je pense que çà va me pousser à passer à Arduino. Mais j'aimerai avoir un système autonome pouvant fonctionner sur AQs. Je ne sais pas si c'est possible.
---------------------------
Jean-Luc (revel 31250)
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 constat que Mr Arduino me cache certaines fonctions :nugget: et que sur le forum du zero un sauveur de l’Arduino se manifeste pour que dans le même programme tu fasse progresser les mouvements des 2 servos parallèlement …………… ; j’ai hâte de voir cela en pratique par une video :shock: et bien sur de fournir le programme du microcontroleur.cordialement
Avatar du membre
stratus
Platinum
Messages : 3442
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 23 fois
A été remercié : 137 fois

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

Message par stratus »

Ce matin sortie de la semaine pour réappro.
On en reparle + tard.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
stratus
Platinum
Messages : 3442
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 23 fois
A été remercié : 137 fois

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

Message par stratus »

Comme je n’ai pas touché au programme depuis novembre 2017 février 2018, je viens de me rendre compte que tous mes outils de développement Arduino se trouvent encore sur mon ancien PC, à bout de souffle et réanimé de peu par un expert.

Il est donc grand temps que je rapatrie tout ça sur le nouveau poste de travail et que je valide que j’ai bien tout en place … de quoi occuper un peu de ce confinement.

En, attendant tu peux consulter le topic que j’ai créé il y a peu après une petite mise en ordre, physique, du mini module ; c’est ICI

J'y publierai également le programme dès que l'opération SOS outils de développement sera achevée.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Avatar du membre
stratus
Platinum
Messages : 3442
Enregistré le : 15 sept. 2015, 15:14
Localisation : Yonne
A remercié : 23 fois
A été remercié : 137 fois

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

Message par stratus »

A la demande générale (d'une personne) voici le code du programme

Code : Tout sélectionner

 // Dernière mises au point ou modifications 
// le 13 octobre 2017 régulation du courant d'alimentation 12v
// le 23 octobre 2017 mise en oeuvre d'un shield 4 relais
// pour coupure de l'alimentation servos (position repos) 
// Si besoin des 2 autres relais utilser les PIN 8 & 9 de la carte UNO
// et non 6 & 7 comme prévu dans la notice 
// le 8 février 2018 pour réglages des mouvements des barrières
// le 12 février 2018 pour synchronisation des 2 barrières + "a-coups" de verrouillage 

#include <Servo.h>
#include <RogueMP3.h>
#include <SoftwareSerial.h>

Servo ServoSud;
Servo ServoNor;

const int DelMvt = 20;
const int PosHauSud = 1950;   // plus haut +
const int PosBasSud = 1380;   // plus bas -
const int PosHauNor = 1110;   // plus haut - 
const int PosBasNor = 1580;   // plus bas +
byte VolSon = 0;              // Volume de la sonnerie (0 = Max, 255 = Min)
int AngSud;
int AngNor;
int LedClg;                   // Relais 4 du shield 4 relais  (Feux clignotants)
int AliSer;                   // Relais 3 du shield 4 relais  (Mise sous tension des servos)
int IndBcl;
boolean FlgPos;
boolean FlgSud;
boolean FlgNor;
boolean FlgBcl;
boolean FlgAff;              //  On afficehe ... ou pas

SoftwareSerial rogueSerial = SoftwareSerial(6, 7);
RogueMP3 mp3Player = RogueMP3(rogueSerial);

// ICI commence Setup

void setup()
{
// Initialisation lecteur MP3 

 rogueSerial.begin(9600);
 Serial.begin(9600);
 if (mp3Player.sync())
  {
    mp3Player.setVolume(VolSon);       // On initialise le volume du MP3
  }
  else
  {
    Serial.println("Problème de connexion");
  }
  
 // Initialisation relais feux clignotants
 
 LedClg = 4;
 AliSer = 5;
 pinMode(LedClg, OUTPUT); 
 pinMode(AliSer, OUTPUT);
 
 // Initialisation des servos barrières
 // Et des flags
  
 AngSud = PosBasSud;   // position basse
 AngNor = PosBasNor;   // position basse
 ServoSud.attach(3);
 ServoNor.attach(2);
 ServoSud.writeMicroseconds(AngSud);
 ServoNor.writeMicroseconds(AngNor);
 FlgPos = LOW;
 FlgSud = LOW;
 FlgNor = LOW;
 FlgBcl = LOW;
 FlgAff = HIGH; 
 delay(800);
 digitalWrite(AliSer, HIGH); // mise sous tension des servos
 delay(800);   
}

// ICI commence Loop

void loop()
{  
  if (FlgPos == LOW)
  {
    if (FlgAff == HIGH)
    {
//    Serial.println("On descend");
      FlgAff = LOW;
    }
    if (AngNor < PosBasNor)
    {
      AngNor = AngNor + 1;
      ServoNor.writeMicroseconds(AngNor);
    }
    else FlgNor = HIGH;
    if (AngSud > PosBasSud)
    {
      AngSud = AngSud - 1;
      ServoSud.writeMicroseconds(AngSud);
    }
    else FlgSud = HIGH;
    delay(DelMvt);
    if (FlgSud == HIGH && FlgNor == HIGH)
    {      
      FlgPos = HIGH;
      FlgBcl = HIGH;
          
// "A-coup" pour véroullage en position basse

//    Serial.println("Verrouillage BAS");
      AngSud = PosBasSud;   // position basse
      AngNor = PosBasNor;   // position basse
      ServoSud.writeMicroseconds(AngSud);
      ServoNor.writeMicroseconds(AngNor);
      ServoSud.detach();
      ServoNor.detach();
      ServoSud.attach(3);
      ServoNor.attach(2);

      digitalWrite(AliSer, LOW);  // mise hors tension des servos
          
//  Arrêt sonnerie 
      mp3Player.stop();
      FlgAff = HIGH;
//    Serial.println("Fin descente");
    
      delay(5000);       //  attente pour mise au point
      
      AngSud = PosBasSud;
      AngNor = PosBasNor;
      digitalWrite(AliSer, HIGH); // mise sous tension des servos
    }
  }  
  else
  { 
    digitalWrite(LedClg, LOW);     //  Arrêt clignotants
   
    if (FlgAff == HIGH)
    {
      Serial.println("On Monte");
      FlgAff = LOW;
      delay(500); 
    }

// Rattrapage du décalage des mouvements entre barrières Sud et Nord en montée

    if (FlgBcl == HIGH)
    for (IndBcl = 0; IndBcl < 13 ; IndBcl++)
    {    
       AngSud = AngSud + 5;
       ServoSud.writeMicroseconds(AngSud);
       delay(DelMvt);        
    }
    FlgBcl = LOW;       
     
    if (AngNor > PosHauNor)
    {
      AngNor = AngNor - 1;
      ServoNor.writeMicroseconds(AngNor);
    }
    else FlgNor = LOW;
    if (AngSud < PosHauSud)
    {
      AngSud = AngSud + 1;
      ServoSud.writeMicroseconds(AngSud);
    }
    else FlgSud = LOW;
    delay(DelMvt);
    if (FlgSud == LOW && FlgNor == LOW)
    {
      FlgPos = LOW; 

// "A-coup" pour véroullage en position haute

//    Serial.println("Verrouillage HAUT");
      AngSud = PosHauSud;   // position haute
      AngNor = PosHauNor;   // position haute
      ServoSud.writeMicroseconds(AngSud);
      ServoNor.writeMicroseconds(AngNor);
      ServoSud.detach();
      ServoNor.detach();
      ServoSud.attach(3);
      ServoNor.attach(2);

      digitalWrite(AliSer, LOW);     // mise hors tension des servos

      FlgAff = HIGH;
//    Serial.println("Fin montee");
      
      delay(5000);                   // Attente pour mise au point
      
//    Déclenchement sonnerie et feux trouges clignotants
      mp3Player.playFile("/0001.mp3");
      digitalWrite(LedClg, HIGH);
      delay(1500);
      
      AngSud = PosHauSud;
      AngNor = PosHauNor;
      digitalWrite(AliSer, HIGH); // mise sous tension des servos

// Rattrapage du décalage des mouvements entre barrières Sud et Nord en descente

      for (IndBcl = 0; IndBcl < 15; IndBcl++)
      {
        AngSud = AngSud - 5;
//      Serial.println("Boucle D");
        ServoSud.writeMicroseconds(AngSud);
        delay(DelMvt);
      }
          
    }
  }
}

Précisions sur demande.
Epoque III, région PLM
Club CDZ / AATY
R8G for ever
Répondre