1 简述
最近在学习人体姿态设别的算法。想着买个角度传感器去尝试下。这个传感器最好是无线的带电池的,这样对我来说是比较方便使用的。我就在淘宝上找到一个一款BWT901CL,这个角度传感器。这个模块挺好用的,有加速度、角速度、角度。而且都是三个轴的。精度的话呢加速度0.01g、角速度0.63°/s、角度静态是0.05、动态是0.1。精度是满足我的需求的。给大家看下模块。
2 程序设计
2.1数据处理
根据商家给的通讯协议(如下图)。写了一个接收程序。
根据这个协议就很好理解我写的数据处理程序。这个BWT901CL蓝牙输出的角度的一共是11位数据。所以,我先判断数据 的长度是不是11位,然后再判断包头是不是55。如果不是55在判断下一位是不是55。直到我找到了55这个包头,然后才进行11位数据的第二位的数据的判断,是不是50、51、52、53、54这种商家定义的代表时间、加速度、角速度、角度、磁场的数。
void CJY901 ::CopeSerialData(char ucData[],unsigned short usLength)
{static unsigned char chrTemp[2000];static unsigned char ucRxCnt = 0; static unsigned short usRxLength = 0;memcpy(chrTemp,ucData,usLength);usRxLength += usLength;while (usRxLength >= 11){if (chrTemp[0] != 0x55){usRxLength--;memcpy(&chrTemp[0],&chrTemp[1],usRxLength); continue;}switch(chrTemp[1]){case 0x50: memcpy(&stcTime,&chrTemp[2],8);break;case 0x51: memcpy(&stcAcc,&chrTemp[2],8);break;case 0x52: memcpy(&stcGyro,&chrTemp[2],8);break;case 0x53: memcpy(&stcAngle,&chrTemp[2],8);break;case 0x54: memcpy(&stcH,&chrTemp[2],8);break;}usRxLength -= 11;memcpy(&chrTemp[0],&chrTemp[11],usRxLength); }
}
2.2 UART打印程序
int _tmain(int argc, _TCHAR* argv[])
{char chrBuffer[2000];unsigned short usLength=0,usCnt=0;unsigned long ulBaund=9600,ulComNo=3;signed char cResult= 1; printf("请输入串口号:\r\nCom = ");scanf("%ld",&ulComNo);printf("请输入波特率:(9600、115200或其他)\r\nBaud = ");scanf("%ld",&ulBaund);printf("等待打开串口%d...\r\n",ucComNo);while(cResult!=0){cResult = OpenCOMDevice(ulComNo,ulBaund);}while(1){usLength = CollectUARTData(ulComNo,chrBuffer);if (usLength>0){JY61.CopeSerialData(chrBuffer,usLength);}Sleep(100);if (usCnt++>=0){usCnt=0;printf("Time:20%d-%d-%d %d:%d:%.3f\r\n",(short)JY901.stcTime.ucYear,(short)JY901.stcTime.ucMonth,(short)JY61.stcTime.ucDay,(short)JY901.stcTime.ucHour,(short)JY901.stcTime.ucMinute,(float)JY901.stcTime.ucSecond+(float)JY901.stcTime.usMiliSecond/1000);printf("Acc:%.3f %.3f %.3f\r\n",(float)JY901.stcAcc.a[0]/32768*16,(float)JY901.stcAcc.a[1]/32768*16,(float)JY901.stcAcc.a[2]/32768*16);printf("Gyro:%.3f %.3f %.3f\r\n",(float)JY901.stcGyro.w[0]/32768*2000,(float)JY901.stcGyro.w[1]/32768*2000,(float)JY901.stcGyro.w[2]/32768*2000);printf("Angle:%.3f %.3f %.3f\r\n",(float)JY901.stcAngle.Angle[0]/32768*180,(float)JY901.stcAngle.Angle[1]/32768*180,(float)JY901.stcAngle.Angle[2]/32768*180); } }return 0;
}
3 结果展示
链接:https://pan.baidu.com/s/1CMRtfp-c0YPSKOqC_aAFPA