← all posts

Raspberry Pi - ADXL345 Accelerometer & Python

A little while ago I got my hands on a Adafuit ADXL345 (a triple axis accelerometer) from pimoroni, you can also get them from Amazon (US, UK) if that’s easier, and I finally got around to setting it up.

Pimoroni also provide a really useful python module to interacting with the ADXL345 which you can get from github - https://github.com/pimoroni/adxl345-python.

Connecting it up Wiring up the accelerometer is pretty easy, there are only 4 connections:

Raspberry Pi -> ADXL345:

  • GND - GND
  • 3V - 3V3
  • SDA - SDA
  • SCL - SCL

Configure your Pi The ADXL345 supports both I2C and SPI connections, I used I2C, which requires some configuration on the Pi:

Add the I2C modules to the Pi’s configuration:

sudo nano /etc/modules

add the following lines:

i2c-bcm2708
i2c-dev

Remove I2C from the blacklist:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

comment out:

blacklist i2c-bcm2708

so its:

#blacklist i2c-bcm2708

Reboot to make the changes:

sudo shutdown -r now

Install Software You will need to install some software:

sudo apt-get install python-smbus i2c-tools git-core

Test ADXL345 You can check that your ADXL345 is found on the I2C bus, by running:

sudo i2cdetect -y 1

You should see a device at address 53

Download the ADXL345 pimoroni python library from github:

git clone https://github.com/pimoroni/adxl345-python

Run the example code and test it is working:

cd adxl345-python
sudo python example.py

You should see the G readings from the ADXL345.

If you get 0.000G for all axis then something probably isn’t set-up correctly.

Writing your own python program The adxl345-python project from pimoroni contains a python module for reading data from the ADXL345 perhaps not unsurprisingly called “adxl345.py”, inside there is a class called “ADXL345” which is how you to interact with the accelerometer

The program below imports the module, instantiates an ADXL345 object and reads values from the accelerometer as g-forces.

#import the adxl345 module
import adxl345

#create ADXL345 object
accel = adxl345.ADXL345()

#get axes as g
axes = accel.getAxes(True)
# to get axes as ms^2 use
#axes = accel.getAxes(False)

#put the axes into variables
x = axes['x']
y = axes['y']
z = axes['z']

#print axes
print x
print y
print z

Change sensitivity You can change the sensitivity of the ADXL345 by using the .setRange() method of the class.

The default range is 2g which means that the maximum G the ADXL345 can measure is 2.048, but at a high degree of sensitivity, you can change it so the maximum is 2g, 4g, 8g or 16g but with a lower level of sensitivity using:

accel.setRange(adxl345.RANGE_2G)
accel.setRange(adxl345.RANGE_4G)
accel.setRange(adxl345.RANGE_8G)
accel.setRange(adxl345.RANGE_16G)

Its a great accelerometer and really easy to use in your python projects.