Go Down

Topic: Compte-tour pour vélo (Read 3294 times) previous topic - next topic

carteman1

Dec 15, 2015, 07:55 pm Last Edit: Dec 15, 2015, 08:06 pm by carteman1
Bonjour à tous,

Je viens d'acquérir mon (tout) premier Arduino nano et, étant débutant, je cherchais un moyen pour faire un compte-tour à placer sur un vélo afin de connaitre les tours-min du pédalier (très utile en entrainement). J'ai donc cherché et cherché sur internet en vain... bien que certain projet ce rapprochaient de ce que je voulais faire. Après plusieurs essais de code, je suis tombé sur le bon :)

Le principe est simple: Je mesure le temps entre 2 impulsions dans un capteur (donc pour un tour) puis je reporte le temps mesuré en tours/min. Ainsi, à chaque tour de pédalier, une nouvelle valeur est calculée.

Voici une image du montage sur 123D circuit. A noter que le capteur a été remplacé par un bouton.
Ainsi que le code (qui n'est peu-être pas optimisé mais ça fonctionne, c'est le principal non?)

J'espère que ça pourra en aider certain :)

weetoz

Bonjour,

sympa comme montage, niveau code, tu l' as deviné, il peut être amélioré.

Par exemple, l' affichage d' accueil, peut être mis dans le void setup(), ce dernier ne s' effectue qu' une seul fois.
Code: [Select]
void setup() {
  pinMode (hall, INPUT);                 // entrée analogique du capteur à effet Hall sur pin A3.
  lcd.begin (16, 2);
 //----------------------------------------- Affichage bienvenue
  lcd.setCursor (2, 0);
    lcd.write ("Bienvenu sur");
    lcd.setCursor (3, 1);
    lcd.write ("votre velo");
    delay (3000);
    lcd.clear();
}

D' autres amélioration peuvent être apportées, comme une interruption sur le front descendant, lorsque la manivelle passe devant le capteur, ainsi tu pourrais te passer de ceci:
Code: [Select]
if (a == 1) {                                    // pour que la valeur n'évoluent pas pendant le temps haut du capteur, pour que seulement 1 mesure soit effectuée pendant que le capteur est à l'état haut (une sorte "d'anti-rebond").
        t_1 = temps;
        rpm = 60000 / (t_1 - t_0);
        lcd.setCursor (9, 0);
        lcd.write ("   ");
        lcd.setCursor (9, 0);
        lcd.print (rpm);
        a = 2;
        b = 0;
        t_0 = temps;
      }

pour ça tu peux utiliser la fonction attachInterrupt, plus d' info ici

Toujours est-il, que ça fonctionne, et c' est bien le principal pour cette hivers!

carteman1

Bonsoir,
Oui c'est vrai que la fonction setup s'exécute qu'une fois, je n'y avait même pas pensé :) merci
Pour ce qui est du "attachInterrupt", je m'était renseigné sur le fonctionnement mais j'avoue que j'avais pas compris grand chose...
En tout cas merci pour votre retour!

weetoz

Bonsoir,

il te fait t' intéresser au fonction, par exemple tu pourrais créer une fonction afficheBienvenue:
Code: [Select]

void welcomDisplay(void){
    lcd.setCursor (2, 0);
    lcd.write ("Bienvenu sur");
    lcd.setCursor (3, 1);
    lcd.write ("votre velo");
    delay (3000);
    lcd.clear();
    delay (10);
}

Puis tu l' appel là où tu en as besoin:
Code: [Select]

void setup() {
  pinMode (hall, INPUT);                 // entrée analogique du capteur à effet Hall sur pin A3.
  lcd.begin (16, 2);

 welcomDisplay();

}


Cela te permettras de mieux appréhender les interruptions.

En tout cas, te voilà bien équipé pour ton entrainement!  Bravo.

Go Up