Last active
March 1, 2022 08:47
-
-
Save imneonizer/2afd15100ff016524a3347ff133ae3cd to your computer and use it in GitHub Desktop.
MPU6050_esp8266
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Wire.h> | |
#include <ESP8266WiFi.h> | |
const int MPU_addr = 0x68; // I2C address of the MPU-6050 | |
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; | |
float ax = 0, ay = 0, az = 0, gx = 0, gy = 0, gz = 0, Amp=0; | |
// SCL -> D1 | |
// SDA -> D2 | |
void setup() | |
{ | |
Serial.begin(115200); | |
Wire.begin(); | |
Wire.beginTransmission(MPU_addr); | |
Wire.write(0x6B); // PWR_MGMT_1 register | |
Wire.write(0); // set to zero (wakes up the MPU-6050) | |
Wire.endTransmission(true); | |
} | |
void loop(){ | |
// create an array to store sampling data for inferencing | |
// 19Hz * 5 sec -> 95 samples, for 7 axis input | |
float buffer[95][7]; | |
// fill data into the buffer | |
for (int i=0; i<=95; i++){ | |
mpu_read(); | |
buffer[i][0] = ax; | |
buffer[i][1] = ay; | |
buffer[i][2] = az; | |
buffer[i][3] = gx; | |
buffer[i][4] = gy; | |
buffer[i][5] = gz; | |
buffer[i][6] = Amp; | |
Serial.print(ax); | |
Serial.print(","); | |
Serial.print(ay); | |
Serial.print(","); | |
Serial.print(az); | |
Serial.print(","); | |
Serial.print(gx); | |
Serial.print(","); | |
Serial.print(gy); | |
Serial.print(","); | |
Serial.print(gz); | |
Serial.print(","); | |
Serial.println(Amp); | |
delay(50); // to maintain the 19Hz frequency | |
} | |
} | |
void mpu_read(){ | |
// read sensor data | |
Wire.beginTransmission(MPU_addr); | |
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) | |
Wire.endTransmission(false); | |
Wire.requestFrom(MPU_addr, 14, true); // request a total of 14 registers | |
AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) | |
AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) | |
AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) | |
Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L) | |
GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L) | |
GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L) | |
GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L) | |
// scale the readings | |
ax = (AcX - 2050) / 16384.00; | |
ay = (AcY - 77) / 16384.00; | |
az = (AcZ - 1947) / 16384.00; | |
gx = (GyX + 270) / 131.07; | |
gy = (GyY - 351) / 131.07; | |
gz = (GyZ + 136) / 131.07; | |
// calculating Amplitute vactor for 3 axis | |
float Raw_Amp = pow(pow(ax, 2) + pow(ay, 2) + pow(az, 2), 0.5); | |
Amp = Raw_Amp * 10; // Mulitiplied by 10 bcz values are between 0 to 1 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment