План уроку
- Підключення 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 |
| 3V3 | VCC |
| GND | GND |
Прошивання ESP32. Викладення основ роботи з IMU
Для початку роботи з ESP32 створюємо проєкт в PlatformIO (
ESP32 Devkit V1)Встановлюємо додаткову бібліотеку
Adafruit MPU6050Вставляємо наступний код в
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();
}
}
- Додаємо в файл
platformio.iniрядок
monitor_speed = 115200
- Прошиваємо ESP32 та перевіряємо, чи приходять дані через послідовний порт

