Page 2 sur 8

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

Posté : 02 avr. 2020, 18:02
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

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

Posté : 08 avr. 2020, 18:36
par MIMINE DU 03
Le servo pour arduino a 180 degrés

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

Posté : 08 avr. 2020, 18:38
par MIMINE DU 03
Servo

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

Posté : 08 avr. 2020, 18:40
par MIMINE DU 03
montage servo avec arduino ,son et servo a 90 positif + 90 negatif =180


bonne soiree

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

Posté : 08 avr. 2020, 19:06
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.

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

Posté : 08 avr. 2020, 23:13
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.

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

Posté : 09 avr. 2020, 08:12
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

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

Posté : 09 avr. 2020, 10:59
par stratus
Ce matin sortie de la semaine pour réappro.
On en reparle + tard.

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

Posté : 09 avr. 2020, 13:18
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.

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

Posté : 09 avr. 2020, 14:58
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.