МЫ СОЗДАЕМ И ПРОИЗВОДИМ
ЭЛЕКТРОННЫЕ НАБОРЫ И МОДУЛИ
Описание товара
Подробное описание товара
Общие сведения
Модуль GY-521 на микросхеме MPU6050 — это 3-осевой гироскоп и акселерометр на три координаты. Его можно использовать для определения положения в пространстве.
Характеристики
- Чип: MPU-6050
- Питание: 3,5-6 Вольта
- Режим связи: стандартный протокол IIC связи
- Чип встроенный 16bit АЦП
- Гироскопы в диапазоне 250 500 1000 2000 градусов / сек
- Диапазон ускорение: 2g, 4g,8 г, 16g
- Расстояние между контактный: 2,54
- размеры: 2,0 см х 1,6 см х 0,3 см
Подключение
Для питания модуля необходимо использовать строго 3.3V!
Gy-521 (mpu6050) | Arduino (Uno) |
---|---|
VCC | 3.3 V |
GND | GND |
SCL | A5 |
SDA | A4 |
Подробнее о модуле
Для работы с модулем предлагаем вам воспользоваться библиотекой Kalman.
Примеры
Вывод координат Х и У в монитор последовательного порта.
#include <Wire.h> #include "Kalman.h" Kalman kalmanX; Kalman kalmanY; uint8_t IMUAddress = 0x68; /* IMU Data */ int16_t accX; int16_t accY; int16_t accZ; int16_t tempRaw; int16_t gyroX; int16_t gyroY; int16_t gyroZ; <b>double</b> accXangle; // Angle calculate using the accelerometer <b>double</b> accYangle; <b>double</b> temp; <b>double</b> gyroXangle = 180; // Angle calculate using the gyro <b>double</b> gyroYangle = 180; <b>double</b> compAngleX = 180; // Calculate the angle using a Kalman filter <b>double</b> compAngleY = 180; <b>double</b> kalAngleX; // Calculate the angle using a Kalman filter <b>double</b> kalAngleY; uint32_t timer; <b>void</b> setup() { Wire.<b>begin</b>(); Serial.<b>begin</b>(9600); i2cWrite(0x6B,0x00); // Disable sleep mode kalmanX.setAngle(180); // Set starting angle kalmanY.setAngle(180); timer = micros(); } <b>void</b> loop() { /* Update all the values */ uint8_t* data = i2cRead(0x3B,14); accX = ((data[0] << 8) | data[1]); accY = ((data[2] << 8) | data[3]); accZ = ((data[4] << 8) | data[5]); tempRaw = ((data[6] << 8) | data[7]); gyroX = ((data[8] << 8) | data[9]); gyroY = ((data[10] << 8) | data[11]); gyroZ = ((data[12] << 8) | data[13]); /* Calculate the angls based on the different sensors and algorithm */ accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG; accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG; <b>double</b> gyroXrate = (<b>double</b>)gyroX/131.0; <b>double</b> gyroYrate = -((<b>double</b>)gyroY/131.0); gyroXangle += kalmanX.getRate()*((<b>double</b>)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate gyroYangle += kalmanY.getRate()*((<b>double</b>)(micros()-timer)/1000000); kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (<b>double</b>)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (<b>double</b>)(micros()-timer)/1000000); timer = micros(); Serial.println(); Serial.<b>print</b>("X:"); Serial.<b>print</b>(kalAngleX,0); Serial.<b>print</b>(" "); Serial.<b>print</b>("Y:"); Serial.<b>print</b>(kalAngleY,0); Serial.println(" "); // The accelerometer's maximum samples rate is 1kHz } <b>void</b> i2cWrite(uint8_t registerAddress, uint8_t data){ Wire.beginTransmission(IMUAddress); Wire.write(registerAddress); Wire.write(data); Wire.endTransmission(); // Send stop } uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) { uint8_t data[nbytes]; Wire.beginTransmission(IMUAddress); Wire.write(registerAddress); Wire.endTransmission(<b>false</b>); // Don't release the bus Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading <b>for</b>(uint8_t i = 0; i < nbytes; i++) data [i]= Wire.read(); <b>return</b> data; }
Если X и У равны 180, значит гироскоп находится в горизонтальной плоскости.
Комплектация
- 1х модуль GY-521;
- 1х Соединитель типа "ПАПА-ПАПА" прямой;
- 1х Соединитель типа "ПАПА-ПАПА" угловой;