IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Calibration Accéléromètre LIS3DSH


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut Calibration Accéléromètre LIS3DSH
    Bonjour ,
    j'utilise un Accélérometre LIS3DSH , voila le code en arduino :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <Wire.h>
    int x,y,z;
    float K=0.061; // (4000/65535) milli-g per digit for +/-2g full scale using 16 bit digital output
    void setup()
    {
      Wire.begin();        // join i2c bus (address optional for master)
      Serial.begin(9600);  // start serial for output
      Wire.beginTransmission(0x1E); // transmit to device #30
      Wire.write(0x20);//Send address of 'Control register 4' to write configuration
      Wire.write(0x7F);//Write a value that enables x,y,z accelerometers
      Wire.endTransmission();// stop transmitting
    }
     
    void loop()
    {
      delay(1000);
     
      Wire.beginTransmission(0x1E); // transmit to device #30
      Wire.write(0x28);//Send address of LSB of x. Address is auto-increased after each reading.
      Wire.endTransmission();    // stop transmitting
     
      Wire.requestFrom(0x1E, 6);    // request 6 bytes from slave device #30
      x = Wire.read() | Wire.read()<<8; //x acceleration 
      y = Wire.read() | Wire.read()<<8; //y acceleration
      z = Wire.read() | Wire.read()<<8; //z acceleration
     
      Serial.println("x=" + String(K*x)+" mg  \ty=" + String(K*y)+" mg  \tz=" + String(K*z)+" mg");
    }
    le code marche bien mais je dois calibrer mon accélérometter , j'ai essayer plusieurs façon de le calibrer mais j'ai pas pu le faire , quelqu'un peut me guider comment je calibre ce capteur
    PS : une semaine de galère avec ! HELP PLEASE :'(

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    Qu'entends-tu par "calibrer" ? Tu as un décalage (Zero-glevel offset) ?

    PS : il fonctionne réellement ce code pour les accélérations négatives ? Je vois dans la doc qu'il faut faire le complément à 2.

    OUT_X_L (28h), OUT_X_H (29h)
    X-axis acceleration data. The value is expressed in two’s complement.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    [Bonjour
    oui il marche et il me donne des valeur positive et négative ;
    sur l'axe de Z example j'ai 1004 mg ( sa varie entre 1000 et 1008 ) et sur x et y normalement on a 0 ( ou presque ) mais j'ai 70mg ( 62 a 70 sur y ) et -10 ( -10 a -18 mg sur x )
    que dois je faire !!!!!!

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Ok, le type int d'Arduino prend en charge les nombres négatifs...

    Il faudrait tourner le capteur dans tous les sens pour être sûr. Cela donne quoi si l'axe x et y sont disposés verticalement ?

    Dans une Application Note du composant, on trouve ceci :

    Nom : Capture_offset.JPG
Affichages : 676
Taille : 83,4 Ko

    Final acceleration output value is composed as:
    Output(axis) = Measurement(axis) - OFFSET_x(axis) * 32
    En écrivant dans les registres 10h, 11h et 12h, tu peux compenser le décalage du zéro avec un offset sur chaque axe.

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Citation Envoyé par ludo14
    Merci beaucoup pour l'info

    Ps : j'arrive pas a répondre dans la discussion je sais pas pourquoi !
    du coup pour les registres j’implémente comme çà ??
    je sais pas trop comment le faire !


    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #include <Wire.h>
    #include <LIS3DSH.h>
    float K = 0.061; // (4000/65535) milli-g per digit for +/-2g full scale using 16 bit digital output
    LIS3DSH accel;
    #define offset_x= 0x10 ;
    #define offset_y=0x11;
    #define offset_z=0x12;
     
     
      float Acc_X, Acc_Y, Acc_Z ;
     
    void setup() 
    {
      Serial.begin(9600);
      Wire.begin();
      accel.enableDefault();
    }
     
    void loop() 
    {
      int16_t x, y, z;
      //int8_t temperature;
     
      accel.readAccel(&x, &y, &z);
      accel.readTemperature(&temperature);
      Acc_X= ((x)-offset_x*32);
      Acc_Y= ((y)-offset_y*32);
      Acc_Z= ((z)-offset_Z*32);
     
     
     
      Serial.print("Accel ");
      Serial.print("X: ");
      Serial.print(x);
      Serial.print(" Y: ");
      Serial.print(y);
      Serial.print(" Z: ");
      Serial.print(z);
      Serial.print(" T: ");
      //Serial.println(temperature);
     
    delay(1000);
    }


    tu peux me corriger si je me suis planter ???

    Merci

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Citation Envoyé par ludo14
    Ps : j'arrive pas a répondre dans la discussion je sais pas pourquoi !
    Bizarre, à suivre... Tu n'as pas de bouton [Répondre à la discussion] en bas à gauche de la page ?

    Citation Envoyé par ludo14
    tu peux me corriger si je me suis planter ???
    C'est un peu plus compliqué que ça

    Tes variables offset_xx ne contiennent que les adresses des registres du LIS3DSH, mas tu ne vas pas lire ou écrire dedans...

    Je vois maintenant que tu utilises une bibliothèque qui comprend sans doute des classes qui permettent de s'affranchir de tout le bazar des registres et du protocole I2C. C'est bien celle-là ?

Discussions similaires

  1. Calibration d'une caméra :quid de la distance ?
    Par horu dans le forum Traitement d'images
    Réponses: 18
    Dernier message: 29/11/2007, 16h47
  2. Calibration de caméras (cvFindChessBoard)
    Par SpongeBob dans le forum OpenCV
    Réponses: 1
    Dernier message: 03/05/2007, 23h03
  3. [Graveur] Calibration Area Error !
    Par bnadem35 dans le forum Périphériques
    Réponses: 4
    Dernier message: 01/12/2006, 18h10
  4. calibration multi point
    Par Platypus dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 23/10/2006, 11h16
  5. Calibrer une imprimante via xsl
    Par **jouly** dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 24/01/2006, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo