GY-85 — это девятиосный модуль, позволяющий определить положение устройства в пространстве.
Этот модуль содержит в себе 3 датчика:
- акселерометр adxl345;
- магнитометр hmc5883l;
- гироскоп itg3205.
Про акселерометр adxl345 было написано здесь: http://studrobots.ru/adxl345-arduino/.
Про магнитометр hmc5883l было здесь: http://studrobots.ru/magnetometer-hmc5883l-arduino/.
Осталось рассмотреть гироскоп.
Каждый из датчиков (и модуль в целом) подключаются по интерфейсу I2C, если у вас arduino Uno, то:
SCL -> A5
SDA -> A4
GND -> GND
3.3V -> 3.3V
Скачаем библиотеку для работы с itg3200 здесь: https://code.google.com/archive/p/itg-3200driver/downloads.
Запустим пример ITG3200_test, но изменим строку
1 |
gyro.init(ITG3200_ADDR_AD0_HIGH); |
на
1 |
gyro.init(ITG3200_ADDR_AD0_LOW); |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
// ITG-3200_test // Copyright 2010-2011 Filipe Vieira & various contributors. // http://code.google.com/p/itg-3200driver // Simple test of gyro sensors output using default settings. #include <Wire.h> #include <ITG3200.h> ITG3200 gyro = ITG3200(); float x, y, z; int ix, iy, iz; void setup(void) { Serial.begin(9600); Wire.begin(); // if experiencing gyro problems/crashes while reading XYZ values // please read class constructor comments for further info. delay(1000); // Use ITG3200_ADDR_AD0_HIGH or ITG3200_ADDR_AD0_LOW as the ITG3200 address // depending on how AD0 is connected on your breakout board, check its schematics for details gyro.init(ITG3200_ADDR_AD0_LOW); Serial.print("zeroCalibrating..."); gyro.zeroCalibrate(2500, 2); Serial.println("done."); } void loop(void) { while (gyro.isRawDataReady()) { /* // Reads uncalibrated raw values from the sensor gyro.readGyroRaw(&ix,&iy,&iz); Serial.print("X1:"); Serial.print(ix); Serial.print(" Y:"); Serial.print(iy); Serial.print(" Z:"); Serial.println(iz); */ /* // Reads calibrated raw values from the sensor gyro.readGyroRawCal(&ix,&iy,&iz); Serial.print("X2:"); Serial.print(ix); Serial.print(" Y:"); Serial.print(iy); Serial.print(" Z:"); Serial.println(iz); */ // Reads calibrated values in deg/sec gyro.readGyro(&x, &y, &z); Serial.print("X3:"); Serial.print(x); Serial.print(" Y:"); Serial.print(y); Serial.print(" Z:"); Serial.println(z); delay(50); } } |
Сначала датчик калибруется.
После этого вы можете получить сырые данные гироскопа, откалиброванные и преобразованные в град/сек (в примере используется последний вариант).
Запустите программу. Вы увидите, что в покое значения по осям близки к нулю. Попробуйте повращать датчик и вы увидите, как значения изменятся.