Buongiorno a tutti. Sono alle prese con un progetto nel quale devo includere un MPU9250. il sensore in mio possesso è l'MPU9265 e da quel che ho capito è uno sviluppo dell'MPU9250.
la libreria che sto utilizzando è la MPU9250_WE.h perché la MPU9250.h non riusciva ad inizializzare il sensore.
La libreria MPU9250_WE invece mi da un errore di inizializzazione del sensore ma non bloccando il codice in caso di inizializzazione fallita inizia a darmi dei dati ma non so se siano corretti.
CODICE INIZIALIZZAZIONE SENSORE MPU9265:
void setup() {
Serial.begin(115200);
Wire.begin();
if(!mpu.init()){
Serial.println("INIZIALIZZAZIONE MPU FALLITA");
//while(1);
}else{
Serial.println("INIZIALIZZAZIONE COMPLETATA CON SUCCESSO");
}
if(!mpu.initMagnetometer()){
Serial.println("INIZIALIZZAZIONE MAGNETOMETRO FALLITA");
//while(1);
}else{
Serial.print("INIT MAGNETOMETRO COMPLETATA");
}
Qualcuno sa dirmi se sto utilizzando una libreria sbagliata o in cosa sto sbagliando?
Inoltre se i dati del giroscopio e le varie accelerazioni arrivano il magnetometro restituisce tutti 0.
La comunicazione che sto utilizzando è la I2C:
Alimentazione:3.3V (come da datasheet)
GND:GND
SDA:SDA
SCL:SCL
CODICE COMPLETO:
#include <MPU9250_WE.h>
#include <Wire.h>
#define mpu_indirizzo 0x69
MPU9250_WE mpu = MPU9250_WE(mpu_indirizzo);
void setup() {
Serial.begin(115200);
Wire.begin();
if(!mpu.init()){
Serial.println("INIZIALIZZAZIONE MPU FALLITA");
//while(1);
return 0;
}else{
Serial.println("INIZIALIZZAZIONE COMPLETATA CON SUCCESSO");
}
if(!mpu.initMagnetometer()){
Serial.println("INIZIALIZZAZIONE MAGNETOMETRO FALLITA");
//while(1);
return 0;
}else{
Serial.print("INIT MAGNETOMETRO COMPLETATA");
}
Serial.print("CALIBRAZIONE NON MUOVERE IL SENSORE");
delay(1000);
mpu.autoOffsets();
Serial.println("Calibrazione completata");
mpu.enableGyrDLPF();
mpu.setGyrDLPF(MPU9250_DLPF_6);
mpu.setSampleRateDivider(5);
mpu.setGyrRange(MPU9250_GYRO_RANGE_250);
mpu.setAccRange(MPU9250_ACC_RANGE_2G);
mpu.enableAccDLPF(true);
mpu.setAccDLPF(MPU9250_DLPF_6);
mpu.setMagOpMode(AK8963_CONT_MODE_100HZ);
delay(200);
}
void loop() {
/*
* xyzFloat >> variabile per la lettura di 3 valori x y z
* getGValues>>
*/
xyzFloat acc= mpu.getGValues(); // lettura accellerazioni 3 assi
xyzFloat giro= mpu.getGyrValues();
xyzFloat mag= mpu.getMagValues();
Serial.print("Accellerazioni (g)");
Serial.println("x\t\ty\t\tz\t\t");
Serial.print(acc.x);
Serial.print("\t\t");
Serial.print(acc.y);
Serial.print("\t\t");
Serial.println(acc.z);
Serial.print("VALORI GIROSCOPIO");
Serial.println("x\t\ty\t\tz\t\t");
Serial.print(giro.x);
Serial.print("\t\t");
Serial.print(giro.y);
Serial.print("\t\t");
Serial.println(giro.z);
Serial.print("VALORI MAGNETOMETRO");
Serial.println("x\t\ty\t\tz\t\t");
Serial.print(mag.x);
Serial.print("\t\t");
Serial.print(mag.y);
Serial.print("\t\t");
Serial.println(mag.z);
delay(500);
}