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

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

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

Каждый датчик полезен сам по себе, но при их объединении вы получаете невероятно точные данные о положении и ориентации объекта в 3D-пространстве. Именно здесь на помощь приходит MPU6050.

MPU6050 — это компактный, но мощный модуль, объединяющий гироскоп и акселерометр в одном чипе. Эта комбинация позволяет измерять вращение по всем трём осям (X, Y и Z), статическое ускорение от гравитации и динамическое ускорение от движения, ударов или вибраций.

В этом руководстве вы узнаете всё, что нужно знать о MPU6050. Мы рассмотрим принцип работы датчика, разберём подключение к Arduino, напишем код для чтения данных и даже визуализируем данные с помощью Serial Plotter.

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

Как работает акселерометр?

Чтобы понять принцип работы акселерометров, представьте маленький прозрачный куб с шариком, подвешенным в его центре на пружинах, соединённых с каждой внутренней стенкой — передней, задней, левой, правой, верхней и нижней.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Когда куб неподвижен, шарик остаётся идеально по центру. Но как только куб начинает двигаться или ускоряться в каком-либо направлении, шарик слегка отстаёт из-за инерции (свойства объектов сопротивляться изменениям движения). Это отставание растягивает одни пружины больше других, и, измеряя натяжение каждой пружины, можно определить направление и силу приложенного воздействия.

Акселерометры часто выражают силу в единицах g — 1g, 2g или 3g. Прежде чем идти дальше, давайте разберёмся, что именно означает «1g».

Когда мы говорим «1g», мы имеем в виду ускорение свободного падения на поверхности Земли — примерно 9,8 м/с². Даже когда ваш телефон просто лежит на столе, он всё равно ощущает силу 1g, направленную прямо вниз из-за гравитации. Важно знать, что акселерометры не различают гравитационное ускорение и ускорение от фактического движения — они просто определяют полное ускорение во всех направлениях.

Возвращаясь к нашему примеру, представьте куб, плавающий в открытом космосе, в невесомости. Шарик просто парил бы неподвижно в центре. Поскольку нет ни гравитации, ни движения, пружины не растягивались бы, и акселерометр показывал бы 0g по всем трём осям — X, Y и Z.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Если вы резко переместите куб влево, шарик отстанет и надавит на правую пружину. Акселерометр определит силу вправо, что означает, что куб ускоряется влево. В этом случае вы увидите ускорение 1g по оси X, хотя гравитации по-прежнему нет — это исключительно от движения.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Посмотрим, что произойдёт, когда мы поместим куб на Земле. Если поставить куб на стол и оставить его, гравитация тянет шарик вниз. Движения нет, но одна лишь сила тяжести заставляет датчик показывать 1g по оси Z. Оси X и Y по-прежнему показывают 0g, так как в этих направлениях сила не действует.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Ситуация становится интереснее, когда вы наклоняете куб. Представьте, что он наклонён под углом 45 градусов между осями Z и X. Гравитация по-прежнему тянет прямо вниз к Земле, но из-за наклона куба это притяжение распределяется между направлениями Z и X. Акселерометр определяет это и показывает примерно 0,71g по обеим осям. Значение 0,71 не случайно — это косинус 45 градусов, умноженный на 1g. Шарик фактически тянет две пружины одинаково, поэтому оба датчика X и Z регистрируют силу.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Хотя модель «куб-и-шарик» не является точным описанием устройства реальных акселерометров, она помогает понять, почему акселерометры измеряют силы в единицах g, почему они показывают 1g в направлении Z в состоянии покоя и какие показания можно ожидать при различных углах наклона.

В реальном мире акселерометры создаются с использованием технологии МЭМС (микроэлектромеханические системы). Давайте рассмотрим, как работает МЭМС-акселерометр.

Как работает МЭМС-акселерометр?

МЭМС-акселерометр — это по сути миниатюрная механическая система, изготовленная непосредственно на кремниевом чипе.

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

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

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

