MPU6050
- Войдите на сайт для отправки комментариев
Вс, 05/02/2017 - 20:29
Добрый день. Использую MPU6050 с Arduino UNO. Код программы представлен ниже. Проблема заключается вот в чем: я экспериментальным методом определил параметры калибровки гироскопа. Установил необходимые значения во время инициализации. Первые 6 - 10 секунд работы датчика (датчик неподвижен) данные с гироскопа по всем осям 0, потом начинаются скачки 0, -1, 0, -1, 0, -1 и тд. Предполагаю, что DMP сам производит калибровку первые 10 секунд потому, что даже когда я не устанавливаю свои значения, то датчик показывает: -3 по Х, -2 по Y, - 2 по Z, а через 6 - 10 секунд опять начинаются скачки 0, -1, 0, -1. Не подскажите как от этого избавится?
#include "myMPU6050_6Axis_MotionApps20.h"
MPU6050 mpu;
uint16_t packetSize = 42; // expected DMP packet size (default is 42 bytes)
uint8_t fifoBuffer[64]; // FIFO storage buffer
void setup()
{
Wire.begin();
Serial.begin(500000);
while (!Serial);
//
Serial.println(F("Initializing I2C devices..."));
mpu.initialize();
// verify connection
Serial.println("CORE: Testing device connections...");
Serial.println(mpu.testConnection() ? "CORE: MPU6050 connection successful" : "CORE: MPU6050 connection failed");
// wait for ready
Serial.println("CORE: Send any character to begin DMP programming and demo: ");
Serial.flush();
while (Serial.available() == 0);
Serial.flush();
//
Serial.println("CORE: Initializing DMP...");
if (mpu.dmpInitialize() == true)
{
mpu.setXGyroOffset(131);
mpu.setYGyroOffset(87);
mpu.setZGyroOffset(87);
Serial.print("CORE: Enabling DMP...");
mpu.setDMPEnabled(true);
Serial.println("CORE: SUCCESS");
}
else
Serial.println("FAIL");
//
Serial.println("SETUP END");
}
// ================================================================
// === MAIN PROGRAM LOOP ===
// ================================================================
void loop()
{
if (mpu.getFIFOCount() >= 42)
{
mpu.getFIFOBytes(fifoBuffer,packetSize);
mpu.dmpGetGyro(Data,fifoBuffer);
Serial.print("G:\t");
Serial.print(Data[0]);
Serial.print("\t");
Serial.print(Data[1]);
Serial.print("\t");
Serial.println(Data[2]);
}
}
Первые 10 секунд

После 10 секунд
