Tachymètre HO

Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 01 20:17

Tachymètre HO

Message par France ramasoft

:hellod:

Je commence un nouveau projet: un affichage de la vitesse d'un train façon radar routier.
Matériel: un Arduino Nano, un écran OLED de 0,91 pouces et deux capteur TTP223, un peu de fil électrique et quelques grammes de PLA soit un investissement d'environ 3,50€ en comptant large.

J'ai fait ça sous forme d'un panneau d'affichage à intégrer au décor:
cap_C0733_00_00_06_01.jpg
cap_C0733_00_00_12_02.jpg
cap_C0733_00_00_21_03.jpg
Les connexions se font sur une plaque à bande qui s'enfiche sur les broches de l'Arduino

IMG_20260531_084123.jpg
IMG_20260531_084526.jpg
IMG_20260531_084533.jpg

L'Arduino a une petite boite avec des oreilles de fixations
IMG_20260531_161522_1.jpg
IMG_20260531_161648.jpg

Et j'ai fait aussi une boite qui intègre l'Arduino et l'écran si on veut mettre ça à côté du réseau mais attention à la longueur du câblage de l'écran qui est en I2C ...
IMG_20260601_145338.jpg
IMG_20260601_145319.jpg
IMG_20260601_145328.jpg
IMG_20260601_145350.jpg
IMG_20260601_145417.jpg
Pour le code, j'avais promis sur YouTube quelque chose de simple et j'ai fait une version 1 minimaliste qui tient en quelques lignes de code. Elle ne fait la mesure que dans un seul sens. Elle affiche la mesure pendant un temps définit, j'ai mis 5 secondes mais on peut mettre plus.
Inconvénient: ça utilise Delay, fonction bloquante si bien qu'aucune mesure ne peut se faire pendant que l'écran affiche quelque chose.
Il y a aussi une fonction de scrolling dans la procédure afficherPret() pour éviter de brûler l'écran, mais au final, j'ai supprimé cet affichage qui ne sert à rien et l'écran reste noir entre deux mesures. Il suffit de réactiver les lignes si on veut avoir un message défilant pour animer l'écran.

Et j'ai fait aussi une version 2 plus complète qui fait la mesure dans les deux sens, utilise une fonction de timer non bloquante si bien qu'une deuxième mesure meut se faire immédiatement si deux trains sont très près.

Je mettrai tous les fichiers un peu plus tard quand ils seront bien finalisés ainsi que le code complet quand j'aurai terminé car il y a encore quelques bricoles a finaliser.

Mais globalement, c'est quelque chose de très simple et vite fait.

Une petite vidéo du premier essai:
Tachymètre HO - 1er essai.mp4
Et le code de la Version 1:

Code : Tout sélectionner

/* =========================================
 *    Tachymètre pour train à l'échelle HO
 *        V1.00 (c) Ramasoft 2026
 *    Mesure dans un seul sens de circulation
 * =========================================
 * Matériel :
 *   - Arduino Nano
 *   - Écran OLED 0,91" 128x32 (SSD1306) en I2C
 *   - 2 capteurs tactiles TTP223 (utilisés comme détecteurs de passage)
 *
 * Câblage :
 *   - Capteur 1 (S1) → D2  fil bleu
 *   - Capteur 2 (S2) → D3  fil vert
 *   - OLED SDA       → A4  fil blanc
 *   - OLED SCL       → A5  fil jaune
 *   - OLED VCC       → 5V 
 *   - OLED GND       → GND
 *
 * Note sur les TTP223 :
 *   Le TTP223 doit avoir ses plots A et B non shuntés = congiguration d'origine 
 *   pour sortir un état HAUT (HIGH) quand il détecte quelque chose et fonctionner en mode impulsion
 *
 * Distance entre capteurs : 30 cm (réelle = 30 / 87 m à l'échelle 1)
 *
 * Bibliothèques requises (à charger par le Gestionnaire de bibliothèques Arduino) :
 *   - Adafruit SSD1306
 *   - Adafruit GFX Library
 */
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Configuration de l'écran OLED
#define SCREEN_WIDTH 128 // Largeur de l'écran en pixels
#define SCREEN_HEIGHT 32 // Hauteur de l'écran (Modifier à 64 si votre écran est un 128x64)
#define OLED_RESET     -1 // // Pas de broche RESET dédiée = partagée avec le Nano.
#define SCREEN_ADDRESS 0x3C /// Adresse I2C typique des écrans OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Configuration des capteurs
const int pinCapteur1 = 2; // Premier capteur (Entrée de la zone)
const int pinCapteur2 = 3; // Second capteur (Sortie de la zone)

