adxl345-sensor
v0.0.8
Published
A Node.js I2C module for the Analog Devices ADXL345 three-axis digital accelerometer
Downloads
39
Maintainers
Readme
adxl345-sensor
Welcome to adxl345-sensor, a Node.js I2C module for the Analog Devices ADXL345 three-axis digital accelerometer. Adafruit sells a ADXL345 breakout board and here is the datasheet.
This module uses i2c-bus which should provide access with Node.js on Linux boards like the Raspberry Pi Zero, 1, 2, or 3, BeagleBone, BeagleBone Black, or Intel Edison.
Since adxl345-sensor needs to talk directly to the I2C bus and requires access to /dev/i2c, you will typically need run Node with elevated privileges or add your user account to the i2c group: $ sudo adduser $USER i2c
I2C Address
If pin SDO/ALT ADDRESS
is HIGH the 7-bit I2C address is 0x1D. If pin SDO/ALT ADDRESS
is LOW the 7-bit I2C address is 0x53. The Adafruit ADXL345 breakout board is configured for 0x53. This pin floats by default so if you are using another breakout board be sure to determine if you need to wire this pin yourself.
Example Code - Basic Use
const ADXL345 = require('adxl345-sensor');
const adxl345 = new ADXL345(); // defaults to i2cBusNo 1, i2cAddress 0x53
// Read ADXL345 three-axis acceleration, repeat
//
const getAcceleration = () => {
adxl345.getAcceleration(true) // true for g-force units, else false for m/s²
.then((acceleration) => {
console.log(`acceleration = ${JSON.stringify(acceleration, null, 2)}`);
setTimeout(getAcceleration, 1000);
})
.catch((err) => {
console.log(`ADXL345 read error: ${err}`);
setTimeout(getAcceleration, 2000);
});
};
// Initialize the ADXL345 accelerometer
//
adxl345.init()
.then(() => {
console.log('ADXL345 initialization succeeded');
getAcceleration();
})
.catch((err) => console.error(`ADXL345 initialization failed: ${err} `));
####Example Output
> sudo node ./examples/example-simple.js
Found ADXL345 device id 0xe5 on bus i2c-1, address 0x53
ADXL345 initialization succeeded
acceleration = {
"x": 0,
"y": -0.004,
"z": 0.9520000000000001,
"units": "g"
}
Example Code - Initialize and Configure
const ADXL345 = require('adxl345-sensor');
// The ADXL345 constructor options are optional.
//
// ADXL345.I2C_ADDRESS_ALT_GROUNDED() = 0x53
// ADXL345.I2C_ADDRESS_ALT_HIGH() = 0x1D
//
const options = {
i2cBusNo : 1, // defaults to 1
i2cAddress : ADXL345.I2C_ADDRESS_ALT_GROUNDED() // defaults to 0x53
};
const adxl345 = new ADXL345(options);
// Read ADXL345 three-axis acceleration, repeat
//
const getAcceleration = () => {
adxl345.getAcceleration(true) // true for g-force units, else false for m/s²
.then((acceleration) => {
console.log(`acceleration = ${JSON.stringify(acceleration, null, 2)}`);
setTimeout(getAcceleration, 1000);
})
.catch((err) => {
console.log(`ADXL345 read error: ${err}`);
setTimeout(getAcceleration, 2000);
});
};
// Initialize and configure the ADXL345 accelerometer
//
adxl345.init()
.then(() => adxl345.setMeasurementRange(ADXL345.RANGE_2_G()))
.then(() => adxl345.setDataRate(ADXL345.DATARATE_100_HZ()))
.then(() => adxl345.setOffsetX(0)) // measure for your particular device
.then(() => adxl345.setOffsetY(0)) // measure for your particular device
.then(() => adxl345.setOffsetZ(0)) // measure for your particular device
.then(() => adxl345.getMeasurementRange())
.then((range) => {
console.log(`Measurement range: ${ADXL345.stringifyMeasurementRange(range)}`);
return adxl345.getDataRate();
})
.then((rate) => {
console.log(`Data rate: ${ADXL345.stringifyDataRate(rate)}`);
return adxl345.getOffsets();
})
.then((offsets) => {
console.log(`Offsets: ${JSON.stringify(offsets, null, 2)}`);
console.log('ADXL345 initialization succeeded');
getAcceleration();
})
.catch((err) => console.error(`ADXL345 initialization failed: ${err} `));
####Example Output
> sudo node ./examples/example.js
Found ADXL345 device id 0xe5 on bus i2c-1, address 0x53
Measurement range: RANGE_2_G
Data rate: DATARATE_100_HZ
Offsets: {
"x": 0,
"y": 0,
"z": 0
}
ADXL345 initialization succeeded
acceleration = {
"x": 0,
"y": 0,
"z": 0.9520000000000001,
"units": "g"
}
##Example Wiring
For I2C setup on a Raspberry Pi, take a look at my pi-weather-station project.