Calcul de la vitesse d'un train miniature avec l'Arduino

Répondre
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 6652
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 : 56
Pays :
France (fr)
France
avr. 2021 21 18:11

Calcul de la vitesse d'un train miniature avec l'Arduino

Message par likikiFrance

Bonjour a tous, voici mon projet :

Calculer la vitesse, en direct, de nos petits trains.

Pourquoi me direz vous ?

Il n'y as rien de plus décourageant que de voir un TGV se faire doubler par un ABJ (surtout pour les ingénieurs qui ont travaillés sur la conception du TGV ceux de l'ABJ étant plutôt content).

Cela permettra de pouvoir régler les décodeurs de nos machines en conséquence.

Alors, le projet ....

Sur un portion de voie droite, mise en place de deux barrières IR sur une distance donnée (perso j'ai mis 10 cm).

A) Nous avons donc un point d'entrée, un point de sortie et une distance fixe.

B) L'arduino nous permet de relever le temps mis par un véhicule entre les deux points.

C) Nous avons la formule magique V=d/t (Vitesse = Distance / Temps)

Où :

V est en m/s, d est en mètres et t est en secondes

Jusque là, tout est simple.

Alors c'est partit :


Le schéma de câblage du projet :

Image
:kingmoi:

ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 6652
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 : 56
Pays :
France (fr)
France
avr. 2021 21 18:12

Re: Calcul de la vitesse d'un train miniature avec l'Arduino

Message par likikiFrance

Le programme :
// Calcul de la vitesse d'un train miniature 
// En passant devant deux led Ir
// Programme V 2.2
// Du 11/11/2013
// Par C.ARFEL
// 
// Avec afficheur autonome
// 

#include "LiquidCrystal.h" // Ajout de la librairie pour afficheur lcd

LiquidCrystal lcd(13,12,11,10,9,8,7,6,5,4); // déclaration des bornes du lcd

int IR1 = 2;   // La diode IR 1 est branchée sur D2
int IR2 = 3;   // La diode IR 2 est branchée sur D3



int compteur1 = 1;      // variable enregistre un passage compteur 1
int compteur2 = 1;      // variable enregistre un passage compteur 2
int temps1=millis();    // Variable prise de temps pour IR 1
int temps2=millis();    // Variable prise de temps pour IR 2
int temps3 = 0;         // Variable pour le calcul du temps réel passé
float V = 0.0;            // Variable Vitesse
float TTS = 0.0;          // Variable temps passé en secondes
float VKM = 0.0;          // Variable vitesse en KM/H
float VKMN = 0.0;         // Variable vitesse en N
float VKMH0 = 0.0;        // Variable vitesse en H0




void setup(){
  
  
  lcd.begin(16,2); // Déclaraton du type d'afficheur 16 cracteres sur 2 lignes
  
  pinMode(IR1, INPUT);     // Déclaration de la broche D2 en "entrée"
  pinMode(IR2, INPUT);     // Déclaration de la broche D3 en "entrée"
  
  lcd.print("** En attente **"); // Affichage sur le lcd
  

}

void loop(){
  
  
  
  
  int valIR1 = digitalRead(IR1);   // Lecture de broche D2 et mise du résultat dans la variable valIR1
  int valIR2 = digitalRead(IR2);   // Lecture de broche D3 et mise du résultat dans la variable valIR2
  
   if(valIR1 == LOW && compteur1==1) {  // Si passage devant IR1 ET compteur1 = 1 alors ....
   temps1=millis();                     // enregistrement dans temps1 de la valeur millis
   
   compteur1 = compteur1 + 1;   // On rajoute +1 a compteur1 ce qui empeche le remplacement de la valeur de temps1
   
   } 
    
   
     
    if(valIR2 == LOW && compteur2==1) {   // Si passage devant IR2 ET compteur2 = 1 alors ....
    temps2=millis();      // enregistrement dans temps1 de la valeur millis
    
    compteur2 = compteur2 + 1;  // On rajoute +1 a compteur2 ce qui empeche le remplacement de la valeur de temps2
    
   }
  
  if(compteur1>1 && compteur2>1) {   // Si les valeurs de Compteur1 ET de compteur2 sont differente de 1 alors le calcul peut debuter
    
     temps3 = (temps2-temps1);       // temps en milisecondes passez entre les deux capteurs
    
    
     TTS = ((float)temps3 / 1000.0);          // conversion milisecondes en secondes
    
    
    V = (0.1 / (float)TTS);                // calcul de d/t
    
    VKM = ((float)V * 3.6);               // conversion de la vitesse en m/s en KM/H
    
    
    VKMN = ((float)VKM * 160.0);             // conversion de la vitesse a l'echelle N
    
    VKMH0 =((float)VKM * 87.0);              // conversion de la vitesse a l'echelle H0
    
    //  Ci-dessous affichage sur le lcd des resultas
    
    lcd.clear();                      // on éfface l'ecran
    lcd.print(VKMN);                  // affichahe de VKM N
    lcd.println(" KMh en N ");       //
    lcd.setCursor(0, 1);              // On déplace le curseur sur la 2 eme ligne
    lcd.print(VKMH0);                 // affichage de VHM HO
    lcd.println(" KMh en H0");       //
    
    delay(10000);  // délais de 10 secondes avant reprise du programme
    // Pour permettre la libération de la zone IR
    
    
    compteur1=1;  // Variable remise a 1
    compteur2=1;  // Variable remise a 1
    temps1 = 0;   // Variable remise a 0
    temps2= 0;    // Variable remise a 0
    
    
    lcd.clear(); // on éfface l'ecran
    lcd.print("** En attente **"); // Affichage sur le lcd
    

  }

   

}

:kingmoi:

ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Avatar du membre
likikiFrance
Site Admin
Site Admin
Messages : 6652
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 : 56
Pays :
France (fr)
France
avr. 2021 21 18:13

Re: Calcul de la vitesse d'un train miniature avec l'Arduino

Message par likikiFrance

Une petite vidéo :




Sur le réseau :




:kingmoi:
:kingmoi:

ImageImageImage


Les dates des bourses d'échange mis a jour ==> ICI <==
Répondre