Skip to main content

Grove - 3-Axis Analog Accelerometer 40g (ADXL356C)

pir

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 Analog Accelerometer ±40g (ADXL356C) is a analog output MEMS Accelerometer. This sensor has two selectable measurement ranges: ±10g, ±40g. You just need to do little calibration work to get a relatively accurate result. The On-Board grove port can output two channel analog data: one for Z-axis, one for X/Y-axis. You can choose output the X-axis or Y-axis signal with the on-board switch. Also you can use the 4-pin welding hole to output X/Y/Z axis at the same time. The power consumption of this sensor is extremely low, 150 μA in normal operation mode and even only 21 μA in standby mode. You can switch the operating mode by changing the pad connection on the back.

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

ProductMeasurement RangeOutput PortPower Consumption
Grove - 3-Axis Analog Accelerometer ±20g (ADXL356B)±10 / ±20gAnalogmeasurement mode:150 μA / standby mode:21 μA
Grove - 3-Axis Analog Accelerometer ±40g (ADXL356C)±10g / ±40gAnalogmeasurement mode:150 μA / standby mode:21 μA
Grove - 3-Axis Digital Accelerometer ±40g (ADXL357)±10g@51200 LSB/g / ±20g@25600 LSB/g / ±40g@12800 LSB/gDigital I2Cmeasurement mode:200μA
Grove - 3-Axis Digital Accelerometer ±200g (ADXL372)±200gDigital I2Cmeasurement mode:22μA

pir

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
  • The low noise of the ADXL356 over higher frequencies is ideal for wireless condition monitoring.
  • Low drift, low noise
  • Ultra low power consumption: Normal operation mode-150 μA, Standby mode 21 μA.

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

ParameterValue
Supply voltage3.3V / 5V
Operating ambient temperature-40 – 125℃
Output Full-Scale Range (FSR)±10g / ±40g
Sensitivity at XOUT, YOUT, ZOUT / (Ratiometric to V1P8ANA)±10 g@80 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 interfaceAnalog

Pinout

pir

pir

Platforms Supported

ArduinoRaspberry Pi

pir

pir

Getting Started

Play With Arduino

Materials required

Seeeduino V4.2Base ShieldGrove 3-aixs Accelermeter ADXL356C

pir

pir

pir

Get ONE NowGet ONE NowGet 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](https://www.seeedstudio.com/Micro-USB-Cable-48cm-p-1475.html) 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](https://www.seeedstudio.com/Grove-Universal-4-Pin-Buckled-20cm-Cable-%285-PCs-pack%29-p-936.html) to buy.

Hardware Connection

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

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

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

pir

Software

note
    If this is the first time you work with Arduino, we strongly recommend you to see [Getting Started with Arduino](https://wiki.seeedstudio.com/Getting_Started_with_Arduino/) before the start.

or you can just copy the following code.

note
   This code is written for both ADXL_356B and ADXL_356C, and if you need to implement them on 356C, pls switch the line `#define MODUEL_RANGE  20` with `#define MODUEL_RANGE  40`, or it will not work.

#include <Arduino.h>

#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#define SYS_VOL 3.3
#else
#define SERIAL Serial
#define SYS_VOL 5
#endif

float cali_data_xy;
float cali_data_z;
int16_t scale;

#define MODUEL_RANGE 20

#define MODULE_VOL 1.8

#define CALI_BUF_LEN 15
#define CALI_INTERVAL_TIME 250

float cali_buf_xy[CALI_BUF_LEN];
float cali_buf_z[CALI_BUF_LEN];

#define XY_PIN A0
#define Z_PIN A1

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

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


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

for(int i=0;i<CALI_BUF_LEN;i++)
{
cali_buf_xy[i] = analogRead(XY_PIN);;
cali_buf_z[i] = analogRead(Z_PIN);
delay(CALI_INTERVAL_TIME);
}
cali_data_xy = deal_cali_buf(cali_buf_xy);
cali_data_z = (float)deal_cali_buf(cali_buf_z);
SERIAL.println("Calibration OK!!");
scale = (float)1000 / (cali_data_z - cali_data_xy);
cali_data_z -= (float)980 / scale;
SERIAL.println(cali_data_xy);
SERIAL.println(cali_data_z);
SERIAL.println(scale);

}



void AccMeasurement(void)
{
int16_t val_xy = 0;
int16_t val_z = 0;
val_xy = analogRead(XY_PIN);
val_z = analogRead(Z_PIN);

SERIAL.print("Raw data xy = ");
SERIAL.println(val_xy);
SERIAL.print("Raw data z = ");
SERIAL.println(val_z);
SERIAL.println(" ");

val_xy -= cali_data_xy;
val_z -= cali_data_z;
SERIAL.print("x or y position acc is ");
SERIAL.print(val_xy * scale / 1000.0);
SERIAL.println(" g ");
SERIAL.print("z position acc is ");
SERIAL.print(val_z * scale / 1000.0);
SERIAL.println(" g ");
SERIAL.println(" ");
SERIAL.println(" ");
SERIAL.println(" ");
delay(1000);
}

void setup()
{
SERIAL.begin(115200);
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
analogReadResolution(12);
#endif
calibration();
SERIAL.print("Scale = ");
SERIAL.println(scale);

}



void loop()
{
AccMeasurement();
}

  • Step 2. Upload the demo. If you do not know how to upload the code, please check How to upload code.

  • Step 3. 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 4. Calibration Follow the calibration tips in the Serial Monitor, just few step the calibration will be finished

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

Please Place the module horizontally!
Start calibration........
Calibration OK!!
184.93
185.03
121
Scale = 121
Raw data xy = 185
Raw data z = 193

x or y position acc is 0.00 g
z position acc is 0.85 g



Raw data xy = 188
Raw data z = 196

x or y position acc is 0.36 g
z position acc is 1.21 g
note
    If you use Grove port to output the data, the X axis and the Y axis can not be output at the same time, you can use the on-board swith to select the output channel. If you want to output X/Y/Z at the same time, you can use the 4 pin welding hole.

FAQ

Q1: How to select the ±10g measurement range?

A1: To change the measurement range you need to modify both the hardware and software. First, cut the back pad which connected to ±40g and re-solder it to ±10g. Then modify the code in the code block line 12

#define MODUEL_RANGE           40

$$ \downdownarrows $$

#define MODUEL_RANGE           10

Schematic Online Viewer

Resources

Tech Support & Product Discussion

Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.

Loading Comments...