Встроенная на чипе схема обнаруживает это изменение ёмкости и преобразует его в электрический сигнал. Затем схема вычисляет, какое именно ускорение произошло, на основе изменения.

Как работает гироскоп?

В то время как акселерометры измеряют линейное ускорение, гироскопы измеряют угловое вращение. Они делают это, обнаруживая особую силу, известную как эффект Кориолиса.

Эффект Кориолиса

Эффект Кориолиса описывает, что происходит, когда что-то движется, и вы одновременно пытаетесь вращать это. Представьте, что `вы на карусели бросаете мяч другу `_. Хотя вы бросили его прямо, мяч искривляется, потому что карусель вращается под ним. Эта искривляющая сила и есть «эффект Кориолиса».

В технических терминах, когда масса (m) движется в одном направлении с определённой скоростью (v), и вы вращаете всю систему с угловой скоростью (Omega, красная стрелка), эффект Кориолиса создаёт силу (жёлтая стрелка), которая толкает массу в сторону, перпендикулярно её исходному пути. Чем сильнее вращение, тем сильнее это боковое воздействие.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

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

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Как работает МЭМС-гироскоп?

МЭМС-гироскоп — это крошечный датчик, использующий тот же принцип. Внутри находится центральная часть, называемая «пробной массой», состоящая из четырёх частей (M1, M2, M3 и M4). Эти части находятся в постоянном колебательном движении, чтобы реагировать на эффект Кориолиса при вращении устройства. Они перемещаются внутрь и наружу одновременно с определённой частотой в горизонтальной плоскости.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

При вращении устройства сила Кориолиса действует на эти движущиеся массы и изменяет их вибрацию с горизонтальной на вертикальную.

Существует три режима в зависимости от оси, вдоль которой применяется угловое вращение.

При угловом вращении вдоль оси X массы M1 и M3 будут перемещаться вверх и вниз из плоскости под действием эффекта Кориолиса.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

При угловом вращении вдоль оси Y массы M2 и M4 будут перемещаться вверх и вниз из плоскости.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

При угловом вращении вдоль оси Z массы M2 и M4 будут перемещаться горизонтально в противоположных направлениях.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

В каждом режиме, когда возникает эффект Кориолиса, непрерывное движение пробных масс создаёт измеримое изменение ёмкости (delta C). Чувствительные элементы внутри гироскопа обнаруживают это изменение и преобразуют его в электрический сигнал напряжения. Этот сигнал сообщает устройству, насколько и в каком направлении оно вращается.

Для справки: вот как выглядит реальная МЭМС-структура 3-осевого цифрового гироскопа под микроскопом. Спасибо `Adam McCombs `_ за это изображение декапсулированного МЭМС-гироскопа L3GD20HTR.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Обзор оборудования модуля MPU6050

В основе модуля лежит маломощный, недорогой 6-осевой чип отслеживания движения MPU6050. Он объединяет 3-осевой гироскоп (для измерения вращения), 3-осевой акселерометр (для измерения ускорения) и процессор цифровой обработки движения (DMP) в одном крошечном корпусе размером 4×4 мм.

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

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Модуль оснащён встроенным стабилизатором напряжения LD3985, поэтому его можно безопасно подключать к 5V микроконтроллерам, таким как Arduino, не беспокоясь о повреждении датчика.

Одна из лучших особенностей MPU6050 — его низкое энергопотребление. Во время активных измерений он потребляет менее 3,6 мА тока, а в режиме бездействия — всего 5 мкА. Это делает его идеальным для устройств с батарейным питанием, таких как носимые устройства или роботы.

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

Измерение ускорения

MPU6050 может измерять ускорение в четырёх программируемых диапазонах: ±2g, ±4g, ±8g и ±16g. Меньшие диапазоны, такие как ±2g, обеспечивают более точные измерения малых движений, а большие диапазоны, такие как ±16g, позволяют измерять более интенсивные силы.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

