2.1 Система керування. Початок роботи з IMU


План уроку

  • Підключення IMU до ESP32
  • Прошивання ESP32. Викладення основ роботи з IMU
  • Дані, виміряні IMU, та одиниці їх вимірювання

Матеріали

  • ESP32 – 10 шт
  • IMU MPU6050 – 10 шт
  • Провідники 4-х кольорів, 26AWG, по 10 м.
  • Паяльники
  • Припій. Флюс/каніфоль

Результат уроку

Результатом даного уроку має бути:

ESP32 із MPU6050, що вимірюють прискорення та кутову швидкість, і розраховують орієнтацію в просторі методом інтегрування Ейлера.


Урок

Підключення IMU до ESP32

 Для підключення гіроакселерометра до плати розробника ми будемо використовувати I2C шину:

Контакти на  ESP32Контакти на MPU6050
GPIO 22 (SCL)SCL
GPIO 21 (SDA)SDA
3V3VCC
GNDGND

Прошивання ESP32. Викладення основ роботи з IMU

  1. Для початку роботи з ESP32 створюємо проєкт в PlatformIO (ESP32 Devkit V1)

  2. Встановлюємо додаткову бібліотеку Adafruit MPU6050

  3. Вставляємо наступний код в main.cpp

#include <Arduino.h>  // Підключаємо бібліотеку Arduino для основних функцій

#include <Adafruit_MPU6050.h>  // Підключаємо бібліотеку для роботи з сенсором MPU6050
#include <Adafruit_Sensor.h>   // Бібліотека для роботи з різними сенсорами Adafruit

// Ініціалізація об'єкта для роботи з MPU6050
Adafruit_MPU6050 mpu;

// Оголошення змінних для зберігання даних з акселерометра, гіроскопа та температури
sensors_event_t a, g, temp;

// Змінна для зберігання часу останньої відправки даних
uint32_t lastSendTime = 0;

void setup()
{
        // Ініціалізація серійного з'єднання зі швидкістю 115200 біт/с
	Serial.begin(115200);

	// Перевірка на успішне підключення сенсора MPU6050
	if (!mpu.begin())
	{
        // Якщо сенсор не знайдено, виводимо повідомлення про помилку
        Serial.println("Failed to find MPU6050 chip");  
		while (1)  // Безкінечний цикл у разі помилки
		{
                 // Невелика затримка для зменшення навантаження на систему
		delay(10); 
		}
	}

  	// Налаштування діапазону вимірювань акселерометра (до 16g)
  	mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
	
	// Налаштування діапазону вимірювань гіроскопа (до 2000 градусів/с)
	mpu.setGyroRange(MPU6050_RANGE_2000_DEG);
	
	// Налаштування смуги пропускання фільтра на 260 Гц
	mpu.setFilterBandwidth(MPU6050_BAND_260_HZ);

	// Невелика затримка для стабілізації роботи сенсора
	delay(100);
}

void loop()
{
	// Перевірка часу, щоб оновлювати дані кожні 10 мілісекунд
    if((millis() - lastSendTime) >= 10) {
	// Отримання даних з акселерометра, гіроскопа і температури
	mpu.getEvent(&a, &g, &temp);
	
	// Виведення значень по кожній осі акселерометра
	Serial.print("Вісь акселерометра: X - ");
	Serial.println(a.acceleration.x);  // Виведення значення по осі X
	Serial.print("Вісь акселерометра: Y - ");
	Serial.println(a.acceleration.y);  // Виведення значення по осі Y
	Serial.print("Вісь акселерометра: Z - ");
	Serial.println(a.acceleration.z);  // Виведення значення по осі Z

	// Виведення значень по кожній осі гіроскопа
	Serial.print("Вісь гіроскопа: X - ");
	Serial.println(g.gyro.x);  // Виведення значення по осі X
	Serial.print("Вісь гіроскопа: Y - ");
	Serial.println(g.gyro.y);  // Виведення значення по осі Y
	Serial.print("Вісь гіроскопа: Z - ");
	Serial.println(g.gyro.z);  // Виведення значення по осі Z

	// Порожній рядок для відділення наборів даних
	Serial.println();
	// Оновлюємо час останньої відправки даних
	lastSendTime = millis();
    }
}
  1. Додаємо в файл platformio.ini рядок
monitor_speed = 115200
  1. Прошиваємо ESP32 та перевіряємо, чи приходять дані через послідовний порт

Додаткові посилання

Гіроскопічний ефект


Відеоуроки та записи уроку

Урок 1- Гіроскоп та акселерометр