How to calculate running speed using accelerometer sensor ?
Hi guys,
I am working with accelerometer sensor. I would like to turn speed value that you got. what should I do ? can you help me
Me code;
#include<Wire.h>
const int MPU_addr=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
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);
Serial.begin(57600);
}
void loop(){
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)
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53); //equation for temperature in degrees C from datasheet
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
Serial.print("HIZ:");Serial.println(sqrt( AcX^2 + AcY^2 + AcZ^2));
delay(333);
}
And me values Arduino com;
AcX = 0 | AcY = 0 | AcZ = 0 | Tmp = 36.53 | GyX = 0 | GyY = 0 | GyZ = 0
HIZ:1.41
AcX = 1112 | AcY = 15716 | AcZ = -3776 | Tmp = 26.27 | GyX = -624 | GyY = 2157 | GyZ = -1428
HIZ:nan
AcX = 976 | AcY = 15700 | AcZ = -4280 | Tmp = 26.46 | GyX = -493 | GyY = 266 | GyZ = -177
HIZ:nan
AcX = 900 | AcY = 15660 | AcZ = -4176 | Tmp = 26.46 | GyX = -522 | GyY = 287 | GyZ = -157
HIZ:nan
Asked by Hakan Bey on 2015-12-14 08:24:38 UTC
Comments
I didn't read through your code, but just giving a heads up that calculating velocity by integrating acceleration from an accelerometer will not be accurate at all. Here are some sources: http://www.chrobotics.com/library/accel-position-velocity, http://stackoverflow.com/questions/782
Asked by Airuno2L on 2015-12-14 08:55:57 UTC
Only way to do this that I can think about is to wear the accelerometer and run with many different speeds, thus collecting a lot of data. Then you can try applying some motion segmentation algorithms to recognize one running stride, isolate this data and do some machine learning to learn speed.
Asked by Mehdi. on 2015-12-14 10:01:39 UTC
Opps, my second link was cut short and I can't edit it. Here it is: http://stackoverflow.com/questions/7829097/android-accelerometer-accuracy-inertial-navigation/7835988
Asked by Airuno2L on 2015-12-14 10:25:57 UTC
Okey, I will try thanks.
Asked by Hakan Bey on 2015-12-15 03:49:16 UTC
First: This is not ros-related, but Arduino stuff. Second, there are far better approaches to do this. Accelerometer data is not suitable to be integrated. You will have to have some kind of reference system if you wanna do that. For intermediate precision you could use an GPS-based approach
Asked by segmentation_fault on 2018-08-22 06:40:35 UTC
Another way to approach is to permanently meassure the distance between your feets and also count the steps that you're doing.
Asked by segmentation_fault on 2018-08-22 06:44:39 UTC