Calcul d'une distance

Bonjour,

Je réalise un système pour calculer la vitesse d'une roue à partir d'une fourche optique. En fonction d'une nombre de trous dans la roue je calcul donc sa vitesse. Maintenant, la ou je bloque avec la fonction millis, c'est pour calculer la distance parcouru par cette roue. J'ai la vitesse, mais je ne vois pas comment rajouter le calcul de la distance dans mon code...

Si quelqu'un ici présent peut m'aider ?

Voici mon code :

#include <LiquidCrystal.h>
LiquidCrystal lcd(45, 47, 37, 35, 33, 31); // Ecran LCD
int encoder_pin = 2;  // Pin du capteur       
unsigned int rpm = 0;     // Tour par minute
volatile int pulses = 0;  // Nombre de pulsations
unsigned long timeold = 0;
unsigned int pulsesperturn = 8; // Nombre de trous dans la roue
float rayonroue = 0.01; // En mètre
float speed = 0;
float distance = 0;;

void counter() // Compteur
 {
    pulses++;    
 }

void setup()
 {
   lcd.begin (40, 2);
   pinMode(encoder_pin, INPUT);
   lcd.clear();
 }

void loop()
 {
    attachInterrupt(0, counter, RISING);
    if (millis() - timeold >= 1000 && pulses >= 4)
     {  
      detachInterrupt(0);
      rpm = (60 * 1000 / pulsesperturn) / (millis() - timeold) * pulses;
      speed = 2 * 3.14 * (rpm / 60) * rayonroue * 3.6;
      timeold = millis();
      pulses = 0;
      if (rpm)
       {
        lcd.setCursor (0, 0);
        lcd.print(rpm);
        lcd.print(" tr/min     ");
        lcd.setCursor (0, 1);
        lcd.print(speed);
        lcd.print(" km/h     ");
       }
      else
       {
        lcd.clear();
        lcd.setCursor (0, 0);
        lcd.print(" A l'arret...");
       }
     }
    if (millis() - timeold >= 5000 && pulses < 4)
     {  
      detachInterrupt(0);
      rpm = (60 * 5000 / pulsesperturn) / (millis() - timeold) * pulses;
      speed = 2 * 3.14 * (rpm / 60) * rayonroue * 3.6;
      timeold = millis();
      pulses = 0;
      lcd.setCursor (0, 1);
      if (rpm)
       {
        lcd.setCursor (0, 0);
        lcd.print(rpm);
        lcd.print(" tr/min     ");
        lcd.setCursor (0, 1);
        lcd.print(speed);
        lcd.print(" km/h     ");
       }
      else
       {
        lcd.clear();
        lcd.setCursor (0, 0);
        lcd.print(" A l'arret...");
       }
     }
 }

Merci d'avance

Salut,

Si tu connais la vitesse de la roue, et le temps que celle-ci à tourner, la distance parcourue c'est vitesse*temps.

Si la vitesse est en m/s, et le temps que la roue à tourner en s, tu auras la distance en m, au niveau programmation il faut déclencher un timer dés que la fourche optique capte un signal indiquant que la roue tourne , puis stopper ce timer quand la fourche optique ne capte de signal indiquant que la roue est à l'arrêt.

A partir de ce temps de fonctionnement et de la vitesse de la roue , il ne reste plus qu'a calculer la distance parcourue.

@+

Bonjour,

La distance peut aussi se calculer sans connaître le temps passé, vu qu'on connaît le nombre de tours effectués, donc un petit verre de lait, et pi(s) on a la réponse.

si par exemple tu à 10 trous dans la roue et que le périmètre de la roue fait 2m tu sait que entre deux trous tu parcours 0,2m (périmètre/nombre de trou 2/10) il te suffit de compter le nombre de trou lu et le multiplier par la distance parcouru entre chaque trou
ex si tu compte 1000 lectures de trou sachant que tu parcours 0,2m entre chaque trou tu à fait 1000*0,2 soit 200 m
Là la vitesse n'est pas utile, c'est juste la distance que l'on calcule.