Utilizzare due giroscopi MPU 6050

Ciao a tutti, sto realizzando un progetto per la mia tesina di maturità, e mi serve il vostro aiuto.
Dovrei utilizzare due giroscopi MPU 6050 per misurare delle inclinazioni. Da quanto ho capito devo collegare i due sensori in parallelo e poi collegare l AD0 del secondo sensore ai 3.3V cosi da creare un nuovo indirizzo 0x69.

Ora come ora sono riuscito a trovare un codice che mi permette di leggere i dati da un solo giroscopio, mi servirebbe il pezzo di codice da implementare per leggere i dati dei due sensori conteporaneamente.

Di seguito vi riporto il link della pagina dalla quale ho trovato il codice.( ho utilizzato il primo, quello senza libreria).

Grazie mille a tutti in anticipo.

http://www.giuseppecaccavale.it/arduino/roll-pitch-e-yaw-con-mpu6050-arduino/

Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:

Il cross-posting è vietato.

>Lucanelli99: ... in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai posto la stessa domanda in una sezione di lingua Inglese, per di più usando la lingua Italiana (cosa che NON è permessa).

Il tuo post duplicato, in violazione del regolamento, è stato quindi cancellato e ti prego, dopo aver fatto quanto ti ha richiesto Nid qui sopra, di continuare qui.

Guglielmo

Ciao, mi scuso ma non conoscevo la netiquette in generale e sono andato subito al sodo ...

.... ok, ho lasciato una breve presentazione nel topic apposito ... mi scuso per non averlo fatto all'inizio.

Allora, vedo di ricapitolare con qualche dettaglio in più il mio problema; tramite Arduino “UNO” devo leggere i dati di Pich e Roll di “almeno” 2 MPU-6050.
Leggendo da Playground (https://playground.arduino.cc/Main/MPU-6050#multiple) ho capito come “fisicamente” devo collegare gli MPU ma mi sfugge come definire il secondo sensore all’interno dello sketch:

Riporto di sotto il mio sketch:

#include <SPI.h>
#include <Wire.h>
#define MPU 0x68  // I2C address of the MPU-6050
 
double AcX,AcY,AcZ;
int Pitch, Roll;
 
void setup(){
  Serial.begin(9600);
  init_MPU(); // Inizializzazione MPU6050
}
 
void loop()
{
  FunctionsMPU(); // Acquisisco assi AcX, AcY, AcZ.
    
  Roll = FunctionsPitchRoll(AcX, AcY, AcZ);   //Calcolo angolo Roll
  Pitch = FunctionsPitchRoll(AcY, AcX, AcZ);  //Calcolo angolo Pitch
 
  Serial.print("Pitch: "); Serial.print(Pitch);
  Serial.print("\t");
  Serial.print("Roll: "); Serial.print(Roll);
  Serial.print("\n");
 
}
 
void init_MPU(){
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  delay(1000);
}
 
//Funzione per il calcolo degli angoli Pitch e Roll
double FunctionsPitchRoll(double A, double B, double C){
  double DatoA, DatoB, Value;
  DatoA = A;
  DatoB = (B*B) + (C*C);
  DatoB = sqrt(DatoB);
  
  Value = atan2(DatoA, DatoB);
  Value = Value * 180/3.14;
  
  return (int)Value;
}
 
//Funzione per l'acquisizione degli assi X,Y,Z del MPU6050
void FunctionsMPU(){
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,6,true);  // request a total of 14 registers
  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();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
}

Quallcuno mi sa dire come definire un secondo MPU?

Grazie 1000 Ciao

>Lucanelli99: … me leggere attentamente il REGOLAMENTO si fa fatica ? ? ?

In conformità al suddetto regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo.

Guglielmo

#define MPU 0x68
.....
init_MPU(); // Inizializzazione MPU6050
.....
void init_MPU(){

anche qui non andiamo più a casa co sti define :

Patrick_M:

#define MPU 0x68

.....
init_MPU(); // Inizializzazione MPU6050
.....
void init_MPU(){




anche qui non andiamo più a casa co sti define :

grazie per il commento, come dovrebbe aiutarmi? ...

Lucanelli99:
Quallcuno mi sa dire come definire un secondo MPU?

.... esattamente come il primo, cambia SOLO l'indirizzo I2C.

Credo che sarebbe che che dessi una letta a QUESTO tutorial che chiarisce le idee sul bus I2C.

Guglielmo

Lucanelli99:
grazie per il commento, come dovrebbe aiutarmi? …

il comando define “qualcosa” “qualcosaltro” serve in fase di “pre-compilazione” per sostituire nello sketch tutte le istanze di “qualcosa” con “qualcosaltro”
detto questo

se tu scrivi
define MPU 068
ogni volta che c’è scritto MPU verrà scritto 068

quindi otterrai

init_068(); // Inizializzazione 0686050

e nell’ultima

void init_068(){

vedi un po tu :smiley:

p.s.
e’ comunque vero che nel tuo caso funziona tutto lo stesso …