Capteur de vitesse pour vélo

Bonjour,
Je suis en terminale S SI et dans le cadre de notre projet je dois réaliser un capteur de vitesse pour un vélo.
J’ai a ma disposition un ILS fixe et un aiment qui tourne sur la roue. Lorsque l’aiment passe devant l’ILS le contact se ferme.

Je pensais faire un programme du type:

Début
Démarrer le chronomètre
Lire la valeur du temps → T
FAIRE “attendre”
JUSQU’À contact fermé (le contact de l’ILS)
FINFAIRE
Lire T → t1
SI contact ouvert
ALORS FAIRE “attendre”
JUSQU’A contact fermé
FINFAIRE
Lire T → t2
FINSI
Périmètre de la roue / t2-t1 → V
Afficher V

Le problème c’est que je n’arrive pas à mesurer le temps à l’instant précis où le contact se ferme.
Et je ne parvient pas à faire une mesure de temps dans mon programme pour les valeur de t1 et t2.
De plus je me demande si ce programme pourrait fonctionner ou s’il y a des fautes.

PS: je fais l’intégralité de mon programme sur le site 123D Circuits (site conseillé par mon professeur de SI)

Salut,

Il faut passer par une gestion des interruptions, qui va compter un nombre d'impulsions provenant de ILS durant une mettons 1s, puis à partir de la, tu pourras déterminer la vitesse du vélo, connaissant la fréquence du signal et le diamètre de la roue.

@+

D'accord je vois. Je vais essayer cela ! Merci beaucoup

Hello,

Ta première approche n'est pas mauvaise, mais celle de Hameau va permettre de limiter les erreurs de mesure. TU auras une valeur beaucoup plus précise.

Quand tu écris

Le problème c'est que je n'arrive pas à mesurer le temps à l'instant précis où le contact se ferme.

Qu'entends-tu par là ?

Coyotte

Va voir ici :

post 7, c’est pour un anémomètre, mais le principe de mesure reste strictement le même avec l’utilisation ILS et Interruption.

@+

Salut Coyotte, le problème était que je ne parvenait pas a connaître la valeur de t1 et t2 parce que je ne sais pas comment faire pour les mesurer. Je ne sais pas si c'est clairement expliqué mais en gros je ne trouvais pas ces valeurs.

Mais du coup j'ai commenceé à faire un compteur de changement d'état de l'ILS, et je vais regarder le lien que hameau a envoyé, d'ailleurs merci ! :)

Bonsoir,

hameau: post 7, c'est pour un anémomètre, mais le principe de mesure reste strictement le même avec l'utilisation ILS et Interruption.

Je ne comprends pas vraiment la boucle void anemometre(). Et je ne vois pas comment le temps intervient dans le programme...

Victor1998: Je ne comprends pas vraiment la boucle void anemometre(). Et je ne vois pas comment le temps intervient dans le programme...

void anemometre() est attaché a l'inter 0 (D2), elle compte donc les impulsions de l'ils le temps est pris en compte dans la loop avec le delay(1000) ou on calcule la vitesse est on remet a zero le compteur (théoriquement toutes les secondes) ça marche si tu ne fais pas grand chose dans la loop .....

int bout1 = 2; //entrées des boutons int bout2 = 4; int etat_bouton = 0; int nbr_de_tour = 0; float V = 0;

void setup() { Serial.begin(9600); //débit en bits/s

pinMode(bout1, INPUT); //définie l'entrée

attachInterrupt (0, ILS, FALLING); //interruption d'un évenement. //FALLING car on passe d'un état haut à bas }

void loop() { delay(1000); //Calcule la vitesse chaque second Serial.print("V= "); Serial.print(3.1415*0.6*nbr_de_tour*3.6); //V = Pi*Diamètre*Nbr de tours*3.6 (km/h) Serial.println(" km/h"); // ici Diamètre = 60cm = 0.6 m nbr_de_tour = 0;

}

void ILS() { etat_bouton = digitalRead(bout1); //mémorise l'état du bouton dans une variable

if (etat_bouton != HIGH) { nbr_de_tour++; }

}

Bonjour, Voila ce que j'ai réalisé, pensez-vous que cela est juste?

PS: int bout2 = 4; est pour une autre boucle, donc rien à voir avec mon ILS