【RT-Thread作品秀】基于ST传感器的跌落及倾倒检测作者:pto1011
概述在消费电子领域,跌落通常会对便携式电子产品(如手机,平板,笔记本电脑)的零部件(屏幕及机械硬盘)造成损伤,如何可靠的检测这些跌落事件并实时启动保护装置,采取主动避震措施来减少触地带来的冲击。中国即将步入老年社会,如何实时检测老人摔倒事件并做到事前主动启动保护减震装置和事后第一时间发出告警。 这些都需要有快速(Fast)准确(Accurate)可靠(Reliable)的跌落及倾倒检测能力。
本应用即是基于ST公司的LSM6DSOX六轴传感器,高速采集加速度计和陀螺仪的信号,通过算法来提供跌落及倾倒实时检测,其结果显示于交互界面(串口输出)和板载LED状态(未进入检测模式:LED blink; 开始进入检测:LED OFF; 检测到跌落或倾倒:LED ON)。
开发环境硬件:ART-Pi STM32H750 开发板,STEVAL-MKI197V1(LSM6DSOX)六轴传感器,PARALAX USB2SERIAL转接板
RT-Thread版本:4.0.3
开发工具及版本:RT-Thread Studio 1.1.15
RT-Thread使用情况概述内核部分:创建了一个独立线程用于实现读取ST传感器参数,输出至高速串口或实时检测,详情见下图。
组件部分:finsh组件是本应用开发过程中最重要的程序调试工具及交互窗口
硬件框架主要使用了ART-PI开发板上的STM32H750处理器的SPI,Timer, UART, 板载资源使用了LED,其它硬件模块包括ST的六轴传感器以及自备的USB转串口板。
软件框架说明软件模块说明演示效果视频演示:
比赛感悟通过参与比赛,第一次接触并了解RT-Thread及其生态系统, 用户体验很好。尤其是Finsh组件,作为交互界面,程序的调试过程中几乎完全依赖于之。
本应用中分别使用了MCU的SPI,UART和硬件定时器组件,UART的使用较为简单,硬件定时器在使用时则遇到了问题,在RT-Thread Setting中配置之后,一直无法进入中断,通过单步调试,发现寄存器在写入数值之后仍全为0,进一步检测发现其时钟未enable。
在拿到ART-Pi板之前,曾设想实现所有传感器参数读取及detection算法都在1ms定时器中断服务自程序中完成,但编译时遇到错误 ,ISR中无法调用mutex,曾尝试移除mutex,但读取的sensor参数几乎全部错误。后来选择在新建的独立线程中来实现,读取的sensor数据全部正确。
通过实测,本应用基本实现了最初的设计目标。仍存在如下问题:在1ms采样间隔下仍会观测到存在数十毫秒未读取传感器信号的现象,期待将来有可能实现RT-Thread下对于高速(亚毫秒级别)的实时关键任务的支持。
最后,感谢比赛组织方提供的硬件和软件开发环境,以及工作人员的热情帮助!
1