Mpu 9250

Тема в разделе "Arduino & Shields", создана пользователем Eagl69, 6 апр 2021.

  1. Eagl69

    Eagl69 Нуб

    Добрый день!
    Подскажите как получать данные с гироскопа? подключаю библиотеку "MPU9250.h", пишет датчик не найден, нашел код, но не могу разобраться с показаниями, тут не перепутан акселерометр и гироскоп? а также не пойму показания оси Z
    Код (C++):
    #include <Wire.h>
    #include <TimerOne.h>
    #include <LiquidCrystal.h>
    #define MPU9250_ADDRESS 0x68
    #define MAG_ADDRESS 0x0C
    #define GYRO_FULL_SCALE_250_DPS 0x00
    #define GYRO_FULL_SCALE_500_DPS 0x08
    #define GYRO_FULL_SCALE_1000_DPS 0x10
    #define GYRO_FULL_SCALE_2000_DPS 0x18
    #define ACC_FULL_SCALE_2_G 0x00
    #define ACC_FULL_SCALE_4_G 0x08
    #define ACC_FULL_SCALE_8_G 0x10
    #define ACC_FULL_SCALE_16_G 0x18
    // This function read Nbytes bytes from I2C device at address Address.
    // Put read bytes starting at register Register in the Data array.
    void I2Cread(uint8_t Address, uint8_t Register, uint8_t Nbytes, uint8_t* Data)
        {
          // Set register address
          Wire.beginTransmission(Address);
          Wire.write(Register);
          Wire.endTransmission();
          // Read Nbytes
          Wire.requestFrom(Address, Nbytes);
          uint8_t index=0;
          while (Wire.available())
          Data[index++]=Wire.read();
        }
    // Write a byte (Data) in device (Address) at register (Register)
    void I2CwriteByte(uint8_t Address, uint8_t Register, uint8_t Data)
        {
          // Set register address
          Wire.beginTransmission(Address);
          Wire.write(Register);
          Wire.write(Data);
          Wire.endTransmission();
        }
    // Initial time
    long int ti;
    volatile bool intFlag=false;
    // Initializations

    // initialize the library by associating any needed LCD interface pin
          // with the arduino pin number it is connected to
          const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
          LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
         
    void setup()
        {
          // Arduino initializations
          Wire.begin();
          Serial.begin(115200);
     
          // Set accelerometers low pass filter at 5Hz
          I2CwriteByte(MPU9250_ADDRESS,29,0x06);
          // Set gyroscope low pass filter at 5Hz
          I2CwriteByte(MPU9250_ADDRESS,26,0x06);
          // Configure gyroscope range
          I2CwriteByte(MPU9250_ADDRESS,27,GYRO_FULL_SCALE_1000_DPS);
          // Configure accelerometers range
          I2CwriteByte(MPU9250_ADDRESS,28,ACC_FULL_SCALE_4_G);
          // Set by pass mode for the magnetometers
          I2CwriteByte(MPU9250_ADDRESS,0x37,0x02);
          // Request continuous magnetometer measurements in 16 bits
          I2CwriteByte(MAG_ADDRESS,0x0A,0x16);
        }

    // Main loop, read and display data
    void loop()
        {  
          // Read accelerometer and gyroscope
          uint8_t Buf[14];
          I2Cread(MPU9250_ADDRESS,0x3B,14,Buf);
          // Create 16 bits values from 8 bits data
          // Accelerometer
          int16_t ax=-(Buf[0]<<8 | Buf[1]);
          int16_t ay=-(Buf[2]<<8 | Buf[3]);
          int16_t az=Buf[4]<<8 | Buf[5];
          // Gyroscope
          int16_t gx=-(Buf[8]<<8 | Buf[9]);
          int16_t gy=-(Buf[10]<<8 | Buf[11]);
          int16_t gz=Buf[12]<<8 | Buf[13];
          // Display values
       // Accelerometer
          Serial.print (ax,DEC); //крен?
         Serial.print (" aкрен ");
    Serial.print (ay,DEC);
    Serial.print (" ay ");
    Serial.print (az,DEC);
    Serial.print (" az ");
    // Gyroscope
         Serial.print (gx,DEC); //тангаж?
         Serial.print (" gтангаж ");
    Serial.print (gy,DEC);
    Serial.print (" gy ");
    Serial.print (gz,DEC);
    Serial.println (" gz ");


      delay(100);
       }
     
  2. dreadfull

    dreadfull Гик

    если пишет что датчик не найден, то или не правильно подключили, или бракованный датчик.
    обычно датчики сразу берутся парами.
     
  3. dreadfull

    dreadfull Гик

    тангаж и крен это углы, а вы спрашиваете за показания гироскопов которые показывают изменения угла. вы лучше напишите что именно вам нужно.