Home / Wiki / Sensor / Gyroscope
3 Axis Digital Accelerometer(ADXL345)

Introduction

The ADXL345 is a ultralow power, small, thin, 3-axis accelerometer with high resolution(13-bit) measurement at up to ±16 g. it communicate with MCU in I2C or SPI communication type. The ADXL345 is well suited to measure the static acceleration of gravity in tilt-sensing applications, as well as dynamic acceleration resulting from motion or shock. For its high resolution (4 mg/LSB), it’s enable to measure the inclination changes less than 1.0°. Several special sensing functions are provided. Activity and inactivity sensing detect the presence or lack of motion and if the acceleration on any axis exceeds a user-set level. Tap sensing detects single and double taps. Free-fall sensing detects if the device is falling. These functions can be mapped to one of two interrupt output pins.

Technical data

Work voltage: 3 to 5V

Sensitivity:

X: 28.6 LSB/g

Y: 31.2 LSB/g

Z: 34.5LSB/g

 

Usage

[code]

/*****************************************************************************/

 

//

//  This library is free software; you can redistribute it and/or

//  modify it under the terms of the GNU Lesser General Public

//  License as published by the Free Software Foundation; either

//  version 2.1 of the License, or (at your option) any later version.

//

//  This library is distributed in the hope that it will be useful,

//  but WITHOUT ANY WARRANTY; without even the implied warranty of

//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

//  Lesser General Public License for more details.

//

//  You should have received a copy of the GNU Lesser General Public

//  License along with this library; if not, write to the Free Software

//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

//

/*******************************************************************************/

 

#include <Wire.h>

#include <ADXL345.h>

 

 

ADXL345 adxl; //variable adxl is an instance of the ADXL345 library

 

void setup(){

  Serial.begin(9600);

  adxl.powerOn();

 

  //set activity/ inactivity thresholds (0-255)

  adxl.setActivityThreshold(75); //62.5mg per increment

  adxl.setInactivityThreshold(75); //62.5mg per increment

  adxl.setTimeInactivity(10); // how many seconds of no activity is inactive?

 

  //look of activity movement on this axes - 1 == on; 0 == off

  adxl.setActivityX(1);

  adxl.setActivityY(1);

  adxl.setActivityZ(1);

 

  //look of inactivity movement on this axes - 1 == on; 0 == off

  adxl.setInactivityX(1);

  adxl.setInactivityY(1);

  adxl.setInactivityZ(1);

 

  //look of tap movement on this axes - 1 == on; 0 == off

  adxl.setTapDetectionOnX(0);

  adxl.setTapDetectionOnY(0);

  adxl.setTapDetectionOnZ(1);

 

  //set values for what is a tap, and what is a double tap (0-255)

  adxl.setTapThreshold(50); //62.5mg per increment

  adxl.setTapDuration(15); //625us per increment

  adxl.setDoubleTapLatency(80); //1.25ms per increment

  adxl.setDoubleTapWindow(200); //1.25ms per increment

 

  //set values for what is considered freefall (0-255)

  adxl.setFreeFallThreshold(7); //(5 - 9) recommended - 62.5mg per increment

  adxl.setFreeFallDuration(45); //(20 - 70) recommended - 5ms per increment

 

  //setting all interrupts to take place on int pin 1

  //I had issues with int pin 2, was unable to reset it

  adxl.setInterruptMapping( ADXL345_INT_SINGLE_TAP_BIT,   ADXL345_INT1_PIN );

  adxl.setInterruptMapping( ADXL345_INT_DOUBLE_TAP_BIT,   ADXL345_INT1_PIN );

  adxl.setInterruptMapping( ADXL345_INT_FREE_FALL_BIT,    ADXL345_INT1_PIN );

  adxl.setInterruptMapping( ADXL345_INT_ACTIVITY_BIT,     ADXL345_INT1_PIN );

  adxl.setInterruptMapping( ADXL345_INT_INACTIVITY_BIT,   ADXL345_INT1_PIN );

 

  //register interrupt actions - 1 == on; 0 == off  

  adxl.setInterrupt( ADXL345_INT_SINGLE_TAP_BIT, 1);

  adxl.setInterrupt( ADXL345_INT_DOUBLE_TAP_BIT, 1);

  adxl.setInterrupt( ADXL345_INT_FREE_FALL_BIT,  1);

  adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT,   1);

  adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 1);

}

 

void loop(){

  

//Boring accelerometer stuff   

int x,y,z;  

adxl.readXYZ(&x, &y, &z); //read the accelerometer values and store them in variables  x,y,z

// Output x,y,z values

Serial.print("values of X , Y , Z: ");

Serial.print(x);

Serial.print(" , ");

Serial.print(y);

Serial.print(" , ");

Serial.println(z);


double xyz[3];

double ax,ay,az;

adxl.getAcceleration(xyz);

ax = xyz[0];

ay = xyz[1];

az = xyz[2];

Serial.print("X=");

Serial.print(ax);

    Serial.println(" g");

Serial.print("Y=");

Serial.print(ay);

    Serial.println(" g");

Serial.print("Z=");

Serial.println(az);

    Serial.println(" g");

Serial.println("**********************");

delay(500);

/*

 

  //Fun Stuff!    

  //read interrupts source and look for triggerd actions

  

  //getInterruptSource clears all triggered actions after returning value

  //so do not call again until you need to recheck for triggered actions

   byte interrupts = adxl.getInterruptSource();

  

  // freefall

  if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){

    Serial.println("freefall");

    //add code here to do when freefall is sensed

  } 

  

  //inactivity

  if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){

    Serial.println("inactivity");

     //add code here to do when inactivity is sensed

  }

  

  //activity

  if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){

    Serial.println("activity"); 

     //add code here to do when activity is sensed

  }

  

  //double tap

  if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){

    Serial.println("double tap");

     //add code here to do when a 2X tap is sensed

  }

  

  //tap

  if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){

    Serial.println("tap");

     //add code here to do when a tap is sensed

  } */

 

}

 

[/code]

Features

Ultra Low Power: 40uA in measurement mode, 0.1uA in standby@ 2.5V.

Tap/Double Tap Detection.

Free-Fall Detection.

SPI and I2C interfaces.


Application

Industrial instrumentation

Medical instrumentation

Hard disk drive(HDD) protection


Resource

Program

Schematic

Datesheet