MPU6050 имеет три выделенных 16-битных аналого-цифровых преобразователя для одновременного измерения ускорения по осям X, Y и Z.

Измерение вращения

MPU6050 может измерять угловое вращение в четырёх программируемых диапазонах: ±250°/с, ±500°/с, ±1000°/с и ±2000°/с.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Чип также имеет три дополнительных 16-битных преобразователя для одновременной выборки вращения по всем трём осям. Вы можете настроить частоту измерений — от 3,9 выборок в секунду до впечатляющих 8000 выборок в секунду.

Измерение температуры

MPU6050 включает датчик температуры, способный измерять температуру от –40°C до 85°C с точностью около ±1°C.

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

Интерфейс I2C

MPU6050 связывается с Arduino через интерфейс I2C. Он может использовать один из двух I2C-адресов: 0x68 и 0x69. Это полезно, если вы хотите подключить два модуля MPU6050 на одну шину I2C или если другой датчик уже использует один из этих адресов.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Вывод ADO на модуле определяет, какой I2C-адрес используется. Подтяжка этого вывода к LOW устанавливает адрес 0x68, к HIGH — 0x69. Поскольку вывод уже подключён к земле через встроенный подтягивающий резистор 4,7 кОм, оставление его неподключённым устанавливает адрес 0x68 по умолчанию. Если вы хотите переключиться на 0x69, просто подтяните вывод ADO к HIGH.

Вспомогательный интерфейс I2C

MPU6050 имеет вспомогательную шину I2C для подключения дополнительных датчиков непосредственно к модулю MPU6050. Доступ к этой шине осуществляется через два вывода — XDA и XCL.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Чаще всего это используется для добавления магнитометра, который измеряет магнитные поля по трём осям. Сам MPU6050 обеспечивает 6 степеней свободы (DOF) — три от акселерометра и три от гироскопа. При добавлении магнитометра их число увеличивается до 9 DOF, обеспечивая проекту гораздо более детальную информацию о его положении и ориентации в пространстве.

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

Вот технические характеристики:

Рабочее напряжение

5V (типичное)

Диапазон акселерометра

±2g, ±4g, ±8g, ±16g

Диапазон гироскопа

±250°/s, ±500°/s, ±1000°/s, ±2000°/s

Диапазон температур

-40 to +85°C

Максимальное абсолютное ускорение

До 10 000g

Для получения дополнительной информации обратитесь к техническому описанию ниже.

Распиновка модуля MPU6050

Модуль MPU6050 имеет восемь выводов. Вот назначение каждого:

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

VCC — вывод питания. Подключите его к выводу 5V на Arduino.

GND — вывод заземления. Подключите его к GND Arduino.

SCL — вывод тактирования для интерфейса I2C.

SDA — вывод данных для интерфейса I2C.

XDA — вывод данных для вспомогательного интерфейса I2C. Через него можно подключить дополнительные датчики, например магнитометр, напрямую к MPU6050.

XCL — вывод тактирования для вспомогательного интерфейса I2C. Он работает совместно с XDA для связи с дополнительными внешними датчиками.

AD0 — позволяет выбрать один из двух возможных I2C-адресов MPU6050: 0x68 или 0x69. Это полезно при подключении двух модулей MPU6050 на одну шину I2C или если другой датчик уже использует один из адресов. При подтяжке AD0 к LOW адрес становится 0x68, при подтяжке к HIGH — 0x69. Поскольку вывод подключён к земле через подтягивающий резистор 4,7 кОм, оставление его неподключённым автоматически устанавливает адрес 0x68.

INT — выходной вывод прерывания. Он позволяет MPU6050 генерировать прерывание при обнаружении определённых событий, таких как жесты, нажатия, тряска, панорамирование, масштабирование или прокрутка.

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

Теперь давайте подключим модуль MPU6050 к Arduino.

Начните с подключения питания. Подключите вывод VCC MPU6050 к выводу 5V Arduino. Затем подключите вывод GND к одному из выводов заземления Arduino.

Далее нужно подключить выводы связи I2C. Помните, на разных платах Arduino выводы I2C расположены по-разному, поэтому убедитесь в правильности подключения для вашей конкретной платы. Если вы используете Arduino с компоновкой R3, выводы SDA и SCL находятся на разъёме рядом с выводом AREF. Эти же выводы обозначены как A4 (SDA) и A5 (SCL).

Вот краткая справочная таблица подключений:

MPU6050 ModuleArduino
VCC5V
GNDGND
SCLSCL or A5
SDASDA or A4

На схеме показано, как именно всё подключить:

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Установка библиотеки

Подготовить MPU6050 к работе с Arduino несложно, особенно с полезными библиотеками. Популярная из них — Adafruit MPU6050 Library.

Для установки библиотеки:

  1. Сначала откройте Arduino IDE. Затем нажмите на значок Менеджера библиотек на левой боковой панели.

  2. Введите «mpu6050» в строке поиска для фильтрации результатов.

  3. Найдите Adafruit MPU6050 Library от Adafruit.

  4. Нажмите кнопку Install, чтобы добавить её в Arduino IDE.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Поскольку Adafruit MPU6050 Library зависит от других библиотек, вам будет предложено установить зависимости, включая `Adafruit Unified Sensor Driver `_ и `Adafruit Bus IO Library `_.

Когда появится это сообщение, просто нажмите INSTALL ALL, чтобы всё было настроено правильно.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Пример кода Arduino

Этот пример показывает, как использовать датчик MPU6050 с Arduino для чтения линейного ускорения, углового вращения и температуры.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(115200);

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");

  // set accelerometer range to +-8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

  // set gyro range to +- 500 deg/s
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);

  // set filter bandwidth to 21 Hz
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

  delay(100);
}

void loop() {
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  /* Print out the values */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");

  Serial.println("");
  delay(500);
}

После загрузки кода на Arduino откройте монитор последовательного порта и установите скорость 115200 бод. Вы увидите информацию о линейном ускорении, угловом вращении и температуре на экране. Попробуйте перемещать датчик и наблюдайте, как изменяются числа.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Объяснение кода:

В начале скетча мы подключаем все необходимые библиотеки.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Далее создаём объект mpu, представляющий наш датчик. Этот объект даёт доступ ко всем функциям управления и чтения MPU6050.

Adafruit_MPU6050 mpu;

В секции setup мы сначала инициализируем последовательную связь, чтобы видеть вывод в мониторе последовательного порта.

Затем вызываем функцию begin() для запуска датчика MPU6050. Если датчик не подключён правильно, выводим сообщение об ошибке и программа останавливается. Если всё работает, выводим «MPU6050 Found!».

Serial.begin(115200);

// Try to initialize!
if (!mpu.begin()) {
        Serial.println("Failed to find MPU6050 chip");
        while (1) {
          delay(10);
        }
}

После этого настраиваем чувствительность измерений. Для этого используются три функции:

Функция setAccelerometerRange() определяет максимальное ускорение, которое может измерить датчик. Она принимает следующие значения:

  • MPU6050_RANGE_2_G — диапазон ±2g (по умолчанию)

  • MPU6050_RANGE_4_G — диапазон ±4g

  • MPU6050_RANGE_8_G — диапазон ±8g

  • MPU6050_RANGE_16_G — диапазон ±16g

Функция setGyroRange() устанавливает максимальную скорость вращения, которую может определить датчик. Она принимает следующие значения:

  • MPU6050_RANGE_250_DEG — диапазон 250 градусов/с (по умолчанию)

  • MPU6050_RANGE_500_DEG — диапазон 500 градусов/с

  • MPU6050_RANGE_1000_DEG — диапазон 1000 градусов/с

  • MPU6050_RANGE_2000_DEG — диапазон 2000 градусов/с

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

  • MPU6050_BAND_260_HZ — полоса 260 Гц (согласно документации, это отключает фильтр)

  • MPU6050_BAND_184_HZ — полоса 184 Гц

  • MPU6050_BAND_94_HZ — полоса 94 Гц

  • MPU6050_BAND_44_HZ — полоса 44 Гц

  • MPU6050_BAND_21_HZ — полоса 21 Гц

  • MPU6050_BAND_10_HZ — полоса 10 Гц

  • MPU6050_BAND_5_HZ — полоса 5 Гц