// Constantes pour le calcul (Échelle HO = 1/87)
const float distanceEntreCapteurs = 0.30; // Distance en mètres (30 cm)
const float echelle = 87.0;

// Variables de temps (volatile car utilisées dans les interruptions)
volatile unsigned long tempsDepart = 0;
volatile unsigned long tempsFin = 0;
volatile boolean trainEnCours = false; // Indique qu'un train est entré dans la zone
volatile boolean mesureDispo = false; // Indique que la mesure est prête

void setup() {
  //Configurer la LED interne (broche 13 sur le Nano) en sortie
  pinMode(LED_BUILTIN, OUTPUT); 
  // Initialisation de l'écran
  // Si l'écran ne répond pas, on entre dans une boucle infinie de clignotement
  // de la LED rouge de l'Arduino
    if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    while(true) {
      digitalWrite(LED_BUILTIN, HIGH); // Allume la LED
      delay(200);                      // Attend 200 ms
      digitalWrite(LED_BUILTIN, LOW);  // Éteint la LED
      delay(200);                      // Attend 200 ms (clignotement rapide d'erreur)
    }
  }
  
  // Si l'écran fonctionne, le code continue normalement ici...
   display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(15, 10);
  display.println(" Tachymetre HO");
  display.println("(c) Ramasoft 2026");
  display.display();
  delay(2000);

  // Configuration des broches des capteurs (TTP223 sort un signal HIGH quand touché/activé)
  pinMode(pinCapteur1, INPUT);
  pinMode(pinCapteur2, INPUT);

  // Attachement des interruptions sur front montant (RISING)
  attachInterrupt(digitalPinToInterrupt(pinCapteur1), capteur1Declenche, RISING);
  attachInterrupt(digitalPinToInterrupt(pinCapteur2), capteur2Declenche, RISING);

  afficherPret();
}

void loop() {
  // Si une mesure est prête à être calculée
  if (mesureDispo) {
    // Calcul du temps mis par le train en secondes
    float tempsMis = (tempsFin - tempsDepart) / 1000.0; 
    
    // Sécurité si le calcul donne un temps aberrant
    if (tempsMis > 0.05) { 
      // Calcul de la vitesse réelle en m/s
      float vitesseReelle = distanceEntreCapteurs / tempsMis;
      // Conversion en km/h à l'échelle HO
      float vitesseHO = vitesseReelle * echelle * 3.6;

      // Affichage du résultat sur l'OLED
      display.stopscroll();
      display.clearDisplay();
      
      display.setTextSize(1);
      display.setCursor(0, 0);
      display.print("Vitesse HO:");
      
      display.setTextSize(2);
      display.setCursor(0, 14); // Ajuster la position Y si écran 64px
      display.print(vitesseHO, 1); // 1 chiffre après la virgule
      display.print(" km/h");
      
      display.display();
      
      // Laisser le résultat affiché pendant 5 secondes avant de se remettre en attente
      delay(5000); 
    }
    
    // Réinitialisation pour le prochain train
    trainEnCours = false;
    mesureDispo = false;
    display.clearDisplay();
    afficherPret();
  }
}

// Fonction d'interruption pour le premier capteur
void capteur1Declenche() {
  if (!trainEnCours) {
    tempsDepart = millis();
    trainEnCours = true; // Le train est entré dans la zone
  }
}

// Fonction d'interruption pour le second capteur
void capteur2Declenche() {
  if (trainEnCours && !mesureDispo) {
    tempsFin = millis();
    mesureDispo = true; // La mesure est complète
  }
}

void afficherPret() {
  display.clearDisplay();
  //display.setTextSize(2);
  //display.setCursor(0, 10); // Centré verticalement pour un écran 32px
  //display.print("En Attente");
  display.display();
  
  // Active le défilement horizontal vers la droite
  // Paramètres : (première page, dernière page) -> 0 et 0X0F couvre tout l'écran
  //display.startscrollright(0x00,0x0F);
}

Je mettrai un peu plus d'explications demain.

:a_suivre:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Avatar du membre
France likiki
Site Admin
Site Admin
Messages : 16476
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 59
Pays :
France
France
juin 2026 01 20:31

Re: Tachymètre HO

Message par France likiki

:bienv: :bienv: :bienv: :bienv: :bienv:

C'est la première chose que j'ai faite en Arduino.

Avec un écrans LCD les OLED n'existaient pas encore.

:bienv: :bienv: :bienv: :bienv: :bienv:
Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.

Proverbe de là bas.

ImageImageImage

:tirechap:

Si vous souhaitez faire un don pour le forum , c'est ici.
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 01 20:32

Re: Tachymètre HO

Message par France ramasoft

Tu avais mis quoi comme capteurs ?
Avatar du membre
France bunny94
2000 posts et +
2000 posts et +
Messages : 14936
Enregistré le : 22 sept. 2021, 08:35
Prénom : Alain
LOCALISATION : Noiseau
Centres d'intérêts : Photo-Vidéo-Modélisme ferroviaire-Trains réels-Impression 3D-Miniature automobile 1/43ème
Echelle pratiquée : H0
Âge : 75
Pays :
France
France
juin 2026 01 20:43

Re: Tachymètre HO

Message par France bunny94

Super Patrick. :bienv: :bienv: :bienv:
Pour me retrouver sur ma chaîne YT: https://www.youtube.com/@abunny94/videos
Avatar du membre
France C2Vues-BricoTrain
2000 posts et +
2000 posts et +
Messages : 9050
Enregistré le : 08 mars 2024, 11:45
Prénom : Fernando
LOCALISATION : Clamart
Centres d'intérêts : Modélisme Ferroviaire - Échelles N et HO
Images IA
Echelle pratiquée : N
Âge : 74
Pays :
France
France
juin 2026 01 20:57

Re: Tachymètre HO

Message par France C2Vues-BricoTrain

:bienv: Patrick :bienv:

:PetitPoucejpg: :PetitPoucejpg: :PetitPoucejpg: :PetitPoucejpg:

