Акселерометры применяются для определения ускорения при движении устройства. Будем использовать монитор последовательного порта для получения информации об ускорении от модуля MPU6050.
Акселерометры применяются для определения ускорения при движении устройства. Будем использовать монитор последовательного порта для получения информации об ускорении от модуля MPU6050.
Используем выводы A4 (SDA) и A5 (SCL) платы Arduino Uno для связи с модулем MPU6050.
Перед тем как написать код, нам нужно стандартным способом подключить специализированные библиотеки I2Cdev и MPU6050. Теперь напишем скетч, который будет считывать данные с модуля и выдавать их в монитор последовательного порта.
#include "Wire.h" #include "I2Cdev.h" #include "MPU6050.h" MPU6050 accelgyro; int16_t ax, ay, az; int16_t gx, gy, gz; #define LED_PIN 13 bool blinkState = false; void setup() { Serial.begin(9600); Serial.println("Initializing I2C devices..."); Wire.begin(); accelgyro.initialize(); Serial.println("Testing device connections..."); if (accelgyro.testConnection()) { Serial.println("MPU6050 connection successful"); } else { Serial.println("MPU6050 connection failed"); while (1); } // Calibrate the gravity acceleration // accelgyro.setXAccelOffset(-1200); // accelgyro.setYAccelOffset(-2500); // accelgyro.setZAccelOffset(1988); Serial.print("X.Y.Z offset :\t"); Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); Serial.print(accelgyro.getZAccelOffset()); Serial.print("\n"); // initialize LED port pinMode(LED_PIN, OUTPUT); } void loop() { accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); 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\t"); Serial.print(gy); Serial.print("\t\t"); Serial.println(gz); // Convert acceleration to g and the gyroscope unit to dps (degree per second) Serial.print("a/g:\t"); Serial.print((float)ax / 16384); Serial.print("g\t"); Serial.print((float)ay / 16384); Serial.print("g\t"); Serial.print((float)az / 16384); Serial.print("g\t"); Serial.print((float)gx / 131); Serial.print("d/s \t"); Serial.print((float)gy / 131); Serial.print("d/s \t"); Serial.print((float)gz / 131); Serial.print("d/s \n"); delay(300); blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); }
Подключаем библиотеки, необходимые для работы скетча.
#include "Wire.h" #include "I2Cdev.h" #include "MPU6050.h"
Создаём объект accelgyro.
MPU6050 accelgyro;
Инициализируем шину I2C, а затем модуль MPU6050.
Wire.begin(); accelgyro.initialize();
Проверим связь с модулем.
if (accelgyro.testConnection()) { Serial.println("MPU6050 connection successful"); } else { Serial.println("MPU6050 connection failed"); while (1); }
Если вы хотите сделать результаты более близкими к реальности, то вы можете отрегулировать смещение MPU6050 перед его использованием. Если нет жестких требований, то этот шаг можно пропустить.
// accelgyro.setXAccelOffset(-1200); // accelgyro.setYAccelOffset(-2500); // accelgyro.setZAccelOffset(1988);
Выводим значения в монитор последовательного порта.
Serial.print("X.Y.Z offset :\t"); Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); Serial.print(accelgyro.getZAccelOffset()); Serial.print("\n");
В функции loop() считываем параметры акселерометра и параметры гироскопа.
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
После этого конвертируем значения в удобный вид и отправляем в монитор последовательного порта. Скомпилируйте и загрузите код на плату Arduino. Откройте монитор последовательного порта, поверните MPU6050, чтобы увидеть как будут меняться значения.