Акселерометр и гироскоп MPU6050

Понадобилось поработать с MPU6050 (акселерометр и гироскоп). Совсем обленился… решил задать вопрос ChatGPT 🙂

Вот что он ответил:

Пример кода для Arduino

В этом коде используется библиотека Wire для общения Arduino с MPU6050 по протоколу I2C. В функции setup выполняется настройка и инициализация MPU6050, а в функции loop считываются данные гироскопа и выводятся в Serial Monitor.

Убедитесь, что вы правильно подключили MPU6050 к вашей плате Arduino и указали правильные значения для MPU_addr (адрес датчика) в коде, если ваш модуль использует другой адрес.

Надеюсь, этот код поможет вам начать работу с гироскопом MPU6050 на Arduino!

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

#include <Wire.h>
const int MPU_addr=0x68; // I2C адрес MPU6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

void setup(){
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // Регистр Power Management-1
Wire.write(0); // Включаем MPU-6050
Wire.endTransmission(true);

// Установка диапазонов измерений для акселерометра и гироскопа
Wire.beginTransmission(MPU_addr);
Wire.write(0x1C); // Регистр ACCEL_CONFIG
Wire.write(0x10); // Значение 0x10 соответствует диапазону ±8g для акселерометра
Wire.endTransmission(true);

Wire.beginTransmission(MPU_addr);
Wire.write(0x1B); // Регистр GYRO_CONFIG
Wire.write(0x10); // Значение 0x10 соответствует диапазону ±1000°/sec для гироскопа
Wire.endTransmission(true);

Serial.begin(9600);
}

void loop(){
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // Начинаем с регистра 0x3B (ACCEL_XOUT_H), каждый регистр занимает 2 байта
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true); // Запрашиваем и читаем 14 байт данных из регистров MPU6050

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(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

Serial.print(«Ускорение в качестве значения X: «); Serial.println(AcX);
Serial.print(«Ускорение в качестве значения Y: «); Serial.println(AcY);
Serial.print(«Ускорение в качестве значения Z: «); Serial.println(AcZ);
Serial.print(«Температура: «); Serial.println(Tmp/340.00+36.53);
Serial.print(«Угловая скорость в качестве значения X: «); Serial.println(GyX);
Serial.print(«Угловая скорость в качестве значения Y: «); Serial.println(GyY);
Serial.print(«Угловая скорость в качестве значения Z: «); Serial.println(GyZ);
Serial.println();
delay(1000);
}

В этом примере кода, значение 0x10, записанное в регистры 0x1C и 0x1B, соответствует диапазонам ±8g для акселерометра и ±1000°/sec для гироскопа соответственно. Вы можете изменить эти значения на следующие, чтобы установить другие диапазоны. Для акселерометра могут быть выбраны следующие значения для регистра ACCEL_CONFIG:

— 0x00: ±2g
— 0x08: ±4g
— 0x10: ±8g
— 0x18: ±16g

Для гироскопа могут быть выбраны следующие значения для регистра GYRO_CONFIG:

— 0x00: ±250°/sec
— 0x08: ±500°/sec
— 0x10: ±1000°/sec
— 0x18: ±2000°/sec

Вы можете выбрать соответствующие значения в коде, чтобы установить нужные диапазоны для акселерометра и гироскопа MPU6050. Установите эти значения перед `Wire.endTransmission(true);` в функции `setup`.


Скопировал в буфер, вставил в скетч и… все работает!


Ну, наука вперед пошла! Совсем думать не надо 🙂