Où vas-tu placer les "contrôleurs" (et les voies d'arrêts) pour qu'ils puissent arrêter et verbaliser les trains qui sont en excès de vitesse...?

:hhhaaaa: :hhhaaaa: :hhhaaaa: :tire langue :jesors:
Pour me retrouver sur ma chaîne :
https://youtube.com/@c2vues-bricotrain? ... VpM6qhmP2u

Quand trop gentil, tu seras,
Dans le côté sombre, tu l'auras !

Yoda
Maître Jedi dans Star Wars
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 01 21:14

Re: Tachymètre HO

Message par France ramasoft

J'ai mis ça justement sur une portion "roulante", sans limitation qui peut être prise à pleine vitesse même par les TGV.
Sinon, j'avais initialement prévu de le mettre sur la voie de la gare qui est la plus proche du bord, juste au dessus de mon coin bricolage car c'était simple pour passer les fils mais elle est entre les deux courbes les plus serrées du réseau et entre deux aiguillages qui ne peuvent pas se prendre trop vite. Elle me sert de voie d'essai et de voie de programmation.
Comme j'ai un deuxième écran identique mais en bleu, je vais finir la version "boite" avec l'Arduino et l'écran intégrés et je le mettrai sur la voie d'essai.
Avatar du membre
France C2Vues-BricoTrain
2000 posts et +
2000 posts et +
Messages : 9050
Enregistré le : 08 mars 2024, 11:45
Prénom : Fernando
LOCALISATION : Clamart
Centres d'intérêts : Modélisme Ferroviaire - Échelles N et HO
Images IA
Echelle pratiquée : N
Âge : 74
Pays :
France
France
juin 2026 01 21:33

Re: Tachymètre HO

Message par France C2Vues-BricoTrain

ramasoft a écrit : 01 juin 2026, 21:14 Comme j'ai un deuxième écran identique mais en bleu, je vais finir la version "boite" avec l'Arduino et l'écran intégrés et je le mettrai sur la voie d'essai.
En fin de compte, ce n'est plus la SNCF, mais l'EDF avec un "Compteur Bleu" pour les tarifications et les horaires spéciaux pour les trains... :mdr1: :mdr3:

Bon ! Je (re) :jesors: comme dirait Zébulon :au revoir:

...
Pour me retrouver sur ma chaîne :
https://youtube.com/@c2vues-bricotrain? ... VpM6qhmP2u

Quand trop gentil, tu seras,
Dans le côté sombre, tu l'auras !

Yoda
Maître Jedi dans Star Wars
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 01 21:34

Re: Tachymètre HO

Message par France ramasoft

T'es déchaîné ce soir :hhhaaaa:
Avatar du membre
France C2Vues-BricoTrain
2000 posts et +
2000 posts et +
Messages : 9050
Enregistré le : 08 mars 2024, 11:45
Prénom : Fernando
LOCALISATION : Clamart
Centres d'intérêts : Modélisme Ferroviaire - Échelles N et HO
Images IA
Echelle pratiquée : N
Âge : 74
Pays :
France
France
juin 2026 01 21:38

Re: Tachymètre HO

Message par France C2Vues-BricoTrain

ramasoft a écrit : 01 juin 2026, 21:34 T'es déchaîné ce soir :hhhaaaa:
Bon, Patrick, là je me calme et je te dis à demain.

Bonne soirée à toi.

Amicalement.
Fernando
Pour me retrouver sur ma chaîne :
https://youtube.com/@c2vues-bricotrain? ... VpM6qhmP2u

Quand trop gentil, tu seras,
Dans le côté sombre, tu l'auras !

Yoda
Maître Jedi dans Star Wars
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 01 22:29

Re: Tachymètre HO

Message par France ramasoft

Bonne fin de soirée aussi :cooooool:
Avatar du membre
France herwat
2000 posts et +
2000 posts et +
Messages : 6965
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 79
Pays :
France
France
juin 2026 02 00:23

Re: Tachymètre HO

Message par France herwat

Chouette ! :PetitPoucejpg: :PetitPoucejpg: :PetitPoucejpg:

Mais comment disposes-tu tes capteurs ?
Avatar du membre
France likiki
Site Admin
Site Admin
Messages : 16476
Enregistré le : 27 févr. 2021, 16:11
Prénom : Christian
LOCALISATION : Ile de France
Centres d'intérêts : Le train miniature (H0 3R), l'impression 3D
Echelle pratiquée : H0
Âge : 59
Pays :
France
France
juin 2026 02 04:57

Re: Tachymètre HO

Message par France likiki

ramasoft a écrit : 01 juin 2026, 20:32 Tu avais mis quoi comme capteurs ?
J'avais mis des capteurs IR.



C'était il y a ... 12 ans.

:tire langue
Si le Goëland se gratte le gland, il fera mauvais temps,
Si il se gratte le cul, il ne fera pas beau non plus.

Proverbe de là bas.

ImageImageImage

:tirechap:

Si vous souhaitez faire un don pour le forum , c'est ici.
Avatar du membre
France Amigorl
Posteur irrécupérable
Posteur irrécupérable
Messages : 828
Enregistré le : 02 févr. 2025, 20:15
Prénom : Rémy
LOCALISATION : Pau
Centres d'intérêts : Digitalisation matériel ancien, construction d'un réseau HO. Arduino, Dccex-Conmmand-Station, Rocrail, Digitalisation pont tournant Jouef, Decodeur accessoires DIY. 3D PLA et débutant SLA.
Echelle pratiquée : H0
Âge : 64
Pays :
France
France
juin 2026 02 07:38

Re: Tachymètre HO

Message par France Amigorl

Bonjour,

Bien ce projet.

Je n'ai pas compris comment les ttp223 sont utilisés comme capteur et où ils sont placés.

Si c'est sous la voie, ne pourraient ils pas être utilisés comme capteur de rétro signalisation ?

À 1€21 les 10, ce pourrait être intéressant ?

Je me renseigne de mon côté sur les modes de fonctionnement offerts par cette petite carte rouge.

:a_suivre:

Ben... Déjà une explication...
https://www.wikidebrouillard.org/wiki/I ... tif_TTP223
Le ttp223 ne semble pas être seulement un capteur tactile, il détecte également les objets qui se rapprochent.
Je comprends mieux.
C'est sûrement utilisable avec Rocrail qui fonctionne aussi bien avec les capteurs de passage que d'occupation...
Piste à explorer compte tenu du prix de revient très faible et c'est un module tout monté (Patrice ? Tu en penses quoi ?...)
Avatar du membre
France Bud_fr
Posteur fou
Posteur fou
Messages : 205
Enregistré le : 07 févr. 2026, 09:55
Prénom : Didier
LOCALISATION : Six Fours les Plages (83)
Centres d'intérêts : Les nouvelles technologie: La 3D, l'Arduino, l'IA, etc .... tout cela au service du modélisme, ferroviaire actuellement, après être passé par l'aéromodélisme, et le bateau.
Echelle pratiquée : H0
Pays :
France
France
juin 2026 02 08:02

Re: Tachymètre HO

Message par France Bud_fr

Amigorl a écrit : 02 juin 2026, 07:38
......
Je n'ai pas compris comment les ttp223 ..... où ils sont placés.

.....
Salut Patrick, bonjour à Tous

Moi aussi j'ai du mal à comprend l'écart entre les 2 TTP223; Tu n'as pas mis de précisions dans tes explications, il y a juste des commentaires dans le code:
*
* Distance entre capteurs : 30 cm (réelle = 30 / 87 m à l'échelle 1)
*
Mais si je divise 30 par 87, ça me donne 34 (et pas 30) :3:

Tu pourrais développer ??? Merci

:a_suivre:
A la maison, il n'y a que la télévision qui me parle, et que mon ordinateur qui me répond. :super:
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 02 11:17

Re: Tachymètre HO

Message par France ramasoft

Bonjour à tous,
Hier soir j'ai mis ça rapidement mais je vais mettre quelques explications
Tout d'abord le code V2.10 qui permet la mesure dans les deux sens de circulation et aussi utilise une temporisation non bloquante permettant d'avoir un affichage plus long des mesures tout en autorisant une nouvelle mesure immédiatement sans attendre même si l'ancienne mesure est encore affichée.
N'hésitez pas si vous voulez des explications plus détaillées

Code : Tout sélectionner

/* =========================================
 * Tachymètre pour train à l'échelle HO
 * V2.10 (c) Ramasoft 2026
 * Mesure dans les deux sens de circulation
 * Temporisation non bloquante
 * =========================================
*  Matériel :
 *   - Arduino Nano
 *   - Écran OLED 0,91" 128x32 (SSD1306) en I2C
 *   - 2 capteurs tactiles TTP223 (utilisés comme détecteurs de passage)
 *
 * Câblage :
 *   - Capteur 1 (S1) → D2  fil bleu
 *   - Capteur 2 (S2) → D3  fil vert
 *   - OLED SDA       → A4  fil blanc
 *   - OLED SCL       → A5  fil jaune
 *   - OLED VCC       → 5V 
 *   - OLED GND       → GND
 *
 * Note sur les TTP223 :
 *   Le TTP223 doit avoir ses plots A et B non shuntés = congiguration d'origine 
 *   pour sortir un état HAUT (HIGH) quand il détecte quelque chose et fonctionner en mode impulsion
 *
 * Distance entre capteurs : 30 cm (réelle = 30 / 87 m à l'échelle 1)
 *
 * Bibliothèques requises (à charger par le Gestionnaire de bibliothèques Arduino) :
 *   - Adafruit SSD1306
 *   - Adafruit GFX Library
 */
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Configuration de l'écran OLED
#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 32 
#define OLED_RESET     -1 
#define SCREEN_ADDRESS 0x3C 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Configuration des capteurs
const int pinCapteur1 = 2; 
const int pinCapteur2 = 3;

// Constantes pour le calcul (Échelle HO = 1/87)
const float distanceEntreCapteurs = 0.315; // Distance en mètres 
const float echelle = 87.0; 

// Variables de temps et de logique (volatile pour les interruptions)
volatile unsigned long tempsDepart = 0; 
volatile unsigned long tempsFin = 0; 
volatile boolean trainEnCours = false; 
volatile boolean mesureDispo = false; 
volatile int sensCirculation = 0; 

// Variables pour temporisation non bloquante
unsigned long tempsAffichageDepart = 0; // Mémorise quand l'affichage a commencé
boolean affichageEnCours = false;       // Indique si un résultat est actuellement visible
const unsigned long dureeAffichage = 20000; // Durée d'affichage en millisecondes (20 secondes)

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); 
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { 
    while(true) {
      digitalWrite(LED_BUILTIN, HIGH); 
      delay(200); 
      digitalWrite(LED_BUILTIN, LOW); 
      delay(200); 
    }
  }
  
  display.clearDisplay(); 
  display.setTextSize(2); 
  display.setTextColor(SSD1306_WHITE); 
  display.setCursor(5, 0); 
  display.println("Tachymetre"); 
  display.setCursor(17, 18); 
  display.println("HO V2.10"); 
  display.display(); 
  delay(10000); // Écran d'accueil (10s) 

  pinMode(pinCapteur1, INPUT); 
  pinMode(pinCapteur2, INPUT); 

  attachInterrupt(digitalPinToInterrupt(pinCapteur1), capteur1Declenche, RISING); 
  attachInterrupt(digitalPinToInterrupt(pinCapteur2), capteur2Declenche, RISING); 

  effaceEcran(); 
}

void loop() {
  // 1. TRAITEMENT D'UNE NOUVELLE MESURE DISPONIBLE
  if (mesureDispo) { 
    float tempsMis = (tempsFin - tempsDepart) / 1000.0; 
    
    if (tempsMis > 0.05) { // Sécurité anti-rebond 
      float vitesseReelle = distanceEntreCapteurs / tempsMis; 
      float vitesseHO = vitesseReelle * echelle * 3.6; 

      display.stopscroll(); 
      display.clearDisplay(); 
      
      // Affichage du sens de circulation
      display.setTextSize(1); 
      display.setCursor(0, 0); 
      if (sensCirculation == 1) { 
        display.print("Vitesse >>>> (1->2)"); 
      } else { 
        display.print("Vitesse <<<< (2->1)"); 
      }
      
      // Affichage de la vitesse
      display.setTextSize(2); 
      display.setCursor(0, 14); 
      display.print(vitesseHO, 1); 
      display.print(" km/h"); 
      display.display(); 
      
      // Armement de la temporisation non bloquante
      tempsAffichageDepart = millis(); // On note l'heure actuelle
      affichageEnCours = true;         // On indique qu'un affichage est actif
    }
    
    // Réinitialisation IMMÉDIATE pour être prêt pour le train suivant
    trainEnCours = false; 
    mesureDispo = false; 
    sensCirculation = 0; 
  }

  // 2. GESTION DU TEMPS D'AFFICHAGE NON BLOQUANT
  // Si un affichage est en cours et que les 20 secondes sont écoulées :
  if (affichageEnCours && (millis() - tempsAffichageDepart >= dureeAffichage)) {
    affichageEnCours = false; // Fin de la période d'affichage
    display.clearDisplay(); 
    effaceEcran(); 
  }
}

// Fonction d'interruption pour le capteur 1
void capteur1Declenche() {
  if (!trainEnCours) { 
    tempsDepart = millis(); 
    sensCirculation = 1; 
    trainEnCours = true; 
  }
  else if (trainEnCours && sensCirculation == 2 && !mesureDispo) { 
    tempsFin = millis(); 
    mesureDispo = true; 
  }
}

// Fonction d'interruption pour le capteur 2
void capteur2Declenche() {
  if (!trainEnCours) { 
    tempsDepart = millis(); 
    sensCirculation = 2;     trainEnCours = true; 
  }
  else if (trainEnCours && sensCirculation == 1 && !mesureDispo) { 
    tempsFin = millis(); 
    mesureDispo = true; 
  }
}

void effaceEcran() {
  display.clearDisplay(); 
  display.display(); 
}
Les deux capteurs sont espacés de 30cm (plus exactement de 31,5cm) et posés sur la voie avec des clips en impression 3D:
Cache TTP223.stl
J'avais expliqué comment les poser dans l'avant dernière vidéo consacrée au TTP223.
IMG_20260518_145120.jpg
IMG_20260518_145752.jpg
IMG_20260518_143807.jpg

On pourrait effectivement les utiliser en détection comme capteurs pour rétrosignalisation, mais ils détectent tout, c'est à dire que si un convoi passe dessus, ils vont détecter tout ce qui est à plus ou moins 5mm de leur surface, donc pratiquement tous les essieux. Donc il faut ajouter une discrimination ce qui est facile à faire en programmation, moins en électronique câblée.
D'autre part c'est moins fiable qu'une détection par consommation de courant qui, elle, est fiable à 100%
Mais il faudrait creuser le sujet.

Pour la question de Didier, c'est que le commentaire du code est mal exprimé: je voulais dire 30 87emes
Le calcul de la vitesse (Échelle HO : 1/87)
Si les deux capteurs sont espacés de 30 cm (0,3m), voici comment on passe du temps mesuré t (en secondes) à la vitesse réelle à l'échelle :
1. Vitesse réelle du modèle réduit : Vréelle m/s = 0,3 / t
2. Vitesse à l'échelle HO (1:87) : VHO = Vréelle x 87
3. Conversion en km/h : Vkm/h = VHO x 3,6 (vitesse en m/s multipliée par 1000 et divisée par 3600 secondes pour passer en km/h)
4. En simplifiant la formule :
Formule calcul.jpg


Si par exemple tempsDepart valait 10 000 ms (10 secondes après le démarrage de l'Arduino) et tempsFin vaut 10 400 ms, le train a mis 400 millisecondes (soit 0,4s) pour parcourir les 30 cm.
En reprenant notre formule :
Formule calcul.2jpg.jpg


Pour cette distance de 30cm, c'est pour avoir un bon compromis entre vitesse élevée mesurable et prévision:
1. Le cas d'un train rapide (TGV à 300 km/h)
À l'échelle HO (1/87), un TGV roulant à 300 km/h à l'échelle se déplace à une vitesse réelle de :

Formule calcul.3.jpg
Sur une zone de 30 cm, ce TGV va mettre environ 0,3 seconde (300 millisecondes) pour franchir les deux capteurs.
Comme l'Arduino Nano mesure le temps en millisecondes, une durée de 300 ms offre une excellente précision (la marge d'erreur n'est que de l'ordre de 0,3 %).

