autoCalibrateAccelerometerOffset() Почему значения Z колеблются от 0 до 1g в статическом состоянии?

Я попытался реализовать функцию autoCalibrateAccelerometerOffset() с помощью кода ниже на Arduino Genuino 101.

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

Когда я вижу данные на последовательном мониторе или в моем файле, созданном с помощью обработки, значения ускорения Z изменяются от 1~0,99 до 0,00 g.

Я думаю, что в моем коде есть ошибка.

#include "SoftwareSerial.h"
#include "CurieIMU.h"

float sensorVals[] = {0,0,0}; 

void setup() {

    Serial.begin(9600); 
    while (!Serial);    

    Serial.println("Inizializzazione del device...");
    CurieIMU.begin();

    CurieIMU.setAccelerometerRange(2);
    CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS,0);
    CurieIMU.autoCalibrateAccelerometerOffset(Y_AXIS,0);
    CurieIMU.autoCalibrateAccelerometerOffset(Z_AXIS,1);
}

void loop() {

    sensorVals[0] = CurieIMU.readAccelerometerScaled(0);
    sensorVals[1] = CurieIMU.readAccelerometerScaled(1);
    sensorVals[2] = CurieIMU.readAccelerometerScaled(2);

    Serial.print(sensorVals[0]); 
    Serial.print(",");
    Serial.print(sensorVals[1]);
    Serial.print(",");
    Serial.println(sensorVals[2]);
    delay(100);
}

, 👍-1

Обсуждение

Что произойдет, если добавить CurieIMU.autoCalibrateGyroOffset(); сразу после CurieIMU.begin();?, @VE7JRO

Знаете ли вы, что ось Z у вас ориентирована так, как и ожидалось?, @Dave X

Я голосую за закрытие этого старого заброшенного вопроса, поскольку информация, которая сделает его доступным для ответа, так и не была предоставлена. Очевидный способ отладки — распечатать как необработанные, так и откалиброванные значения. Это покажет, является ли это ошибкой чтения или более вероятным случаем калибровки, «калибрующей» гравитацию., @Chris Stratton

Если он калибрует гравитацию, почему он переключается между значениями? Мне было бы интересно увидеть его откалиброванным, а затем слегка наклоненным по X/Y, чтобы увидеть, есть ли в строках с "Z: 0" также X/Y: 0 (они не должны), и если это так, то, скорее всего, проблема с датчиком или слишком быстрым считыванием с датчика, или что-то в этом роде. Я просто не понимаю, как калибровка Z переключается между 0 и 1 согласно образцу, @AndrewP

@SDsolar, потому что это специфическая функция библиотеки CURIE IMU, совместимая только с Arduino и Genuino 101., @Andrea Ciufo

@ChrisStratton проблема, по моему мнению, связана с функцией официальной библиотеки, а не с показаниями датчика, поскольку без применения функции калибровки в тех же условиях и без возмущений показания датчика не имеют никаких колебательных значений, @Andrea Ciufo