zsk 发表于 2016-10-22 19:55:44

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;
    }
}
}



包括串口截图

xiaocaicai 发表于 2016-11-23 15:28:12

我觉得你上面直接那样计算旋转角是不准确的
页: [1]
查看完整版本: MPU6050人体姿势跌倒报警(O急救!急救)