2. Le cas d'un train lent (Manœuvre à 20 km/h)
Un train de marchandises ou une locomotive de manœuvre qui roule à 20 km/h à l'échelle se déplace à une vitesse réelle de :
Formule calcul.4.jpg
Et une petite vidéo avec le boitier qui regroupe l'écran et l'Arduino. Il est équipé du code V2.10 qui est mis plus haut et qui autorise deux mesures sans attente avec une temporisation non bloquante.
Tachymètre HO - 2e essai.mp4
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par France ramasoft le 02 juin 2026, 13:51, modifié 1 fois.
Avatar du membre
France Bud_fr
Posteur fou
Posteur fou
Messages : 205
Enregistré le : 07 févr. 2026, 09:55
Prénom : Didier
LOCALISATION : Six Fours les Plages (83)
Centres d'intérêts : Les nouvelles technologie: La 3D, l'Arduino, l'IA, etc .... tout cela au service du modélisme, ferroviaire actuellement, après être passé par l'aéromodélisme, et le bateau.
Echelle pratiquée : H0
Pays :
France
France
juin 2026 02 11:48

Re: Tachymètre HO

Message par France Bud_fr

:PetitPoucejpg:

:a_suivre:
A la maison, il n'y a que la télévision qui me parle, et que mon ordinateur qui me répond. :super:
Avatar du membre
France herwat
2000 posts et +
2000 posts et +
Messages : 6965
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 79
Pays :
France
France
juin 2026 02 12:15

Re: Tachymètre HO

Message par France herwat

Ok , compris ! :cooooool: et :merciiii:
Avatar du membre
France Amigorl
Posteur irrécupérable
Posteur irrécupérable
Messages : 828
Enregistré le : 02 févr. 2025, 20:15
Prénom : Rémy
LOCALISATION : Pau
Centres d'intérêts : Digitalisation matériel ancien, construction d'un réseau HO. Arduino, Dccex-Conmmand-Station, Rocrail, Digitalisation pont tournant Jouef, Decodeur accessoires DIY. 3D PLA et débutant SLA.
Echelle pratiquée : H0
Âge : 64
Pays :
France
France
juin 2026 02 12:18

Re: Tachymètre HO

Message par France Amigorl

C'est vrai que ce ne serait pas un vrai détecteur d'occupation comme on a l'habitude avec la détection de courant.

Alors je ne peux que m'exprimer sur Rocrail en fonction de comment sont configurés les blocs et détecteurs, la première détection marquera l'occupation du bloc, tant que le bloc n'est pas libéré, Rocrail ne prends plus en compte les détections suivantes.
Il peut donc passer autant de wagons ou d'essieux, pas de problème.
Peut-être plus adapté pour un détecteur IN qui arrête la loco avant la fin du bloc plutôt qu'un détecteur ENTER marquant l'entrée dans le bloc.
Par exemple, pour les voies de garage rotonde ou Apt avec gestion à un seul détecteur, c'est adapté et tout monté.
De mon côté je reste sur les détecteurs Ramasoft/DocMarco mais pour ceux qui ne souhaitent pas trop jouer avec la soudure de composants électroniques, ce peut être une solution pas chère, certe liée à Rocrail qui le permet, pour les autres logiciels, je ne sais pas.
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 02 13:39

Re: Tachymètre HO

Message par France ramasoft

Il faut que le logiciel puisse discriminer et ne considérer que la toute première impulsion, mais ils doivent le faire car tout dispositif génère des rebonds.
Il faudrait tester en situation réelle et surtout sur plusieurs machines qui ont des hauteurs différentes car j'ai peur que tout ne soit pas détecté.
Donc, pour une détection qui ne met pas la sécurité en jeu, ça peut être une très bonne alternative, mais pour l'occupation d'un canton je ne m'y fierait pas.
L'avantage des TTP c'est leur faible cout (10 centimes) et leur facilité de mise en œuvre: on peut les poser a postériori sans tout casser.

