Une débutante dans le décor - Ep9 - Paparazzi

Salut,

Ce tutoriel est un prolongement de l’épisode 6 - Une débutante dans le décor - Ep6 - Quelques automatismes (Arduino Nano), comment réaliser des automatismes en mode “lego” basé sur la plateforme Arduino Nano.

Objectif : pas de fer à souder, pas de câblage compliqué, pas de résistance/condo/… à rajouter et bien sur un prix mini mini. Si tu sais brancher un M84, tu sais utiliser un Arduino à la sauce Julaye :wink: !

Ce tutoriel démarre par une bonne idée glanée sur le forum d’à coté, avoir un photographe en bord de voie qui prend les locomotives en photo à leur passage.

Mais là s’arrête la comparaison. Je n’ai pas envie de payer les 40 euros du kit Viessmann référence 1519 et j’ai envie que le flash se déclenche automatiquement au passage d’une locomotive.

Prix de la réalisation :

  • Arduino Nano
  • Platine Ana 0-25 V pour détecter un véhicule sur un rail de contact
  • une micro-led 2.9 V
  • Paparazzi que vous avez croisé récemment

L’ensemble m’est revenu à moins de 12 € … En pratique encore moins puisque cet Arduino va me servir à d’autres automatismes.

Le montage est archi simple :

  • branchement de la platine Ana 0-25V comme pour le Tutoriel Tuto05 - à relire ici
  • branchement de la micro-led fil noir sur GND, fil rouge sur D9

Et voilà. Un petit programme simpliste qui déclenche le flash une fois lorsque la voie passe de libre à occupée. Et réamorce le flash pour un prochain passage lorsque la voie redevient libre :

// Tuto09
// Exemple pour le forum 3rails / Julie Dumortier / Licence GPL
// 
// Le photographe Paparazzi
//  brancher une micro-led 2,9 V sur GND et D9
//  brancher détection contact comme Tuto05 (Convertisseur ANA 0-25V) sur GND/A3 
//
// Retrouvez ce tutoriel sur le lien :https://forum.3rails.fr/t/une-debutante-dans-le-decor-episode-9-paparazzi/19721

// défini la broche (pin) utilisée pour le flash du Paparazzi
int ledPin = 9;

// défini la broche (pin) utilisée pour lire la valeur analogique : A3 (cf Tuto05)
int Pin_etatRail = 3;

// déclencheur du flash, seulement quand la valeur vaut 1
int flashit = 0;

// variable pour stocker le seuil de déclenchement (cf Tuto05)
int seuil = 384;

// variable pour compter les déclenchements
int nbFiltre = 16;

// on va filter le signal bas pendant 192 ms pour décider que la voie est libre (cf Tuto05)
int msFiltre = 192;

void setup() {

  // pour allumer le flash
  pinMode(ledPin, OUTPUT);

  // pour lire l'état d'occupation de la voie
  pinMode(Pin_etatRail,INPUT); //_PULLUP);

  // ouvre le port série (console de l'outil) avec la vitesse 57600 bauds
  // attention que le paramètre sur la console soit bien 57600 !
  Serial.begin(57600);
}

// retourne 1 si la voie est libre (cf Tuto05)
int voieLibre()
{
  int n = msFiltre;
  int c = 0;
  int v = 0;

  // tant que le signal est bas on continue
  while (n>0) {
    v = analogRead(Pin_etatRail);
    Serial.println(v);
    
    if (v>seuil) {
      c = c + 1;
    }

    if (c>nbFiltre) {
      // la voie est encore occupée
      Serial.println(v);

      // attends la fin du compteur
      delay(n);
      
      // et retourne l'état d'occupation
      return 0;
    }

    // attends 1 ms
    delay(1);

    // et boucle
    n = n - 1;
  }

  // il est resté bas --> la voie est libre
  return 1;
}

void flash() {
  // allume la led du flash !
  analogWrite(ledPin,300);
  digitalWrite(LED_BUILTIN,true);
  Serial.println("Flash !");

  // reste allumé 25 ms 
  delay(25);

  // eteint la led !
  analogWrite(ledPin,0);
  digitalWrite(LED_BUILTIN,false);
}

void loop() {
  if (voieLibre()==1) {
    flashit = 0;
  } else {
    flashit = flashit + 1;
  }
  if (flashit==1) {
    // emet un flash
    flash();
  }
  delay(1000);
  Serial.print("flashit=");
  Serial.println(flashit);
}

J’ai tourné une petite vidéo de Paparazzi :

Il me reste à intégrer la micro-led sur le personnage et à cacher discrètement le fil dans le dos du personnage. Il sera installé à l’entrée du dépôt, lorsque les locomotives surgissent du petit tunnel.

Merci de votre attention,


Retrouvez tous les épisodes de la débutante en clickant ici !

9 « J'aime »

Bonjour,

Alors là, je dis beau boulot. Une scène pour le moins originale. :wave:t2:
Il me fait penser à l’un de nos membres qui aime prendre des clichés de magnifiques rames Suisse.
Attention tout de même que le paparazzi ne soit pas trop proche de la voie. Il pourrait être aspiré par une rame lancée à grande vitesse !!! :rofl:
D’autre part, à t’il l’autorisation de flashouiller le matériel roulant de la SNCF ?

2 « J'aime »

Bonjour Julie, bonjour tout le monde,

Excellent !!! D’autant que ton papacie… non… paparazzi, tu devrais pouvoir le déplacer sur le dépôt et plus tard sur le reste du circuit. Bon, il faudra sans doute faire ça avec précaution pour ne pas endommager les fils de la LED, mais ça doit se faire.
En tout cas, encore bravo !!

Claude papaciela (cette fois !!)

Aucun risque, c’est l’entrée du dépôt, vitesse limitée à 10 km/h :sweat_smile:

Il n’a aucune autorisation … j’ai prévu de le planquer un peu dans un buisson …

Merci pour ton appréciation :slight_smile: Papa … :rofl:

Plus sérieusement, difficile de le déplacer réellement car il faut percer un trou pour le passage des deux fils, plus connecter le rail de contact qui se trouve à proximité (car il sert de déclencheur), plus avoir l’Arduino pas trop loin …

Peut être que je prévoirais deux ou trois emplacements stratégiques avec des mini-connecteurs. Il n’en reste pas moins que ça restera compliqué.

Je pourrais prévoir un déclenchement manuel - sur une entrée pull up - mais je n’ai pas trop envie de m’embarrasser avec ça.

En attendant, c’est toute la souplesse de l’Arduino, j’ai enrichi le programme pour que le photographe flashe aléatoirement tant qu’il y a une voie occupée sur le rail de contact !

J’utilise une fonction random qui permet d’espacer chaque flash de 1 à 3 secondes, aléatoirement, tant que le rail est occupé.

// Tuto09b
// Exemple pour le forum 3rails / Julie Dumortier / Licence GPL
// 
// Le photographe Paparazzi
//  brancher une micro-led 2,9 V sur GND et D9
//  brancher détection contact comme Tuto05 (Convertisseur ANA 0-25V) sur GND/A3 
//
// Retrouvez ce tutoriel sur le lien :https://forum.3rails.fr/t/une-debutante-dans-le-decor-episode-9-paparazzi/19721

// défini la broche (pin) utilisée pour le flash du Paparazzi
int ledPin = 9;

// défini la broche (pin) utilisée pour lire la valeur analogique : A3 (cf Tuto05)
int Pin_etatRail = 3;

// déclencheur du flash, seulement quand la valeur vaut 1
int flashit = 0;

// freq flash en secondes
int freqit = 2;

// variable pour stocker le seuil de déclenchement (cf Tuto05)
int seuil = 384;

// variable pour compter les déclenchements
int nbFiltre = 16;

