logo
+7 (951) 999-89-94
428003, г. Чебоксары, ул. Федора Гладкова, д.9, оф.319
17.04.2019

Измерение ускорения

Измерение ускорения

Акселерометры применяются для определения ускорения при движении устройства. Будем использовать монитор последовательного порта для получения информации об ускорении от модуля MPU6050.

Компоненты

  • Плата Arduino Uno
  • USB кабель
  • Модуль MPU6050
  • Макетная плата

Схема

Используем выводы A4 (SDA) и A5 (SCL) платы Arduino Uno для связи с модулем MPU6050.

Принципиальная схема

Соединение компонентов

Скетч

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

#include "Wire.h" 
#include "I2Cdev.h" 
#include "MPU6050.h" 
 
MPU6050 accelgyro;

int16_t ax, ay, az;
int16_t gx, gy, gz;

#define LED_PIN 13

bool blinkState = false;
 
void setup() { 
  Serial.begin(9600);
  Serial.println("Initializing I2C devices..."); 
  
  Wire.begin();
  accelgyro.initialize();
  
  Serial.println("Testing device connections..."); 
  if (accelgyro.testConnection()) { 
    Serial.println("MPU6050 connection successful"); 
  } else { 
    Serial.println("MPU6050 connection failed"); 
    while (1); 
  }

  // Calibrate the gravity acceleration
  // accelgyro.setXAccelOffset(-1200);
  // accelgyro.setYAccelOffset(-2500);
  // accelgyro.setZAccelOffset(1988);

  Serial.print("X.Y.Z offset :\t"); 
  Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); 
  Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); 
  Serial.print(accelgyro.getZAccelOffset()); Serial.print("\n");

  // initialize LED port 
  pinMode(LED_PIN, OUTPUT);
} 
 
void loop() { 
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); 

  Serial.print("a/g:\t"); 
  Serial.print(ax); Serial.print("\t");
  Serial.print(ay); Serial.print("\t");
  Serial.print(az); Serial.print("\t");
  Serial.print(gx); Serial.print("\t\t");
  Serial.print(gy); Serial.print("\t\t");
  Serial.println(gz);

  // Convert acceleration to g and the gyroscope unit to dps (degree per second)
  Serial.print("a/g:\t"); 
  Serial.print((float)ax / 16384); Serial.print("g\t"); 
  Serial.print((float)ay / 16384); Serial.print("g\t"); 
  Serial.print((float)az / 16384); Serial.print("g\t");

  Serial.print((float)gx / 131); Serial.print("d/s  \t");
  Serial.print((float)gy / 131); Serial.print("d/s  \t");
  Serial.print((float)gz / 131); Serial.print("d/s  \n");
  delay(300);

  blinkState = !blinkState;
  digitalWrite(LED_PIN, blinkState);
}

Подключаем библиотеки, необходимые для работы скетча.

#include "Wire.h" 
#include "I2Cdev.h" 
#include "MPU6050.h"

Создаём объект accelgyro.

MPU6050 accelgyro;

Инициализируем шину I2C, а затем модуль MPU6050.

  Wire.begin();
  accelgyro.initialize();

Проверим связь с модулем.

  if (accelgyro.testConnection()) { 
    Serial.println("MPU6050 connection successful"); 
  } else { 
    Serial.println("MPU6050 connection failed"); 
    while (1); 
  } 

Если вы хотите сделать результаты более близкими к реальности, то вы можете отрегулировать смещение MPU6050 перед его использованием. Если нет жестких требований, то этот шаг можно пропустить.

  // accelgyro.setXAccelOffset(-1200); 
  // accelgyro.setYAccelOffset(-2500); 
  // accelgyro.setZAccelOffset(1988); 

Выводим значения в монитор последовательного порта.

  Serial.print("X.Y.Z offset :\t"); 
  Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); 
  Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); 
  Serial.print(accelgyro.getZAccelOffset()); Serial.print("\n"); 

В функции loop() считываем параметры акселерометра и параметры гироскопа.

  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); 

После этого конвертируем значения в удобный вид и отправляем в монитор последовательного порта. Скомпилируйте и загрузите код на плату Arduino. Откройте монитор последовательного порта, поверните MPU6050, чтобы увидеть как будут меняться значения.

 

Предыдущий урок | В начало | Следующий урок