Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Les fiches pratiques de Loco-Revue sur Arduino

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Les fiches pratiques de Loco-Revue sur Arduino

Publié: Lun 24 Avr 2017, 12:33 
Bonjour à tous,

Depuis quelques temps, vous trouvez des fiches pratiques dans la catégorie "Electronique" qui sont consacrées au monde d'Arduino :

N°835 - Février 2017 : Débuter facilement avec Arduino
N°836 - Mars 2017 : Arduino pour surveiller votre réseau
N°837 - Avril 2017 : Comment programmer le µC ATtiny45
N°838 - Mai 2017 : Avec Arduino, commandez un signal de B.A.L

J'espère que ces fiches vous seront utiles et vous donneront envie de découvrir la programmation des microcontrôleurs. Les exemples donnés sont forcément simples (ils doivent tenir sur deux pages) et les programmes sont très courts. Cependant, les contraintes de mise en page ne permettent pas de donner les programmes en excluant tout risque d'erreurs. De plus, pourquoi recopier un programme quand internet nous permet de les télécharger.

J'ai donc décidé de mettre ici, dans ce fil, les programmes des fiches pratiques. Ce fil sera aussi l'occasion d'un échange, réponse aux questions, suggestion de votre part, etc.

Enfin, si le virus d'Arduino vous a contaminé et que vous vouliez en savoir plus, je vous rappelle que le site http://www.locoduino.org est fait pour découvrir et apprendre tout ce qui concerne Arduino appliqué aux trains miniatures.

Et j'espère aussi vous rencontrer à Trainsmania puisque j'ai l'honneur d'y avoir été invité pour faire une conférence. Toute l'équipe de LOCODUINO sera présente et reconnaissable à un badge porté autour du cou : si vous en avez envie, n'hésitez pas à venir discuter d'Arduino avec nous, nous vous attendons.

Programme de la Fiche Pratique de Mars 2017 :

Code: Tout sélectionner
int ledState = LOW;
unsigned long previousMillis = 0;
const long interval = 500;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // DEL reliée a broche 13
  pinMode(12, INPUT_PULLUP) ; // ILS d approche du train
  pinMode(11, INPUT_PULLUP) ; // ILS de sortie du train
}

void loop() {
  while(digitalRead(12)==HIGH){}
  while(digitalRead(11)==HIGH)
  {
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      if (ledState == LOW) {ledState = HIGH;}
      else {ledState = LOW;}
    digitalWrite(LED_BUILTIN, ledState);
   }
}
digitalWrite(LED_BUILTIN, LOW); // DEL sur OFF
}


Programme de la Fiche Pratique de Mai 2017 :

Code: Tout sélectionner
/***************************
* Signal_BAL - 30/11/2016 *
* *************************
* Ce programme simule le fonctionnement d un signal lumineux a trois
* feux d un B.A.L Block Automatique Lumineux. Il n assure pas
* l espacement des trains. Lorsque la loco declenche le premier ILS,
* le signal se met au rouge. Lorsque la loco declenche le deuxieme
* ILS, le signal se met a l orange pour une duree egale a celle du
* rouge, puis repasse au vert.
*/

/*  VARIABLES
  *  --------------------------------------------------------------
  *  debRouge : temps de debut du feu rouge
  *  finRouge : temps de fin du feu rouge
  *  dureeRouge ; duree du feu rouge
  *  debOrange : temps de debut du feu orange
  *  flagOrange : booleen 0 si feu orange eteint, 1 si allume
  */

  /* BRANCHEMENTS
   * --------------------------------------------------------------
   * ILS E (entree) sur 2
   * ILS S (sortie) sur 3
   * feu vert sur 4
   * feu rouge sur 5
   * feu orange sur 6
   */

const byte ILS_entree = 2;
const byte ILS_sortie = 3;
const byte feu_vert = 4;
const byte feu_rouge = 5;
const byte feu_orange = 6;
unsigned long debRouge = 0;
unsigned long finRouge = 0;
unsigned long debOrange = 0;
unsigned long dureeRouge;
boolean flagOrange = 0;

void setup() {
  pinMode(ILS_entree, INPUT_PULLUP);
  pinMode(ILS_sortie, INPUT_PULLUP);
  pinMode(feu_vert, OUTPUT);
  pinMode(feu_rouge, OUTPUT);
  pinMode(feu_orange, OUTPUT);
  // Initialisation du signal a anode commune, allume par LOW
  digitalWrite(feu_vert, LOW);
  digitalWrite(feu_rouge, HIGH);
  digitalWrite(feu_orange, HIGH);
  }

void loop() {
  // Surveillance de l ILS d entree
  while (digitalRead(ILS_entree) == HIGH)
  {
    // ILS E non declenche
    if (flagOrange)
    {
      if ((millis() - debOrange) > dureeRouge)
      {
        digitalWrite(feu_orange, HIGH);
        flagOrange = 0;
        digitalWrite(feu_vert, LOW);
      }
    }
   }
  // ILS E declenche
  digitalWrite(feu_vert, HIGH);
  digitalWrite(feu_orange, HIGH);
  flagOrange = 0;
  digitalWrite(feu_rouge, LOW);
  debRouge = millis();
  // Surveillance de l ILS de sortie
  while (digitalRead(ILS_sortie) == HIGH)
  {
    // ILS S non declenche, ne rien faire
  }
  // ILS S declenche
  finRouge = millis();
  dureeRouge = finRouge - debRouge;
  digitalWrite(feu_rouge, HIGH);
  digitalWrite(feu_orange, LOW);
  flagOrange = 1;
  debOrange = millis();

}


Au plaisir de vous écrire d'autres fiches pratiques en électronique.

Christian
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Les fiches pratiques de Loco-Revue sur Arduino

Publié: Mar 25 Avr 2017, 16:09 
Excellente initiative Christian. Sois le bienvenu à Bravig'Lille, j'ai un excellent Jasnière qui sort des chais du Marquis de la Volière.
Rdv à Sedan
Avatar de l’utilisateur
Bravigou
Intarissable !
 
Messages: 5787
Inscrit le: Mer 19 Déc 2012, 18:16
Localisation: Le Mans
Âge: 60
Echelle pratiquée: Ho
Prénom: François
Club: Rigollots Mecspeed

Re: Les fiches pratiques de Loco-Revue sur Arduino

Publié: Mar 25 Avr 2017, 17:49 
Je ne manquerai pas de te rendre visite. :wink:
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14


Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Majestic-12 [Bot] et 1 invité