The ADXL345 is a small, thin, low power, 3-axis accelerometer with high resolution (13-bit) measurement at up to ±16 g. Digital output data is formatted as 16-bit twos complement and is accessible through either an SPI (3- or 4-wire) or I2C digital interface. The ADXL345 is well suited to measures the static acceleration of gravity in tilt-sensing applications, as well as dynamic acceleration resulting from motion or shock. Its high resolution (4 mg/LSB) enables measurement of 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. An integrated, patent-pending 32-level first in, first out (FIFO) buffer can be used to store data to minimize host processor intervention. Low power modes enable intelligent motion-based power management with threshold sensing and active acceleration measurement at extremely low power dissipation. Specification 2.0-3.6VDC Supply Voltage Ultra Low Power: 40uA in measurement mode, 0.1uA in standby@ 2.5V Tap/Double Tap Detection Free-Fall Detection SPI and I2C interfaces Hooking it Up: Here is the guide illustrates how to connect an Arduino to the ADXL345 breakout board. The following is a table describing which pins on the Arduino should be connected to the pins on the accelerometer: Arduino Pin ADXL345 Pin 10 CS 11 SDA 12 SDO 13 SCL 3V3 VCC Gnd GND Test Code: //Add the SPI library so we can communicate with the ADXL345 sensor#include //Assign the Chip Select signal to pin 10.int CS=10;//This is a list of some of the registers available on the ADXL345.//To learn more about these and the rest of the registers on the ADXL345, read the datasheet!char POWER_CTL = 0x2D; //Power Control Registerchar DATA_FORMAT = 0x31;char DATAX0 = 0x32; //X-Axis Data 0char DATAX1 = 0x33; //X-Axis Data 1char DATAY0 = 0x34; //Y-Axis Data 0char DATAY1 = 0x35; //Y-Axis Data 1char DATAZ0 = 0x36; //Z-Axis Data 0char DATAZ1 = 0x37; //Z-Axis Data 1//This buffer will hold values read from the ADXL345 registers.char values[10];//These variables will be used to hold the x,y and z axis accelerometer values.int x,y,z;void setup(){ //Initiate an SPI communication instance. SPI.begin(); //Configure the SPI connection for the ADXL345. SPI.setDataMode(SPI_MODE3); //Create a serial connection to display the data on the terminal. Serial.begin(9600); //Set up the Chip Select pin to be an output from the Arduino. pinMode(CS, OUTPUT); //Before communication starts, the Chip Select pin needs to be set high. digitalWrite(CS, HIGH); //Put the ADXL345 into +/- 4G range by writing the value 0x01 to the DATA_FORMAT register. writeRegister(DATA_FORMAT, 0x01); //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register. writeRegister(POWER_CTL, 0x08); //Measurement mode }void loop(){ //Reading 6 bytes of data starting at register DATAX0 will retrieve the x,y and z acceleration values from the ADXL345. //The results of the read operation will get stored to the values[] buffer. readRegister(DATAX0, 6, values); //The ADXL345 gives 10-bit acceleration values, but they are stored as bytes (8-bits). To get the full value, two bytes must be combined for each axis. //The X value is stored in values[0] and values[1]. x = ((int)values[1]