Mpu 6050 как совместить гироскоп и акселерометр
Перейти к содержимому

Mpu 6050 как совместить гироскоп и акселерометр

MPU-6050 — гироскоп — акселерометр

Трехосевой гироскоп с трехосевым акселерометром MPU-6050 очень доступен по цене, чем и приобрел себе популярность. Этот датчик применяется для определения положения в пространстве, в системах стабилизации положения, стабилизации прямолинейного движения и движения по заданной кривой. Например, в балансирных роботах, в игровых приставках, применяется в робототехнике, для измерения углов наклона, скорости вращения, в авиамоделизме его применяют в автопилотах. Датчик может применяться для измерения перегрузок и тому подобное.

Схема подключения

MPU-6050-i2c

Для Raspberry Pi (OS: Raspbian) примеры скриптов можно скачать и развернуть так:

Калибровка

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

MPU-6050-offset1MPU-6050-offset2MPU-6050-offset3 В примере я предусмотрел процедуру калибровки. Скрипт калибровки: mpu6050_calibr.py. Калибровка выполняется в два этапа. Сначала датчик должен быть неподвижен. Подразумевается, что угловые скорости равны нулю. Калибруется гироскоп. Затем калибруется акселерометр. Нужно его не спеша поворачивать во всех направлениях. Эта процедура занимает около минуты. После чего функция калибровки выдает вычисленные значения, которые нужно прописать в скрипте. На этом калибровка закончена. После калибровки погрешность значительно снизится. См. Скрипт: mpu6050_get_raw.py. В этом скрипте в следующих строках указываются калибровочные данные:

Гироскоп

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

С помощью электронного гироскопа можно определить положение системы следующим образом. При включении принять начальное положение за нулевую позицию. Затем опрашивать гироскоп с заданным интервалом, зная интервал и скорость вращения, вычислять смещение и добавлять к текущему положению. При этом мы предполагаем, что между двумя опросами датчика система поворачивалась с постоянной скоростью. Такой подход ведет к неизбежному накоплению ошибки. Что видно на примере. Смотри работу скрипта: mpu5060_gyro.py или скрипта, графически отображающего положение гироскопа pyplay_gyro.py.

Акселерометр

Когда мы поворачиваем датчик в пространстве, показания акселерометра на каждой из трех осей будет изменяться в зависимости от положения. Так, с помощью трехосевого акселерометра под воздействием силы тяжести можно определить положение системы. См. работу скрипта mpu6050_accel_no_filter.py.

Мы видим, что значения достаточно зашумлены. Попробуем их фильтровать. Я применил очень упрощенный фильтр Калмана. См. работу скрипта mpu6050_accel_kf.py. Показания стали более стабильными, однако в нашем случае фильтр малополезен. Если датчик потрясти, мы увидим, что показания углов изменяются и иногда очень сильно, хотя мы его не поворачиваем, а перемещаем с ускорением вдоль осей. Это логично, поскольку на акселерометр теперь кроме силы тяжести действует дополнительная сила, и результирующий вектор изменяет направление. Наглядно это видно на примере скрипта pyplay_accel.py (в этом скрипте фильтрация не используется). Здесь простая фильтрация только частично улучшает ситуацию. В решении этой проблемы нам поможет гироскоп. Именно он может нам сказать, что система-то не вращалась, и поэтому мы можем эти колебания отфильтровать.

Совместное использование гироскопа и акселерометра

MPU-6050-filter

См. работу скрипта mpu6050_final.py или скрипта pyplay_final.py, который графически изображает процесс работы MPU-6050

MotionApps

Кто использует Arduino, тоже без труда найдут в интернете аналогичные примеры.

В особенности работы MotionApps я не вникал. Думаю, это тема для отдельной статьи. Меня больше интересовала собственная реализация на Python.

Подключение гироскопа и акселерометра MPU6050 к ESP32

Датчик MPU6050 состоит из акселерометра и гироскопа, объединенных в составе одного чипа. Он содержит 16-битный аналого-цифровой преобразователь (АЦП) на каждый канал. Таким образом, он одновременно может считывать показания по всем осям x, y и z. Для взаимодействия с платами Arduino или другими микроконтроллерами модуль использует интерфейс I2C. Модуль MPU-6050 находит широкое применение в дронах, роботах, датчиках движения и т.д.

Внешний вид подключение гироскопа и акселерометра MPU6050 к модулю ESP32

В данной статье мы рассмотрим подключение гироскопа и акселерометра MPU6050 к модулю ESP32 и будем выводить считываемые с него значения на веб-сервер. Ранее на нашем сайте мы рассматривали подключение гироскопа MPU6050 к платам Arduino и Raspberry Pi. Также у нас на сайте вы можете посмотреть все проекты с использованием модуля MPU6050.

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

  1. ESP32 NodeMCU (купить на AliExpress).
  2. Модуль акселерометра и гироскопа MPU6050 (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Гироскопический датчик (гироскоп) MPU-6050

MPU-6050 представляет собой 8-пиновый 6-осевой гироскоп и акселерометр на едином чипе. По умолчанию данный модуль работает по интерфейсу I2C, но можно задействовать и интерфейс SPI. В нашем проекте мы будем использовать интерфейс (режим) I2C и в этом режиме нам понадобятся контакты SDA и SCL модуля.

Внешний вид гироскопа MPU-6050

Распиновка MPU-6050:
Vcc – контакт для подачи питающего напряжения постоянного тока;
GND – земля модуля;
SDA – это контакт используется для передачи данных между модулем mpu6050 и микроконтроллером;
SCL – вход синхронизации;
XDA – линия передачи данных (опциональная) по протоколу I2C для конфигурирования и считывания данных с внешних датчиков (не используется в нашем проекте);
XCL – вход синхронизации протокола I2C для конфигурирования и считывания данных с внешних датчиков (не используется в нашем проекте);
ADO – I2C Slave Address LSB (не используется в нашем проекте);
INT – контакт прерывания для индикации готовности данных.

Схема проекта

Схема подключения гироскопа MPU6050 к модулю ESP32 представлена на следующем рисунке.

Схема подключения гироскопа MPU6050 к модулю ESP32

Модуль MPU6050 взаимодействует с ESP32 по интерфейсу I2C, поэтому нам необходимо всего два провода для его подключения. Контакты SCL и SDA модуля MPU6050 мы подключим к контактам D22 и D21 модуля ESP32, а контакты VCC и GND модуля MPU6050 подсоединим к контактам 3.3V и GND модуля ESP32.

Объяснение программы для модуля ESP32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе мы подключим используемые библиотеки. Библиотека Wire.h позволяет взаимодействовать с I2C/TWI устройствами, а библиотека WiFi.h позволяет модулю ESP32 подключаться к сетям Wi-Fi.

Урок 11. Подключение гироскопа GY-521 MPU-6050 к Arduio.

Модуль Gy-521 выполнен на базе микросхемы MPU6050, это 3-осевой гироскоп и акселерометр. Данную модель можно использовать для определения положения в пространстве.

В данном уроке нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

В данном уроке рассмотрим библиотеку, которая позволяет преобразовать показания координат X и Y.

Подключение модуля производится следующим образом.

Gy-521 (mpu6050) Arduino (Uno)
VCC 3.3 V
GND GND
SCL A5
SDA A4

Для питания модуля необходимо использовать строго 3.3V! Для этого можно использовать преобразователь напряжения на 3.3V.

Пришло время записать следующий скетч в нашу Arduino:

Данный пример пересчитывает координату X и Y и выводит в консоль (Монитор последовательного порта)

Когда X и Y равны 180, значит гироскоп находится в горизонтальной плоскости.

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

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