【Digikey得捷好物畅享】ADXL362三轴加速度传感器跌落检测

实验 2:跌落检测

记录跌落的 g 数据,然后进行跌落测试查看数据的变化

查看数据

软件我使用 VOFA+上位机,然后进行对数据的查看发现,跌落数据大概在 0.4g 左右,所以在读取数据之后做个判断即可

代码逻辑

创建一个 30 的数组,进行 fifo 的数据吞吐,查看数据之后遍历所有的数据,先最小小于 0.4g,然后最大大于 1.9g 即可算做跌落

float num[30] = {0};
float max = -9999.0f;
float min = 9999.0f;
while (1)
{
    if(adxl362_readflag == 1)
    {
        adxl362_GetData(&Xdata, &Ydata, &Zdata, &Tdata);
        float all_data = sqrtf((float)(Xdata*Xdata + Ydata*Ydata + Zdata*Zdata));
        all_data /= 1000;
        if(all_data)
        {
            memmove(&num[0], &num[1], sizeof(float)*29); // 将前29个元素向前移动
            num[29] = all_data;
            for(int i=0; i<=29; i++)
            {
                max = fmaxf(max, num[i]);
                min = fminf(min, num[i]);
            }
        }

        if(max>= 1.8 && min <= 0.5) // 简单的震动检测阈值
        {
            PRINTF("Vibration detected! Accel: %f g (max: %f, min: %f)\r\n", all_data, max, min);
            memset(num, 0, sizeof(num)); // 震动检测后重置数据
        }
        else
        {
            PRINTF("Stable. Accel: %f g\r\n", all_data);
        }
        max = -9999.0f;
        min = 9999.0f;
        adxl362_readflag = 0;
    }
}

结果显示

总结

问题 1:一开始没进行数据清除会有很多误判断问题,需要进行 memset 操作