In this tutorial learn how to connect the ADXL345 to the Raspberry Pi Pico to get real acceleration values.
You can purchase this sensor here:
1-) Step One: Physical Connection
Setup pins as follows for I2C connection, you only need 4 jumper wires
2-) Step Two: 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) 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).
Sensor calibration may be needed to produce more accurate values, you can find that on my channel.
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!