Микроконтроллеры Arduino, 

Модули, Комлектующие,

Электронные компоненты

Наши контакты: г. Москва,
ул. Молодогвардейская, д.57с10
Въезд авто только по пропуску!

Знакомство с девятиосевым модулем MPU 9250.

Опубликовано: 25.06.2019

Модуль GY-9250 на базе одноименной микросхемы MPU9250 включает в себя трёхосевой гироскоп, трёхосевой акселерометр и трёхосевой магнитометр (магниторезистивный компас). Такая связка позволяет отслеживать положение в пространстве.

Модуль GY-9250 может, к примеру, применяться в системах управления различных мобильных роботов и БПЛА.

Характеристики:

  • Питание: 3,3 … 5 В постоянного тока
  • Интерфейсы подключения: I2C, SPI
  • Диапазон измерений акселерометра: +/- 2G, +/- 4G, +/- 8G, +/- 16G
  • Диапазон измерений гироскопа: +/- 250, +/- 500, +/- 1000, +/- 2000°/с
  • Чувствительность гироскопа: 131, 65,5, 32,8, 16,4 LSB/°/c
  • Диапазон измерений компаса магнитометра: +/- 4800 мкТл
  • Рабочий ток: гироскоп – 3,2 мА, акселерометр – 450 мкА, магнитометр – 280 мкА

Модуль имеет 10 выводов, но для подключения по интерфейсу I2C нам необходимо использовать лишь 4 из них:

VCC – Питание

GND – ”Земля”

SCL – Шина данных I2C

SDA – Шина данных I2C

Подключение к Arduino:

Для подключения и работы с модулем нам необходимы:

  • Любая Arduino-совместимая плата
  • Компьютер с установленной средой Arduino IDE.
  • USB кабель для подключения Arduino к персональному компьютеру

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

Подробнее узнать о модуле LCD1602 и его подключении можно здесь.

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

 

 

Скетч для Arduino:

Для считывания показаний с датчиков и подключения дисплея необходимо использовать библиотеки*:

LiquidCrystal_I2C.h

MPU9250.h

Wire.h

Если их нет в вашей среде ArduinoIDE, загрузить их можно в разделе “Менеджер библиотек”.

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

Код:

#include <LiquidCrystal_I2C.h>    // Подключение необходимых библиотек
#include <MPU9250.h>              //
#include <Wire.h>                 //
 
LiquidCrystal_I2C lcd(0x27, 16, 2); // задание параметров дисплея, 
//адрес I2C-конвертера 0х27 или 0х3f
  MPU9250 mpu; // Объявляем переменную для датчика   void setup() { Serial.begin(115200); //Запускаем монитор порта   Wire.begin(); //Запускаем работу с шиной I2C   delay(2000); mpu.setup(0x68); //Адрес датчика на шине I2C mpu.setMagneticDeclination(11.2); //в скобках необходимо указать магнинтное отклонение //местности, в которой вы находитесь http://www.magnetic-declination.com/ delay(5000);  
