Подключение гироскопа GY-521 MPU-6050 к Arduio

$ 12

Данный гироскоп-акселерометр GY-521, на чипе MPU-6050 содержит трех координатный  гироскоп , акселерометр , температурный датчик. Использует шину IIS (I2C). Питается от — 3.3 вольт.

Подключение:

  • Вывод 3.3V Arduino — Vcc
  • Вывод GND Arduino — GND
  • Аналоговый вывод A4 Arduino — SDA
  • Аналоговый вывод A5 Arduino — SCL

Вот пример для проверки, используется фильтр Кальмана:

#include <LiquidCrystal_I2C.h>

#include <Wire.h>
#include "Kalman.h"
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

Kalman kalmanX;
Kalman kalmanY;

uint8_t IMUAddress = 0x68;

/* IMU Data */
int16_t accX;
int16_t accY;
int16_t accZ;
int16_t tempRaw;
int16_t gyroX;
int16_t gyroY;
int16_t gyroZ;

double accXangle; // Angle calculate using the accelerometer
double accYangle;
double temp;
double gyroXangle = 180; // Angle calculate using the gyro
double gyroYangle = 180;
double compAngleX = 180; // Calculate the angle using a Kalman filter
double compAngleY = 180;
double kalAngleX; // Calculate the angle using a Kalman filter
double kalAngleY;

uint32_t timer;

void setup() {

  Serial.begin(115200);
  Wire.begin();
  Serial.begin(9600);
  lcd.init();                    
  lcd.backlight();            

  i2cWrite(0x6B,0x00); // Disable sleep mode      
  kalmanX.setAngle(180); // Set starting angle
  kalmanY.setAngle(180);
  timer = micros();
}

void loop() {
  /* Update all the values */
  uint8_t* data = i2cRead(0x3B,14);
  accX = ((data[0] << 8) | data[1]);
  accY = ((data[2] << 8) | data[3]);
  accZ = ((data[4] << 8) | data[5]);
  tempRaw = ((data[6] << 8) | data[7]);
  gyroX = ((data[8] << 8) | data[9]);
  gyroY = ((data[10] << 8) | data[11]);
  gyroZ = ((data[12] << 8) | data[13]);

  /* Calculate the angls based on the different sensors and algorithm */
  accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
  accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG;  

  double gyroXrate = (double)gyroX/131.0;
  double gyroYrate = -((double)gyroY/131.0);
  gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate
  gyroYangle += kalmanY.getRate()*((double)(micros()-timer)/1000000);

  kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter
  kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);
  timer = micros();

  lcd.setCursor (0,0);
  lcd.print ("X=");
  lcd.print (kalAngleX,0);
  lcd.print (" Y=");
  lcd.print (kalAngleY,0);
  delay (100);
  lcd.clear ();
Serial.println();
    Serial.print("X:");
    Serial.print(kalAngleX,0);
    Serial.print(" ");
  
    Serial.print("Y:");
    Serial.print(kalAngleY,0);
    Serial.println(" ");
  // The accelerometer's maximum samples rate is 1kHz
}
void i2cWrite(uint8_t registerAddress, uint8_t data){
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.write(data);
  Wire.endTransmission(); // Send stop
}
uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) {
  uint8_t data[nbytes];
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.endTransmission(false); // Don't release the bus
  Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading
  for(uint8_t i = 0; i < nbytes; i++)
    data [i]= Wire.read();
  return data;
}

 

Подключение гироскопа GY-521 MPU-6050 к Arduio: 9 комментариев

  1. Leonid

    от 5 вольт гироскоп работать не будет? подскажите простенькую схемку, как из 5В получить 3,3В

  2. Алексей

    Конкретно на этой плате GY-521 (которая на картинке вначале статьи) в схеме уже стоит стабилизатор на 3 вольта. Так что ничего не нужно, подключайте +5В.

  3. Денис

    Будет работать и от 5. И даже желательно его питать от 5 вольт. Заметил везде пишут 3V3, но это не правильно. Там внутри стабилизатор стоит

  4. Павел

    На ардуино студио вроде стартует, а вот visual studio microavr выкидывает ошибку

    uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) {
    в этой строке — uint8_t data[nbytes];

    In function ‘uint8_t* i2cRead(uint8_t, uint8_t)
    Sketch1.ino:88:9: warning: address of local variable ‘data’ returned [-Wreturn-local-addr]
    :uint8_t data[nbytes]
    Error compiling project sources

Добавить комментарий для Leonid Отменить ответ

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code