Go Down

Topic: Accelerometer Data (Read 1 time)previous topic - next topic

MoonBeam Aug 01, 2011, 07:07 pm
Hello.

Me again! I have been playing around with an acclerometer (ADXL335). The program is below

Code: [Select]
//----------------------------------------------------//
//Analog read pins, reads from the 3 axis
const int x = 0;
const int y = 1;
const int z = 2;

//Variables for holding values for each axis
int accelx, accely, accelz;

void setup()
{
Serial.begin(9600);
pinMode(x, INPUT);
pinMode(y, INPUT);
pinMode(z, INPUT);
}

void loop()
{
//Read the analog values from the accelerometer

//Print out values
Serial.print(accelx);
Serial.print("\t");
Serial.print(accely);
Serial.print("\t");
Serial.print(accelz);
Serial.println();

delay(2000);
}

And, the data I get while it is sitting on my desk is

x           y           z
403       332        343
403       332        343
402       332        343
403       331        343

And so on.

But what does this data mean, and how do I change it to acceleration?
I have been told, since my accelerometer is a 3g accelerometer, when I move it in, say, the x direction, the numbers should go one to about a third of 1023. I this correct? And, when I do move it in that direction, it goes to 339. So that theory holds.

Seán
Ná bac le mac an bhacaigh is ní bhacfaidh mac an bhacaigh leat.

tedcook #1
Aug 01, 2011, 07:40 pmLast Edit: Aug 01, 2011, 08:06 pm by tedcook Reason: 1
You should be able to find a configuration by tilting / rotating the sensor so that when it sits still on your desk it only gives output on one channel (the other two reading zero, or very nearly zero).  The channel with non-zero output is now measuring the gravitational acceleration due to the earth which is 9.8 m/s/s (or 1g, depending on the units you want to use), so now you have your calibration constant.

It's likely that each channel will have the same calibration constant, but you can rotate it to zero out different channels to verify the calibration for each.

EDIT: on closer inspection of the data sheet, it appears there is a bias voltage at 0g, so looking for a 0V output as I suggested would not work.  You'll have to use the orientation diagram in the datasheet to align an axis with vertical, then record the non-vertical axes output as the offsets for those axes.  Then rotate the device so a new axis is vertical, get that reading, subtract the offset you just measured, and now you can calibrate.  (disclaimer: I haven't actually worked with these devices so there may be a gap in my understanding, but I'm sure someone more knowledgeable will jump in if I'm wrong.)

MoonBeam #2
Aug 02, 2011, 12:40 am

You should be able to find a configuration by tilting / rotating the sensor so that when it sits still on your desk it only gives output on one channel (the other two reading zero, or very nearly zero).

Thanks for the reply.

But when I have it sitting still on my desk, it is reading the figures I listed in the original post.

i.e.
x           y           z
403       332        343
403       332        343
402       332        343
403       331        343

Seán
Ná bac le mac an bhacaigh is ní bhacfaidh mac an bhacaigh leat.

tedcook #3
Aug 02, 2011, 12:56 am
Did you see the edit to my original response?

MoonBeam #4
Aug 02, 2011, 01:02 am
Ha, sorry, my bad ...I did kinda gloss over the first line.

I'll try and figure it out. Thanks.

So, when I remove the offset, is that the acceleration? Or is there still more work needed?

Seán
Ná bac le mac an bhacaigh is ní bhacfaidh mac an bhacaigh leat.

tedcook #5
Aug 02, 2011, 01:46 am
If you properly subtract the offsets, what's left is proportional to the acceleration.  As a check to know if you subtracted your offsets correctly, calculate the magnitude of the acceleration [ sqrt(x^2 + y^2 + z^2) ].  It should be the same despite any arbitrary orientation whenever the device is at rest.

Go Up