3-Axis Accelerometer & Acceleration Module GY-291 - Digital Output, SPI / I2C Interface - ADXL345
- Was RM18.00
-
RM13.00
- Product Code: GY-291
- Availability: In Stock
The ADXL345 is a 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 a SPI (3- or 4-wire) or I2C digital interface. The ADXL345 is well suited for mobile device applications. It measures the static acceleration of gravity in tilt-sensing applications, as well as dynamic acceleration resulting from motion or shock. Its high resolution (3.9 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 by comparing the acceleration on any axis with user-set thresholds. Tap sensing detects single and double taps in any direction. Freefall sensing detects if the device is falling, can be mapped individually to either of two interrupt output pins. An integrated, patent pending memory management system with a 32-level first in, first out (FIFO) buffer can be used to store data to minimize host processor activity and lower overall system power consumption. Low power modes enable intelligent motion-based power management with threshold sensing and active acceleration measurement at extremely low power dissipation.
Features
Specifications
Download
#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); //625μs 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 interupts 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 interupt 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.readAccel(&x, &y, &z); //read the accelerometer values and store them in variables x,y,z // Output x,y,z values - Commented out //Serial.print(x); //Serial.print(y); //Serial.println(z); //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 } }