В этом примере мы устанавливаем диапазон акселерометра ±8G, диапазон гироскопа ±500°/с и полосу пропускания фильтра 21 Гц.

mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

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

В секции loop мы собираем данные с датчика и выводим их в монитор последовательного порта. Для этого создаём три переменные — a, g и temp — для хранения данных акселерометра, гироскопа и датчика температуры. Эти переменные создаются с использованием специального типа структуры sensors_event_t, предназначенного для хранения различных данных датчиков в одном месте. Подробности об этой структуре можно найти на `GitHub `_.

sensors_event_t a, g, temp;

Затем вызываем функцию getEvent(). Она считывает новый набор значений с датчика, преобразует их в правильные единицы и сохраняет в наших переменных.

mpu.getEvent(&a, &g, &temp);

Наконец, выводим все данные в монитор последовательного порта.

Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");

Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");

Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");

Пример кода Arduino 2 — Визуализация данных MPU6050

Просто смотреть на числа MPU6050 может быть не очень полезно при попытке понять реакцию датчика на движение. Поэтому отличная идея — использовать Serial Plotter — встроенный инструмент Arduino IDE, который помогает визуализировать данные в реальном времени в виде осциллограмм.

Для этого используйте обновлённый код ниже. Скомпилируйте и загрузите скетч на Arduino. Затем перейдите в верхнее меню и выберите Tools > Serial Plotter. Убедитесь, что скорость в Serial Plotter установлена на 115200.

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

void setup(void) {
  Serial.begin(115200);

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  // set accelerometer range to +-8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

  // set gyro range to +- 500 deg/s
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);

  // set filter bandwidth to 21 Hz
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);

  delay(100);
}

void loop() {
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  /* Print out the values */
  Serial.print(a.acceleration.x);
  Serial.print(",");
  Serial.print(a.acceleration.y);
  Serial.print(",");
  Serial.print(a.acceleration.z);
  Serial.print(", ");
  Serial.print(g.gyro.x);
  Serial.print(",");
  Serial.print(g.gyro.y);
  Serial.print(",");
  Serial.print(g.gyro.z);
  Serial.println("");

  delay(10);
}

Вы должны увидеть осциллограмму, похожую на показанную ниже, при перемещении модуля вверх-вниз по оси Z.

Interface MPU6050 Accelerometer and Gyroscope Sensor with Arduino

Объяснение кода:

Большая часть этого скетча работает точно так же, как предыдущий пример. Мы подключаем те же библиотеки, создаём объект датчика, инициализируем всё в setup и читаем данные в loop. Однако есть несколько ключевых отличий, которые делают эту версию совместимой с Serial Plotter.

  1. На этот раз мы не выводим показания температуры. Мы концентрируемся только на данных ускорения и вращения.

  2. Вместо вывода меток типа «Acceleration X:» перед каждым числом мы просто выводим необработанные значения, разделённые запятыми. Это создаёт список с разделителями-запятыми. Serial Plotter требует данные в таком формате, чтобы знать, как рисовать каждое значение отдельной линией на графике.

  3. Мы считываем данные гораздо чаще. Вместо ожидания 500 миллисекунд между показаниями мы ждём всего 10 миллисекунд. Эта более высокая частота дискретизации делает график гораздо более плавным и позволяет видеть изменения в реальном времени при перемещении датчика.

В функции loop мы получаем показания датчика, выводим все шесть значений (три для ускорения и три для вращения) с запятыми между ними, а затем ждём всего 10 миллисекунд перед повторением.