Gy 521 arduino подключение

Содержание

Progetto: Gestione di due Servomotori utilizzando un modulo GY-521

Questo progetto è un esempio pratico per mostrarvi come sia abbastanza semplice interfacciare il modulo GY-521 con Arduino ed utilizzarlo per una specifica applicazione.  Utilizzerò solo i valori degli assi dell’accelerometro e calcolerò gli angoli Pitch e Roll (come descritto nel mio tutorial) per far ruotare i due servomotori da 0° a 179° in base alla posizione dell’accelerometro. Prima di proseguire consiglio la visione del seguente video.

Breadboard

Come si può notare dallo schema elettrico ho alimentato i due servomotori con un’alimentazione esterna da 5V. Questo perchè i miei servo insieme consumano più di 500 mA. Inoltre, 500 mA è anche la corrente massima erogabile da una classica porta USB 2.0. Ora passiamo allo sketch da caricare su Arduino

// MPU6050 & Servo
// https://www.giuseppecaccavale.it/
// Giuseppe Caccavale

#include <SPI.h>
#include <Wire.h>
#include <Servo.h>
#define MPU 0x68  // I2C address of the MPU-6050

Servo ServoX, ServoY;
double AcX, AcY, AcZ;
int Pitch, Roll;

void setup() {
  Serial.begin(9600);
  ServoX.attach(8);
  ServoY.attach(9);
  init_MPU(); // Inizializzazione MPU6050
}

void loop()
{
  FunctionsMPU(); // Acquisisco assi AcX, AcY, AcZ.

  Roll = FunctionsPitchRoll(AcX, AcY, AcZ);   //Calcolo angolo Roll
  Pitch = FunctionsPitchRoll(AcY, AcX, AcZ);  //Calcolo angolo Pitch

  int ServoRoll = map(Roll, -90, 90, 0, 179);
  int ServoPitch = map(Pitch, -90, 90, 179, 0);

  ServoX.write(ServoRoll);
  ServoY.write(ServoPitch);


  Serial.print("Pitch: "); Serial.print(Pitch);
  Serial.print("\t");
  Serial.print("Roll: "); Serial.print(Roll);
  Serial.print("\n");

}

void init_MPU() {
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  delay(1000);
}

//Funzione per il calcolo degli angoli Pitch e Roll
double FunctionsPitchRoll(double A, double B, double C) {
  double DatoA, DatoB, Value;
  DatoA = A;
  DatoB = (B * B) + (C * C);
  DatoB = sqrt(DatoB);

  Value = atan2(DatoA, DatoB);
  Value = Value * 180 / 3.14;

  return (int)Value;
}

//Funzione per l'acquisizione degli assi X,Y,Z del MPU6050
void FunctionsMPU() {
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU, 6, true); // request a total of 14 registers
  AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
}

Spero vi sia piaciuto questo tutorial, in ogni caso vi ringrazio per la lettura. Se avete problemi non esitate a lasciare un commento. A presto, ciao!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комплектующие

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

Распиновка модуля Arduino MPU 6050

Так, в нём имеются:

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

Все эти компоненты и составляют Arduino гироскоп, позволяя ему выполнять свои базовые функции. Но как же запрограммировать систему, если вы до этого не имели опыта работа с данными МК?

Гоночные полетные контроллеры

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

Naze32, также на базе этого контроллера есть SP Racing F3:

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

Гироскоп и акселерометр определяют текущее расположение дрона в пространстве. Барометр определяет высоту по давлению (чтобы удерживать высоту, например), компас для удержания направления полета.

На сегодня, полетные контроллеры серии F4 являются самыми популярными полетными контроллерами для мини и гоночных квадрокоптеров, так как прекрасно работают с такими программами, как CleanFlight, Betaflight и Raceflight. На их смену уже выходит серия F7, становясь все более популярной.

Разработка прошивок для полетного контроллера F3 уже прекратилась из-за ограничения ресурсов, поэтому выбирайте для покупки F4 или F7:

Betaflight прекращает разработку ПО для полетных контроллеров F3 c STM32F3

Также еще два популярных контроллера:

KISS – прошивать своей прошивкой нельзя. Имеет графический интерфейс с минимумом настроек.

LUX – такой же гибкий, как Naze32, но все же уступает ему. Прошивать можно.

Wiring layout of GY-521 Example

Fritzing file that shows how to wire the GY-521 breakout board to an Arduino Uno.

In this tutorial we will make use only of the first four pins: VCC, GND, SDA, and SCL. First, we connect the module’s VCC to the Arduino’s 5V pin. Then, the module’s GND is connected to one of the Arduino’s GND pins.Next, we have to set up the I2C connection between the module and the Arduino. Most Arduino Uno variants have an SCL and SDA pin. If you have such an Arduino Uno, just connect SCL to SCL and SDA to SDA.If you can’t find an SCL and SDA pin on your Arduino, you have to use other pins. Unfortunately, you cannot use just any pin. For each type of Arduino, SCL and SDA are tied to different pins:

  • Arduino Uno, Arduino Ethernet, Arduino Nano: A4 (SDA), A5 (SCL)
  • Arduino Mega2560: 20 (SDA), 21 (SCL)
  • Arduino Leonardo: 2 (SDA), 3 (SCL)
  • Arduino Due: 20 (SDA), 21 (SCL)

So, if you have an Arduino Uno without SCL and SDL pins, then connect the Arduino’s A4 pin to the module’s SDA pin. Next, connect the Arduino’s A5 pin to the module’s SCL pin.

Гироскоп и акселерометр полетного контроллера

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

Акселерометр выполняет роль стабилизатора в пространстве, есть даже такой режим полета — «Режим стабилизации», при котором квадрокоптер невозможно будет перевернуть в воздухе и он всегда будет держаться параллельно земле (если просто отпустить стики на пульте). Опытные пилоты почти всегда летают в режиме АКРО, поэтому они отключают акселерометр или используют его крайне редко.

Гироскоп же выполняет роль определения положения квадрокоптера в пространстве.

Какие самые популярные гироскопы используются в полетных контроллерах? Смотрим таблицу ниже:

Гироскоп Протокол коммуникации (BUS) Макс. частота работы гироскопа
MPU6000 SPI, i2c 8K
MPU6050 i2c 4K
MPU6500 SPI, i2c 32K
MPU9150* i2c 4K
MPU9250* SPI, i2c 32K
ICM20602 SPI, i2c 32K
ICM20608 SPI, i2c 32K
ICM20689 SPI, i2c 32K

MPU9150 — это MPU6050 со встроенным магнитометром AK8975, а MPU9250 — это MPU6500 и тоже с магнитометром.

Номер и название гироскопа можно найти на самом чипе, например это — MPU-6000:

Назначение связки гироскоп и акселерометр

Для начала давайте разберёмся, зачем Arduino mpu 6050 (Gy-521) вообще нужен и что собой представляет гироскоп-акселерометр в целом. Такой датчик все мы видели в смартфонах, и там он выполняет следующие функции:

  1. Позволяет замерять шаги. Акселерометр способен отслеживать резкие движения устройства, а в зависимости от его настройки и чувствительности, считать некоторые из них за шаг.
  2. Измеряет поворот экрана. Здесь уже оба устройства работают в паре. Ведь когда вы поворачиваете смартфон набок, картинка должна изменить свою ориентацию для пользователя, и лишь с помощью гироскопа удаётся определить угол наклона, под которым ПО это должно будет сделать.
  3. Компас, карты и навигация. Акселерометр с гироскопом позволяют определить ориентацию устройства в пространстве, что необходимо в различных приложениях для мобильной навигации.

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

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

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

Смотрите по теме: Подключаем гироскоп-акселерометр (MPU-6050) к плате Arduino

