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 :
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 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 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
// 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);
}
}
}
}