//Калибровка датчика. Запускаем монитор по последовательному соединению
//и следуем инструкции
Serial.println("Accel Gyro calibration will start in 5sec."); Serial.println("Please leave the device still on the flat plane."); mpu.verbose(true); delay(5000); mpu.calibrateAccelGyro();   Serial.println("Mag calibration will start in 5sec."); Serial.println("Please Wave device in a figure eight until done."); delay(5000); mpu.calibrateMag();   print_calibration(); mpu.verbose(false);   //экран lcd.init(); // запуск дисплея lcd.backlight(); // включение подсветки дисплея lcd.setCursor(0, 0); // установка курсора в ячейку на дисплее lcd.print("x"); // вывод на экран lcd.setCursor(6, 0); lcd.print("y"); lcd.setCursor(11, 0); lcd.print("z"); lcd.setCursor(0, 1); lcd.print("ax:"); lcd.setCursor(8, 1); lcd.print("ay:"); }   void loop() { static uint32_t prev_ms = millis(); if ((millis() - prev_ms) > 100) { mpu.update();   prev_ms = millis();   lcd.setCursor(1, 0);
// выводим на экран округленное значение по оси X
lcd.print(int(mpu.getRoll())); lcd.print(" "); lcd.setCursor(7, 0);
// выводим на экран округленное значение по оси Y
lcd.print(int(mpu.getPitch())); lcd.print(" "); lcd.setCursor(12, 0);
// выводим на экран округленное значение по оси Z
lcd.print(int(mpu.getYaw())); lcd.print(" "); lcd.setCursor(3, 1);  
// задаем переменную для ускорения по оси X
// выводим на экран округленное значение ускорения в размерности g*1000
float ux = mpu.getAcc(0) * 1000; lcd.print(int(ux)); lcd.print(" ");  
// задаем переменную для ускорения по оси Y
// выводим на экран округленное значение ускорение в размерности g*1000
lcd.setCursor(11, 1); float uy = mpu.getAcc(1) * 1000; lcd.print(int(uy)); lcd.print(" "); delay(50);   } }   void print_calibration() { Serial.println("< calibration parameters >"); Serial.println("accel bias [g]: "); Serial.print(mpu.getAccBiasX() * 1000.f / (float)MPU9250::CALIB_ACCEL_SENSITIVITY); Serial.print(", "); Serial.print(mpu.getAccBiasY() * 1000.f / (float)MPU9250::CALIB_ACCEL_SENSITIVITY); Serial.print(", "); Serial.print(mpu.getAccBiasZ() * 1000.f / (float)MPU9250::CALIB_ACCEL_SENSITIVITY); Serial.println(); Serial.println("gyro bias [deg/s]: "); Serial.print(mpu.getGyroBiasX() / (float)MPU9250::CALIB_GYRO_SENSITIVITY); Serial.print(", "); Serial.print(mpu.getGyroBiasY() / (float)MPU9250::CALIB_GYRO_SENSITIVITY); Serial.print(", "); Serial.print(mpu.getGyroBiasZ() / (float)MPU9250::CALIB_GYRO_SENSITIVITY); Serial.println(); Serial.println("mag bias [mG]: "); Serial.print(mpu.getMagBiasX()); Serial.print(", "); Serial.print(mpu.getMagBiasY()); Serial.print(", "); Serial.print(mpu.getMagBiasZ()); Serial.println(); Serial.println("mag scale []: "); Serial.print(mpu.getMagScaleX()); Serial.print(", "); Serial.print(mpu.getMagScaleY()); Serial.print(", "); Serial.print(mpu.getMagScaleZ()); Serial.println(); }
Комментарии (4)
  • Михаил
    Пример "connection_check" из библиотеки рабочий. Рекомендуется загружать библиотеку из GitHub как ZIP-архив. И подключать тоже. Кроме того, нужно проверить, чтобы не было установлено других библиотек с таким названием, т.к. среда при компиляции может обращаться к ним. В таком случае будет конфликт и ошибки.
    07.03.2021 12:05
  • Юрий
    У меня также эта библиотека выдает: I2C ERROR CODE : 2
    MPU connection failed. Please check your connection with `connection_check` example.
    А пример connection_check - не компилируется, дает ошибку :
    connection_check:7: error: variable or field 'scan_mpu' declared void
    connection_check:7: error: 'WireType' was not declared in this scope
    connection_check:7: error: 'wire' was not declared in this scope
    05.03.2021 14:20
  • Михаил
    Спасибо, что указали на неточность. Поправили скетч под указанную библиотеку.
    11.01.2021 17:04
  • Андрей
    не рабочая библиотека, выдает ошибку подключения... хотя на другой все работает...
    08.01.2021 16:02
Вы не представились
Не правильно введен e-mail
Нам интересно Ваше мнение
Все поля обязательны к заполнению
Перед публикацией комментарии проходят модерацию

Главное меню

Каталог

Полезные ссылки

Цена
от
до
0 Корзина: 0 руб.