Датчик 10-степеней свободы Troyka-IMU

Тема в разделе "Arduino & Shields", создана пользователем Ramterdam, 2 янв 2020.

  1. Ramterdam

    Ramterdam Гик

    Купил датчик IMU-сенсор для выполнения задачи, связанной с балансирующим роботом(машинкой). Открыл пример из библиотеки, ни в примере, ни в файле .h ничего не менял, датчик паяльником не трогал и никак не портил, только что вынул из коробки. Суть в том, что по показаниям в COM порту видно, что показания с акселерометра по оси Z никак не меняются, при том, что все остальные показания, а именно у гироскопа по всем 3 осям, у акселерометра по 2 осям, у компаса и у барометра, все показания так или иначе изменяются. Не понимаю в чём проблема.
    Код:
    Код (C++):
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулями IMU
    #include <TroykaIMU.h>
    // создаём объект для работы с гироскопом
    Gyroscope gyro;
    // создаём объект для работы с акселерометром
    Accelerometer accel;
    // создаём объект для работы с компасом
    Compass compass;
    // создаём объект для работы с барометром
    Barometer barometer;
    // калибровочные значения компаса
    // полученные в калибровочной матрице из примера «compassCalibrateMatrix»
    const double compassCalibrationBias[3] = {
      524.21,
      3352.214,
      -1402.236
    };
    const double compassCalibrationMatrix[3][3] = {
      {1.757, 0.04, -0.028},
      {0.008, 1.767, -0.016},
      {-0.018, 0.077, 1.782}
    };
    void setup()
    {
      // открываем последовательный порт
      Serial.begin(115200);
      // выводим сообщение о начале инициализации
      Serial.println("Begin init...");
      // инициализация гироскопа
      gyro.begin();
      // инициализация акселерометра
      accel.begin();
      // инициализация компаса
      compass.begin();
      // инициализация барометра
      barometer.begin();
      // калибровка компаса
      compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias);
      // выводим сообщение об удачной инициализации
      Serial.println("Initialization completed");
      Serial.println("Gyroscope\t\t\tAccelerometer\t\t\tCompass\t\tBarometer");
    }
    void loop()
    {
      // вывод угловой скорости в градусах в секунду относительно оси X
      Serial.print(gyro.readDegPerSecX());
      Serial.print("\t");
      // вывод угловой скорости в градусах в секунду относительно оси Y
      Serial.print(gyro.readDegPerSecY());
      Serial.print("\t");
      // вывод угловой скорости в градусах в секунду относительно оси Z
      Serial.print(gyro.readDegPerSecZ());
      Serial.print("\t\t");
      // вывод направления и величины ускорения в м/с² по оси X
      Serial.print(accel.readAX());
      Serial.print("\t");
      // вывод направления и величины ускорения в м/с² по оси Y
      Serial.print(accel.readAY());
      Serial.print("\t");
      // вывод направления и величины ускорения в м/с² по оси Z
      Serial.print(accel.readAZ());
      Serial.print("\t\t");
      // выводим азимут относительно оси Z
      Serial.print(compass.readAzimut());
      Serial.print(" Degrees\t");
      // вывод значения абсолютного давления
      Serial.print(barometer.readPressureMillibars());
      Serial.print("\t");
      // вывод значения температуры окружающей среды
      Serial.print(barometer.readTemperatureC());
      Serial.print("\t");
      Serial.println("");
      delay(100);
    }
    Библиотеку скачивал отсюда:
    https://github.com/amperka/Troyka-IMU
    Прошу помочь.
     
    Последнее редактирование: 3 янв 2020
  2. Ramterdam

    Ramterdam Гик

    Ещё вот, что интересно, у данного сенсора в описании на http://wiki.amperka.ru/продукты:troyka-imu-10-dof, не используются 2 пина.
    Тогда возникает вопрос:
    Зачем их придумали, раз если он есть на плате, то они зачем-то да нужны.
    Может ли проблема стоять в том, что один из "ненужных" пинов(их всего 2) отвечает как раз за показания с акселерометра по оси Z?
     
  3. issaom

    issaom Гуру

    Все датчики данного модуля сидят на шине i2c - два провода это необходимо и достаточно. Пример с углами не пробовали загружать для определения крена тангажа и рысканья Madgwick6DOF.ino? У меня все заработало сразу - думаю что у вас просто бракованный датчик... Пишите в техподдержку через обратную форму на сайте.
     
    Ramterdam и NikitOS нравится это.
  4. Ramterdam

    Ramterdam Гик

    Пример с углами не загружал. Думаю стоит попробовать. Спасибо.
     
  5. Ramterdam

    Ramterdam Гик

    Спасибо огромное ещё раз! Попробовал только щас, просто предыдущие дни паял моторный драйвер для машинки. Всё отлично заработало.
     
    issaom нравится это.