[Programmation] Projet : Odomètre numérique
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Projet : Odomètre numérique



  1. #1
    Juju951

    Projet : Odomètre numérique


    ------

    Bonjour,

    Mon projet consiste à afficher numériquement (via écran lcd) la distance parcouru d'un odomètre (photo).

    Détail: La distance parcouru est mesuré par un encodeur incrémental puis affiché sur un écran LCD. Un bouton poussoir permet de remettre à 0 la distance.


    Matériel :
    - Encodeur magnétique incrémental AEAT-601B (Caractéristique codeur)
    - Une carte Arduino Uno
    - Un ecran LCD
    - un bouton poussoir.

    Après de long recherche sur les codeurs, je n'arrive pas a avoir de résultat concluant.

    J'aimerai avoir votre aide sur le câblage de l'encodeur et sa programmation sur Arduino :smiley-confuse:


    Merci d'avance

    -----

  2. #2
    DAUDET78

    Re : Projet : Odomètre numérique HELPPP !!

    Bonjour Juju951 et bienvenue sur FUTURA
    Citation Envoyé par Juju951 Voir le message
    J'aimerai avoir votre aide sur le câblage de l'encodeur
    Tu connectes les fils Orange et Marron sur deux entrées de ton µC (5V) http://docs-europe.electrocomponents...6b80e8dd0d.pdf
    et sa programmation sur Arduino :smiley-confuse:
    Peu importe le µC, c'est toujours la même chose :
    http://forums.futura-sciences.com/pr...cremental.html
    J'aime pas le Grec

  3. #3
    Teknic

    Re : Projet : Odomètre numérique

    Bonjour à tous,

    pour la programmation Arduino je pense qu'il est judicieux de passer les entrées dédiées à l'encodeur en mode Pull up pour faciliter la lecture:

    pinMode(8, INPUT_PULLUP);

    Daudet, tu confirmes que ça supprimera les rebonds aussi dans le cas d'un encodeur?

  4. #4
    Teknic

    Re : Projet : Odomètre numérique

    Erratum j'écris parfois n'importe quoi et confonds resistance de rappel et condos anti rebond!
    je suis fatigué...

  5. A voir en vidéo sur Futura
  6. #5
    Juju951

    Re : Projet : Odomètre numérique

    Bonjour,

    Merci pour vos réponses. Merci de m'avoir confirmer le câblage.

    Mon plus gros problème est le code de l'Arduino. J'ai essayé différent code, qui augmentait la valeur incrémenté sans rien toucher.

    Je suis tombé sur ce code https://www.pjrc.com/teensy/td_libs_Encoder.html qui répond a mon besoin. Après il y a toujours des rebonds sur la valeur lu. Je vais utiliser la méthode condo ( Merci Teknic).

    Maintenant quand ma roue de l'odomètre fait 1 tour complet sa équivaux à un mètre de distance. Mon codeur à 256 "trou" pour un tour complet. Donc pour trouver ma distance parcouru : distance ( en m)= (1/256)*nb de trou incrémenté par le codeur

    Le code arduino : float distance = (1/256)*nbIncrementationCodeur

    Est-ce bon ? ( j'ai fait le test sur l'arduino mais ca ne correspond pas à la réalité)

    Merci,

  7. #6
    paulfjujo

    Re : Projet : Odomètre numérique

    bonjour,



    tu peux faire


    Code:
    unsigned int distance;  // 65536M ça fait deja pas mal
    long NbImpulsions; //  ou unsigned int si la distance max est < 256M
    
    distance= NbImpulsions >> 8 ;

  8. #7
    DAUDET78

    Re : Projet : Odomètre numérique

    Citation Envoyé par Teknic Voir le message
    Daudet, tu confirmes que ça supprimera les rebonds aussi dans le cas d'un encodeur?
    C'est expliqué en long et en large dans le tuto !
    Sinon, à quoi il servirait ?
    J'aime pas le Grec

  9. #8
    Juju951

    Re : Projet : Odomètre numérique

    Du coup paulfjujo avec le code que tu me proposes est que j'aurai un résultat de ma distance au centième ? exemple 1,26m ; 12,68m

  10. #9
    paulfjujo

    Re : Projet : Odomètre numérique

    Citation Envoyé par Juju951 Voir le message
    Du coup paulfjujo avec le code que tu me proposes est que j'aurai un résultat de ma distance au centième ? exemple 1,26m ; 12,68m
    NON !

    il te faut alors mutiplier le nb de pulses encoder par 100
    avant de faire le decalage à droite de 8 fois .. equivaut à diviser par 256
    sachant que ta resolution et de +- 1/256 em de metre soit ~ +-4mm
    au niveau de l'affichage LCD, il suffira de positionner la virgule au bon endroit

    je ne connais pas l'arduino, mais cela pourrait donner:

    Code:
    
    unsigne long nbIncrementationCodeur;
    unsigned long distance ;       
    char TEXTE[17];
    char *txt;
    
    distance= ( nbIncrementationCodeur * 100) >> 8;    // resultat en cm
    
    ....
    
    LCD_Out(1,1,"DIST=           ");
    txt=&TEXTE[0];
    LongWordToStr(distance,txt); 
    Ltrim(txt);  // supprime les blancs devant la valeur 
    k=strlen(txt) ; // longueur de string
    
    //On deplace les 2 chiffre  1/100em de Mà droite
    // pour intercaler la virgule
    *(txt+k)=*(txt+k-1);
    *(txt+k-1)=*(txt+k-2);
    *(txt+k)=','; // separateur
    *(txt+k+1)=0;  // on retablit le terminateur de string
    // et on affiche la distance cadrée à droite
    LCD_Out(1,16-k+1,txt);  // maxima  9.999.999,99

  11. #10
    paulfjujo

    Re : Projet : Odomètre numérique

    correctif pour la place du separateur
    *(txt+k-2 )=',' ; // separateur

    test avec MikroC et sortie sur terminal (j'ai pas de LCD sous la main)

    test avec 539 pulses => 2,10
    test avec 5390 pulses => 21,05
    test avec 53900 pulses => 210,54
    test avec 539000 pulses => 2105,46
    Dernière modification par paulfjujo ; 01/03/2017 à 14h46.

  12. #11
    Juju951

    Re : Projet : Odomètre numérique

    D'accord pour l'affichage en cm. Je vais utiliser des objets string à la place du tableau.

    Par contre la conversion ne correspond pas à la réalité. J'ai essayé de donner les résultats en mètre donc avec la formule

    Code:
    unsigned int distance;  // 65536M ça fait déjà pas mal
    long NbImpulsions; //  ou unsigned int si la distance max est < 256M
    
    distance= NbImpulsions >> 8 ;
    1 tour de roue réel correspond à une valeur de 3 avec le code ci dessus.
    Pour info :
    - ma roue, fait 32cm de diamètre donc Pie*0.32 = 1m de périmètre donc une distance parcouru de 1 m par tour.
    - D'après le datasheet le codeur a une résolution de 256

    Il y a t'il un rapport de réduction qui m’échappe ? Est ce mon code ? pourtant la connexion à l'arduino semble ok


    Ci dessous mon code actuel + une photo du codeur sur la roulette. Encore merci d'avance

    Code:
    // Nommage + definition 
    #include <SoftwareSerial.h>
    #include <LiquidCrystal.h>
    #include <Encoder.h>
    #define RxD 5
    #define TxD 4
    SoftwareSerial bluetooth(RxD,TxD);
    Encoder codeur(2, 3);
    LiquidCrystal lcd (12,11,10,9,8,7);
    boolean BP=6;
    
    // initialisation du programme
    void setup() {
      pinMode(BP,INPUT_PULLUP);
      Serial.begin(9600);
      lcd.begin(16,2);
      Serial.print("Roulette connecte:");
      lcd.clear();
      lcd.print("Roulette");
      lcd.setCursor(0,1);
      lcd.print("connecte");
      delay(2000);
    
    }
    long nbIncrementationCodeur  = 0; // nb incrementation affiché
      
    void loop() {
    //code condeur
      int newcodeur; // valeur incrementé du codeur
      digitalRead(BP); // Si bouton actionné alors RAZ de la valeur du codeur
      if ( BP==LOW){
        newcodeur=0;
        Serial.print("BP ok");
      }
      else{
      newcodeur = codeur.read();// lecture du codeur
      if (newcodeur != nbIncrementationCodeur ) {
        nbIncrementationCodeur = newcodeur;
      }
        if(nbIncrementationCodeur<0){
          nbIncrementationCodeur=0;// empeche valeur négatif
        }
      }
      
       unsigned int distance= nbIncrementationCodeur >> 8; // convertisseur du nb d'incrementation en mètre
       Serial.print("Position codeur = "); // afiche résultat sur PC
       Serial.print(distance);
       Serial.println();
       lcd.clear();
       lcd.print(distance); // afiche résultat sur lcd
    
      }
    Nom : 20170301_200508[1].jpg
Affichages : 259
Taille : 210,8 Ko

Discussions similaires

  1. Capteur de déplacement (Odomètre)?
    Par invitecc87f7eb dans le forum Électronique
    Réponses: 17
    Dernier message: 22/05/2012, 22h37
  2. odomètre VTT
    Par rbouvard dans le forum Électronique
    Réponses: 13
    Dernier message: 13/11/2011, 21h07
  3. odomètre électronique
    Par invitecd5bbf03 dans le forum Électronique
    Réponses: 0
    Dernier message: 07/04/2010, 14h26
Découvrez nos comparatifs produits sur l'informatique et les technologies.