Использование Adafruit Bno055 в режиме компаса

Я пытаюсь использовать датчик BNO055 в качестве компаса, с Arduino Uno. Лист данных сообщает, что датчик BNO055 имеет режим COMPASS. В соответствии с таблицей данных этот режим является режимом слияния, и он объединяет данные от двух датчиков, датчиков гироскопа и магнитометра и сам рассчитывает меры для возврата данных в соответствии с настройкой.

Поэтому я подумал, что используя этот код, я смогу получить абсолютную ориентацию устройства в 360 градусов

if(!bno.begin(bno.OPERATION_MODE_COMPASS)) <--- Я добавил эту строку, чтобы запустить режим компаса.

sensors_event_t event; bno.getEvent(&event); <---- Я думал, что смогу получить данные датчика режима сварки, как это.

Я хочу знать, если что-то не так с моим кодом.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

Adafruit_BNO055 bno = Adafruit_BNO055(55);
signed char gyro, accel, mag;

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Orientation Sensor Test"); Serial.println("");

  /* Initialise the sensor */
  if(!bno.begin(bno.OPERATION_MODE_COMPASS))
  {
    /* There was a problem detecting the BNO055 ... check your connections */
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }

  /* Display the current temperature */
  int8_t temp = bno.getTemp();
  signed char tempe;
  Serial.print("Current Temperature: ");
  Serial.print(temp);
  Serial.println(" C");
  Serial.println("");


  while(!bno.isFullyCalibrated());
  Serial.println("calibration finished!");

  delay(1000);

  //bno.setMode();
  bno.setExtCrystalUse(true);
}

void loop(void) 
{
  /* Get a new sensor event */ 
  sensors_event_t event; 

  bno.getEvent(&event);

  Serial.print("x : ");
  Serial.print(event.orientation.x); 
  Serial.print("\ty : "); 
  Serial.print(event.orientation.y); 
  Serial.print("\tz : ");
  Serial.println(event.orientation.z); 


  /* Display calibration status for each sensor. */
  uint8_t system, gyro, accel, mag = 0;
  bno.getCalibration(&system, &gyro, &accel, &mag);

  Serial.print("CALIBRATION: Sys=");

  Serial.print(system, DEC);
  Serial.print(" Gyro=");
  Serial.print(gyro, DEC);
  Serial.print(" Accel=");
  Serial.print(accel, DEC);
  Serial.print(" Mag=");
  Serial.println(mag, DEC);


  delay(300);

}

И с этим кодом я получил такой результат, но я не уверен, что означает каждая ось.

введите описание изображения здесь

Я думаю, что значение оси x описывает угол между эталонным направлением и направлением, в котором движется датчик, при условии, что он стоит в Арктике. Я хотел бы знать, правильна ли моя идея. Если нет, пожалуйста, скажите мне, что не так. Спасибо.

0 ответов

Другие вопросы по тегам