edit

Grove - 3-Axis Digital Accelerometer 40g (ADXL357)

enter image description here

You can find a variety of 3-axis accelerometers on our website that can meet different scenarios and needs. This time, we bring you the industrial grade, high stability, high precision and low power ADI ADXL series three-axis accelerometers.

The Grove - 3-Axis Digital Accelerometer ±40g (ADXL357) is a digital output MEMS Accelerometer. This sensor has three different selectable measuring ranges and accuracies: ±10g@51200 LSB/g, ±20g@25600 LSB/g, ±40g@12800 LSB/g. You just need to do little calibration work to get a relatively accurate result. It output all the data via grove I2C port, and the I2C address is also selectable. What's more, we also provide two interrupt output pins which can be configured into 4 modes.

The ADI ADXL Series Accelerometer includes four products that will meet your different range and output needs:

Product Measurement Range Output Port
Grove - 3-Axis Analog Accelerometer ±20g (ADXL356B) ±10
±20g
Analog
Grove - 3-Axis Analog Accelerometer ±40g (ADXL356C) ±10g
±40g
Analog
Grove - 3-Axis Digital Accelerometer ±40g (ADXL357) ±10g@51200 LSB/g
±20g@25600 LSB/g
±40g@12800 LSB/g
Digital I2C
Grove - 3-Axis Digital Accelerometer ±200g (ADXL372) ±200g Digital I2C

Features

  • Industry leading noise, minimal offset drift over temperature, and long-term stability, enabling precision applications with minimal calibration.
  • Hermetic package offers excellent long-term stability 0 g offset vs. temperature (all axes): 0.75 mg/°C maximum
  • Ultralow noise density (all axes): 80 μg/√Hz
  • Build-in 20-bit analog-to-digital converter (ADC)
  • Low drift, low noise, and low power
  • Support two channel interrupt output
  • Support FIFO(96*21-bit)

APPLICATIONS

  • Inertial measurement units (IMUs)/altitude and heading reference systems (AHRSs)
  • Platform stabilization systems
  • Structural health monitoring
  • Condition monitoring
  • Seismic imaging
  • Tilt sensing
  • Robotics

Specification

Parameter Value
Supply voltage 3.3V / 5V
Operating ambient temperature -40 – 125℃
Sensitivity at XOUT, YOUT, ZOUT
(Ratiometric to V1P8ANA)
±10 g@80 mv/g (Typ.)
±20 g@40 mv/g (Typ.)
±40 g@20 mv/g (Typ.)
Sensitivity Change due to Temperature ±0.01%/°C (TA = −40°C to +125°C)
0g OFFSET
(Referred to V1P8ANA/2)
±125 mg(Typ.)
Output interface Digital

Pinout

Platforms Supported

Arduino Raspberry Pi BeagleBone Wio LinkIt ONE

Getting Started

Play With Arduino

Materials required

Seeeduino V4.2 Base Shield Grove 3-aixs Accelermeter ADXL357
enter image description here enter image description here enter image description here
Get ONE Now Get ONE Now Get ONE Now

In addition, you can consider our new Seeeduino Lotus M0+, which is equivalent to the combination of Seeeduino V4.2 and Baseshield.

Note

1 Please plug the USB cable gently, otherwise you may damage the port. Please use the USB cable with 4 wires inside, the 2 wires cable can't transfer data. If you are not sure about the wire you have, you can click here to buy

2 Each Grove module comes with a Grove cable when you buy. In case you lose the Grove cable, you can click here to buy.

Hardware Connection

  • Step 1. Connect the Grove - 3-Axis Analog Accelerometer ±20g (ADXL357) to the I2c port of the Base Shield.

  • Step 2. Plug Grove - Base Shield into Seeeduino.

  • Step 3. Connect Seeeduino to PC via a USB cable.

Software

Attention

If this is the first time you work with Arduino, we strongly recommend you to see Getting Started with Arduino before the start.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//basic_demo.ino
#include "Seeed_adxl357b.h"


#if defined(ARDUINO_ARCH_AVR)
    #pragma message("Defined architecture for ARDUINO_ARCH_AVR.")
    #define SERIAL Serial
