Датчик акселерометр \гироскоп

1 513

Датчик акселерометр \гироскоп

С помощью комбинированного модуля гироскопа и акселерометра можно измерять ориентацию робота в пространстве в углах поворота вокруг трех осей: продольной оси «X» (угол крена), поперечной оси «Y» (угол тангажа), вертикальной оси «Z» (угол рыскания).

Ориентация осей X и Y относительно корпуса указана на плате датчика. «Стрелка» поворота указывает в сторону увеличения угла. Ось «Z» направлено вертикально вверх относительно «лицевой» стороны платы, на которой располагаются все компоненты. Угол поворота вокруг оси увеличивается при повороте по часовой стрелке.

Использование

 

Подключение

Модуль датчика положения использует интерфейс I2C и подключается к любому из двух соответствующих портов I2C контроллера "Трекдуино".

Схема подключения проводов:

На датчике На контроллере (I2C)
VCC 5V
GND GND
SCL SCL
SDA SDA

Программирование

Блок, необходимые для работы с датчиком, расположены в группе блоков «Датчики» и называется «Положение»

При работе с датчиком положения из текстовой среды необходимо вручную подключать соответствующую библиотеку gyro_accel.h и вызывать функцию калиброки setupAccel() в секции setup():

#include <accel_gyro.h> //подключение библиотеки
 
void setup()
{
  setupAccel();//калибровка. Датчик должен неподвижно располагаться на горизонтальной поверхности.
}
 
void loop()
{
  //ваш код
}

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

Блок и генерируемая им функция Описание

 
float readAccelAngle(char axis, int mode)
Возвращает дробное значение типа float, соответствующее углу поворота по оси.

Аргументы:
char axis - инетерующая ось. Допустимые значения - 'x', 'y', 'z'.
int mode - режим расчета выдаваемых значений. Допустимые значения: 
0 или RAW_GYRO - только гироскоп
1 или RAW_ACCEL - только акселерометр
2 или FILTERED - усредненный

Режимы работы

Так как датчик совмещает в себе два устройства (гироскоп и акселерометр), то и выдавать показания он может основаваясь на каждом из них (режимы «только акселерометр» и «только гироскоп»), либо комбинируя эти показания для усреднения и стабилизации (режим «усредненный»)

Режим «Только акселерометр»: углы измеряются только акселерометром на основании измерения вектора силы тяжести.

Плюсы: нет накапливающейся во времени погрешности

Минусы: показания крайне нестабильны, чувствительны к вибрации и боковым ускорениям

ежим «Только гироскоп»: углы измеряются гироскопом путем измерения угловых скоростей и интегрирования их по времени.

Плюсы: показания стабильны и мало подвержены влиянию случайных ускорений и вибрации

Минусы: ошибка накапливается во времени. Показания зависят от временных промежутков между измерениями. Чем чаще производятся измерения, тем точнее результат.

Режим «Усредненный» (рекомендуется в большинстве случаев): показания обоих датчиков программно комбинируются, взаимно устраняя недостатки друг друга. Показания акселерометра, ошибка в которых не накапливается во времени, «фильтруются» показаниями гироскопа, таким образом скачки в показаниях при случайных ускорениях и вибрации игнорируются.

Примеры использования в проектах

 

Вывод показаний по трем осям в последовательный порт

Генерируемый код:

#include <accel_gyro.h>
 
void setup()
{
  Serial.begin(115200);
  setupAccel();
}
 
void loop()
{
  Serial.print("X:");
  Serial.print(readAccelAngle('x',FILTERED));
  Serial.println();
  Serial.print("Y:");
  Serial.print(readAccelAngle('y',FILTERED));
  Serial.println();
  Serial.print("Z:");
  Serial.print(readAccelAngle('z',FILTERED));
  Serial.println();
  delay( 200 );