汽车行驶姿态 -- 初识

来源:互联网 发布:医院自己签字 知乎 编辑:程序博客网 时间:2024/06/10 00:01

之前对 MPU6050 有过一些了解,原始数据可以获取,但是卡尔曼滤波没有搞定,最后也没搞出个所以然来。

现在定制了一个汽车行驶姿态传感器,简单来看一下吧。

一、功能

根据行驶中汽车加速度的变化,判断出汽车行驶过程中的几种状态类型:
意外加速,类似被追尾,类型符号为“A”。
急加速,司机猛踩油门导致,类型符号为“B”。
正常行驶,乘车人没有不舒服的感觉,类型符号为“C”。
急减速,司机猛踩刹车导致,类型符号为“D”
特别急减速,类似导致碰撞事故前的刹车直至碰撞,类型符号为“E”。

二、电气参数及通讯协议

1、供电电压:DC 3.3v,消耗电流不大于200mA。

2、串口通讯协议约定:
异步,波特率:115200,起始位:1;数据位:8;停止位:1;硬件校验:无;流控:无。

3、模块自动上传(除正常行驶模式“C”外):依序为0xf,数据字节1,数据字节2。上位机收到数据并验证正确后,回复0xaa,0x55给模块。否则模块按3秒时间间隔连续最多发3次。收到正确回复即终止发送。

4、模块按需上传:上位机向模块发送:0xff,0xa5,0x5a,模块收到数据并验证正确后,按照自动上传数据格式上传数据。上位机在3秒内不能收到数据,会再发请求,最多连发3次,收到数据终止发送。

三、测试

使用 USB 转TTL、串口调试工具,来进行一下测试。


注意,波特率要和传感器的一致,设为 115200,采用十六进制显示。


然后根据上面的协议,来分析收到的数据:

模块自动上传模式下,碰撞一下收到数据 0F 41 BE / 0F 45 BA 

然后查看ASCII码,参看:C语言再学习 -- ASCII码表(转)

可得,字符 'A' ~'E'的十六进制ASCII码分别为 41~45

而十六进制 BE 应该是 41 的 反码,参看:C语言再学习 -- 负数
因此,协议里的数据字节1是字符 'A' ~'E'对应的十六进制ASCII码,而 数据字节2 是 数据字节1 的反码。

然后接着看协议:上位机收到数据并验证正确后,回复0xaa,0x55给模块。否则模块按3秒时间间隔连续最多发3次。收到正确回复即终止发送。
我碰撞了一次,当未回复0xaa,0x55给模块时,确实是按3 秒时间间隔连续发了3次数据。

然后这次在发送完一次数据后,我点击手动发送十六进制 aa55。
结果是不能终止发送,它还是会发送3次数据。难道是我手动发送数据太慢了??
再有有时碰撞一次它会发送比如 0F 41 BE 0F 45 BA 两组数据,又是意外加速,又是特别急减速。这是什么鬼?
这个传感器到底是不是OK的,要打一个问号了。

最后还有问题就是这个传感器是2轴的,碰撞还要考虑角度。只能模拟汽车前后撞,理论上左右撞,上下撞也是不行的。



原创粉丝点击