KX132 accelerometer and Raspberry Pi Pico Arduino example

In this article we connect the ever popular KX132 accelerometer to a raspberry Pi Pico and we will then display readings via the serial monitor window. We are using the Arduino IDE.

Lets look at the sensor first

Features

The KX132-1211 is silicon micromachined accelerometer in the 2 x 2 x 0.9 mm LGA package featuring up to 25.6 kHz ODR and wide bandwidth (4200Hz (XY), 2900Hz (Z)). I²C or SPI digital protocol is supported.

  • Advanced Data Path with user configurable 3 stages consisting of a low-pass filter, low-pass / high-pass filter, and RMS engine.
  • High Temperature Range -40°C to +105°C
  • Integrated Free fall, Directional-Tap/Double-Tap™, and Device-orientation Algorithms
  • Advanced Wake-Up and Back-to-Sleep detection with high-resolution threshold configurable down to 3.9mg
  • Embedded 512-byte FIFO buffer with capability to record data even when being read
  • User-selectable Output Data Rate up to 25600Hz
  • User accessible manufacturer and part ID registers

 

The SparkFun Triple Axis Accelerometer Breakout is a simple Qwiic breakout for the KX132 digital accelerometer from Kionix. KX132 is a low power, 16 bit resolution three axis accelerometer w/ four user selectable acceleration measurement ranges of 2g/4g/8g/16g & has up to a 10kHz (max) output data rate making it ideal for a wide range of acceleration measurements as well as high speed applications such as vibration & tap sensing.

512 byte FIFO buffer that continues recording data while being read; Selectable Low Power or High Performance operating modes; Low Power with Integrated Voltage Regulator: High Performance Operating Current Consumption (400Hz ODR + Wake Up Detection): 148 A, Low Power Operating Current Consumption (0.781Hz ODR + Wake Up Detection): 0.53 A, Standby Current Consumption: 0.5 A

Self Test Functionality; Digital I2C up to 3.4MHz and Digital SPI up to 10MHz; 2x Qwiic Connectors; SPI available on PTH Header Pins; I2C Address: 0x1E (0x1F alternate)

Parts Required

Name Link
Raspberry Pi Pico
KX132
Connecting cables

 

Schematic/Connection

Here is a layout in fritzing to show this

Code Example

I used the Sparkfun KX13X library and  this is the default example which worked, there are several examples to experiment with

/*
  example1-BasicReadings

  This example shows the basic settings and functions for retrieving accelerometer
  data. Other possible Range settings, depending on your accelerometer KX132 or KX134, are
  the following:

  SFE_KX132_RANGE2G
  SFE_KX132_RANGE4G
  SFE_KX132_RANGE8G
  SFE_KX132_RANGE16G

  SFE_KX134_RANGE8G
  SFE_KX134_RANGE16G
  SFE_KX134_RANGE32G
  SFE_KX134_RANGE64G

  Written by Elias Santistevan @ SparkFun Electronics, October 2022

  Products:

  SparkFun Triple Axis Accelerometer Breakout - KX132:
    https://www.sparkfun.com/products/17871

  SparkFun Triple Axis Accelerometer Breakout - KX134:
    https://www.sparkfun.com/products/17589

  Repository:

    https://github.com/sparkfun/SparkFun_KX13X_Arduino_Library

  SparkFun code, firmware, and software is released under the MIT
  License	(http://opensource.org/licenses/MIT).
*/

#include <Wire.h>
#include <SparkFun_KX13X.h> // Click here to get the library: http://librarymanager/All#SparkFun_KX13X

SparkFun_KX132 kxAccel;
// SparkFun_KX134 kxAccel; // For the KX134, uncomment this and comment line above

outputData myData; // Struct for the accelerometer's data

void setup()
{

  Wire.begin();

  Serial.begin(115200);
  Serial.println("Welcome.");

  // Wait for the Serial monitor to be opened.
  while (!Serial)
    delay(50);

  if (!kxAccel.begin())
  {
    Serial.println("Could not communicate with the the KX13X. Freezing.");
    while (1)
      ;
  }

  Serial.println("Ready.");

  if (kxAccel.softwareReset())
    Serial.println("Reset.");

  // Give some time for the accelerometer to reset.
  // It needs two, but give it five for good measure.
  delay(5);

  // Many settings for KX13X can only be
  // applied when the accelerometer is powered down.
  // However there are many that can be changed "on-the-fly"
  // check datasheet for more info, or the comments in the
  // "...regs.h" file which specify which can be changed when.
  kxAccel.enableAccel(false);

  kxAccel.setRange(SFE_KX132_RANGE16G); // 16g Range
  // kxAccel.setRange(SFE_KX134_RANGE16G);         // 16g for the KX134

  kxAccel.enableDataEngine(); // Enables the bit that indicates data is ready.
  // kxAccel.setOutputDataRate(); // Default is 50Hz
  kxAccel.enableAccel();
}

void loop()
{
  // Check if data is ready.
  if (kxAccel.dataReady())
  {
    kxAccel.getAccelData(&myData);
    Serial.print("X: ");
    Serial.print(myData.xData, 4);
    Serial.print(" Y: ");
    Serial.print(myData.yData, 4);
    Serial.print(" Z: ");
    Serial.print(myData.zData, 4);
    Serial.println();
  }
  delay(200); // Delay should be 1/ODR (Output Data Rate), default is 1/50ODR
}

 

Output

Move the sensor in various directions to test

X: -0.4743 Y: 0.9409 Z: 0.1762
X: 0.0073 Y: 0.8203 Z: 0.2333
X: -0.2440 Y: 0.7379 Z: 0.2728
X: 0.1327 Y: 0.8457 Z: -0.9589
X: -0.0844 Y: 0.9218 Z: -0.2181
X: 0.8164 Y: 0.4870 Z: -0.2489
X: 0.2625 Y: 0.2938 Z: -0.7188
X: 0.1435 Y: -0.1830 Z: -1.1771
X: -0.2196 Y: -0.8481 Z: 0.3323

Links

https://github.com/sparkfun/SparkFun_KX13X_Arduino_Library

https://fscdn.rohm.com/kionix/en/datasheet/kx132-1211-e.pdf

Related posts

KX134 accelerometer and Raspberry Pi Pico Arduino example

ADXL313 accelerometer and Raspberry Pi Pico Arduino example

STTS22H temperature sensor and Raspberry Pi Pico Arduino example