MPU6050人体姿势跌倒报警(O急救!急救)
利用MPU6050,我现在已经可以得到pitch roll yaw三个方向的加速度,以及旋转角。通过模拟演示也总结出来了当人体跌倒时的条件.人体跌倒的条件:
1.通过合加速度,可以判断是否发生剧烈撞击,发生剧烈撞击可能是疑似跌倒(一次判断)
2.通过条件1后采集3秒的角度数据判断旋转角是否发生较大的变化,以此判定是否跌倒。
但是算法不知道怎么写?各位大神急救啊 !!!!!!!!
这是现在的代码:
unsigned char Re_buf,counter=0;
unsigned char sign=0;
float a,w,angle,T;
void setup() {
Serial.begin(115200);
}
void loop() {
if(sign)
{
sign=0;
if(Re_buf==0x55) //检查帧头
{
switch(Re_buf )
{
case 0x51:
a = (short(Re_buf <<8| Re_buf ))/32768.0*16;
a = (short(Re_buf <<8| Re_buf ))/32768.0*16;
a = (short(Re_buf <<8| Re_buf ))/32768.0*16;
T = (short(Re_buf <<8| Re_buf ))/340.0+36.25;
break;
case 0x52:
w = (short(Re_buf <<8| Re_buf ))/32768.0*2000;
w = (short(Re_buf <<8| Re_buf ))/32768.0*2000;
w = (short(Re_buf <<8| Re_buf ))/32768.0*2000;
T = (short(Re_buf <<8| Re_buf ))/340.0+36.25;
break;
case 0x53:
angle = (short(Re_buf <<8| Re_buf ))/32768.0*180;
angle = (short(Re_buf <<8| Re_buf ))/32768.0*180;
angle = (short(Re_buf <<8| Re_buf ))/32768.0*180;
T = (short(Re_buf <<8| Re_buf ))/340.0+36.25;
Serial.print("a:");
Serial.print(a);Serial.print(" ");
Serial.print(a);Serial.print(" ");
Serial.print(a);Serial.print(" ");
Serial.print("w:");
Serial.print(w);Serial.print(" ");
Serial.print(w);Serial.print(" ");
Serial.print(a);Serial.print(" ");
Serial.print("angle:");
Serial.print(angle);Serial.print(" ");
Serial.print(angle);Serial.print(" ");
Serial.print(angle);Serial.print(" ");
Serial.print("T:");
Serial.println(T);
break;
}
}
}
}
void serialEvent() {
while (Serial.available()) {
Re_buf=(unsigned char)Serial.read();
if(counter==0&&Re_buf!=0x55) return; //第0号数据不是帧头
counter++;
if(counter==11) //接收到11个数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
}
包括串口截图
我觉得你上面直接那样计算旋转角是不准确的
页:
[1]