Использование 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 описывает угол между эталонным направлением и направлением, в котором движется датчик, при условии, что он стоит в Арктике. Я хотел бы знать, правильна ли моя идея. Если нет, пожалуйста, скажите мне, что не так. Спасибо.