Arduino:Примеры/Genuino101CurieIMURawImuDataSerial
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Считывание данных с гироскопа и акселерометра одной функцией[1]
Этот пример показывает, как за один раз считывать «сырые» данные от акселерометра и гироскопа. Функция, используемая в этом примере, считывает все шесть значений сразу. Впрочем, существуют функции, позволяющие считывать значения от какого-либо одного датчика или от какой-либо одной оси датчика – они тоже указаны в этом скетче.
Необходимое оборудование
- Плата Arduino/Genuino 101
Цепь
Никакого дополнительного оборудования для этого примера не нужно.
Наиболее важные части скетча
Библиотека CurieIMU.h, дающая доступ ко всем параметрам, функциям и значениям IMU-чипа платы Arduino/Genuino 101. В этот чип встроены 3-осевой акселерометр и 3-осевой гироскоп. Библиотека Curie IMU является частью ядра платы 101 и загружается вместе с ее ключевыми файлами. В этом примере мы будем считывать сразу все «сырые» данные от датчика движения при помощи функции readMotionSensor().
Код
Чтобы получить «сырые» данные, соответствующие реальному положению платы в пространстве, датчикам может потребоваться калибровка. Чтобы запустить ее, поменяйте строчку
int calibrateOffsets = 1;
на
int calibrateOffsets = 0;
, а затем поместите плату горизонтально на ровной плоской поверхности компонентами кверху. На мониторе порта будут показаны значения смещения до и после калибровки. Если вы не двигали плату, «сырые» данные должны быть близки к нулю, за исключением оси Z, где значение будет равно или близко к «16767», что соответствует 1G в диапазоне +/- 2G.
/*
===============================================
Скетч-пример для библиотеки Curie IMU, предназначенной для
устройств Intel Curie. Все права защищены и принадлежат
Intel Corporation (2015).
Основан на демонстрационном Arduino-скетче Джеффа Роуберга
(Jeff Rowberg) для библиотеки I2Cdev и устройства MPU6050:
https://github.com/jrowberg/i2cdevlib
===============================================
Код библиотеки I2Cdev размещен в соответствии с лицензией MIT.
Права принадлежат Джеффу Роубергу.
Настоящим разрешается любому лицу, владеющему копией этой программы
и сопутствующих документационных файлов (далее – «ПО»), а также тем,
кому это ПО поставляется, обращаться с этим ПО без ограничений,
включая права на использование, копирование, модификацию, слияние,
публикацию, распространение, сублицензирование и/или продажу копий
ПО, но при соблюдении следующих условий:
Запись об авторском праве, написанная выше, а также запись о
разрешениях, написанная ниже, должна быть включена во все копии
или существенные части этого ПО.
ДАННОЕ ПО ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗО ВСЯКИХ ГАРАНТИЙ, ЯВНЫХ
ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ НА КОММЕРЧЕСКОЕ КАЧЕСТВО,
ПРИГОДНОСТЬ ПРИМЕНЕНИЯ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ И НЕНАРУШЕНИЕ ЧЬИХ-ЛИБО
ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ
НЕСУТ ОТВЕТСВЕННОСТИ ЗА ЛЮБЫЕ ЖАЛОБЫ, УЩЕРБ И ПРОЧИЕ ПРЕТЕНЗИИ,
БУДЬ ТО ИСК ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ И Т.Д., ВОЗНИКШИЙ ИЗ ИЛИ
В СВЯЗИ С ПО, ИСПОЛЬЗОВАНИЯ ПО ИЛИ ПРОЧИХ ДЕЙСТВИЙ С ПО.
===============================================
*/
#include "CurieIMU.h"
int ax, ay, az; // значения от акселерометра
int gx, gy, gz; // значения от гироскопа
const int ledPin = 13; // контакт для светодиода-индикатора
boolean blinkState = false; // статус светодиода
int calibrateOffsets = 1; // переменная для включения/отключения калибровки
void setup() {
Serial.begin(9600); // инициализируем последовательную коммуникацию
while (!Serial); // ждем открытия последовательного порта
// инициализируем IMU-устройство:
Serial.println("Initializing IMU device..."); // "Инициализация IMU-устройства..."
CurieIMU.begin();
// проверяем подключение:
Serial.println("Testing device connections..."); // "Проверка подключения устройства..."
if (CurieIMU.begin()) {
Serial.println("CurieIMU connection successful"); // "CurieIMU успешно подключено"
} else {
Serial.println("CurieIMU connection failed"); // "Подключение CurieIMU не удалось"
}
// используйте код ниже, чтобы откалибровать смещение на акселерометре и гироскопе:
if (calibrateOffsets == 1) {
Serial.println("Internal sensor offsets BEFORE calibration..."); // "Смещение ПЕРЕД калибровкой..."
Serial.print(CurieIMU.getAccelerometerOffset(X_AXIS));
Serial.print("\t"); // -76
Serial.print(CurieIMU.getAccelerometerOffset(Y_AXIS));
Serial.print("\t"); // -235
Serial.print(CurieIMU.getAccelerometerOffset(Z_AXIS));
Serial.print("\t"); // 168
Serial.print(CurieIMU.getGyroOffset(X_AXIS));
Serial.print("\t"); // 0
Serial.print(CurieIMU.getGyroOffset(Y_AXIS));
Serial.print("\t"); // 0
Serial.println(CurieIMU.getGyroOffset(Z_AXIS));
// используйте эти функции, если хотите задать компенсационные
// значения вручную; если хотите, чтобы эти значения выставились
// автоматически, используйте функцию autoCalibrate...()
//CurieIMU.setAccelerometerOffset(X_AXIS,495.3);
//CurieIMU.setAccelerometerOffset(Y_AXIS,-15.6);
//CurieIMU.setAccelerometerOffset(Z_AXIS,491.4);
//CurieIMU.setGyroOffset(X_AXIS,7.869);
//CurieIMU.setGyroOffset(Y_AXIS,-0.061);
//CurieIMU.setGyroOffset(Z_AXIS,15.494);
Serial.println("About to calibrate. Make sure your board is stable and upright"); // "Скоро начнется калибровка. Убедитесь, что плата лежит ровно, горизонтально и компонентами кверху"
delay(5000);
// Чтобы калибровка прошла правильно, IMU-устройство
// должно неподвижно лежать в горизонтальном положении:
Serial.print("Starting Gyroscope calibration and enabling offset compensation..."); // "Запускаем калибровку гироскопа и активируем компенсацию смещения..."
CurieIMU.autoCalibrateGyroOffset();
Serial.println(" Done"); // " Готово"
Serial.print("Starting Acceleration calibration and enabling offset compensation..."); // "Запускаем калибровку акселерометра и активируем компенсацию смещения..."
CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset(Y_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset(Z_AXIS, 1);
Serial.println(" Done"); // " Готово"
Serial.println("Internal sensor offsets AFTER calibration..."); // "Смещение ПОСЛЕ калибровки..."
Serial.print(CurieIMU.getAccelerometerOffset(X_AXIS));
Serial.print("\t"); // -76
Serial.print(CurieIMU.getAccelerometerOffset(Y_AXIS));
Serial.print("\t"); // -2359
Serial.print(CurieIMU.getAccelerometerOffset(Z_AXIS));
Serial.print("\t"); // 1688
Serial.print(CurieIMU.getGyroOffset(X_AXIS));
Serial.print("\t"); // 0
Serial.print(CurieIMU.getGyroOffset(Y_AXIS));
Serial.print("\t"); // 0
Serial.println(CurieIMU.getGyroOffset(Z_AXIS));
}
// делаем светодиод индикатором активности:
pinMode(ledPin, OUTPUT);
}
void loop() {
// считываем «сырые» данные от акселерометра и гироскопа:
CurieIMU.readMotionSensor(ax, ay, az, gx, gy, gz);
// если вы хотите извлечь данные только от акселерометра или только
// от гироскопа, используйте эти функции:
//CurieIMU.readAcceleration(ax, ay, az);
//CurieIMU.readRotation(gx, gy, gz);
// если вы хотите извлечь данные от какой-то одной оси,
// используйте эти функции
//ax = CurieIMU.readAccelerometer(X_AXIS);
//ay = CurieIMU.readAccelerometer(Y_AXIS);
//az = CurieIMU.readAccelerometer(Z_AXIS);
//gx = CurieIMU.readGyro(X_AXIS);
//gy = CurieIMU.readGyro(Y_AXIS);
//gz = CurieIMU.readGyro(Z_AXIS);
// показываем данные от гироскопа и акселерометра для всех 6 осей, разделяя их запятой:
Serial.print("a/g:\t");
Serial.print(ax);
Serial.print("\t");
Serial.print(ay);
Serial.print("\t");
Serial.print(az);
Serial.print("\t");
Serial.print(gx);
Serial.print("\t");
Serial.print(gy);
Serial.print("\t");
Serial.println(gz);
// мигаем светодиодом, сообщая об активности:
blinkState = !blinkState;
digitalWrite(ledPin, blinkState);
}
См.также
- Curie IMU Orientation Visualizer
- Curie IMU Accelerometer
- Curie IMU Accelerometer Orientation
- Curie IMU Gyro
- Curie IMU Shock Detect
- Curie IMU Step Count
- Curie IMU Tap Detect
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino