#include<Wire.h>
const int MPU = 0x68; //I2C adresa MPU 0x68 == 0b1101000
float AccX, AccY, AccZ;
float GyroX;
float gyroAngleX;
float accAngleX;
float kutX;
float dt;
void setup() {
dt=100;
Serial.begin(19200);
Wire.begin(); //spreman za komunikaciju
Wire.beginTransmission(MPU); // započni komunikaciju sa MPU
Wire.write(0x6B); //obrati se registru 6B
Wire.write(0b00000000); // stavljamo registar u 0 ....normalan rad*****
Wire.endTransmission(true); //odustajemo od komunikacije
Wire.beginTransmission(MPU);
Wire.write(0x1B); // obrati se/adresiraj registar žiroskopa
Wire.write(0x00000000); // postavljamo 250°/s iako je on takav po defaultu****
Wire.endTransmission(true);
Wire.beginTransmission(MPU);
Wire.write(0x1C); // adresiraj registar akcelerometra
Wire.write(0x00000000); // postavi na 2g osjetljivost iako je takva po defaultu
Wire.endTransmission(0b1101000);
delay(50);
}
void loop() {
//=== čitaj podatke akcelerometra ===//
Wire.beginTransmission(MPU);
Wire.write(0x3B); //počni čitati od registra 0x3B odnosno akceleracije xosi...
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); // očitaj 6 registra za redom..6 byta podataka
AccX = (Wire.read()<<8 | Wire.read())/16384.0; // dijeli sa 16384 da bi dobio točnu vrijednost jer tako nalaže data sheet za +-2g
AccY = (Wire.read()<<8 | Wire.read())/16384.0;
AccZ = (Wire.read()<<8 | Wire.read())/16384.0;
accAngleX = (atan(AccY/sqrt(pow(AccX, 2)+pow(AccZ,2)))*180/PI);
Wire.beginTransmission(MPU);
Wire.write(0x43); //adresa prvog registra žiroskopa
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); // isto ko kod akcelerometra
GyroX = (Wire.read() << 8 | Wire.read())/131.0; //ista fora kao kod acc
gyroAngleX = GyroX;
kutX = 0.96*gyroAngleX+0.04*accAngleX;
//////////////////////////////////////
Serial.print("kutX = ");
Serial.print(gyroAngleX);
delay(dt);
}
так что это код .... у меня проблема с гироскопическими данными, я знаю, что это из-за дрейфа тим, но я думаю, что дрейф 500 дпс слишком много ... когда стационарный сигнал нормальный но когда я перемещаю его, он иногда поднимается до 480-500 dps, когда я двигаюсь с места быстро, он останавливается на 250 dps, что хорошо, потому что я поставил регистр в диапазоне 250. Кто-нибудь раньше сталкивался с этой проблемой ?? Заранее спасибо!