Valeur de retour d'un accéléromètre

Bonjour,
Je lit des codes d'accéléromètre, Je me pose des questions sur les valeurs X Y Z qu'un accéléromètre peut envoyer dans la broche analogique.
C'est un accéléromètre de ±3g.
Les valeur des broche analogique varie entre 0 à 1023.

Le code ici:
http://www.arduino.cc/playground/Main/ADXL330

la variable scale = 100 c'est 1g dans les données brute de l'accéléromètre?

Si 1g = 100 il y a que 600 possibilités pour -3g à 3g?
Pour -3g l'accéléromètre envoie la valeur 0?
Pour 0g l'accéléromètre envoie la valeur 300?
Pour 3g l'accéléromètre envoie la valeur 600?

Mais d'un autre coté je vois que que le vecteur XYZ d'information pour la calibration du vecteur d'accélération = (512, 512, 512).

for (int i = 0; i < 3; i++)
            b[i] = 512;

Ce qui fait que les valeurs XYZ entre 0 à 1023 du vecteur d'accélération sont convertie en valeur entre -512 à 511.

for (int i = 0; i < 3; i++)
            a[i] = analogRead(p[i]) - b[i];

Alors je me dit que:
Pour -3g l'accéléromètre envoie la valeur 0? car 0 - 512 = -512
Pour 0g l'accéléromètre envoie la valeur 512? car 512 - 512 = 0
Pour 3g l'accéléromètre envoie la valeur 1023? car 1023 - 512 = 511

Je suis tout mêlé j'ai besoin qu'on m'éclaire sur les valeurs de retour d'un accéléromètre.
J'ai besoin de comprendre ce qu'un accéléromètre peut envoyer comme valeur pour comprendre le code que je suis entrain de lire.

Merci.

Pendant la phase de calibration on initialise b[] pour faire le "zéro". La composante b[2] se voit en plus retirer 100 pour compenser l'accélération de la pesanteur. Les valeurs obtenues pendant la calibration sont déduites des mesures suivantes donc le résultat de la conversion qui est compris entre 0 et 1023 sera recalé dans un espace signé. On ne sera pas nécessairement calé sur l'espace -512 +511 du fait de l'offset trouvé lors de la calibration.

Alors je me dit que:
Pour -3g l'accéléromètre envoie la valeur 0? car 0 - 512 = -512
Pour 0g l'accéléromètre envoie la valeur 512? car 512 - 512 = 0
Pour 3g l'accéléromètre envoie la valeur 1023? car 1023 - 512 = 511

C'est vrais, si il n'y a pas d'offset et si le capteur délivre un signal en sortie compris entre 0 et 5V. Avec la configuration par défaut de l'arduino qui a une référence pour l'ADC à 5V.

Pour savoir ce que retourne l'accéléromètre le plus simple c'est de lire sa doc.
Ensuite il suffit de modifier le code que tu cites pour faire afficher les valeurs retournées par l'accéléromètre dans la console et comprendre comment il fonctionne.

Merci beaucoup fdufnews pour ton aide! :slight_smile:

Mais scale = 100 c'est la gravité terrestre (9.81 m/s² = 1g)?

Alor si pour l'accéléromètre la valeur 100 = 1g

Je m'imagine que durant la calibration le vecteur d'information de calibration va être = b[] = {300, 300, 300}

Pour -3g l'accéléromètre envoie la valeur 0? car 0 - 300 = -300
Pour 0g l'accéléromètre envoie la valeur 300? car 300 - 300 = 0
Pour 3g l'accéléromètre envoie la valeur 600? car 600 - 300 = 300

J'ai trouvé la doc de cette accéléromètre mais je vois pas où l'auteur du code prend 100 pour la valeur scale.
http://www.analog.com/static/imported-files/data_sheets/ADXL330.pdf

Je suis débutant dans ce domaine.
Je peux voir ça où dans la doc ce que vaux -3g, 0g et 3g en analogique?

Merci

Bonjour,
je pense avoir comprit:

Ici la doc que j'ai trouver ci-haut c'est pour un accéléromètre de 1.8 à 3.6 Volts. Soit il y a plusieurs accéléromètre ADXL330 à 3 axes ou c'est le créateur du code qui c'est trompé.

Moi je vais mettre cette accéléromètre sur 3.3 Volts et non sur 5 Volts comme l'auteur fait. Et je branche le voltage à la broche AREF de l'arduino car que veut pas travailler avec du 5 Volts.

Pour ce que l'accéléromètre envoie pour la valeur 0g.
C'est écrit ceci dans la doc.

The zero g bias output is also ratiometric, so the zero g output is nominally equal to VS/2 at all supply voltages.

Allors Pour 0g l'accéléromètre envoie la valeur 511.5? car 1023 / 2 = 511.5 (3.3V / 2)

Pour ce que l'accéléromètre envoie pour la valeur 1g la variable scale.
C'est écrit ceci dans la doc.

The ADXL330 output is ratiometric, therefore, the output sensitivity (or scale factor) varies proportionally to the supply voltage. At VS = 3.6 V, the output sensitivity is typically 360 mV/g. At VS = 2 V, the output sensitivity is typically 195 mV/g.

Alors pour 2 Volts la valeur 1g = 195 millivolts.
Et pour 1 Volts la valeur 1g = 97.5 millivolts.
Et pour savoir ce que ça fait pour des valeur de 0 à 1023 on fait:
0.0975 * 1023 = 99.7425 Voici la valeur scale = 100

Voici les réponces!

Alor si pour l'accéléromètre la valeur 100 = 1g

Je pense que durant la calibration le vecteur d'information de calibration va être = b[] = {511, 511, 511}

Pour -3g l'accéléromètre envoie la valeur 211? car 211 - 511 = -300
Pour 0g l'accéléromètre envoie la valeur 511? car 511 - 511 = 0
Pour 3g l'accéléromètre envoie la valeur 811? car 811 - 511 = 300

Mes calcule sont-il correcte?

Merci

Quelqu'un a-t-il déjà testé cette sorte d'accéléromètre?
J'aimerai qu'on me dise si mes calcules sont correcte.

Dans la doc je comprend pas trop le output noise et le Self test response.
J'aurai besoin d'explication pour ça.

Merci

Bonjour,

Je me suis acheter ce capteur:

Sur ce capteur il y a un accéléromètre ADXL335, dans la datasheet de cette accéléromètre on voit qu'il est presque identique au ADXL330.
Alors j'ai utilisé l'accéléromètre ADXL335 pour faire le test du code ci-haut.

Datasheet ADXL330:
http://www.analog.com/static/imported-files/data_sheets/ADXL330.pdf
Datasheet ADXL335:

Voici mes branchements:

Voici mon code:

int val = 0;                    
      
void setup()
{
  analogReference(EXTERNAL);     
       
  Serial.begin(9600);    

  DDRC = B00000000;              
  
  delay (100); 
 
  Serial.println("z \t y \t x "); 
}


void loop()
{
     
  for (long i=3; i<6; i++)  // pour les broches 3, 4 et 5 analogique.
 { 
  val = analogRead(i);  // lire la valeur analogique.

  Serial.print(val - 512);  // écrire la valeur analogique - 512.
  Serial.print ("\t");
 }  

  Serial.println("");

  delay(500);           
}

Voici mes résultats d'un accéléromètre au repos pour les 3 axes:

z y x
144 -15 -4
144 -16 -4
145 -15 -4
145 -15 -4
144 -15 -4
145 -15 -4
144 -16 -4
144 -15 -4
145 -15 -4
144 -15 -3
144 -15 -4
144 -15 -4
145 -15 -5
144 -15 -4

Voici le résultat plus élevé en bougeant d'accéléromètre très vite:

y
-506

Voici mon raisonnement précédent:

La formule que j'ai utilisé pour c'est variables est:
(valeur analogique - 511) Car

The zero g bias output is also ratiometric, so the zero g output is nominally equal to VS/2 at all supply voltages.

Allors Pour 0g l'accéléromètre envoie la valeur 511.5? car 1023 / 2 = 511.5 (3.3V / 2)

Pour ce que l'accéléromètre envoie pour la valeur 1g la variable scale.
C'est écrit ceci dans la doc.

The ADXL330 output is ratiometric, therefore, the output sensitivity (or scale factor) varies proportionally to the supply voltage. At VS = 3.6 V, the output sensitivity is typically 360 mV/g. At VS = 2 V, the output sensitivity is typically 195 mV/g.

Alors pour 2 Volts la valeur 1g = 195 millivolts.
Et pour 1 Volts la valeur 1g = 97.5 millivolts.
Et pour savoir ce que ça fait pour des valeur de 0 à 1023 on fait:
0.0975 * 1023 = 99.7425 Voici la valeur scale = 100

Alor si pour l'accéléromètre la valeur 100 = 1g

Je pense que durant la calibration le vecteur d'information de calibration va être = b[] = {511, 511, 511}

Pour -3g l'accéléromètre envoie la valeur 211? car 211 - 511 = -300
Pour 0g l'accéléromètre envoie la valeur 511? car 511 - 511 = 0
Pour 3g l'accéléromètre envoie la valeur 811? car 811 - 511 = 300

Voici mes questions par rapport à mes résultats:

  1. Pourquoi au repos la valeur Z = environ 144 si 1g = 100?

  2. Pour les valeur x = -4 et y = -15, je suppose que c'est normale car mon bureau ou mon plancher est surement pas parfaitement droit?

  3. pourquoi la valeur la plus élevé = -506 si 1g = 100 et si j'ai un accel de ±3g?
    -506 donnerai environ -5g?

Mon accéléromètre est t-il défectueux?
Je comprend pas trop mes résultats.

Merci

Bonjour,

Je vois que sur ce forum personne connais cette sorte d'accéléromètre.

Connaissez-vous un autre forum en français où je pourrais poser ma question sur mon accéléromètre?

Ou sinon d'autre forum anglais?
Sur ce forum du site arduino en anglais je dois poser ma question dans l'onglet Troubleshooting?

Je suis pas très bon en anglais.

Merci

As-tu seulement fait une recherche sur le forum avec ADXL335?

Il y a des personnes qui ont déjà mis en ?uvre ce capteur.