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


1 ответ


1

Если вы не подпрыгиваете, пока это происходит, то это может быть:

  • Свободный провод
  • Ненадежный блок питания
  • Плохое заземление
  • Датчик неисправности
  • Странное магнитное поле/поток

Проверьте проводку, убедитесь, что все соединения надежны и т. д. Я уверен, вы это уже сделали.

Я понятия не имею, как проверить блок питания, но если у вас есть другой, вы можете подключить его. Также рассмотрите возможность сглаживания напряжения питания с помощью развязывающих конденсаторов (?)

Плохое заземление, всякие странные [штуки] случаются, когда вы не заземлили все как следует. Разные источники питания должны иметь общие заземления, но я подозреваю, что это здесь не применимо.

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

Странный поток. Я думаю, что датчик — это магнитный датчик, и, возможно, естественные вихри и потоки магнитного потока сговорились против вас. Уберите датчик подальше от источников питания, электрических вещей и, в частности, всего, что вы взламываете. Также поверните датчик на 90 градусов и посмотрите, происходит ли это (с радиочастотами он поляризует поля по-другому, а школа была давно, и я не помню, работает ли это также с магнитными полями)

,