J'ai une autre application à tester: c'est pour la commande de mon DFLpayer qui fait klaxonner les trains.
Il est pour le moment commandé à l'ancienne par deux ILS et ça marchait très bien jusqu'à l'apparition des attelages magnétiques que j'utilise beaucoup et qui déclenchent le DFPLayer à chaque passage d'un attelage... donc le système n'est plus utilisable.
J'avais fait une solution électronique avec qui n'envoie qu'une seule impulsion et se bloque pendant 20 secondes. Ça marche mais c'est un peu trop compliqué à mon gout alors qu'une solution Arduino sera hyper simple et bien plus élégante.

Je pense qu'il y a aussi d'autres applications possibles de ces TTP.
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 02 15:20

Re: Tachymètre HO

Message par France ramasoft

Alors le repas étant source de réflexion, je m'aperçois que la temporisation non bloquante va poser problème sur les convois car il y aura plusieurs mesures consécutives qui vont se succéder au passage des wagons.
Donc il faut une période initiale réfractaire de 5 à 10 secondes, et donc rajouter un Delay(10) au début et le reste en non bloquant pour laisser la mesure affichée en tout au moins 20 à 30 secondes mais avec juste les 10 premières incompressibles ... comme les peines de prison.
Avatar du membre
France C2Vues-BricoTrain
2000 posts et +
2000 posts et +
Messages : 9050
Enregistré le : 08 mars 2024, 11:45
Prénom : Fernando
LOCALISATION : Clamart
Centres d'intérêts : Modélisme Ferroviaire - Échelles N et HO
Images IA
Echelle pratiquée : N
Âge : 74
Pays :
France
France
juin 2026 02 15:43

Re: Tachymètre HO

Message par France C2Vues-BricoTrain

ramasoft a écrit : 02 juin 2026, 15:20 mais avec juste les 10 premières incompressibles ... comme les peines de prison.
C'est comme dans un tableur (Excel ou autre...), il faut mettre la bonne valeur dans la cellule... :mdr1: :mdr3:
Pour me retrouver sur ma chaîne :
https://youtube.com/@c2vues-bricotrain? ... VpM6qhmP2u

Quand trop gentil, tu seras,
Dans le côté sombre, tu l'auras !

Yoda
Maître Jedi dans Star Wars
Avatar du membre
France herwat
2000 posts et +
2000 posts et +
Messages : 6965
Enregistré le : 11 mars 2021, 16:14
Prénom : Hervé
LOCALISATION : Creuse
Centres d'intérêts : Modélisme ferroviaire
Impression 3D
Arduino
Echelle pratiquée : H0
Âge : 79
Pays :
France
France
juin 2026 02 16:12

Re: Tachymètre HO

Message par France herwat

Cela pourrait être intéressant , par exemple, pour maintenir fermé un passage à niveau le temps du passage du train . . . :siffle:
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 02 16:30

Re: Tachymètre HO

Message par France ramasoft

J'y ai pensé aussi pour les passages à niveau.
Mais il ne faut pas perdre de vue que la détection n'est pas fiable dans tous les cas donc j'ai l'impression qu'il faut prévoir des béquilles logicielles.
Avatar du membre
France ramasoft
Chef es bogies
Chef es bogies
Messages : 5469
Enregistré le : 29 juil. 2024, 19:06
Prénom : Patrick
LOCALISATION : Indre - Levroux
Centres d'intérêts : Modélisme ferroviaire
Programmation C++, VB6 et assembleur
Électronique
Echelle pratiquée : H0
Âge : 68
Pays :
France
France
juin 2026 02 16:51

Re: Tachymètre HO

Message par France ramasoft

C2Vues-BricoTrain a écrit : 02 juin 2026, 15:43
ramasoft a écrit : 02 juin 2026, 15:20 mais avec juste les 10 premières incompressibles ... comme les peines de prison.
C'est comme dans un tableur (Excel ou autre...), il faut mettre la bonne valeur dans la cellule... :mdr1: :mdr3:
:hhhaaaa: :hhhaaaa:
Avatar du membre
France TrainDoly
1200 posts et +
1200 posts et +
Messages : 1293
Enregistré le : 09 févr. 2025, 14:37
Prénom : Olivier
LOCALISATION : Expatrié en Alsace
Centres d'intérêts : Train HO & Impression résine & Fraiseuse CNC faite maison
Echelle pratiquée : H0
Pays :
France
France
juin 2026 02 17:38

Re: Tachymètre HO

Message par France TrainDoly

Haaaa, voilà un sujet qui m'intéresse!

Vas-y Patrick, fais chauffer ta cervelle!
Répondre

Retourner vers « Arduino et le train miniature »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité