Go Down

Topic: Montage ADXL335 & valeurs incohérentes (Read 1 time) previous topic - next topic

faipassa

Dec 05, 2009, 04:06 pm Last Edit: Dec 05, 2009, 04:07 pm by faipassa Reason: 1
Bonjour à tous,

(newbie inside)

J'en appelle à votre aide car je deviens maboule sur un cas super simple....

J'essaie actuellement un petit montage sur base d'un accéléromètre +/-3G ADXL335 chez Adafruit (ICI) directement monté sur les pins 1->5 analogiques de mon arduino 2009

Mon problème est que les valeurs mesurées me laisse perplexe :-/ J'ai vérifié plusieurs fois le câblage et la configuration des I/O mais rien ne se passe comme prévu. Même lorsque l'ensemble est à l'arrêt, immobile sur le bureau (donc 0g), les valeurs mesurées varient à chaque mesure (loop du sketch). Extrait:

Quote

x=385       y=335       z=522
x=380       y=346       z=522
x=360       y=369       z=510
x=338       y=395       z=492
x=346       y=386       z=498
x=352       y=379       z=504
x=329       y=406       z=484
x=314       y=432       z=461
x=306       y=459       z=436
x=303       y=486       z=408
x=303       y=476       z=417
x=304       y=468       z=427
x=304       y=497       z=400
x=310       y=513       z=379
x=321       y=522       z=359
x=336       y=527       z=338
x=331       y=527       z=346
x=327       y=525       z=353
x=343       y=525       z=329
x=364       y=516       z=313
x=390       y=499       z=305
x=382       y=505       z=306
x=374       y=511       z=310
x=399       y=492       z=304
x=427       y=470       z=302
x=453       y=445       z=308
x=479       y=419       z=319


En ce qui concerne le sketch, il est des plus simpliste:

Quote


/*
 ADXL335 Ada-fruit PCB test sketch
 
 Reads an Analog Devices ADXL3xx accelerometer and communicates the
 acceleration to the computer. 
 
 http://www.arduino.cc/en/Tutorial/ADXL3xx

 The circuit:
 analog 0: accelerometer self test
 analog 1: vcc
 analog 2: x-axis
 analog 3: y-axis
 analog 4: z-axis
 analog 5: ground
*/

// these constants describe the pins. They won't change:
const int selftestPin = 0;           // self test
const int powerPin = 1;              // voltage
const int xPin = 2;                   // x-axis of the accelerometer
const int yPin = 3;                   // y-axis of the accelerometer
const int zPin = 4;                   // z-axis of the accelerometer
const int groundPin = 5;             // ground

int x,y,z;

void setup()
{
  // initialize the serial communications:
  Serial.begin(9600);
  
  // Provide ground and power by using the analog inputs as normal
  // digital pins.  This makes it possible to directly connect the
  // breakout board to the Arduino.    
  // If you use the normal 5V and GND pins on the Arduino, you can remove these lines.
  pinMode(groundPin, OUTPUT);
  pinMode(powerPin, OUTPUT);
  
  digitalWrite(groundPin, LOW);
  digitalWrite(powerPin, HIGH);
}

void loop()
{
  // print the sensor values:
  
  x = analogRead(xPin);
  Serial.print("x=");
  Serial.print(x, DEC);
  
  // print a tab between values:
  Serial.print("\t y=");
  y = analogRead(yPin);
  Serial.print(y);
  
  // print a tab between values:
  Serial.print("\t z=");
  z = analogRead(zPin);
  Serial.print(z);
  
  Serial.println();
  
  // delay before next reading:
  delay(100);
}



J'ai essayé plusieurs alternatives:
- Alimentation USB
- Alimentation externe 9v (Pile)
- Changer d'Arduino
---> même résultat. J'ai même essayé de faire tourner le programme sans capteur (uniquement avec l'Arduino) et j'ai aussi le même résultat. C'est comme si le capteur ADXL était mort... :(

Voilà. Si l'un d'entre vous a une explication, je suis preneur !!

Merci d'avance de votre aide.
Olivier


fdufnews

Si on se réfère à la doc sur le site d'Adafruit on voit que l'accéléro fonctionne en 3,3V (max 3,6V). Si tu alimentes par les sorties de l'arduino tu peux avoir jusqu'à 5V. C'est pas bon pour ton accéléromètre.
Quote
J'ai même essayé de faire tourner le programme sans capteur (uniquement avec l'Arduino) et j'ai aussi le même résultat

Sans capteur, il faut penser à mettre les entrées à un potentiel connu pour vérifier le fonctionnement. Si tu les mets à la masse ou au +5V tu devrais lire 0 ou 3FF.

faipassa

#2
Dec 05, 2009, 06:46 pm Last Edit: Dec 05, 2009, 06:47 pm by faipassa Reason: 1
Salut,

Bien vu! Merci pour ton aide. C'était effectivement un problème de voltage. Une fois l'ADXL335 alimenté par la sortie 3v de l'Arduino, il s'est mis à fonctionner correctement :)

Maintenant, les valeurs mesurées sont bien stables (~1% de variation) quand le montage est au repos et varient clairement quand je déplace franchement dans une des 3 directions.

Merci encore
a+
Olivier


Luj06

#3
Dec 05, 2009, 06:56 pm Last Edit: Dec 05, 2009, 06:59 pm by julien@pobot.org Reason: 1
Le sketch est faux concernant l'alimentation par groundPin et powerPin : les numéros 1 et 5 de l'analogique ne peuvent être utilisés tels quels avec pinMode et digitalWrite : ces deux fonctions s'utilisent avec des pattes numériques et analogiques donc pour les secondes il faut continuer l'ordre après les 13 numériques : 14 pour analog 0, 15 pour analog 1, etc..

D'ailleurs c'est bizarre, le sketch trouvé sur le lien vers adafruit dans le commentaire du  début est bon (mais avec des pattes différentes, sans doute une évolution en passant du 330 au 335..) : http://www.arduino.cc/en/Tutorial/ADXL3xx qui utilise bien les pattes 18 et 19 pour les opérations numériques sur les pattes analogiques 4 et 5.

faipassa

Salut,

Merci pour cette correction. Cette erreur vient de moi en adaptant le script au modèle 335 dont le câblage est différent du 322 utilisé dans l'exemple de code. Faute d'explication comme celle que tu viens de donner sur l'utilité de renuméroter les pins ano quand on utilise la methode digitalwrite() sur de l'ana, j'avais pensé qu'il s'agissait d'une erreur quand le code adressait les pins 18 et 19  :o

Je ne m'en suis pas apercu et mon code marche quand même car maintenant mes pin VCC et GRND de l'ADXL sont directement cablés sur les pin +3V et GRND de l'arduino et je n'utilise les analogiques que pour les mesures en x,y,z :P

Super vos contributions, très instructifs pour un petit nouveau comme moi.

a+
Olivier








Go Up