Compteur kilomètrique avec un arduino
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Compteur kilomètrique avec un arduino



  1. #1
    eliobou

    Compteur kilomètrique avec un arduino


    ------

    Bonjour,

    Je suis en train de réaliser un compteur kilomètrique pour mon vélo avec un arduino UNO et un shield LCD de chez dx.com. Je détecte un tour de roue avec un capteur ILS cablé en NO sur le pin D2. J'ai néanmoins quelques soucis sur le code, l'écran affiche un nombre qui s'incrémente à une vitesse phénoménale. Voici mon code :

    Code HTML:
    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    const int reedPin= 2;
    int reedState = 0;
    
    float diam = 40;
    float circonference;
    float km;
    
    
    void setup() {
    
    circonference = 2*3.14*diam;
    pinMode(reedPin, INPUT);
    
    lcd.begin(16, 2);
    
    lcd.print("Taille de roue:");
    lcd.setCursor(0,1);
    lcd.print(diam);
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Kilometre :");
    
    }
    
    void loop() {
    
      reedState = digitalRead(reedState);
      
      while (reedState == HIGH) {  
        km = km + circonference;
        lcd.setCursor(0, 1);
        lcd.print(km);
      } 
       
    }
    Est-ce que quelqu'un saurai me dire quel est le problème ?

    Merci d'avance,
    Eliobou

    -----

  2. #2
    tchitchou

    Re : Compteur kilomètrique avec un arduino

    Salut,
    "le" problème, je sais pas.

    "un" problème, le périmètre du cercle, y'a un "2*" de trop

  3. #3
    mgduc

    Re : Compteur kilomètrique avec un arduino

    Je ne programme pas en C mais j'arrive quand même à comprendre.

    Voici ma conclusion.

    void loop() {

    reedState = digitalRead(reedState);

    while (reedState == HIGH) {
    km = km + circonference;
    lcd.setCursor(0, 1);
    lcd.print(km);
    }

    }
    Quand ton compteur lie l'état de ton capteur et qu'il est HIGH, il incrémente le compteur et reli l'état de ton capteur avant qu'il est le temps d'être LOW et incrémente le compteur sans que la roue est eu le temps de faire un tour.

    Si j'étais toi une fois que le programme est détecter une position HIGH j'incrémenterais le compteur et attendrais qu'il passe en LOW avant de recommencer la boucle.

  4. #4
    eliobou

    Re : Compteur kilomètrique avec un arduino

    @tchitchou effectivement merci

    @mgduc je comprend ce que tu veux dire par la, reste à trouver comment faire merci

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Compteur kilomètrique avec un arduino

    Citation Envoyé par eliobou Voir le message
    @mgduc je comprend ce que tu veux dire par la, reste à trouver comment faire merci
    ca me semble assez élémentaire mon cher watson, attendre que le signal soit "redescendu", donc:
    Code:
    while (reedState != HIGH); // On attend que le signal monte
    km = km + circonference;
    lcd.setCursor(0, 1);
    lcd.print(km);
    while (reedState == HIGH); // On attend que le signal resdescende
    

  7. #6
    grosmatou75001

    Re : Compteur kilomètrique avec un arduino

    Citation Envoyé par Jack Voir le message
    ca me semble assez élémentaire mon cher watson
    Code:
    while (reedState == HIGH); // On attend que le signal resdescende
    
    et voila une jolie boucle sans fin...

    Code:
    while(reedState==HIGH)
       reedState = digitalRead(reedState);
    Dernière modification par grosmatou75001 ; 22/08/2013 à 20h22. Motif: reparé les balises

  8. #7
    Jack
    Modérateur

    Re : Compteur kilomètrique avec un arduino

    oooups! erreur de débutant.

    Code:
    while (digitalRead(reedState) != HIGH); // On attend que le signal monte
    km = km + circonference;
    lcd.setCursor(0, 1);
    lcd.print(km);
    while (digitalRead(reedState)== HIGH); // On attend que le signal resdescende
    Je ne connais pas trop les arduino. Il n'y a pas de gestion des interruptions venant des I/O, parce que c'est assez lourdaud de faire bosser le CPU à fond pendant 99,9999% du temps pour rien.
    Dernière modification par Jack ; 22/08/2013 à 20h55.

  9. #8
    eliobou

    Re : Compteur kilomètrique avec un arduino

    Citation Envoyé par Jack Voir le message
    oooups! erreur de débutant.

    Code:
    while (digitalRead(reedState) != HIGH); // On attend que le signal monte
    km = km + circonference;
    lcd.setCursor(0, 1);
    lcd.print(km);
    while (digitalRead(reedState)== HIGH); // On attend que le signal resdescende
    Je ne connais pas trop les arduino. Il n'y a pas de gestion des interruptions venant des I/O, parce que c'est assez lourdaud de faire bosser le CPU à fond pendant 99,9999% du temps pour rien.
    J'ai exécuté le programme avec ces modifications.

    Code HTML:
    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    const int reedPin= 2;
    int reedState = 0;
    
    float diam = 70;
    float circonference;
    float km;
    
    
    void setup() {
    
    circonference = 3.14 * diam;
    pinMode(reedPin, INPUT);
    
    lcd.begin(16, 2);
    lcd.print("Taille de roue:");
    lcd.setCursor(0,1);
    lcd.print(diam);
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Centimetre :");
    
    }
    
    void loop() {
     
    while (digitalRead(reedState) != HIGH); // On attend que le signal monte
    km = km + circonference;
    lcd.setCursor(0, 1);
    lcd.print(km);
    while (digitalRead(reedState) == HIGH); // On attend que le signal resdescende
    
    }
    Mais l'écran affiche "219,80" et rien ne se passe quand je passe l'aimant. Je suis vraiment débutant en arduino peut être ai-je mal compris vos messages.

  10. #9
    Jack
    Modérateur

    Re : Compteur kilomètrique avec un arduino

    Il faut débugger ton programme. Comme l'arduino n'a pas de debugger à proprement parler (c'est ce que je lui reproche principalement), il faut travailler à l'ancienne: visualiser les points de passage et les variables dans ton programme à l'aide de serial.print().
    comme ça tu verras si tu franchis le 1er while, puis le second, etc.

    A+

  11. #10
    paulfjujo

    Re : Compteur kilomètrique avec un arduino

    bonsoir,

    il faut absolument traiter la detection de tour de roue via interruption
    et aussi simplement comptabiliser le nombre de tour de roue
    et lorsqu'on atteint la bonne valeur, raffraichir le compteur Kms

    ex: avec une roue de 700 il faut 455 impulsions pour parcourir 1km
    tu pourrais raffraichir la valeur de comptage à l'hectometre pres, ce qui est le cas pour les
    compteurs de velo, soit toute les 45 impulsions
    et faire un rattrapage lors du franchissement de km (10x hectometre) à 455 impuls et non pas 450
    de ce fait tu gardes une bonne precision
    ( au nombre de bar pres dans la chambre à air et le poids du bonhomme)

    Valeur utile : nb de tour par km parcouru .. fonction du diametre de ta roue..
    j'ai fais une appli de ce type, d'abors avec un ILS + Aimant puis avec un capteur effet hall + aimant
    voir si çà t'inspire ici
    http://paulfjujo.free.fr/VELO/velo.htm

    Ne pas oublier que la duree de l'impulsion est fonction aussi de la taille de l'aimant et de sa position
    par rapport à l'axe de rotation.
    Dernière modification par paulfjujo ; 22/08/2013 à 21h35.

  12. #11
    MiGaNuTs

    Re : Compteur kilomètrique avec un arduino

    Tu peut aussi avoir le phénomène du capteur reed qui "rebondi" au passage de l'aimant, et du coup envoie plusieurs impulsions pour un seul passage.

    (et accessoirement je mettrais la circonférence dans une constante, histoire d'économiser des variables pour gratter un peu de RAM, mais pas sur que ca fasse une grosse différence. A voir comment réagit le compilo)

  13. #12
    Amarillys

    Re : Compteur kilomètrique avec un arduino

    Bonjour,
    Je remonte le sujet car je dois réaliser le même montage, mais certains éléments me manquent.

    Premièrement, comment est-ce que je dois brancher le montage à l'Arduino ?

    Merci

  14. #13
    gabuzo

    Re : Compteur kilomètrique avec un arduino

    En gros il faut qu'on te donne le schéma et après tu n'as plus que le code à pomper. Elle est pas belle la vie ?
    Je suis Charlie

  15. #14
    Amarillys

    Re : Compteur kilomètrique avec un arduino

    Non ce n'est pas ça, j'ai déjà fais mes recherches, j'ai déjà un montage et un programme, mais je voulais vérifier si celui-ci fonctionnait.
    Pour l'instant, j'ai fais un programme Flowcode, mais le problème c'est pour envoyer l'information au pcduino (Puisque c'est surtout de la simulation).
    Alors pour ma 3e revue de projet, j'ai fais un autre montage en remplaçant l'interrupteur Reed par un bouton poussoir afin de montrer le fonctionnement de mon programme (+1m par tour de roue).
    Et aujourd'hui j'ai vérifié si l'interrupteur Reed fonctionnait, alors je l'ai branché à un générateur+oscilloscope (photo ci-dessous) : et ça marche !



    Mais maintenant je ne sais pas si ce montage fonctionne avec le programme ci-dessus, je compte le tester, mais je voulais juste poser la question assez tôt pour avoir des réponses au moment où ça poserait problème.
    D'autant plus que je ne connais pas le langage Arduino, et je n'ai pas le temps de l'apprendre en 2 jours.

    Si vous estimez que je profite de l'occasion pour avoir des réponses facilement, vous n'êtes pas obligé de répondre, je comprendrais.
    Images attachées Images attachées  

  16. #15
    jjtops

    Re : Compteur kilomètrique avec un arduino

    Bonjour,

    Je suis noob mais j'ai fait un bout de code qui fonctionne.
    Je traite juste la détection, 2 (mètre) pour la circonférence de la roue.
    Il reste à afficher "total".



    Code HTML:
    const int bp = 8; //déclaration du capteur qui compte les coups
    
    int etat; //etat du capteur qui compte les coups
    int compteur = 0;
    int mem_etat = HIGH;
    int dev = 2; //distance parcourue par un tour de roue
    int total = 0; //distance totale que le compteur affiche
    
    
    void setup()
    {
        pinMode (bp, INPUT);  
        }
         
    void loop() {
        
    etat = digitalRead(bp);
    if ((etat != mem_etat) && (etat == LOW)){
      compteur++;
      total = compteur * dev;
    }
      mem_etat = etat;
    }

Discussions similaires

  1. compteur kilométrique pour vélo
    Par invited23a9c66 dans le forum Électronique
    Réponses: 1
    Dernier message: 02/03/2011, 14h31
  2. stocker avec arduino
    Par inviteb69b4ce8 dans le forum Électronique
    Réponses: 10
    Dernier message: 16/06/2010, 15h45
  3. [Divers] Compteur vitesse + compteur kilométrique 206 en panne
    Par ziza1981 dans le forum Dépannage
    Réponses: 7
    Dernier message: 25/10/2009, 07h00
  4. compteur kilometrique
    Par invite7f8e9711 dans le forum Électronique
    Réponses: 1
    Dernier message: 13/06/2005, 22h50
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...