// on va filter le signal bas pendant 192 ms pour décider que la voie est libre (cf Tuto05)
int msFiltre = 192;

void setup() {

  // pour allumer le flash
  pinMode(ledPin, OUTPUT);

  // pour lire l'état d'occupation de la voie
  pinMode(Pin_etatRail,INPUT_PULLUP);

  // la germe du générateur aléatoire
  randomSeed(analogRead(0));

  // ouvre le port série (console de l'outil) avec la vitesse 57600 bauds
  // attention que le paramètre sur la console soit bien 57600 !
  Serial.begin(57600);
}

// retourne 1 si la voie est libre (cf Tuto05)
int voieLibre()
{
  int n = msFiltre;
  int c = 0;
  
  int v = 0;

  // tant que le signal est bas on continue
  while (n>0) {
    v = analogRead(Pin_etatRail);

    if (v>seuil) {
      c = c + 1;
    }

    if (c>nbFiltre) {

      // attends la fin du compteur
      delay(n);
      
      // et retourne l'état d'occupation
      return 0;
    }

    // attends 1 ms
    delay(1);

    // et boucle
    n = n - 1;
  }

  // il est resté bas --> la voie est libre
  return 1;
}

void flash() {
  // allume la led du flash !
  analogWrite(ledPin,250);
  digitalWrite(LED_BUILTIN,true);
  Serial.println("Flash !");

  // reste allumé 35 ms 
  delay(25);

  // eteint la led !
  analogWrite(ledPin,0);
  digitalWrite(LED_BUILTIN,false);
}

void loop() {
  if (voieLibre()==1) {
    flashit = 0;
  } else {
    flashit = flashit + 1;
  }
  if (flashit==1) {
    // emet un flash
    flash();
    freqit = random(1,4);
  }
  if (flashit==freqit) {
    // au bout de freqit secondes, toujours un convoi : nouveau flash !
    flashit=0;
  }
  delay(1000);
  Serial.print("flashit=");
  Serial.println(flashit);
}

Enjoy !

Bonjour Julie, bonjour tout le monde,

Une question Julie: comment le paparazzi voit-il la loco arriver ? J’ai du louper un chapitre !!

Claude papaciela

Hi,

Détection par le rail de contact, relire le Tuto5 :slight_smile:

En fait il détecte tout véhicule détecté par le rail de contact. Et avec la version 09b du programme, il déclenche aléatoirement son appareil tant qu’un véhicule reste dans la section.

En tous cas, merci encore de nous faire partager cette scène, première fois d’ailleurs que je vois un tel montage, encore fallait-il y penser. Et également le code pour l’ Arduino tant il est clair que cela va donner des idées à d’autres. :+1:t2:

Ok, j’ai dû lire mais mon copain Alzheimer m’a sans doute rendu visite à ce moment là !! :unamused:

Donc un ILS, une photocell, un IR doivent marcher ! Et si je coupe un des deux rails en 2 endroits distants de 3 ou 5 cm, ca devrait aussi marcher !
Tu confirmes, Julie !!

Claude papaciela

Bonsoir,

Jamais je n’aurais pensé à un photographe avec un flash automatique. Bravo.

Errol.

Bonjour Julie,

Pourquoi pas, avec le même principe, un soudeur à l’arc dans la fosse de visite lorsqu’une locomotive arrive justement au-dessus de cette fosse ?

Bravo pour tes réalisations, encore une fois.

A+

manu

Bonjour Manu,

C’est prévu pour l’atelier moteur sur l’extension du dépôt. Une sortie pour la led et une sortie pour faire vibrer un piezo. Je ferais un tutoriel à ce sujet.

Sur le même principe, j’ai prévu un éclairage de type néons avec les séquences d’allumage et le glitch de temps en temps :). Là aussi j’ai prévu un tutoriel.

@+

1 « J'aime »

Un message a été fusionné à un sujet existant : Une débutante dans le décor - Ep8 - Un servo pour l’Arduino