Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec boussole électronique

Sujet résolu
    11 mars 2014 à 15:58:32

    Bonjour, 

    J'ai reçu cette boussole, qui a sa propre librairie et ses références: https://github.com/pololu/lsm303dlh-arduino

    J'ai fait les branchements, que je crois bon, et j'ai fait rouler un programme d'exemple donné par la librairie:

    /*
    The sensor outputs provided by the library are the raw 16-bit values
    obtained by concatenating the 8-bit high and low accelerometer and
    magnetometer data registers. They can be converted to units of g and
    gauss using the conversion factors specified in the datasheet for your
    particular device and full scale setting (gain).
    
    Example: An LSM303D gives a magnetometer X axis reading of 1982 with
    its default full scale setting of +/- 4 gauss. The M_GN specification
    in the LSM303D datasheet (page 10) states a conversion factor of 0.160
    mgauss/LSB (least significant bit) at this FS setting, so the raw
    reading of -1982 corresponds to 1982 * 0.160 = 317.1 mgauss =
    0.3171 gauss.
    
    In the LSM303DLHC, LSM303DLM, and LSM303DLH, the acceleration data
    registers actually contain a left-aligned 12-bit number, so the lowest
    4 bits are always 0, and the values should be shifted right by 4 bits
    (divided by 16) to be consistent with the conversion factors specified
    in the datasheets.
    
    Example: An LSM303DLH gives an accelerometer Z axis reading of -16144
    with its default full scale setting of +/- 2 g. Dropping the lowest 4
    bits gives a 12-bit raw value of -1009. The LA_So specification in the
    LSM303DLH datasheet (page 11) states a conversion factor of 1 mg/digit
    at this FS setting, so the value of -1009 corresponds to -1009 * 1 =
    1009 mg = 1.009 g.
    */
    
    #include <Wire.h>
    #include <LSM303.h>
    
    LSM303 compass;
    
    char report[80];
    
    void setup()
    {
      Serial.begin(9600);
      Wire.begin();
      compass.init();
      compass.enableDefault();
    }
    
    void loop()
    {
      compass.read();
    
      snprintf(report, sizeof(report), "A: %6d %6d %6d    M: %6d %6d %6d",
        compass.a.x, compass.a.y, compass.a.z,
        compass.m.x, compass.m.y, compass.m.z);
      Serial.println(report);
    
      delay(100);
    }

    Toutefois, l'Arduino ne clignote pas (ce qui signifie qu'elle ne communique pas via le Serial). Je pensais que le code fonctionnait sans qu'on y touche, mais il semble que ce n'est pas le cas. Y a-t-il une modification à faire?

    Merci!

    • Partager sur Facebook
    • Partager sur Twitter
    Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli
      11 mars 2014 à 18:58:39

      essaie de changer :

      snprintf(report, sizeof(report), "A: %6d %6d %6d    M: %6d %6d %6d",
      
      compass.a.x, compass.a.y, compass.a.z,
      compass.m.x, compass.m.y, compass.m.z);
      
      </pre> en
      sprintf(report, "A: %6d %6d %6d    M: %6d %6d %6d",
      
      compass.a.x, compass.a.y, compass.a.z,
      compass.m.x, compass.m.y, compass.m.z);
      
      </pre> pour voir.
      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

        11 mars 2014 à 20:02:23

        Ça ne fonctionne pas non plus.
        • Partager sur Facebook
        • Partager sur Twitter
        Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli
          11 mars 2014 à 20:07:50

          Tu as essayé de faire l'envoi d'une seule composante juste pour voir ce qui se passe ? genre Serial.println(compass.a.y); à la place de tout le bordel se sprintf ?

          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            11 mars 2014 à 20:10:15

            Je viens d'essayer, et je n'ai toujours pas de feedback serial.
            • Partager sur Facebook
            • Partager sur Twitter
            Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli
              11 mars 2014 à 20:43:35

              Fait un programme bete et méchant et ajoute des trucs au fur et à mesure pour voir ou ca bug.

              • Partager sur Facebook
              • Partager sur Twitter

              Retrouvez moi sur mon blog et ma chaine Youtube !

                11 mars 2014 à 20:49:40

                Ok, mais c'est la première fois que je travaille avec une librairie.

                Que fait cette ligne de code ?

                LSM303 compass;



                • Partager sur Facebook
                • Partager sur Twitter
                Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli
                  11 mars 2014 à 20:57:44

                  Elle crée un objet de type "LSM303" qui s'appelle compass. Je peux pas vraiment te faire un cours sur la programmation orienté objet non plus. Si tu as lu le cours Arduino, ca te rapel peut etre la librairie "LiquidCrystal" ou justement il fallait l'inclure et ensuite un créeait un object liquidCrystal en écriveant LiquidCrystal lcd par exemple.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    11 mars 2014 à 21:00:01

                    Non, je n'avais pas lu cette partie du cours. Merci de me le rappeler, je vais aller lire ça!

                    Ps: J'ai commencé la programmation orientée prototype sur js, ça se ressemble?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli
                      11 mars 2014 à 21:14:00

                      Chai pas, jcode pas vraiment en JS...

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Retrouvez moi sur mon blog et ma chaine Youtube !

                        11 mars 2014 à 21:43:30

                        J'ai remarqué ceci dans la référence de la librairie:

                        A boolean is returned indicating whether an LSM303 device was successfully detected.


                        J'ai donc testé, et le serial m'a affiché 0. 

                        Je crois que le montage est donc à refaire.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli
                          11 mars 2014 à 21:47:10

                          Partant de là forcément...

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Retrouvez moi sur mon blog et ma chaine Youtube !

                            12 mars 2014 à 0:56:21

                            Les circuits étaient bons. Le problème était que la boussole était trop "lousse", j'ai donc fait un peu de soudure et la boussole est maintenant détectée!
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Être conscient de son ignorance, c'est tendre vers la connaissance - Benjamin Disraeli

                            Problème avec boussole électronique

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown