Измерение ускорения с помощью акселерометра ADXL345 и Raspberry Pi


В данной статье мы рассмотрим как подключить акселерометр ADXL345 к плате Raspberry Pi и измерить ускорение с помощью программы на Python. Raspberry Pi — это небольшой, мощный компьютер, а ADXL345 — это датчик, который может обнаруживать движение. В сочетании они создают отличную пару для всевозможных забавных проектов, таких как сигнализация движения или интерактивные игры.

Измерение ускорения с помощью акселерометра ADXL345 и Raspberry Pi

Мы рассмотрим шаги по подключению двух устройств, а затем покажем, как написать простой код Python для считывания данных с акселерометра. Также ранее на нашем сайте мы рассматривали подключение акселерометра ADXL345 к плате Arduino.

Необходимые компоненты

  1. Плата Raspberry Pi 4 Model B (или другая) (купить на AliExpress).
  2. Акселерометр (ADXL345) (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Цифровой акселерометр ADXL345

ADXL345 — это 3-осевой акселерометр, разработанный компанией Analog Devices. Этот датчик предназначен для точного измерения ускорения по осям X, Y и Z, что делает его пригодным для различных приложений. Он особенно популярен в таких областях как робототехника, игры, виртуальная реальность, носимые устройства и устройства IoT, среди прочих.

Цифровой акселерометр ADXL345

Этот акселерометр способен обнаруживать как статическое ускорение, например силу тяжести, так и динамическое ускорение, возникающее в результате движения или вибраций. ADXL345 имеет регулируемую чувствительность, что позволяет ему удовлетворять ряду приложений с различными требованиями к ускорению.

ADXL345 взаимодействует с микроконтроллерами с помощью интерфейсов I2C или SPI, что делает его совместимым с широким спектром платформ разработки, таких как Arduino, Raspberry Pi и др. Благодаря низкому энергопотреблению и малому форм-фактору ADXL345 идеально подходит для приложений с питанием от батареи и ограниченным пространством.

Более подробно про данный акселерометр вы можете прочитать в его техническом описании.

Технические характеристики ADXL345

ADXL345 — это трехосевой акселерометр со следующими основными характеристиками:

  1. Оси: 3 оси (X, Y, Z).
  2. Чувствительность: выбирается пользователем, ±2g, ±4g, ±8g или ±16g.
  3. Разрешение: 10-бит или 13-бит, по выбору пользователя.
  4. Скорость передачи выходных данных (ODR): от 0,10 Гц до 3200 Гц.
  5. Интерфейсы связи: I2C (до 400 кГц) и SPI (4-проводной и 3-проводной, до 5 МГц).
  6. Диапазон напряжения питания: от 2,0 В до 3,6 В.
  7. Потребляемый ток: от 23 мкА до 130 мкА в зависимости от скорости выходных данных и режима измерения.
  8. Диапазон рабочих температур: от -40°C до +85°C.
  9. Упаковка: 3 мм × 5 мм × 1 мм LGA.

Распиновка ADXL345

Модуль 3-осевого цифрового акселерометра ADXL345 имеет 8 контактов.

Распиновка ADXL345

  1. GND: Заземление модуля.
  2. VCC: Вход питания, обычно 3,3 В, но может принимать напряжение в диапазоне от 2,0 В до 3,6 В.
  3. CS (Chip Select): используется для связи по SPI. При низком уровне включает связь по SPI; при высоком уровне переключается на связь по I2C.
  4. INT1 (прерывание 1): этот вывод можно настроить на вывод сигналов прерывания для определенных событий, таких как обнаружение активности/бездействия, обнаружение одиночного/двойного нажатия или обнаружение свободного падения.
  5. INT2 (прерывание 2): этот вывод можно настроить на вывод сигналов прерывания для определенных событий, таких как обнаружение активности/бездействия, обнаружение одиночного/двойного нажатия или обнаружение свободного падения.
  6. SDO (Serial Data Out): линия Master In Slave Out (MISO) для связи по протоколу SPI.
  7. SDA (последовательные данные):  последовательные данные (I2C)/последовательный ввод данных (SPI 4-Wire)/последовательный ввод и вывод данных (SPI 3-Wire).
  8. SCL (Serial Clock):  тактовый сигнал последовательной связи. SCL — это тактовый сигнал для I2C, а SCLK — это тактовый сигнал для SPI.

Взаимодействие акселерометра ADXL345 с Raspberry Pi 4

Чтобы использовать акселерометр ADXL345 с платой Raspberry Pi 4, вам нужно будет выполнить необходимые аппаратные подключения, а затем написать скрипт Python для связи с датчиком. Давайте начнем с понимания процедуры подключения. Выполните следующие шаги, чтобы подключить акселерометр к Raspberry Pi 4.

Подключение акселерометра ADXL345 к плате Raspberry Pi 4

Подключите ADXL345 к Raspberry Pi 4 следующим образом:

  • VCC от ADXL345 к 3,3 В на Raspberry Pi 4 (контакт 1).
  • GND от ADXL345 к GND на Raspberry Pi 4 (контакт 6).
  • SDA от ADXL345 к SDA (GPIO 2, Pin 3) на Raspberry Pi 4.
  • SCL от ADXL345 к SCL (GPIO 3, Pin 5) на Raspberry Pi 4.

Собранная на макетной плате конструкция проекта

Код Python для измерения ускорения и углов наклона

Теперь давайте напишем код Python для сопряжения ADXL345 с платой Raspberry Pi 4 и измерения ускорения по осям X, Y, Z, а также углов наклона. Мы не использовали никакую библиотеку для этого кода. Для использования этого кода вам сначала нужно включить связь I2C на плате.

Этот скрипт Python предназначен для взаимодействия с акселерометром ADXL345 с использованием протокола связи I2C. ADXL345 — это 3-осевой акселерометр, и этот скрипт позволяет считывать с него данные об ускорении и рассчитывать углы наклона (тангаж и крен) на основе значений ускорения.

Скопируйте следующий код и вставьте его в окно редактора Thonny IDE.

Объяснение работы кода

Эти строки импортируют три модуля Python:

  • smbus: Предоставляет функции для связи с устройствами по протоколу связи I2C.
  • time: Используется для различных задач, связанных со временем. В этом коде, в частности, для введения задержек.
  • math: Предоставляет доступ к математическим функциям. Здесь он используется для тригонометрии и преобразования углов.

В этом разделе определяются константы:

  • ADXL345_I2C_ADDR: Адрес I2C акселерометра ADXL345.
  • Следующие строки (например POWER_CTLDATA_FORMAT, и т.д.) — это адреса регистров в устройстве ADXL345. Эти регистры хранят конфигурации и данные. Например, POWER_CTL— это адрес регистра управления питанием, который можно использовать для включения/выключения акселерометра.

Эта строка начинает определение класса, называемого ADXL345. В этом классе определена константа, Gпредставляющая силу тяготения Земли (9,81 м/с^2). Эта константа будет использоваться позже для расчетов ускорения.

Функция __init__является конструктором, который автоматически вызывается при создании объекта класса ADXL345. Здесь она инициализирует шину I2C для связи и отправляет команды акселерометру:

  • Устанавливаем диапазон ±16g и устанавливаем бит FULL_RES.
  • Включение акселерометра.

Эта строка считывает 6 байт данных, начиная с DATAX0регистра. Эти байты содержат значения ускорения для осей X, Y и Z.

Здесь 2 байта, соответствующие ускорению по оси X, объединяются для формирования 16-битного числа. Значения ускорения представлены в виде дополнения до 2, поэтому для отрицательных значений выполняется проверка и преобразование. Затем значение масштабируется для получения ускорения в м/с^2.

В этом разделе рассчитываются углы тангажа и крена на основе значений ускорения с использованием тригонометрических соотношений.

Если скрипт запускается как основная программа, он входит в этот цикл:

  • Создается объект ADXL345.
  • Затем он непрерывно считывает значения ускорения и вычисляет углы наклона.
  • Эти значения распечатываются каждые 0,5 секунды.

Тестирование работы проекта

Сохраните код Python под любым именем. Затем нажмите кнопку «Выполнить».

В Thonny Shell вы увидите значение ускорения по осям X, Y, Z в единицах м/с^2 . Вы также увидите значения тангажа и крена в градусах.

Тестирование работы проекта (часть 1)

Чтобы наблюдать изменение значений, можно вращать или наклонять акселерометр.

Тестирование работы проекта (часть 2)

В этих результатах видно, что значение рыскания не рассчитывается.

Рассчитать рыскание, используя только акселерометр типа ADXL345, напрямую невозможно. Причина в том, что рыскание — это вращение вокруг вертикальной (гравитационной) оси, а акселерометр измеряет линейное ускорение. Без опорного значения (например, магнитного севера от магнитометра или компаса) нет никаких изменений в силе гравитации на датчиках для определения угла рыскания.

Таким образом, используя 3-осевой акселерометр ADXL345, вы можете рассчитать ускорение по осям X, Y, Z , а также измерить значения тангажа и крена.

(Проголосуй первым!)
Загрузка...
9 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *