Introduction
The ADXL345 is a small, thin, low power, 3-axis MEMS 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 a SPI (3-or 4-wire) or I2C digital interface.
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. Its high resolution (4 mg/LSB) enables measurement of inclination change less than 1.0 degrees.
Video Tutorial
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
- Size: 30*20mm
- Weight: 3g
Connection
Connection for REV4:Connection for 2560 R3:
Sample Code:
/* The circuit: VCC: 5V GND: ground SCL: REV4 SLC SDA: REV4 SDA This example code is in the public domain. */ #include <Wire.h> // Registers for ADXL345 #define ADXL345_ADDRESS (0xA6 >> 1) // address for device is 8 bit but shift to the // right by 1 bit to make it 7 bit because the // wire library only takes in 7 bit addresses #define ADXL345_REGISTER_XLSB (0x32) int accelerometer_data[3]; // void because this only tells the cip to send data to its output register // writes data to the slave's buffer void i2c_write(int address, byte reg, byte data) { // Send output register address Wire.beginTransmission(address); // Connect to device Wire.write(reg); // Send data Wire.write(data); //low byte Wire.endTransmission(); } // void because using pointers // microcontroller reads data from the sensor's input register void i2c_read(int address, byte reg, int count, byte* data) { // Used to read the number of data received int i = 0; // Send input register address Wire.beginTransmission(address); // Connect to device Wire.write(reg); Wire.endTransmission(); // Connect to device Wire.beginTransmission(address); // Request data from slave // Count stands for number of bytes to request Wire.requestFrom(address, count); while(Wire.available()) // slave may send less than requested { char c = Wire.read(); // receive a byte as character data[i] = c; i++; } Wire.endTransmission(); } void init_adxl345() { byte data = 0; i2c_write(ADXL345_ADDRESS, 0x31, 0x0B); // 13-bit mode +_ 16g i2c_write(ADXL345_ADDRESS, 0x2D, 0x08); // Power register i2c_write(ADXL345_ADDRESS, 0x1E, 0x00); // x i2c_write(ADXL345_ADDRESS, 0x1F, 0x00); // Y i2c_write(ADXL345_ADDRESS, 0x20, 0x05); // Z // Check to see if it worked! i2c_read(ADXL345_ADDRESS, 0X00, 1, &data); if(data==0xE5) Serial.println("it work Success"); else Serial.println("it work Fail"); } void read_adxl345() { byte bytes[6]; memset(bytes,0,6); // Read 6 bytes from the ADXL345 i2c_read(ADXL345_ADDRESS, ADXL345_REGISTER_XLSB, 6, bytes); // Unpack data for (int i=0;i<3;++i) { accelerometer_data[i] = (int)bytes[2*i] + (((int)bytes[2*i + 1]) << 8); } } // initialise and start everything void setup() { Wire.begin(); Serial.begin(9600); for(int i=0; i<3; ++i) { accelerometer_data[i] = 0; } init_adxl345(); } void loop() { read_adxl345(); Serial.print("ACCEL: "); Serial.print(float(accelerometer_data[0])*3.9/1000);//3.9mg/LSB scale factor in 13-bit mode Serial.print("\t"); Serial.print(float(accelerometer_data[1])*3.9/1000); Serial.print("\t"); Serial.print(float(accelerometer_data[2])*3.9/1000); Serial.print("\n"); delay(100); }
Result
Wiring as the above diagram and uploading the code, then open the serial monitor to display the triaxial acceleration of sensor and its status, as the graph shown below.
All Tutorial
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 1: Hello World
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project Project 2: LED Blinking
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 3: PWM
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 4: Traffic Light
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 5: LED Chasing Effect
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 6: Button-controlled LED
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 7: Active Buzzer
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 8: Passive Buzzer
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 9: RGB LED
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 10: Photo Resistor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 11: Flame Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 12: LM35 Temperature Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 13: Tilt Switch
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 14: IR Remote Control
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 15: Analog Value Reading
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 16: 74HC595 driving LEDs
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 17: 1-digit LED Segment Display
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 18: 4-digit LED Segment Display
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 19: 8*8 LED Matrix
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 20: 1602 LCD
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 21: Servo Control
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 22: 5V Stepper Motor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 23: PIR Motion Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 24: Analog Gas Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 25: ADXL345 Three Axis Acceleration Module
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 26: HC-SR04 Ultrasonic Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 27: Joystick Module
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 28: 5V Relay Module
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 29: DS3231 Clock Module
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 30: DHT11 Temperature and Humidity Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 31: Soil Humidity Sensor
- Arduino UNO R3/MEGA 2560 R3 Starter Kit Project 32: RC522 RFID Module
Buy