Arduino:Примеры/Genuino101CurieIMUAccelerometer

Материал из Онлайн справочника
Версия от 00:22, 14 декабря 2016; Myagkij (обсуждение | вклад) (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Считывание данных с акселерометра[1]

Этот пример показывает, как считывать значения с трех осей акселерометра, имеющегося в IMU платы Arduino/Genuino 101. Данные по каждой оси измеряются в пределах диапазона, заданного функцией setAccelerometerRange, и возвращаются в виде «сырых» значений, которые затем конвертируются в mg. Затем в мониторе порта для каждой из трех осей (X, Y и Z) выводится финальный результат.

Необходимое оборудование

  • Плата Arduino или Genuino 101

Цепь

Никакого дополнительного оборудования для этого примера не нужно.

Наиболее важные части скетча

Библиотека CurieIMU.h, дающая доступ ко всем параметрам, функциям и значениям IMU-чипа платы Arduino/Genuino 101. В этот чип встроены 3-осевой акселерометр и 3-осевой гироскоп. Библиотека Curie IMU является частью ядра платы 101 и загружается вместе с ее ключевыми файлами. В этом примере мы будем считывать «сырые» значения от акселерометра.

Функция float convertRawAcceleration(int aRaw), конвертирующая «сырые» данные от акселерометра (aRaw) в mg (тысячные доли g). Формулу в этой функции нужно подогнать под диапазон значений, заданный в функции setAccelerometerRange.

Код

Этот скетч максимально упрощен и не содержит никакой калибровки. Данные от акселерометра обновляются каждые 5 секунд.

/*
   Правообладатель – Intel Corporation (2015).  Все права защищены.

   Эта библиотека является бесплатной; ее можно распространять 
   и/или модифицировать согласно условиям Стандартной общественной
   лицензии ограниченного применения GNU (т.к. она выпущена Фондом
   свободного ПО) – либо версии 2.1 этой лицензии, либо более поздней
   версии (на ваш выбор). 

   Эта библиотека распространяется в надежде на то, что будет 
   полезна кому-либо, но БЕЗО ВСЯКИХ ГАРАНТИЙ – даже без гарантий на 
   коммерческое качество и пригодность применения для конкретных 
   целей. Более подробно читайте в Стандартной общественной лицензии
   ограниченного применения GNU. 

   Вы должны получить копию Стандартной общественной лицензии
   ограниченного применения вместе с этой библиотекой. Если не
   получили, напишите в Фонд бесплатного ПО на адрес: Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,    
   MA  02110-1301  USA 
*/

/*
   Этот скетч-пример демонстрирует, как можно использовать BMI160
   на модуле Intel Curie для считывания данных с акселерометра 
*/

#include "CurieIMU.h"

void setup() {
  Serial.begin(9600); // инициализируем последовательную коммуникацию
  while (!Serial);    // ждем открытия последовательного порта 

  // инициализируем IMU-устройство:
  Serial.println("Initializing IMU device...");  //  "Инициализация IMU-устройства..."
  CurieIMU.begin();

  // задаем диапазон акселерометра на 2G:
  CurieIMU.setAccelerometerRange(2);
}

void loop() {
  int axRaw, ayRaw, azRaw;         // «сырые» значения акселерометра
  float ax, ay, az;

  // считываем с IMU-устройства «сырые» значения акселерометра:
  CurieIMU.readAccelerometer(axRaw, ayRaw, azRaw);

  // конвертируем эти «сырые» значения в g:
  ax = convertRawAcceleration(axRaw);
  ay = convertRawAcceleration(ayRaw);
  az = convertRawAcceleration(azRaw);

  // показываем финальный результат для осей X, Y и Z:
  Serial.print("a:\t");
  Serial.print(ax);
  Serial.print("\t");
  Serial.print(ay);
  Serial.print("\t");
  Serial.print(az);
  Serial.println();
}

float convertRawAcceleration(int aRaw) {
  // т.к. мы используем диапазон 2G,
  // -2g соответствует «сырому» значению «-32768», а
  // +2g соответствует «сырому» значению «32768»
  
  float a = (aRaw * 2.0) / 32768.0;

  return a;
}

См.также

  1. Curie IMU Orientation Visualizer
  2. Curie IMU Accelerometer Orientation
  3. Curie IMU Gyro
  4. Curie IMU Raw Imu Data Serial
  5. Curie IMU Shock Detect
  6. Curie IMU Step Count
  7. Curie IMU Tap Detect

Внешние ссылки