Mpu 6050 подключение к компьютеру

Обновлено: 07.07.2024

MPU6050 представляет собой 3-х осевой гироскоп и 3-х же осевой акселерометр в одном корпусе. Сразу поясню, что это и для чего:

  • Гироскоп измеряет угловую скорость вращения вокруг оси, условно в градусах/секунду. Если датчик лежит на столе – по всем трём осям будет значение около нуля. Для нахождения текущего угла по скорости нужно интегрировать эту скорость. Гироскоп может чуть привирать, поэтому ориентироваться на него для расчёта текущего угла не получится даже при идеальной калибровке.
  • Акселерометр измеряет ускорение вдоль оси, условно в метрах/секунду/секунду. Если датчик лежит на столе или движется с постоянной скоростью – на оси будет спроецирован вектор силы тяжести. Если датчик движется с ускорением – вдобавок к ускорению свободного падения получим составляющие вектора ускорения. Если датчик находится в свободном падении (в том числе на орбите планеты) – величины ускорений по всем осям будут равны 0. Зная проекции вектора силы тяжести можно с высокой точностью определить угол наклона датчика относительно него (привет, школьная математика). Если датчик движется – однозначно определить направление вектора силы тяжести не получится, соответственно угол тоже.

Модуль стоит в районе 150 рублей на нашем любимом AliExpress (ссылка, ссылка), а также входит в Arduino набор GyverKIT.

Итак, по отдельности акселерометр и гироскоп не могут обеспечить точное измерение угла, но вместе – ещё как могут! Об этом мы поговорим ниже. А начнём с подключения и базового общения с датчиком.

Подключение

Датчик подключается на шину i2c (SDA -> A4, SCL -> A5, GND -> GND). На плате стоит стабилизатор, позволяющий питаться от пина 5V (VCC -> 5V).

blank

На модуле выведен пин AD0. Если он никуда не подключен (или подключен к GND) – адрес датчика на шине i2c будет 0x68, если подключен к питанию (VCC) – адрес будет 0x69. Таким образом без дополнительных микросхем можно подключить два датчика на шину с разными адресами.

Получение сырых данных

С MPU6050 можно общаться напрямую при помощи встроенной библиотеки Wire.h и даташита, а можно взять очень мощную библиотеку от i2cdev: официальный сайт (на момент написания не работает) или GitHub. Для работы понадобится сама библиотека MPU6050 и библиотека I2Cdev (удобного способа скачать там нет, поэтому выложил архив с обеими на Яндекс.Диск). Мы будем работать с библиотекой, но я оставлю пример опроса всех ускорений и угловых скоростей напрямую, т.к. библиотека тяжёлая, а пример очень лёгкий.

Библиотека MPU6050 от i2cdev

Расшифровка сырых данных

По каждой оси и параметру датчик выдаёт 16-битное знаковое значение ( -32768.. 32767 ). При стандартных настройках (как в примерах выше) это значение отражает:

  • Ускорение в диапазоне -2.. 2 g (9.82 м/с/с).
  • Угловую скорость в диапазоне -250.. 250 градусов/секунду.

Таким образом, для перевода сырых данных в величины СИ (если это нужно) можно сделать по каждой оси:

  • Ускорение в м/с/с при чувствительности 2: float accX_f = accX / 32768 * 2
  • Угловая скорость в град/с при чувствительности 250: float gyrX_f = gyrX / 32768 * 250

Думаю закономерность понятна.

Настройка чувствительности

Датчик позволяет настроить чувствительность по каждому параметру, в библиотеке i2cdev это делается так:

Перевести сырые данные можно таким же способом, как в предыдущем пункте, но с учётом нового диапазона.

Калибровка оффсетов

16384 по оси Z и нули по всем остальным осям ускорения и угловой скорости. Но это фантастика =)

Алгоритмы калибровки

16384 по оси Z и нули по всем остальным осям ускорения и угловой скорости. Но это фантастика =)


Также в библиотеке есть готовые функции для калибровки акселя и гиро, они принимают количество итераций калибровки (до 15):

Функции блокирующие, выполняются и автоматически выставляют оффсеты, т.е. датчик сразу калибруется. Для чтения оффсетов (например для записи в EEPROM) можно воспользоваться тем же способом, что и раньше:

Получение углов

Для получения углов из показаний акселерометра и гироскопа есть три основных способа:

  • Фильтрация при помощи фильтра Калмана.
  • Фильтрация при помощи комплементарного фильтра.
  • Определение углов при помощи встроенного в датчик DMP (Digital Motion Processor).

Из всех трёх самый хороший результат даёт встроенный процессор, на его фоне Калман и комплементари можно даже не рассматривать, они практически не работают. Пример рассмотрим в следующей главе ниже.

Ниже привожу совмещённый пример с упрощённым комплементари, обычным и Калманом, всё в одном скетче. Но повторюсь, по сравнению с DMP оно вообще не то показывает =)

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

Данный датчик также обеспечивает превосходную точность результатов благодаря наличию в нем 16-битного АЦП (аналого-цифрового преобразования). Гироскоп датчика MPU6050 способен одновременно обрабатывать данные по 3-м осям: x, y и z. Для связи с другими устройствами датчик использует интерфейс I2C.

Внешний вид подключения гироскопа MPU6050 к плате Raspberry Pi

В данной статье мы рассмотрим подключение гироскопа MPU6050 к плате Raspberry Pi, получаемые данные с гироскопа мы будем выводить на экран ЖК дисплея 16x2.

Также на нашем сайте вы можете посмотреть следующие проекты, в которых был использован датчик MPU6050:

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

  1. Плата Raspberry Pi (купить на AliExpress).
  2. ЖК дисплей 16x2 (купить на AliExpress).
  3. Гироскоп MPU6050 (купить на AliExpress).
  4. Потенциометр 10 кОм (купить на AliExpress).
  5. Источник питания.
  6. Макетная плата.
  7. Соединительные провода.

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

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

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

Общие принципы работы проекта

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

Отображение данных температуры в проекте

Отображение данных с гироскопа

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

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

Схема подключения гироскопа MPU6050 к плате Raspberry Pi

Потенциометр 10 кОм в схеме используется для регулировки контрастности ЖК дисплея. Для соединения платы Raspberry Pi с датчиком MPU6050 мы использовали 4 провода: 3.3v и землю датчика MPU6050 подключили к 3.3v и земле платы Raspberry Pi, а контакты SCL и SDA датчика подключили к контактам 3 (GPIO2) и 5 (GPIO3) платы. Контакты управления работой ЖК дисплея RS, RW и EN мы непосредственно подключили к контактам GPIO18 и 23 платы Raspberry Pi, а контакты данных ЖК дисплея мы подключили к контактам GPIO24, GPIO25, GPIO8 и GPIO7 платы.

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

На этот раз мы перейдем от теории к практике: подключим датчик к Ардуино, и напишем пару программ для работы с ним. Подключать будем модуль MPU6050 от RobotClass.

Акселерометр и гироскоп MPU6050 от RobotClass - ROC

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

Характеристики модуля MPU6050 ROC:

  • напряжение питания: от 3,5 до 6 В;
  • потребляемый ток: 500 мкА;
  • ток в режиме пониженного потребления: 10 мкА при 1,25 Гц, 20 мкА при 5 Гц, 60 мкА при 20 Гц, 110 мкА при 40 Гц;
  • диапазон: ± 2, 4, 8, 16g;
  • разрядность АЦП: 16;
  • интерфейс: I2C (до 400 кГц).

На плате имеется 8 контактов:

Подключение MPU6050 к Ардуино

Соединим контакты датчика с Ардуино Уно согласно стандартной схеме для интерфейса I2C:

MPU6050 ROCGNDVCCSDASCL
Ардуино УноGND+5VA4A5

Принципиальная схема

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

Внешний вид макета

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

Программа для получения сырых данных с акселерометра MPU6050

Составим программу, которая будет каждые 20 миллисекунд получать данные из MPU6050 и выводить их в последовательный порт.

Для работы программы потребуются библиотеки: MPU6050 и I2Cdev, ссылки на которые можно найти в конце урока.

Загружаем программу на Ардуино и открываем окно графика. Поворачиваем датчик вокруг оси X на 90 градусов в одну сторону, потом на 90 в другую. Получится примерно такая картина.

Сырые данные с акселерометра MPU6050

На графике хорошо видно, что при наклоне оси Y вертикально, акселерометр выдает значения близкие к четырём тысячам. Откуда берется это число?

Точность измерения ускорения в MPU6050

С другой стороны, MPU6050 имеет 16 разрядный АЦП. 2 в степени 16 даст нам число 65 536. Поскольку датчик может измерять и отрицательное и положительное ускорение, то он будет выдавать нам числа от -32768 до +32768.

Сложив эти два факта вместе получаем, что при таких настройках 1G будет равен числу 4096 (ну а -1G равен числу -4096). Это вполне совпадает с наблюдаемыми на графике значениями!

Программа для вычисления угла наклона акселерометра MPU6050

Добавим в предыдущую программу вычисление угла поворота датчика вокруг оси X:

Загружаем программу в Ардуино и снова пробуем вращать датчик. Теперь на графике отображается угол наклона в градусах!

График угла наклона, полученного с помощью акселерометра MPU6050

Ну вот, мы получили уже что-то пригодное для дальнейшего использования. Видно, что датчик поворачивался сначала на 30 с лишним градусов в одну сторону, потом примерно на 60 в другую. Работает!

Заключение

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

Технический рынок наполнен тысячами модулями датчиков, которые стоят недорого и используются в проектном конструировании. Перед этим модули связывают с программируемым микроконтроллером. Акселерометр – инструмент, использующийся для расчета разности между настоящим и гравитационным ускорением предмета. Датчик состоит из платы со встроенной микросхемой.

Прибор применяют везде. Статья ниже – вспомогательная инструкция по подключению акселерометра к Ардуино.


Шаг 1. Компоненты для подключения акселерометра к Arduino

Для проекта понадобятся несколько компонентов:

Микроконтроллер Arduino UNO R3


МК создан с использованием материалов контроллера ATmega328:

  1. цифровые входы и выходы в количестве 14 штук, причем половина приходится на ШИМ-выходы;
  2. аналогичные входы, количество – 6 штук;
  3. резонатор на основе кварца, мощностью 16 МГц;
  4. встроен usb-вход;
  5. контакт для подключения питания;
  6. на МК располагается кнопка, с помощью которой возможен сброс данных и кода;
  7. контакт для программирования данных, находящихся внутри схемы, именуемый ICSP.

Старт работы начинается с подачи электрического питания в плату. Пользователь подключает к плате со схемой блок питания или зарядное устройство. Также процедура осуществляется с помощью usb-кабеля, который подключен к компьютеру и микроконтроллеру. Для разработки программы понадобится бесплатная среда программирования – Arduino IDE.

Внимание! Пользователь разрабатывает приложения с использованием Ардуино, только если платы совместимы с архитектурой микроконтроллера. В противном случае программа не заработает.

Пользователь создает в бесплатной среде код, затем его компилирует и загружает проработанную программу в пространство памяти в Ардуино. Язык, на котором программируется код, Wiring максимально приближен к популярному среди программистов языку – C++. Кроме того МК поддерживает версии для осей Виндовс, Мак ОС и Линукс.

Модуль датчика для гироскопа акселерометра на Аrduino с 3 осями – GY-521 (MPU-6050)


В основе компонента лежит микросхема MPU-6050. В комплект входят 2 предмета – гироскоп и акселерометр. Данные устройства перед конструированием обрабатываются и затем переносятся прямиком в микроконтроллер через интерфейс

Модуль датчика помогает определять место и перемещение инструмента в пространстве. Измеряются дифферент и углы крена посредством вектора силы тяжести и скорости в процессе вращения. Также включена функция измерения температурного режима. Перемещение определяется линейным ускорением и угловой скоростью. Полная картина рисуется по 3 осям.

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

Макетная плата, предназначенная для прототипирования

Отладка – неотъемлемая часть построения электронных схем. Макетная плата незаменима для конструкции электронной аппаратуры. Ранее в изобретательстве использовали традиционные макетные платы, но сейчас широко распространены макетные платы, которые удобны тем, что не требуют дополнительных спаек.

Таким образом, процесс сборки и отладки электронной схемы в разы ускоряется: не приходится часто использовать паяльник, чтобы поменять сломанные радиодетали.

Материал для изготовления беспаечных макетных плат – пластик. Кроме того, все контакты надежно скреплены к плате, поэтому частые переключения не испортят элемент.

Соединительные провода папа-папа

Обычные провода папа-папа нам подойдут, еще их называют провода-перемычки. Такие стоят недорого и продаются везде, на любом рынке или в любом онлайн-магазине для радиолюбителей.

Шаг 2. Схема подключения акселерометра к микроконтроллеру Arduino


Порядок и схема подключения довольно просты:

  1. Присоединяем модуль датчика к микроконтроллеру.
  2. На МК Ардуино загружаем проработанный код, представленный в разделе ниже.
  3. Открываем среду разработки Arduino IDE и мониторим последовательный порт.
  4. Сверяем выводимые данные акселерометра и гироскопа.
  5. Во время поворота датчика сведения не производят изменений.

Гироскоп – инструмент, который позволяет измерить реакцию тела на перемещение углов и вообще ориентации. Акселерометр же служит измерителем проекции ускорения, которое только кажется.

Шаг 3. Программируем Arduino для обработки информации, полученной с акселерометра

Алгоритм написания программы в последовательности:

Вуаля! Акселерометр Аrduino запрограммирован.

В принципе, для разнообразия можно написать еще один скетч (ниже), но тогда нам нужна будет еще одна библиотека - Kalman (Gy-521, mpu6050), которая преобразует показания координат X и Y.

После второго скетча вы на экране сможете увидеть подобные цифры:


Заключение

Модуль датчика – устройство, которое широко используется во многих сферах человеческой жизни. С помощью датчика приводят в норму полет квадрокоптера, потому что гироскоп и акселерометр часто применяются в совокупности.

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

Читайте также: