How to Connect ADXL345 to Raspberry Pi Pico
by mahmoodmustafashilleh in Circuits > Raspberry Pi
1301 Views, 1 Favorites, 0 Comments
How to Connect ADXL345 to Raspberry Pi Pico
In this tutorial learn how to connect the ADXL345 to the Raspberry Pi Pico to get real acceleration values.
Do not forget to subscribe!
Supplies
Physical Connection
Setup pins as follows for I2C connection, you only need 4 jumper wires. You can get the sensor and Raspberry Pi pre-soldered or solder them yourself. This is sufficient enough to start getting sensor values! Be sure not to mix power connections as this can fry the sensor.
Code
Run the following code in MicroPython
from machine import Pin, I2C
import time
import ustruct
# Constants
ADXL345_ADDRESS = 0x53 # address for accelerometer
ADXL345_POWER_CTL = 0x2D # address for power control
ADXL345_DATA_FORMAT = 0x31 # configure data format
ADXL345_DATAX0 = 0x32 # where the x-axis data starts
# Initialize I2C
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
# Initialize ADXL345
def init_adxl345():
i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_POWER_CTL, bytearray([0x08])) # Set bit 3 to 1 to enable measurement mode
i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_DATA_FORMAT, bytearray([0x0B])) # Set data format to full resolution, +/- 16g
# Read acceleration data
def read_accel_data():
data = i2c.readfrom_mem(ADXL345_ADDRESS, ADXL345_DATAX0, 6)
x, y, z = ustruct.unpack('<3h', data)
return x, y, z
# Main loop
init_adxl345()
while True:
x, y, z = read_accel_data()
print('--------------------')
print(x, y, z) # raw values from sensor
print("X: {}, Y: {}, Z: {}".format(x*0.0039, y*0.0039, z*0.0039))
time.sleep(0.5)
# if you do get OSError: [Errno 5] EIO, try unplug and plug
# if you do set different resolution 0.0039 may not be the constant (check data sheet)
If you set everything up properly you should start seeing values in x, y, and z in units of g (9.81 m/s^2).
Some takeaways from the code:
- Gives you acceleration values up to 16g. You can adjust this by changing the bytearray you pass into the DATA_FORMAT register.
- You can calibrate your sensor for more accurate results. ShillehTek has a video on this already here.
- If you do get OSError trying unplugging and plugging the Pico in.
- 0.0039 is retrieved from the ADXL345 datasheet, this value changes depending on the resolution you select
- You can extend this and calculate the angle with some trigonometry, another tutorial will be made on this topic.
Conclusion:
Please consider subbing to the channel if this helped you in any way, would help us create more content for you! Let me know if you have any questions. Thanks!