Чаще всего гироскоп для Ардуино применяется в системах автоматизации под так называемые «смартхаусы» (умные дома — прим. ред.), являясь своеобразным переключателем. Передавая определённые данные в МК, который затем отправляет их по блютуз-модулю к другому устройству, он может управлять всей техникой в доме.

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

Arduino and MPU6050

Let’s take a look how we can connect and read the data from the MPU6050 sensor using the Arduino. We are using the I2C protocol for communication with the Arduino so we need only two wires for connecting it, plus the two wires for powering.

You can get the components needed for this Arduino Tutorial from the links below:

  • MPU6050 IMU …………………………..…. Amazon / Banggood / AliExpress
  • Arduino Board ………………………….….. Amazon / Banggood / AliExpress
  • Breadboard and Jump Wires ………… Amazon / Banggood / AliExpress

Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.

Step 7: Check Results in Serial Port

once the upload is done, its time to open up the serial Monitor and observe output:

Don’t forget to match the serial port with the baud rate we defined in start of code which is 115200

If our wiring and hardware is proper, we should get values of each axis on Serial port for both Raw and Normalized gyroscopic change in sensor.

Initialize MPU6050
 * Sleep Mode:        Disabled
 * Clock Source:      PLL with X axis gyroscope reference
 * Gyroscope:         2000 dps
 * Gyroscope offsets: 0 / 0 / 0

 Xraw = -65.00 Yraw = 25.00 Zraw = -29.00
 Xnorm = 0.00 Ynorm = 0.00 Znorm = 0.00
 Xraw = -62.00 Yraw = 20.00 Zraw = -32.00
 Xnorm = 0.00 Ynorm = 0.00 Znorm = 0.00
 Xraw = -64.00 Yraw = 25.00 Zraw = -30.00
 Xnorm = 0.00 Ynorm = 0.00 Znorm = 0.00
 Xraw = -66.00 Yraw = 23.00 Zraw = -29.00
 Xnorm = 0.00 Ynorm = 0.00 Znorm = 0.00
 Xraw = -67.00 Yraw = 20.00 Zraw = -33.00
 Xnorm = 0.00 Ynorm = 0.00 Znorm = 0.00
 Xraw = -64.00 Yraw = 22.00 Zraw = -31.00
 Xnorm = 0.00 Ynorm = 0.00 Znorm = 0.00

here is the logs of what we got on Serial Port.

Preparing Arduino IDE

We’ll program the ESP32 board using Arduino IDE. So, make sure you have the ESP32 add-on installed. Follow the next tutorial:

Install the ESP32 Board in Arduino IDE

If you prefer using VS Code + PlatformIO IDE, follow the next guide:

Getting Started with VS Code and PlatformIO IDE for ESP32 and ESP8266

Installing Libraries

There are different ways to get readings from the sensor. In this tutorial, we’ll use the Adafruit MPU6050 library. To use this library you also need to install the Adafruit Unified Sensor library and the Adafruit Bus IO Library.

Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.

Type “adafruit mpu6050” on the search box and install the library.

Then, search for “Adafruit Unified Sensor”. Scroll all the way down to find the library and install it.

Finally, search for “Adafruit Bus IO” and install it.

After installing the libraries, restart your Arduino IDE.

If you’re using VS Code with PaltformIO, copy the following lines to the platformio.ini file.

Процессор полетного контроллера

От процессора будет зависеть то, насколько быстро будут обрабатываться поступающие к нему данные. Процессоры делятся по поколениям: F1, F3, F4, F6. Вот такие странные поколения, где пропущены 2-е и 6-е поколения. Отличаются они частотой работы и архитектурой:

  • F1 — 72MHz;
  • F3 — 72MHz;
  • F4 — 168MHz;
  • F7 — 216MHz.

Сейчас все новые полетные контроллеры поставляются с процессором 7-го поколения, так как обрабатывать фильтры и PID становится все труднее, прогресс шагает километровыми шагами в этой сфере. Но у многих пилотов ПК на процессорах 3-го поколения, так как F3 был самым (да и остается) массовым поколением со стабильной работой.

