#include <Wire.h>
// I2C адрес датчика (для MPU6050 обычно 0x68 или 0x69)
const uint8_t MPU_ADDR = 0x68;
int16_t AccX, AccY, AccZ;
float ax, ay, az;
void setup() {
// Инициализация последовательного порта для отладки
Serial.begin(115200);
// Инициализация шины I2C (SDA, SCL)
Wire.begin();
// Пробуждаем акселерометр (выводим из спящего режима PWR_MGMT_1)
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x6B); // Регистр управления питанием
Wire.write(0); // Записываем 0 для сброса спящего режима
Wire.endTransmission(true);
Serial.println("Инициализация акселерометра завершена.");
}
void loop() {
// Запрашиваем 6 байт данных ускорения, начиная с регистра 0x3B (ACCEL_XOUT_H)
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU_ADDR, (size_t)6, true);
if (Wire.available() >= 6) {
AccX = (Wire.read() << 8) | Wire.read(); // X axis (High | Low byte)
AccY = (Wire.read() << 8) | Wire.read(); // Y axis (High | Low byte)
AccZ = (Wire.read() << 8) | Wire.read(); // Z axis (High | Low byte)
// Перевод сырых значений в ускорение g (для диапазона ±2g делитель 16384.0)
ax = AccX / 16384.0;
ay = AccY / 16384.0;
az = AccZ / 16384.0;
// Вывод данных в консоль
Serial.print("Ускорение [g] -> ");
Serial.print("X: "); Serial.print(ax, 2);
Serial.print(" | Y: "); Serial.print(ay, 2);
Serial.print(" | Z: "); Serial.println(az, 2);
}
delay(200); // Опрос раз в 200 мс
}