Différences entre versions de « ADX335-326-Calibrer-Programmer »
Ligne 31 : | Ligne 31 : | ||
=== Exécuter le sketch de calibration === | === Exécuter le sketch de calibration === | ||
− | * | + | * Chargez le sketch ci-dessous sur l'Arduino |
− | * | + | * Ouvrez le Moniteur Série. |
− | * | + | * Placer le breaboard avec le senseur sur une surface plane (une table par exemple) |
− | ** | + | ** Pressez et maintenez le bouton jusqu'à ce que vous voyez apparaitre le mot "Calibrate" sur le moniteur série. |
− | ** | + | ** Cela calibrera la valeur minimale pour l'axe Z. |
− | * | + | * Placez (mettez debout) le breadboard sur l'arrête avant et pressez encore le boutonpour calibrer +y |
− | * | + | * Répétez encore 3 fois cette opération avec les autres arrêtes du breadboard pour calibrer +x, -y et -x. |
− | * | + | * Retournez le breadboard et pressez le bouton pour calibrer +z. (Truc et astuce: vous pouvez utiliser la surface en dessous du plan de travail... c'est plus facile.) |
== Sortie du programme de calibration == | == Sortie du programme de calibration == |
Version du 10 juin 2013 à 14:25
Calibration statique
Comme pour tous les senseurs, il existe de faibles variations des valeurs de sorties entre différents exemplaires de l'accéléromètre.
Ces variations ne sont pas importantes pour les applications non-critiques comme les manettes de jeux, les détections de mouvement, senseurs tilts.
Pour les applications nécessitant des mesures précises, la calibration est nécessaire pour obtenir une valeur de référence fiable.
La gravité comme référence de calibration
L'accélération est mesure en unité de force gravitationnelle (ou en "G"). 1G représente l'attraction gravitationnelle à la surface de la terre. Peu importe ce que vous auriez pu entendre ci où là, la gravité est une force assez stable pouvant servir de référence de calibration fiable et pratique.
Méthode de calibration
Pour calibrer un senseur avec la référence gravitationnelle, vous avez besoin de déterminér la sortie du senseur pour chaque axe lorsque celui est précisément aligné avec l'attraction terrestre (attraction gravitationnelle). Une calibration de laboratoire (de grande qualité) utilisé des gabarits/supports d'une grande précision. La méthode décrite ci-dessous est simple et fournit des résultats d'une étonnante qualité.
Monter le senseur
Pour commencer, montez/placez le senseur sur un petit breadboard comme celui que vous pouvez voir ci-dessous. La fond et les côtés du breadboard peuvent servir de références planes d'une relativement bonne précision. Cela permettra d'orienter le senseur avec précision suffisamment bonne afin d'effectuer la calibration.
Raccorder le senseur
Raccordez le senseur comme présenté ci-dessous. C'est un circuit équivalent à celui présenté dans la page précedente. Il y a un bouton en plus.
Exécuter le sketch de calibration
- Chargez le sketch ci-dessous sur l'Arduino
- Ouvrez le Moniteur Série.
- Placer le breaboard avec le senseur sur une surface plane (une table par exemple)
- Pressez et maintenez le bouton jusqu'à ce que vous voyez apparaitre le mot "Calibrate" sur le moniteur série.
- Cela calibrera la valeur minimale pour l'axe Z.
- Placez (mettez debout) le breadboard sur l'arrête avant et pressez encore le boutonpour calibrer +y
- Répétez encore 3 fois cette opération avec les autres arrêtes du breadboard pour calibrer +x, -y et -x.
- Retournez le breadboard et pressez le bouton pour calibrer +z. (Truc et astuce: vous pouvez utiliser la surface en dessous du plan de travail... c'est plus facile.)
Sortie du programme de calibration
Once calibrated, the output will show the calibrated raw range for each axis, followed by the measured "G" forces. The raw ranges can be used as constants in sketches.
Raw Ranges: X: 408-616, Y: 398-610, Z: 422-625 511, 511, 625 :: -0.01G, 0.07G, 1.00G Raw Ranges: X: 408-616, Y: 398-610, Z: 422-625 511, 511, 625 :: -0.01G, 0.07G, 1.00G Raw Ranges: X: 408-616, Y: 398-610, Z: 422-625 511, 511, 625 :: -0.01G, 0.07G, 1.00G Raw Ranges: X: 408-616, Y: 398-610, Z: 422-625 511, 511, 625 :: -0.01G, 0.07G, 1.00G Raw Ranges: X: 408-616, Y: 398-610, Z: 422-625
Programme de calibration
const int xInput = A0; const int yInput = A1; const int zInput = A2; const int buttonPin = 2; // Raw Ranges: // initialize to mid-range and allow calibration to // find the minimum and maximum for each axis int xRawMin = 512; int xRawMax = 512; int yRawMin = 512; int yRawMax = 512; int zRawMin = 512; int zRawMax = 512; // Take multiple samples to reduce noise const int sampleSize = 10; void setup() { analogReference(EXTERNAL); Serial.begin(9600); } void loop() { int xRaw = ReadAxis(xInput); int yRaw = ReadAxis(yInput); int zRaw = ReadAxis(zInput); if (digitalRead(buttonPin) == LOW) { AutoCalibrate(xRaw, yRaw, zRaw); } else { Serial.print("Raw Ranges: X: "); Serial.print(xRawMin); Serial.print("-"); Serial.print(xRawMax); Serial.print(", Y: "); Serial.print(yRawMin); Serial.print("-"); Serial.print(yRawMax); Serial.print(", Z: "); Serial.print(zRawMin); Serial.print("-"); Serial.print(zRawMax); Serial.println(); Serial.print(xRaw); Serial.print(", "); Serial.print(yRaw); Serial.print(", "); Serial.print(zRaw); // Convert raw values to 'milli-Gs" long xScaled = map(xRaw, xRawMin, xRawMax, -1000, 1000); long yScaled = map(yRaw, yRawMin, yRawMax, -1000, 1000); long zScaled = map(zRaw, zRawMin, zRawMax, -1000, 1000); // re-scale to fractional Gs float xAccel = xScaled / 1000.0; float yAccel = yScaled / 1000.0; float zAccel = zScaled / 1000.0; Serial.print(" :: "); Serial.print(xAccel); Serial.print("G, "); Serial.print(yAccel); Serial.print("G, "); Serial.print(zAccel); Serial.println("G"); delay(500); } } // // Read "sampleSize" samples and report the average // int ReadAxis(int axisPin) { long reading = 0; analogRead(axisPin); delay(1); for (int i = 0; i < sampleSize; i++) { reading += analogRead(axisPin); } return reading/sampleSize; } // // Find the extreme raw readings from each axis // void AutoCalibrate(int xRaw, int yRaw, int zRaw) { Serial.println("Calibrate"); if (xRaw < xRawMin) { xRawMin = xRaw; } if (xRaw > xRawMax) { xRawMax = xRaw; } if (yRaw < yRawMin) { yRawMin = yRaw; } if (yRaw > yRawMax) { yRawMax = yRaw; } if (zRaw < zRawMin) { zRawMin = zRaw; } if (zRaw > zRawMax) { zRawMax = zRaw; } }
Réalisé par Bill Earl Pour AdaFruit Insdustries.
Source: [1]
Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.