Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Fabien51

Pages: [1]
1
Vos projets / CIRCULATION ALTERNÉE
« le: mars 09, 2017, 07:48:59 pm »
Bonjour à tous.
Voici pour vos réseaux une petite animation automatique qui vous permettra de faire circuler des trains sur une ou plusieurs boucles pendant que vous ferez manuellement quelques accrochages décrochages de wagon en gare que vous ferez circuler sur une ligne secondaire.
Réalisé sur réseau numérique avec un nano et des modules relais.
Débutant sur Arduino, je remercie l'aide précieuse de Dominique dans cette réalisation.
À votre disposition pour questions éventuelles.
Fabien.

/*
 Ce petit programme est une circulation alternée de
 trains sur une voie à sens unique ici dans le sens des aiguilles d'une montre.
 
                                voie A    ILS A
                         _ _ _ _ _ " _ _ _ _ _ _ _ # _ _ _ _ _ _ _
 _ _ _ # _ _ _ <  _ _ _ _ _ " _ _ _ _ _ _ _ # _ _ _ _ _ _ _ > _ _ _ _ _ _
     ILS C   tortoise 1         voie B    ILS B         tortoise 2

 " # " symbole de l'ILS
 " < " et " > " sont les aiguillages équipés d'éclisses isolantes sur un rail coté voies A et B.
  La distance entre l'aiguillage "<" et les ILS A et B doit pouvoir recevoir votre train le plus long
 Les modules relais A4 et A5 commande l'alimentation des voies A et B avec redémarrage temporisé
 des trains par l'intermédiaire de delay().Montage reproductible sur une boucle dans l'autre sens de
 circulation des trains ou reproductible également sur une même boucle et faire tourner 3 trains en alternance
 et même 4 mais attention aux règlages de temporisation !!
 */

#include <Bounce2.h>

// Pins utilisées pour les connexions aux detecteurs Reed
#define ReedA    2  // ILS A voie A
#define ReedB    3  // ILS B voie B
#define ReedC    4  // ILS C acces voies A et B



// Pins utilisées pour les relais R1 R2 qui commandent TORTOISE1 et R3 R4 qui commandent TORTOISE2 (inverseurs de polarité) 

#define R1     A0    //digital OUT IN relai 1 TORTOISE1
#define R2     A1    //digital OUT IN relai 2 TORTOISE1
#define R3     A2    //digital OUT IN relai 3 TORTOISE2
#define R4     A3    //digital OUT IN relai 4 TORTOISE2
#define R5     A4    //digital OUT IN relai 5 tempo alim voie A
#define R6     A5    //digital OUT IN relai 6 tempo alim voie B


#include <Bounce2.h>  // librairie de gestion des contacts Reed

// 3 Reed A B C bounce avec une durée de 50 MS de debounce

Bounce bounceA = Bounce();
Bounce bounceB = Bounce();
Bounce bounceC = Bounce();


// Variables

boolean etatA = false;      // Etat libre (false) ou occupé (true) de la voie  A
boolean etatB = false;      // Etat libre (false) ou occupé (true) de la voie  B
boolean etat_TORT1 = false; // false = directe = LOW
boolean etat_TORT2 = true;  // true = déviée = HIGH


// utilitaire : commandes des tortoises en fonction de etat_TORTx

void TORT1() {
  digitalWrite(R1, etat_TORT1);   // R1 = LOW, R2 = HIGH --> TORTOISE 1 directe
  digitalWrite(R2, !etat_TORT1);  // R1 = HIGH, R2 = LOW --> TORTOISE 1 deviee
}

void TORT2() {
  digitalWrite(R3, etat_TORT2);   // R3 = LOW, R4 = HIGH --> TORTOISE 2 directe
  digitalWrite(R4, !etat_TORT2);  // R3 = HIGH, R4 = LOW --> TORTOISE 2 déviée
}


// SETUP
void setup() {
  // entrées
  pinMode(ReedA, INPUT_PULLUP);
  pinMode(ReedB, INPUT_PULLUP);
  pinMode(ReedC, INPUT_PULLUP);


  // sorties
  pinMode(R1, OUTPUT); // relais TORTOISE1
  pinMode(R2, OUTPUT); // relais TORTOISE1
  pinMode(R3, OUTPUT); // relais TORTOISE2
  pinMode(R4, OUTPUT); // relais TORTOISE2
  pinMode(R5, OUTPUT); // relais tempo alim voie A
  pinMode(R6, OUTPUT); // relais tempo alim voie B

  bounceA.attach(ReedA);  //définition des objets bounce
  bounceB.attach(ReedB);
  bounceC.attach(ReedC);
  bounceA.interval(50);
  bounceB.interval(50);
  bounceC.interval(50);

  Serial.begin(115200);  // console de debugging
  Serial.println("c'est parti !");

  //Initialisation de états
  etatA = false; // voie A libre
  etatB = true; // voie B occupée
  etat_TORT1 = false; // directe
  TORT1();
  etat_TORT2 = false;  // directe
  TORT2();

  //initialisation des relais d'alimentation des voie A et B (alimentation sur contact repos)
  digitalWrite(A4, HIGH);
  digitalWrite(A5, HIGH);

} // (SETUP)

// LOOP
void loop() {
  // Update the debouncer
  bounceA.update ( );
  bounceB.update ( );
  bounceC.update ( );


  if ( bounceC.fell() ) {
    Serial.println(); Serial.print("ILS C->");
    action1();    // ILS C acces voies A et B
  }

  if ( bounceA.fell() ) {
    Serial.println(); Serial.print("ILS A->");
    action2();    // ILS A voie A
  }

  if ( bounceB.fell() ) {
    Serial.println(); Serial.print("ILS B->");
    action3();    // ILS B voie B
  }

} // (LOOP)

void action1()    // ILS C acces voies A et B
{
  if (!etatA && !etat_TORT1) // voie A libre et TORTOISE1 direct
  {
    etat_TORT2 = true;      //TORTOISE2 déviée sur voie B
    TORT2();
  }
  if (!etatB && etat_TORT1) // voie B libre et TORTOISE1 déviée
  {
    etat_TORT2 = false;     // TORTOISE2 directe sur voie A
    TORT2();
  }
}

void action2()  // ILS A voie A
{
 
  etatA = true;       // voie A occupée
  etatB = false;       // voie B se libère
  etat_TORT1 = true;  // TORTOISE1 déviée --> voie B en entrée
  TORT1();
  digitalWrite(A4,LOW);
  delay(8000);
  digitalWrite(A5,HIGH);
}

void action3()    // ILS B voie B
{
 
  etatA = false;      // voie A se libère
  etatB = true;       // voie B occupée
  etat_TORT1 = false; // TORTOISE1 directe --> voie A en entrée
  TORT1();
  digitalWrite(A5,LOW);
  delay(10000);
  digitalWrite(A4,HIGH);
}

2
Vos projets / Commande d'un pont tournant sur réseau HO
« le: février 20, 2017, 03:42:48 pm »
Bonjour à tous,
J'ai un projet d'automatisation de mon pont tournant et souhaite vos avis et conseils éclairés. C'est un pont de la marque Frateschi qui fonctionne sur un moteur 12v continu et qui a une indexation mécanique tous les 20 degrés. Cette indexation est très précise et à le gros avantage de durer 2 secondes environ alors que le moteur fonctionne. Actuellement je commande la rotation dans un sens ou dans l'autre avec un interrupteur (ON) OFF (ON). Donc en maintenant le moteur en fonctionnement le pont tourne 3 secondes environ, s'arrête face à une voie pendant 2 s et tourne à nouveau 3s pour s'indexer 2s en face de la voie suivante,etc.
Quel principe pouvez vous me conseiller pour faire tourner le pont automatiquement de 3 index (3 fois 20 degrés) dans un sens par exemple sachant que je ne veux faire tourner le pont que de 160 degrés (8 fois 20° car le neuvième n'est pas utilisable, c'est la localisation de l'inversion du courant de voie) et le faire tourner dans l'autre sens de 2 index ensuite.
Une solution simple et efficace a-t-elle déjà été expérimentée par l'un d'entre vous ?
Quel principe pourriez vous me proposer : commutateur rotatif, comptage et décomptage d'impulsions par bouton poussoir........ou autre idée géniale ?
Merci de vos réflexions, suggestions, expériences....
Bien cordialement.
Fabien.

Pages: [1]