LSM6 library for Arduino
Version: 1.0.0
Release date: 2016 January 19
www.pololu.com
Summary
This is a library for the Arduino IDE that helps interface with ST's LSM6DS33 3D accelerometer and gyro. The library makes it simple to configure the LSM6DS33 and read the raw accelerometer and gyro data through I²C.
Supported platforms
This library is designed to work with the Arduino IDE versions 1.6.x or later; we have not tested it with earlier versions. This library should support any Arduino-compatible board, including the Pololu A-Star 32U4 controllers.
Getting started
Hardware
An LSM6DS33 carrier can be purchased from Pololu's website. Before continuing, careful reading of the product page as well as the LSM6 datasheet and application note is recommended.
Make the following connections between the Arduino and the LSM6 board:
5V Arduino boards
(including Arduino Uno, Leonardo, Mega; Pololu A-Star 32U4)
Arduino LSM6 board
------- ----------
5V - VIN
GND - GND
SDA - SDA
SCL - SCL
3.3V Arduino boards
(including Arduino Due)
Arduino LSM6 board
------- ----------
3V3 - VIN
GND - GND
SDA - SDA
SCL - SCL
Software
If you are using version 1.6.2 or later of the Arduino software (IDE), you can use the Library Manager to install this library:
- In the Arduino IDE, open the "Sketch" menu, select "Include Library", then "Manage Libraries...".
- Search for "LSM6".
- Click the LSM6 entry in the list.
- Click "Install".
If this does not work, you can manually install the library:
- Download the latest release archive from GitHub and decompress it.
- Rename the folder "lsm6-arduino-master" to "LSM6".
- Move the "LSM6" folder into the "libraries" directory inside your Arduino sketchbook directory. You can view your sketchbook location by opening the "File" menu and selecting "Preferences" in the Arduino IDE. If there is not already a "libraries" folder in that location, you should make the folder yourself.
- After installing the library, restart the Arduino IDE.
Examples
An example sketch is available that shows how to use the library. You can access it from the Arduino IDE by opening the "File" menu, selecting "Examples", and then selecting "LSM6". If you cannot find the example, the library was probably installed incorrectly and you should retry the installation instructions above.
Library reference
-
vector<int16_t> a
The last values read from the accelerometer. -
vector<int16_t> g
The last values read from the gyro. -
uint8_t last_status
The status of the last I²C write transmission. See theWire.endTransmission()
documentation for return values. -
LSM6(void)
Constructor. -
bool init(deviceType device, sa0State sa0)
Initializes the library with the device being used (device_DS33
ordevice_auto
) and the state of the SA0 pin (sa0_low
,sa0_high
, orsa0_auto
), which determines the least significant bit of the I²C slave address. Constants for these arguments are defined in LSM6.h. Both of these arguments are optional; if they are not specified, the library will try to automatically detect the device address. A boolean is returned indicating whether the type of LSM6 device was successfully determined (if necessary). -
void getDeviceType(void)
Returns the device type specified to or detected byinit()
. -
void enableDefault(void)
Turns on the accelerometer and gyro and enables a consistent set of default settings.This function will reset the accelerometer to ±2 g full scale and the gyro to ±245 dps. See the comments in LSM6.cpp for a full explanation of the settings.
-
void writeReg(uint8_t reg, uint8_t value)
Writes a sensor register with the given value.Register address constants are defined by the regAddr enumeration type in LSM6.h.
Example use:imu.writeReg(LSM6::CTRL1_XL, 0x80);
-
uint8_t readReg(uint8_t reg)
Reads a sensor register and returns the value read. -
void readAcc(void)
Takes a reading from the accelerometer and stores the values in the vectora
. Conversion of the readings to units of g depends on the accelerometer's selected gain (full scale setting). -
void readGyro(void)
Takes a reading from the gyro and stores the values in the vectorg
. Conversion of the readings to units of dps (degrees per second) depends on the gyro's selected gain (full scale setting). -
void read(void)
Takes a reading from both the accelerometer and gyro and stores the values in the vectorsa
andg
. -
void burstRead(uint8_t initialReg, void* output, uint8_t howMany)
Reads multiple values out of one or several registers. Exact behaviour depends on whether the auto-increment flag is on (IF_INC bit on CTRL3_C) and the Rounding functions enabled (see section 4.6 of Application note).For example, you can do:
uint8_t data[24]; imu.burstRead(LSM6::FIFO_DATA_OUT_L, data, sizeof(data));
to read 24 bytes worth of data from the device FIFO (24 bytes equals two full XYZ samples of gyro and accelerometer data, if you configured to store both in the FIFO). Using this approach is much faster than the equivalent of reading the FIFO_DATA_OUT_L / FIFO_DATA_OUT_H registers one by one.
-
void setTimeout(uint16_t timeout)
Sets a timeout period in milliseconds after which the read functions will abort if the sensor is not ready. A value of 0 disables the timeout. -
uint16_t getTimeout(void)
Returns the current timeout period setting. -
bool timeoutOccurred(void)
Indicates whether a read timeout has occurred since the last call totimeoutOccurred()
.
Version history
- 1.0.0 (2016 Jan 19): Original release.
- 1.0.1 (2018 Feb 26): Added burstRead().