В рамках данного проекта мы рассмотрим процесс взаимодействия 3-осевого акселерометра ADXL345 с Raspberry Pi Pico с использованием кода MicroPython. Raspberry Pi Pico является экономичной и мощной микроконтроллерной, которая хорошо сочетается с ADXL345, цифровым акселерометром с высоким разрешением и низким энергопотреблением. Вместе эти компоненты можно использовать для разработки широкого спектра увлекательных проектов, таких как системы управления движением, датчики ориентации или даже креативные игровые контроллеры.
ADXL345 – это 3-осевой акселерометр, разработанный Analog Devices. Этот датчик предназначен для точного измерения ускорения по осям X, Y и Z, что делает его пригодным для различных применений. Он особенно популярен в области робототехники, игр, виртуальной реальности, носимых устройств и устройств IoT, среди прочего.
Этот акселерометр способен обнаруживать как статическое ускорение, такое как сила тяжести, так и динамическое ускорение, возникающее в результате движения или вибраций. ADXL345 имеет регулируемую чувствительность, что позволяет использовать его в различных приложениях с различными требованиями к ускорению. ADXL345 взаимодействует с микроконтроллерами с помощью интерфейсов I2C или SPI, что делает его совместимым с широким спектром платформ разработки, таких как Arduino, Raspberry Pi Pico и другими. Благодаря низкому энергопотреблению и небольшому форм-фактору ADXL345 идеально подходит для приложений с питанием от батареи и приложений с ограниченным пространством.
Чтобы использовать акселерометр ADXL345 с Raspberry Pi Pico с использованием MicroPython, вам необходимо подключить модуль к Pico и написать скрипт на языке MicroPython для связи с датчиком. Здесь мы рассмотрим простой пример использования связи по интерфейсу I2C. Сначала подключите компоненты согласно следующей схеме подключения.
На макетной плате это может выглядеть следующим образом.
Далее приведен пример кода на языке MicroPython для считывания необработанных значений ускорения по осям x, y и z.
from machine import Pin, I2C
import time
import ustruct
# Константы
ADXL345_ADDRESS = 0x53
ADXL345_POWER_CTL = 0x2D
ADXL345_DATA_FORMAT = 0x31
ADXL345_DATAX0 = 0x32
# Инициализация I2C
i2c = I2C(0, sda=Pin(8), scl=Pin(9), freq=400000)
# Инициализация ADXL345
def init_adxl345():
i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_POWER_CTL, bytearray([0x08])) # Установить бит 3 в 1 для активации режима измерения
i2c.writeto_mem(ADXL345_ADDRESS, ADXL345_DATA_FORMAT, bytearray([0x0B])) # Установить формат данных для полного разрешения +/- 16g
# Считывание данных ускорения
def read_accel_data():
data = i2c.readfrom_mem(ADXL345_ADDRESS, ADXL345_DATAX0, 6)
x, y, z = ustruct.unpack('<3h', data)
return x, y, z
# Основной цикл
init_adxl345()
while True:
x, y, z = read_accel_data()
print("X: {}, Y: {}, Z: {}".format(x, y, z))
time.sleep(0.1)
Данный код инициализирует ADXL345, настраивает его для измерений с полным разрешением, ±16 g, а затем считывает и выводит данные об ускорении по осям X, Y и Z каждые 0,1 секунды. Вы можете настроить код, чтобы использовать другую настройку чувствительности или считывать данные с другой скоростью, в зависимости от требований вашего приложения.
© digitrode.ru