Модуль ИК приемника KY-022

Модуль приемника инфракрасного излучения имеет габариты 24 х 15 мм и массу 1,6 г и представляет собой печатную плату на которой располагается сам приемный модуль и красный светодиод с добавочным сопротивлением .

Модуль имеет три вывода: центральный немаркированный – питание +5В, контакт «-» — общий, контакт «S» — информационный. Потребляемый ток 200 мкА в режиме ожидания, 500 мкА с работающим светодиодом.

В момент приема инфракрасного сигнала светодиод на плате мигает, что достаточно удобно при отладке конструкций на макетной плате.

Для полноценного использования ИК-приемника можно воспользоваться библиотекой IRremote . Для примера иллюстрирующего работу данного устройства можно использовать программу IR. В качестве источника сигналов можно использовать пульт дистанционного управления от телевизора.

Коды сигналов пульта телевизора

Аналогично модуль может принимать сигналы от пульта дистанционного управления светодиодной лампой.

При помощи этого датчика не сложно организовать многокомандное дистанционное управление в пределах прямой видимости, при расстоянии между приемником и передатчиком около 3-5 м.

Расчет угла с помощью гироскопа mpu6050

Данные с гироскопа имеют вид:

В дальнейшем в статье мы будем рассматривать все на примере оси x. Для расчета угла необходимо проинтегрировать переменную “gyro_x_scalled”

является количеством итераций

Так же стоит отметить, что на каждом временном промежутке цикла значение “gyro_x_scalled” остается одинаковым. Существует насколько подходов и методов интегрирования для компенсации и этой погрешности, но мы их детально не будем рассматривать.

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

Мы предполагаем, что начальные углы относительно осей x, y, z после калибровки равны 0, 0 и 90 градусов соответственно, так что для итерации n=0:

Значение T (время каждой итерации) и динамика самого гироскопа (как быстро и насколько нелинейно изменяются углы), значительным образом влияет на точность расчетов. Чем медленнее изменяются углы и чем меньше промежуток между итерациями, тем более точным будет результат. В этом смысле жаль, что платы Arduino достаточно медленные, кристаллы у них работают с частотой 16 МГц и снятие измерений каждые 10-20 мс становится достаточно затруднительным (учитывая тот факт, что процессор занят не только расчетом угла, но и другими параллельными задачами). Мы можем использовать T в виде переменной или константы, я, лично, предпочитаю использовать константу для каждого цикла. В проекте динамические факторы не учитывались, просто использовалась частота итераций с разрывом в 20 мс (0.02 с).

Wiring MPU6050 Module with Arduino

Connections are fairly simple. Start by connecting VCC pin to the 5V output on the Arduino and connect GND to ground.

Now we are remaining with the pins that are used for I2C communication. Note that each Arduino Board has different I2C pins which should be connected accordingly. On the Arduino boards with the R3 layout, the SDA (data line) and SCL (clock line) are on the pin headers close to the AREF pin. They are also known as A5 (SCL) and A4 (SDA).

If you are using a different Arduino board, please refer below table.

SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

The following diagram shows you how to wire everything.

2Работа с цифровым акселерометром ADXL345 по интерфейсу SPI

Акселерометр ADXL345 поддерживает 3- и 4-проводные варианты интерфейса SPI. Мы рассмотрим только 4-проводное подключение. Кроме того, акселерометр работает в режиме 3 интерфейса SPI (помните, мы уже обсуждали: CPOL=1, CPHA=1). Диаграмма, показывающая обмен с акселерометром ADXL345 по 4-проводному интерфейсу SPI:

Работа с ADXL345 по SPI

Здесь бит MB – это признак того, что мы собираемся читать много байтов за раз (если бит установлен в 1). Для тестирования работы с SPI устройствами и быстрого освоения порядка обмена с ними я обычно использую отладочную плату с микросхемой FT2232H. Эта микросхема поддерживает множество режимов, в том числе I2C и SPI. Управление работой микросхемы FT2232H – с помощью программы SPI via FTDI, о которой я уже неоднократно рассказывал.

Подключим акселерометр к отладочной плате и прочитаем регистр DEVID, в котором хранится постоянное значение-идентификатор акселерометра ADXL345. Значение идентификатора должно быть 0xE5.

ADXL345 соединён с отладочной платой на FT2232H

Не забудем перед чтением записать команду 0x80, которая укажет акселерометру, что мы собираемся читать, начиная с регистра по адресу 0x0 (см. диаграмму выше, рисунок 38 – SPI 4-Wire Read):

Чтение регистра ID акселерометра ADXL345 по SPI

Видно, что в регистре содержится число 0xE5, которое и является значением идентификатора акселерометра ADXL345, согласно техническому описанию (datasheet). Вот как это выглядит на временной диаграмме:

Временная диаграмма чтения регистра ID акселерометра ADXL345 по SPI

Устройство отвечает, всё нормально. Теперь нам нужно перевести акселерометр в режим измерений. Для этого необходимо записать в регистр POWER_CTL (адрес регистра 0x2D) число 0x08 (установить бит Measure в HIGH). После этого можно начинать читать регистры с 0x32 по 0x37, в которых хранятся данные об ускорениях по трём осям. Сделаем это с помощью Arduino. Напишем такой скетч:

Скетч для чтения данных ADXL345 по SPI (разворачивается)

#include <SPI.h>

const byte READ = 0x80; // бит маркер чтения
const byte MB = 0x40; // бит MB (многобайтовая передача)
const int CS = 10; // пин выбора ведомого

void setup() {
  Serial.begin(115200);
  SPI.begin(); 
  SPI.setClockDivider(SPI_CLOCK_DIV32); // делитель частоты 500 кГц
  SPI.setDataMode(SPI_MODE3); // задаём 3-ий режим SPI
    
  byte id;
  readRegister(0x00, 1, id); // читаем регистр DEVID
  Serial.print("ID = ");
  Serial.println(id, HEX);
  
  writeRegister(0x2D, 0x08); // переводим ADXL345 в режим измерения
}

void loop() {
  byte buff;
  readRegister(0x32, 6, buff); // читаем значения по осям X, Y, Z
  
  int x = ((int)buff }

// записывает значение в регистр
void writeRegister(byte reg, byte value) {
  digitalWrite(CS, LOW);
  SPI.transfer(reg); 
  SPI.transfer(value); 
  digitalWrite(CS, HIGH);
}

// читает из регистра заданное число байтов
void readRegister(byte reg, int bytesToRead, byte *outBuff) {
  digitalWrite(CS, LOW);
  reg = reg | READ; // покажем акселерометру, что хотим из него читать
  if (bytesToRead > 1) {
     reg = reg | MB; // и читать хотим много байтов
  }
  SPI.transfer(reg); // записываем адрес регистра, с которого начинаем чтение
  for (int i=0; i}

Вот так выглядит временная диаграмма работы этого скетча:

Временная диаграмма чтения значений по осям X, Y, Z акселерометра ADXL345

Ясно, почему первый байт передачи от Arduino при чтении значений ускорений по осям – число 0xF2? Это адрес первого регистра, с которого начинаем чтение (0x32), объединённый по ИЛИ с 0x80 – маркером чтения READ – и с 0x40 – маркером многобайтовой передачи MB: 0x32 OR 0x80 OR 0x40 = 0011_0010 OR 1000_0000 OR 0100_0000 = 1110_1101 = 0xF2

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

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

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

GY-521 (MPU-6050) Arduino Uno
VCC 3.3 V
GND GND
SCL A5
SDA A4
  1. Присоединяем модуль датчика к микроконтроллеру.
  2. На МК Ардуино загружаем проработанный код, представленный в разделе ниже.
  3. Открываем среду разработки Arduino IDE и мониторим последовательный порт.
  4. Сверяем выводимые данные акселерометра и гироскопа.
  5. Во время поворота датчика сведения не производят изменений.

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