2 MPU6050 mit Arduino verbunden

MPU6050 ist ein dreiachsiges Gyroskop. Informationen zum Anschließen eines einzelnen MPU6050 an Arduino finden Sie unter: Arduino-Betrieb MPU6050

Wenn zwei MPU6050 gleichzeitig mit Arduino verbunden sind und jeweils Daten lesen, ist der Vorgang wie folgt (am Beispiel der Arduino MEGA-Karte):

Verdrahtung

Für die erste MPU6050: 

MPU6050 (1) Arduino MEGA-Board
VCC 3,3 V
GND GND
SCL SCL
SDA SDA

Für die zweite MPU6050 (VCC durch AD0 ersetzen, an 3,3 V anschließen, andere Verkabelung ist gleich):

MPU6050 (2) Arduino MEGA-Board
AD0 3,3 V
GND GND
SCL SCL
SDA SDA

Code

Der Code in der Arduino IDE lautet wie folgt:

#include "Wire.h"

const int MPU_ADDR1 = 0X68;
const int MPU_ADDR2 = 0X69;

int16_t accelerometer_x, accelerometer_y, accelerometer_z;
int16_t gyro_x, gyro_y, gyro_z;
int16_t temperature;

char tmp_str[7];

char* convert_int16_to_str(int16_t i) {
  sprintf(tmp_str, "%d", i);
  return tmp_str;
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(MPU_ADDR1);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);

  Wire.begin();
  Wire.beginTransmission(MPU_ADDR2);
  Wire.write(0x6B);
  Wire.write(0); 
  Wire.endTransmission(true);
}

void loop() {
  Wire.beginTransmission(MPU_ADDR1);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_ADDR1, 7 * 2, true);

  accelerometer_x = Wire.read() << 8 | Wire.read();
  accelerometer_y = Wire.read() << 8 | Wire.read();
  accelerometer_z = Wire.read() << 8 | Wire.read();

  Serial.print(convert_int16_to_str(accelerometer_x));
  Serial.print(",");
  Serial.print(convert_int16_to_str(accelerometer_y));
  Serial.print(",");
  Serial.print(convert_int16_to_str(accelerometer_z));
  Serial.print("|");

  Wire.beginTransmission(MPU_ADDR2);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_ADDR2, 7 * 2, true);

  accelerometer_x = Wire.read() << 8 | Wire.read();
  accelerometer_y = Wire.read() << 8 | Wire.read();
  accelerometer_z = Wire.read() << 8 | Wire.read();

  Serial.print(convert_int16_to_str(accelerometer_x));
  Serial.print(",");
  Serial.print(convert_int16_to_str(accelerometer_y));
  Serial.print(",");
  Serial.print(convert_int16_to_str(accelerometer_z));
  Serial.println();
  delay(200);
}

Ich denke du magst

Origin blog.csdn.net/alpha105/article/details/131024821
Empfohlen
Rangfolge