#elif defined(ARDUINO_ARCH_SAM)
    #pragma message("Defined architecture for ARDUINO_ARCH_SAM.")
    #define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_SAMD)
    #pragma message("Defined architecture for ARDUINO_ARCH_SAMD.")  
    #define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_STM32F4)
    #pragma message("Defined architecture for ARDUINO_ARCH_STM32F4.")
    #define SERIAL SerialUSB
#else
    #pragma message("Not found any architecture.")
    #define SERIAL Serial
#endif


#define CALI_BUF_LEN           15
#define CALI_INTERVAL_TIME     250
int32_t cali_buf[3][CALI_BUF_LEN];
int32_t cali_data[3];

float factory;

Adxl357b  adxl357b;


int32_t deal_cali_buf(int32_t *buf)
{
    int32_t cali_val = 0;

    for(int i = 0;i < CALI_BUF_LEN;i++)
    {
        cali_val += buf[i];
    }
    cali_val = cali_val/CALI_BUF_LEN;
    return (int32_t)cali_val;
}


void calibration(void)
{
    int32_t x;
    SERIAL.println("Please Place the module horizontally!");
    delay(1000);
    SERIAL.println("Start calibration........");

    for(int i=0;i<CALI_BUF_LEN;i++)
    {
        if(adxl357b.checkDataReady())
        {
            if(adxl357b.readXYZAxisResultData(cali_buf[0][i],cali_buf[1][i],cali_buf[2][i]))
            {
            }
        }
        delay(CALI_INTERVAL_TIME);
        // SERIAL.print('.');
    }
    // SERIAL.println('.');
    for(int i=0;i<3;i++)
    {
        cali_data[i] =  deal_cali_buf(cali_buf[i]);
        SERIAL.println(cali_data[i]);
    }
    x = (((cali_data[2] - cali_data[0]) + (cali_data[2] - cali_data[1]))/2);
    factory = 1.0 / (float)x;
    // SERIAL.println(x);
    SERIAL.println("Calibration OK!!");
}






void setup(void)
{
    uint8_t value = 0;
    float t;

    SERIAL.begin(115200);
    if(adxl357b.begin())
    {
        SERIAL.println("Can't detect ADXL357B device .");
        while(1);
    }
    SERIAL.println("Init OK!");
    /*Set full scale range to ±40g*/
    adxl357b.setAdxlRange(FOURTY_G);
    /*Switch standby mode to measurement mode.*/
    adxl357b.setPowerCtr(0);
    delay(100);
    /*Read Uncalibration temperature.*/
    adxl357b.readTemperature(t);

    SERIAL.print("Uncalibration  temp = ");
    SERIAL.println(t);
    /**/
    calibration();

}


void loop(void)
{
    int32_t x,y,z;
    uint8_t entry = 0;
    if(adxl357b.checkDataReady())
    {
        if(adxl357b.readXYZAxisResultData(x,y,z))
        {
            SERIAL.println("Get data failed!");
        }
        SERIAL.print("X axis = ");
        SERIAL.print(x*factory);
        SERIAL.println('g');
        SERIAL.print("Y axis = ");
        SERIAL.print(y*factory);
        SERIAL.println('g');
        SERIAL.print("Z axis = ");
        SERIAL.print(z*factory);
        SERIAL.println('g');

    }
    delay(100);
}
- Step 4. Upload the demo. If you do not know how to upload the code, please check How to upload code.

  • Step 5. Open the Serial Monitor of Arduino IDE by click Tool-> Serial Monitor. Or tap the Ctrl+Shift+M key at the same time. Set the baud rate to 115200.

  • Step 6. Calibration wait for calibration, just few seconds the calibration will be finished

  • Step 7. Now you can use this sensor, and the output will be like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Start calibration.......Init OK!
Uncalibration  temp = 29.20
Please Place the module horizontally!
Start calibration........
-1652
11143
6063
Calibration OK!!
X axis = -1.24g
Y axis = 8.50g
Z axis = 4.55g
X axis = -1.21g
Y axis = 8.43g

Schematic Online Viewer

Resources

Tech Support

Please submit any technical issue into our forum