Подключение Mpu 6050 к компьютеру
Обновлено: 24.11.2024
В этом проекте я покажу вам, как работает датчик MPU6050, а также как подключить Arduino к MPU6050. Мы будем соединять коммутационную плату MPU-6050 с Arduino UNO и считывать значения с акселерометра и гироскопа.
Прежде чем приступить к проекту, вам необходимо понять некоторые основы датчика MPU6050. MPU-6050 — это датчик IMU, который содержит акселерометр MEMS (микроэлектромеханическая система) и гироскоп MEMS на одном чипе.
Здесь датчик IMU, где IMU означает инерциальную измерительную единицу, представляет собой устройство, которое измеряет удельную силу с помощью акселерометра, угловую скорость с помощью гироскопа и магнитное поле с помощью магнитометров.
Датчики IMU используются в самобалансирующихся роботах, самолетах, мобильных телефонах, планшетах, космических кораблях, спутниках, дронах, БПЛА (беспилотных летательных аппаратах) и т. д. для наведения, определения положения, определения ориентации, отслеживания движения и управления полетом.< /p>
Двумя распространенными IMU являются акселерометр ADXL 335 и MPU-6050. ADXL 335 содержит 3-осевой акселерометр.
В случае MPU-6050 это шестиосевое устройство отслеживания движения, которое сочетает в себе 3-осевой акселерометр и 3-осевой гироскоп на одном чипе. Мы увидим более подробную информацию о MPU6050 в следующем разделе.
Знакомство с датчиком MPU6050
MPU-6050 — это шестиосевое устройство отслеживания движения, разработанное InvenSense. Ниже перечислены основные функции устройства MPU6050.
- Трехосевой акселерометр
- Трехосевой гироскоп
- Цифровой выходной датчик температуры
- Шесть 16-разрядных АЦП (три для акселерометра и три для гироскопа)
- Интегрированный цифровой процессор движения (DMP)
- Буфер FIFO 1024B
Шестиосевой MPU-6050 иногда называют устройством с 6 степенями свободы (6 DoF), так как он обеспечивает шесть выходных значений (три от акселерометра и три от гироскопа). MPU-6050 может обмениваться данными по протоколу I2C.
Цифровой процессор движения или DMP – это встроенный процессор, который может снизить вычислительную нагрузку главного процессора, такого как Arduino, за счет сбора и обработки данных с акселерометра, гироскопа и внешнего магнитометра.
Сопряжение MPU6050 с Arduino
Как упоминалось ранее, MPU6050 поддерживает только связь I2C и, следовательно, он должен быть подключен только к контактам I2C Arduino. Контакты I2C Arduino мультиплексированы с контактами аналогового ввода A4 и A5, т. е. A4 — это SDA, а A5 — это SCL.
Что касается MPU6050, мы использовали обычную коммутационную плату с восемью контактами. На изображении выше показано схематическое изображение платы MPU6050 Breakout.
Здесь мы будем использовать контакты SCL, SDA и INT для подключения к Arduino.
Необходимые компоненты
Оборудование
- Arduino UNO [Купить здесь]
- Коммутационная плата MPU6050
- Соединение проводов
Программное обеспечение
- Интегрированная среда разработки Arduino
- Обработка (для 3D-визуализации)
Схема
На следующем изображении показана принципиальная схема интерфейса MPU6050 с Arduino UNO. Как упоминалось ранее, интерфейс между MPU6050 и Arduino должен быть реализован с использованием протокола I2C.
Следовательно, вывод SCL Arduino (A5) подключен к выводу SCL MPU6050. Аналогичным образом контакт SDA платы Arduino (A4) подключается к контакту SDA платы MPU6050.
Кроме того, мы будем использовать функцию прерывания MPU6050, чтобы указать (или прервать) Arduino, когда 1024-байтовый буфер FIFO заполнен. Итак, подключите контакт INT MPU6050 к контакту внешнего прерывания 0 (INT0) Arduino UNO, т.е. контакту 2.
ПРИМЕЧАНИЕ. При обмене данными I2C MPU-6050 всегда действует как ведомое устройство.
Чтение значений RAW из MPU6050
Перед загрузкой фактической программы мы сначала увидим простую программу для считывания необработанных значений с акселерометра, гироскопа и датчика температуры. Просто подключите провода SCL и SDA MPU6050 к соответствующим контактам I2C Arduino (A4 и A5) и загрузите следующий код.
Если вы откроете последовательный терминал, вы получите исходные значения от акселерометра и гироскопа, а также откалиброванную температуру от датчика температуры. Данные выглядят примерно так.
Как видите, считывать необработанные значения с датчика MPU6050 несложно, но эти данные и нам необходимо выполнить дополнительные вычисления на основе этих данных, чтобы получить рысканье, тангаж и крен.
Я уже упоминал, что в датчике MPU6050 есть специальный процессор, называемый DMP или Digital Motion Processor, который встроен в тот же чип, что и акселерометр и гироскоп. Использование этого DMP заключается в том, что его можно запрограммировать с помощью встроенного программного обеспечения для выполнения сложных вычислений на основе данных с датчиков.
Но со стороны InvenSense нет четкой документации по DMP, и в результате мы упускаем возможность быстро вычислять данные датчика непосредственно на чипе.
Джефф Роуберг и другие проделали отличную работу по обратному инжинирингу информации, связанной с DMP, из анализа сигналов I2C.
Загрузка кода в Arduino и тестирование MPU6050
Перед загрузкой кода нам нужно скачать две библиотеки для Arduino. Это I2Cdev и MPU6050. Ссылки для скачивания и официальные ссылки GitHub приведены ниже.
Загрузите библиотеку MPU6050 и извлеките содержимое, разархивировав загруженный файл. Вы получите папку с именем «MPU6050». Скопируйте эту папку и вставьте ее в папку библиотек Arduino.
В моем случае он находится в папке «C:\Program Files (x86)\Arduino\libraries». Сделайте то же самое для библиотеки I2Cdev.
Если все в порядке, откройте Arduino IDE и перейдите по следующему пути: Файл -> Примеры -> MPU6050 -> Примеры -> MPU6050_DMP6 и откройте код примера MPU6050_DMP6.
Загрузите этот код в Arduino (при условии, что вы уже выполнили соединения в соответствии со схемой) и после загрузки кода откройте последовательный терминал.
Установите скорость передачи данных в последовательном терминале на 115200, и вы получите следующий текст.
Инициализация устройств I2C…
Проверка подключений устройств…
Успешное подключение к MPU6050
Отправьте любого персонажа, чтобы начать программирование и демонстрацию DMP:”
Если вы не получаете никаких данных или по-прежнему получаете ненужные данные, просто перезагрузите Arduino. Если вы посмотрите на последнее предложение, там написано «Отправьте любой символ, чтобы начать программирование и демонстрацию DMP». Итак, введите любой символ, например 1 или a, в серийный монитор и отправьте его. Как только вы нажмете Enter, вы сможете увидеть значения Yaw, Pitch и Roll (ypr) на последовательном мониторе.
ПРИМЕЧАНИЕ. В течение этого времени держите MPU6050 на устойчивой горизонтальной поверхности. Кроме того, подождите 10 секунд, пока значения MPU6050 не стабилизируются.
3D-моделирование в процессе обработки на основе данных Interfacing Arduino и MPU6050
На следующем этапе проекта мы рассмотрим 3D-моделирование датчика MPU6050 с помощью Processing IDE, где вы сможете просмотреть 3D-представление данных от датчика. Processing — это язык программирования и интегрированная среда разработки, разработанные для электронного искусства и визуального дизайна. На самом деле среда разработки Arduino IDE также основана на языке программирования Processing.
Чтобы загрузить Processing IDE, перейдите по этой ССЫЛКЕ. Загрузите и установите Processing IDE по указанной ссылке.
После загрузки Processing IDE и его установки (просто разархивируйте содержимое загруженного zip-файла) вам необходимо загрузить библиотеку для Processing под названием «Toxi». Вы можете скачать библиотеку Toxi по этой ССЫЛКЕ.
Я выбрал файл «toxiclibs-complete-0020». После загрузки этого файла извлеките его содержимое в папку с именем «toxiclibs-complete-0020».
Скопируйте эту папку и вставьте ее в папку библиотек файла Processing. В моем случае это был «C:\Users\Ravi\Documents\Processing\libraries».
После копирования папки вы готовы к 3D-моделированию. Во-первых, вам нужно загрузить предыдущий код Arduino (MPU6050_DMP6) с небольшими изменениями.
Откройте MPU6050_DMP6 (пример программы, который мы загрузили ранее) в Arduino IDE. Прокрутите вниз до строки со следующим текстом.
Прокомментируйте эту строку, добавив перед ней двойную косую черту.
Теперь откройте Processing IDE и нажмите «Файл» -> «Открыть». Теперь перейдите в папку, в которой установлена библиотека MPU6050 для Arduino. Откройте пример обработки с именем «MPUTeapot».
В моем случае расположение этого примера — C:\Program Files (x86)\Arduino\libraries\MPU6050\Examples\MPU6050_DMP6\Processing\MPUTeapot.
Эта программа имеет возможность автоматического выбора номера ПОРТА, к которому подключен Arduino.Строка в коде, связанная с этим,
Еще один способ указать номер ПОРТА Arduino — вручную ввести номер COM-порта. Для этого закомментируйте строку выше и раскомментируйте следующую строку и замените номер COM-порта соответствующим номером COM-порта, к которому подключена Arduino.
Прежде чем нажать кнопку запуска в Обработке, убедитесь, что последовательный монитор Arduino IDE закрыт. Теперь нажмите кнопку запуска в среде обработки. Вы получите окно с плоской структурой. Подождите 10 секунд перед началом 3D-моделирования MPU6050.
Движения, совершаемые MPU6050, можно увидеть через 3D-объект на экране.
В этом уроке мы узнаем, как использовать датчик акселерометра и гироскопа MPU6050 с Arduino. Сначала я объясню, как работает MPU6050 и как считывать с него данные, а затем мы приведем два практических примера.
Вы можете посмотреть следующее видео или прочитать письменное руководство ниже.
Обзор
В первом примере с помощью среды разработки Processing мы сделаем 3D-визуализацию ориентации сенсора, а во втором примере сделаем простую самостабилизирующуюся платформу или самодельный карданный шарнир. Основываясь на ориентации MPU6050 и объединенных данных акселерометра и гироскопа, мы управляем тремя сервоприводами, которые удерживают платформу на одном уровне.
Как это работает
Инерциальный измерительный блок MPU6050 имеет 3-осевой акселерометр и 3-осевой гироскоп, встроенные в один чип.
Гироскоп измеряет скорость вращения или скорость изменения углового положения во времени по осям X, Y и Z. Он использует технологию MEMS и эффект Кориолиса для измерения, но для получения более подробной информации об этом вы можете проверить мой конкретный учебник «Как работают датчики MEMS». Выходные данные гироскопа в градусах в секунду, поэтому для получения углового положения нам просто нужно проинтегрировать угловую скорость.
С другой стороны, акселерометр MPU6050 измеряет ускорение так же, как объяснялось в предыдущем видео для датчика акселерометра ADXL345. Вкратце, он может измерять гравитационное ускорение по трем осям, и, используя некоторую математику тригонометрии, мы можем вычислить угол, под которым расположен датчик. Итак, если мы объединим или объединим данные акселерометра и гироскопа, мы сможем получить очень точную информацию об ориентации датчика.
IMU MPU6050 также называют устройством слежения за движением с шестью осями или устройством с шестью степенями свободы (6 DoF) из-за его шести выходов или трех выходов акселерометра и трех выходов гироскопа.
Arduino и MPU6050
Давайте посмотрим, как мы можем подключить и считать данные с датчика MPU6050 с помощью Arduino. Мы используем протокол I2C для связи с Arduino, поэтому нам нужно всего два провода для его подключения, а также два провода для питания.
Вы можете получить компоненты, необходимые для этого руководства по Arduino, по ссылкам ниже:
- MPU6050 IMU …………………………..…. Амазонка/Банггуд/Алиэкспресс
- Плата Arduino ………………………….….. Amazon / Banggood / AliExpress
- Макет и соединительные провода ………… Amazon/Banggood/AliExpress
Код Arduino для MPU6050
Вот код Arduino для чтения данных с датчика MPU6050. Под кодом вы можете найти его подробное описание.
Описание кода. Сначала нам нужно подключить библиотеку Wire.h, которая используется для связи I2C, и определить некоторые переменные, необходимые для хранения данных.
В разделе настройки нам нужно инициализировать библиотеку проводов и сбросить датчик через регистр управления питанием. Для этого нам нужно взглянуть на техпаспорт датчика, откуда мы можем увидеть адрес регистра.
Кроме того, если мы хотим, мы можем выбрать полный диапазон для акселерометра и гироскопа, используя их регистры конфигурации.В этом примере мы будем использовать диапазон по умолчанию +- 2 g для акселерометра и диапазон 250 градусов/с для гироскопа, поэтому я оставлю эту часть кода комментариями.
В разделе цикла мы начинаем со считывания данных акселерометра. Данные для каждой оси хранятся в двух байтах или регистрах, и мы можем увидеть адреса этих регистров из таблицы данных датчика.
Чтобы прочитать их все, мы начинаем с первого регистра и с помощью функции requiestFrom() запрашиваем чтение всех 6 регистров для осей X, Y и Z. Затем мы считываем данные из каждого регистра и, поскольку выходные данные являются дополнительными до двух, мы соответствующим образом объединяем их, чтобы получить правильные значения.
Чтобы получить выходные значения от -1g до +1g, подходящие для расчета углов, мы делим выходные данные на ранее выбранную чувствительность.
Наконец, используя эти две формулы, мы вычисляем углы крена и тангажа по данным акселерометра.
Далее тем же методом получаем данные гироскопа.
Мы считываем шесть регистров гироскопа, соответствующим образом объединяем их данные и делим их на ранее выбранную чувствительность, чтобы получить результат в градусах в секунду.
Здесь вы можете заметить, что я исправляю выходные значения с некоторыми небольшими расчетными значениями ошибок, которые я объясню через минуту, как мы их получаем. Так как выходные данные представлены в градусах в секунду, теперь нам нужно умножить их на время, чтобы получить только градусы. Значение времени фиксируется перед каждой итерацией чтения с помощью функции millis().
Наконец, мы объединяем данные акселерометра и гироскопа, используя дополнительный фильтр. Здесь мы берем 96% данных гироскопа, потому что они очень точны и не зависят от внешних сил. Недостатком гироскопа является то, что он дрейфует или вносит ошибку в выходные данные с течением времени. Поэтому в долгосрочной перспективе мы используем данные акселерометра, в данном случае 4%, что достаточно для устранения ошибки дрейфа гироскопа.
Однако, поскольку мы не можем рассчитать рыскание по данным акселерометра, мы не можем применить к нему дополнительный фильтр.
Прежде чем мы рассмотрим результаты, позвольте мне кратко объяснить, как получить значения коррекции ошибок. Для расчета этих ошибок мы можем вызвать пользовательскую функцию calculate_IMU_error(), когда датчик находится в горизонтальном неподвижном положении. Здесь мы делаем 200 показаний для всех выходов, суммируем их и делим на 200. Поскольку мы удерживаем датчик в горизонтальном положении, ожидаемые выходные значения должны быть равны 0. Таким образом, с помощью этого расчета мы можем получить среднюю ошибку датчика. делает.
Мы просто печатаем значения на последовательном мониторе, и как только мы их узнаем, мы можем реализовать их в коде, как показано ранее, для расчета как крена, так и тангажа, а также для 3 выходных сигналов гироскопа.
Наконец, с помощью функции Serial.print мы можем распечатать значения Roll, Pitch и Yaw на последовательном мониторе и посмотреть, правильно ли работает датчик.
Отслеживание ориентации MPU6050 — 3D-визуализация
Далее, чтобы создать пример 3D-визуализации, нам просто нужно принять эти данные, которые Arduino отправляет через последовательный порт в среде разработки Processing. Вот полный код обработки:
Здесь мы считываем входящие данные с Arduino и помещаем их в соответствующие переменные Roll, Pitch и Yaw. В основном цикле отрисовки мы используем эти значения для поворота 3D-объекта, в данном случае это простой блок с определенным цветом и текстом на нем.
Если мы запустим скетч, мы увидим, насколько хорош датчик MPU6050 для отслеживания ориентации. 3D-объект довольно точно отслеживает ориентацию датчика и очень быстро реагирует.
Как я уже упоминал, единственным недостатком является то, что рысканье со временем будет дрейфовать, потому что мы не можем использовать для него дополнительный фильтр.Для улучшения этого нам нужно использовать дополнительный датчик. Обычно это магнитометр, который можно использовать в качестве долговременной поправки на отклонение гироскопа от рыскания. Однако на самом деле MPU6050 имеет функцию, называемую цифровым процессором движения, которая используется для встроенных вычислений данных и способна устранять дрейф рысканья.
Вот тот же 3D-пример с использованием цифрового процессора движения. Мы можем видеть, насколько точным теперь является отслеживание ориентации без дрейфа рыскания. Встроенный процессор также может вычислять и выводить кватернионы, которые используются для представления ориентации и вращения объектов в трех измерениях. В этом примере мы фактически используем кватернионы для представления ориентации, которая также не страдает от блокировки карданного подвеса, возникающей при использовании углов Эйлера.
Тем не менее, получить эти данные от датчика немного сложнее, чем мы объясняли ранее. Прежде всего, нам нужно подключить дополнительный провод к цифровому выводу Arduino. Это вывод прерывания, который используется для чтения этого типа данных из MPU6050.
Кроме того, код немного сложнее, поэтому мы собираемся использовать библиотеку i2cdevlib Джеффа Роуберга. Эту библиотеку можно загрузить с GitHub, и я добавлю ссылку на статью на веб-сайте.
После установки библиотеки мы можем открыть пример MPU6050_DMP6 из библиотеки. Этот пример хорошо поясняется комментариями к каждой строке.
Здесь мы можем выбрать, какой выход мы хотим, кватернионы, углы Эйлера, рыскание, тангаж и крен, значение ускорения или кватернионы для 3D-визуализации. Эта библиотека также включает эскиз обработки для примера 3D-визуализации. Я просто изменил его, чтобы получить форму коробки, как в предыдущем примере. Вот код обработки 3D-визуализации, который работает с примером MPU6050_DPM6 для выбранного вывода «OUTPUT_TEAPOT»:
Итак, здесь с помощью функции serialEvent() мы получаем кватернионы, поступающие от Arduino, и в основном цикле отрисовки используем их для вращения 3D-объекта. Если мы запустим скетч, то увидим, насколько хороши кватернионы для вращения объектов в трех измерениях.
Чтобы не перегружать этот урок, я поместил второй пример, самодельный стабилизатор Arduino Gimbal или самостабилизирующуюся платформу, в отдельную статью.
Не стесняйтесь задавать любые вопросы, связанные с этим руководством, в разделе комментариев ниже, а также не забудьте проверить мою коллекцию проектов Arduino.
После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.
Подключить MPU-6050 для связи с микроконтроллером очень просто благодаря интерфейсу I2C. Для этих примеров мы можем использовать Metro или Arduino для проведения измерений. В приведенных ниже инструкциях показан Metro, но то же самое относится и к Arduino
После подключения, чтобы начать использовать MPU-6050, вам необходимо установить библиотеку Adafruit_MPU6050. Библиотека доступна через менеджер библиотек Arduino, поэтому мы рекомендуем использовать этот подход.
В Arduino IDE откройте диспетчер библиотек:
Нажмите «Управление библиотеками» . пункт меню, найдите Adafruit MPU6050, выберите библиотеку Adafruit MPU6050 и нажмите «Установить»:
Затем повторите тот же процесс для библиотеки Adafruit BusIO.
Наконец найдите и установите библиотеку Adafruit Unified Sensor
Откройте Файл -> Примеры -> Adafruit MPU6050 -> basic_readings и загрузите на Arduino, подключенную к датчику.
После того как вы загрузили скетч на плату, откройте Serial Monitor (Tools->Serial Monitor) на скорости 115200 бод. Вы должны увидеть ускорение, измерения вращения и температуру, напечатанные следующим образом:
Покачайте датчик или поверните его, и вы увидите, как изменятся показания!
Впервые это руководство было опубликовано 6 ноября 2019 г. Последний раз оно обновлялось 6 ноября 2019 г.
Эта страница (Arduino) последний раз обновлялась 20 марта 2022 г.
Текстовый редактор на базе tinymce.
УВЕДОМЛЕНИЕ О НАЛИЧИИ
Вы успешно подписались на список уведомлений для этого продукта и, следовательно, получите от нас электронное письмо, когда он появится на складе!
В целях безопасности вам было отправлено электронное письмо с подтверждением вашей подписки. Помните, что эта подписка не приведет к тому, что вы будете получать от нас электронные письма о чем-либо, кроме пополнения запасов этого товара.
Если по какой-либо причине вы хотите отказаться от подписки на список уведомлений для этого продукта, вы найдете подробную информацию о том, как это сделать, в электронном письме, которое только что было отправлено вам!
В этом учебном пособии рассказывается, как подключить модуль акселерометра и гироскопа на основе MPU-6050 к Arduino Uno с помощью интерфейса шины I 2 C, а также получить и отобразить показания датчиков из модуля. Ожидается базовое понимание электроники и программирования, а также некоторое знакомство с платформой Arduino. Если вы новичок в платформе Arduino или просто хотите освежить свои знания, ознакомьтесь с нашим руководством Blink: Make An LED Blink On An Arduino Uno, прежде чем приступить к этому. Подробные версии всего исходного кода, использованного в этом руководстве, доступны для ознакомления на GitHub.
Что нужно
- Компьютер на базе Linux, macOS или Windows с USB-портом
- Arduino Uno (доступен для Arduino и SparkFun) с совместимым кабелем USB
- Макетная плата без пайки (доступна на Adafruit и SparkFun)
- 4 перемычки типа «папа-папа» (доступно на Adafruit и Arrow)
- Модуль датчика движения MPU-6050 с интерфейсом I 2 C (доступен на Amazon и SunFounder)
Справочная информация
Модуль датчика MPU6050 содержит шестиосевое (гироскоп + акселерометр) устройство отслеживания движения MEMS MPU-6050 от InvenSense Inc. и обеспечивает показания датчика ускорения, вращения и температуры через интерфейс последовательной шины I 2 C или SPI.Модуль предоставляет более расширенную конфигурацию и функциональность, чем то, что описано в этом руководстве, но для тех, кто хочет узнать больше о его возможностях, пожалуйста, ознакомьтесь с техническим описанием и зарегистрируйте документы карты для устройства MPU-6050 для получения подробной информации.
Моей отладочной платой является Arduino Uno R3, а моим сенсорным модулем является модуль SunFounder MPU6050 для Arduino и Raspberry Pi, 3-осевой гироскоп и 3-осевой ускоритель, которые обмениваются данными через интерфейс последовательной шины I 2 C. Если вы используете разные модели датчиков Arduino или MPU6050, подавляющая часть этого руководства по-прежнему применима, однако могут потребоваться некоторые незначительные изменения.
Построение цепи
У моего сенсорного модуля MPU6050 не было уже прикрепленного к модулю контактного разъема. Однако поставщик включил в комплект поставки как прямые, так и угловые штыревые разъемы. Я припаял прямой контактный разъем к нижней части модуля, чтобы при подключении модуля к макетной плате положительная ось Z была направлена к потолку.
Перед подключением сенсорного модуля к плате Arduino отключите Arduino от питания и компьютера. Это позволяет избежать случайного повреждения проводки.
Прикрепите модуль датчика к макетной плате с помощью контактного разъема.
Подключите контакты VCC и GND сенсорного модуля к контактам питания 5V и GND соответственно на плату Arduino с перемычками.
Для подключения к последовательной шине I 2 C используйте перемычки для подключения контактов SDA и SCL сенсорного модуля к SDA (A4) и SCL (A5) соответственно на Arduino.
Теперь вы можете подключить Arduino к компьютеру с помощью USB-кабеля.
Написание программного обеспечения
Я изучил различные библиотеки, которые можно использовать с сенсорными модулями MPU6050, и остановился на библиотеке I2Cdevlib Джеффа Роуберга из-за ее популярности. Библиотека верхнего уровня I2Cdev предназначена специально для обмена данными по последовательной шине I 2 C. Библиотека также содержит подбиблиотеки, посвященные различным устройствам с поддержкой I 2 C. Одной из них является подбиблиотека MPU6050.
После установки библиотек давайте воспользуемся примером эскиза IMU_Zero из библиотеки MPU6050, чтобы откалибровать модуль с новыми смещениями для встроенных регистров данных акселерометра и гироскопа. Это по существу «сбрасывает» показания датчика на текущую ориентацию модуля. Откройте среду разработки Arduino и выберите «Файл» > «Примеры» > «MPU6050» > «IMU_Zero» в главном меню, чтобы открыть пример скетча. Откройте окно Serial Monitor, чтобы увидеть вывод программы. Следуйте инструкциям в разделе комментариев к скетчу, чтобы откалибровать модуль. После завершения вы должны увидеть что-то вроде следующего.
Это означает, что новые смещения калибровки: XAccel = -906, YAccel = -83, ZAccel = 773, XGyro = 97, YGyro = 34 и ZGyro = 20 для моего сенсорного модуля MPU6050. Поскольку модуль не сохраняет заданные пользователем калибровочные смещения после выключения, запишите смещения для вашего модуля, так как мы включим их позже в нашу программу.
Теперь давайте создадим новый скетч с подходящим названием MPU6050 с кодом, показанным ниже.
Строки 11–13 загружают библиотеки, необходимые для связи с сенсорным модулем MPU6050 по шине I 2 C.
Строка 19 создает экземпляр класса MPU6050 как mpu6050, который мы будем использовать в нашей программе для связи с модулем. Если вы не используете адрес I 2 C по умолчанию 0x68, добавьте альтернативный адрес 0x69 в качестве аргумента.
В строках 22–24 объявляются переменные, в которых будут храниться необработанные данные датчиков, соответствующие 16-битным регистрам данных со знаком, используемым в модуле.
В строке 25 объявляется 7-байтовый символьный буфер (строка), который будет использоваться в сочетании с функцией dtostrf(), используемой в нашей программе для отображения чисел с плавающей запятой в виде красиво отформатированных строк. Значение 7 использовалось, чтобы учесть размер нашей самой длинной строки 6 и нулевой символ в конце.
Строки 29–30 инициализируют шину I 2 C и стандартную последовательную шину.
Строка 31 инициализирует сам модуль датчика. Частью этой инициализации является библиотека MPU6050, устанавливающая полный диапазон акселерометра на ±2g и гироскопа на ±250°/сек.
В строках 34–35 используется библиотечная функция testConnection(), чтобы сообщить нам, было ли достигнуто правильное подключение к сенсорному модулю.
В строке 40 используется функция setMPU6050Offsets(), определенная позже, для загрузки новых калибровочных смещений в наш сенсорный модуль. Замените мои конкретные смещения теми, которые вы определили и записали ранее во время калибровки с помощью примерного скетча IMU_Zero.
Строка 51 выводит данные датчика на последовательный монитор с помощью функции printMPU6050Values(), определенной позже.
Строка 52 создает задержку в 1 секунду между показаниями датчика.
Строки 57–65 определяют нашу функцию printMPU6050Values(), которая берет необработанные данные регистра, преобразует их в удобочитаемый формат и выводит значения в Serial Monitor. Поскольку диапазон полной шкалы акселерометра установлен на ±2g, необработанные 16-битные значения регистра делятся на 16384 (2^16 = 65 536, разделенные на ±2 = 4), чтобы получить значения в g. Точно так же необработанные значения гироскопа делятся на 131 (2 ^ 16 = 65 536, деленное на ± 250 = 500), чтобы получить значения в °/сек. Формула для температуры была получена из раздела 4.18 карты регистров устройства MPU-6050. Функция dtostrf() преобразует значение с плавающей запятой в первом аргументе в отформатированную строку ASCII и помещает ее в переменную в последнем аргументе (буфере), используя общую длину символа, определенную вторым аргументом, и количество десятичных знаков в строке. третий аргумент.
Строки 69–77 определяют нашу функцию printMPU6050Offsets(), которая получает и печатает текущие значения смещения калибровки.
Строки 81–90 определяют нашу функцию setMPU6050Offsets(), которая загружает новые значения смещения калибровки в модуль датчика, а также печатает старое и новое смещения.
Загрузите и запустите скетч на Arduino. Вы должны увидеть значения датчика, отображаемые в последовательном мониторе, как показано ниже.
Если калибровочные смещения установлены правильно, а модуль лежит на плоской поверхности, вы должны увидеть значения ускорения около 0,0 g для осей X и Y, 1,0 g для оси Z и около 0,0 °/с для всех углов вращения. оси. Если это не так, вы можете повторить процедуру калибровки.
Как только ваши числа будут выглядеть хорошо, поэкспериментируйте с сенсорным модулем, перемещая его в трехмерном пространстве и наблюдая за отображением различных значений.
Обзор
В этом руководстве мы узнали, как подключить модуль датчика акселерометра и гироскопа на базе MPU-6050 к макетной плате Arduino Uno с помощью интерфейса шины I 2 C, откалибровать модуль, а также получить и отобразить ускорение, вращение и температуру. показания датчика.
Окончательный исходный код этого руководства находится на GitHub.
Спасибо, что присоединились ко мне в этом путешествии. Надеюсь, вам понравилось. Пожалуйста, поделитесь своими мыслями в разделе комментариев ниже.
Читайте также: