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 !
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 !