Merkurino a akcelerometr 6050 i2c

Někdy vás možná napadlo, že by bylo užitečné vědět reálný náklon vozítka nebo ovladače.

K tomu se hodí integrovaný akcelerometr s gyroskopem a jako bonus navíc je digitální teploměr.

Data získáte pouze dvěma datovými vodiči plus napájení zem a 3-5V.
Vcc – in4(+5V)
GND – in4(gnd)
SCL – inA5a(data)
SDA – in4(data)

merkurino a gyroskop 6050 i2c 4w

Kód programu s výstupem na seriovou linku a LCD displej 16×2 je zde:

//upravený program: Test MPU6050 a LCD 16x2
// zdroj: http://blog.filipeflop.com/sensores/tutorial-acelerometro-mpu6050-arduino.html

//připojení knihoven
 #include<Wire.h>
 #include <LiquidCrystal.h>
// zapojení lcd
 LiquidCrystal lcd(13, 12, 8, 7, 4, 2);

//definice I2C MPU6050
 const int MPU=0x68;
 //proměnné pro akcelerometr a gyroskop
 int AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
 void setup()
 {
   Serial.begin(115200);
   //Inicializace LCD
   lcd.begin(16, 2);
   Wire.begin();
   Wire.beginTransmission(MPU);
   Wire.write(0x6B);

  //Inicializace MPU-6050
   Wire.write(0);
   Wire.endTransmission(true);

  //Informacoes iniciais do display
   lcd.setCursor(0,0);
   lcd.print();
   lcd.setCursor(0,1);
   lcd.print();
   delay(1000);
 }
 void loop()
 {
   Wire.beginTransmission(MPU);
   Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
   Wire.endTransmission(false);
   //odeslání požadavku do snímače
   Wire.requestFrom(MPU,14,true);
   //čtení hodnot 
   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(); //0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
   Tmp=Wire.read()<<8|Wire.read(); //0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
   GyX=Wire.read()<<8|Wire.read(); //0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
   GyY=Wire.read()<<8|Wire.read(); //0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
   GyZ=Wire.read()<<8|Wire.read(); //0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

  //zápis hodnoty X z acelerometru na serial a LCD
   Serial.print(); Serial.print(AcX);
   lcd.setCursor(0,0);
   //lcd.print("X=");
   lcd.print(AcX/10);
   lcd.print();

  //zápis hodnoty Y z acelerometru na serial a LCD
   Serial.print(); Serial.print(AcY);
   lcd.setCursor(6,0);
   //lcd.print("Y=");
   lcd.print(AcY/10);
   lcd.print();

  //zápis hodnoty Z z acelerometru na serial a LCD
   Serial.print(); Serial.print(AcZ);
   lcd.setCursor(11,0);
   //lcd.print("Z=");
   lcd.print(AcZ/10);
   lcd.print();

  //zápis teploty na serial a přepočet na Celsius
   Serial.print(); Serial.print(Tmp/340.00+36.53);

  //zápis hodnoty X z gyroskopu na serial a LCD
   Serial.print(); Serial.print(GyX);
   lcd.setCursor(0,1);
   //lcd.print("X=");
   lcd.print(GyX/10);
   lcd.print();

  //zápis hodnoty X z gyroskopu na serial a LCD 
   Serial.print(); Serial.print(GyY);
   lcd.setCursor(6,1);
   //lcd.print(" Y=");
   lcd.print(GyY/10);
   lcd.print();

  //zápis hodnoty X z gyroskopu na serial a LCD
   Serial.print(); Serial.println(GyZ);
   lcd.setCursor(10,1);
   //lcd.print("Z=");
   lcd.print(GyZ/10);
   lcd.print();

  //zápis teploty na LCD
  lcd.setCursor(14,1);
   //lcd.print(" T:");
   lcd.print(Tmp/340.00+36.53);
   lcd.print();

  //počkej 300ms
   delay(300);
 }

 

Napsat komentář