一、概述
本次的作品来源于硬禾学堂搞的活动 ,活动的详情请看 《来玩SensorTile.box,你玩转了我就返 - Funpack9 STM32板卡来了》。
该活动给出了三个任务任选其一,为了白嫖,我选择了比较好做的任务一,其实任务三更好玩(人工智能相关),之后再实现。
任务要求如下:
其实思路很简单:首先检测套件朝上的是哪一面,然后根据要求输出要求的数据。
下面细细道来实现过程。
1.1、硬件介绍
本次作品使用到的是 ST 官方推出的 SensorTile.box 开发套件。
简要介绍如下,更多信息请看 《SensorTile.box 无线多传感器开发套件,具有用于IoT和可穿戴传感器应用的用户友好型应用》。
MKSBOX1V1(SensorTile.box)是即用型盒子套件,具有无线 IoT 传感器平台,无论您的专业知识水平如何都可以帮助您构建使用运动和环境传感器的应用。SensorTile.box 板是嵌在小型塑料外壳中,带有可充电电池。您可以使用的 ST BLE Sensor 应用程序通过蓝牙将您的智能手机连接到板件,从而使您能够立即开始使用内置的 IoT 和可穿戴传感器应用。
在专家模式下,您可以通过所选择的 SensorTile.box 传感器、操作参数、数据与输出类型以及可用的特殊功能与算法来构建定制的应用。因此,此多传感器套件帮助您快速并轻松地设计无线IoT和可穿戴传感器应用,无需进行任何编程。
SensorTile.box包含固件编程和调试接口,帮助专业开发人员使用STM32 开放式开发环境(STM32 ODE)进行更复杂的固件代码开发,包括感应AI 功能包和神经网络库。
值得一提的是,该开发套件真的是传感器特别丰富的那种,能够测量加速度、角速度、温度、湿度、气压等等。
更多信息看这篇文章 SensorTile.box 无线多传感器开发套件传感器介绍
1.2、软件介绍
该工具简要介绍如下,更多资料参考:《AlgoBuilder 算法的图形化设计应用》。
AlgoBuilder 是一种图形设计应用程序,用于构建和使用算法。 它可以快速开发 STM32 微控制器和 MEMS 传感器应用原型,其中已包含现有算法(例如传感器融合或计步器)、用户定义的数据处理功能块和其他功能。该应用程序使用图形界面简化了理念验证的实现过程,无需编写代码。AlgoBuilder 重复使用之前定义的功能块,将多种功能组合到一个项目中,并在Unicleo-GUI中使用绘图和显示功能实时实现数据可视化。AlgoBuilder 使用 STM32 ODE(开放式开发环境)生态系统,该生态系统组合了 STM32 Nucleo 板(NUCLEO-F401RE或NUCLEO-L476RG)、X-NUCLEO-IKS01A2 或 X-NUCLEO-IKS01A3 扩展板等硬件、软件(STM32HAL驱动程序、BSP结构、低和高级传感器驱动程序)和 Unicleo-GUI。
还是多说两句,这个软件功能很强大,该软件针对 ST 推出的特定几款开发板实现了所有底层的配置以及一些算法的封装,在该软件下全都是图形化操作,也就是说完全不需要写一行代码就能够完成任务。
二、实现过程
任务描述的很简单,所以实现起来也不复杂,加上使用 AlgoBuilder 来开发,底层代码相当于已经帮我们配置好了,也就是说,我们可以直接拿到传感器数据,就是直接利用传感器数据来实现目标功能即可。
先放一下整体实现的程序(图也算程序的话):
2.1、工程的建立
-
安装 AlgoBuilder 软件。
-
按照 入门文档 进行建立即可。
-
需要针对配置的地方:
编译工具链,我选的是 keil 来编译。(如果选别的,开发文档也有说明)
还有别的一些关于工程的配置,针对该套件,选择如下:
-
至于如何使用,请看使用手册,说的很清楚了,我就不赘述了。
2.2、实现功能: “何面朝上” 和 “测量桌面倾斜度”
刚开始思考的时候,觉得 “何面朝上” 和 “测量桌面倾斜度” 是两个功能,需要针对这两个功能要有不同的实现,后面发现,其实只要知道倾斜角的数据,对倾斜角的数据进行判断就能够知道当前是哪一个面朝上,这样使得实现起来简单了很多。
2.2.1、测量桌面的倾斜度
如何实现倾斜角,具体到理论分析,站在巨人的肩膀上,在网上发现一篇写的非常好的文章《AN-1057: 使用加速度计进行倾斜检测》,这篇文章从理论到计算,将如何通过加速度数据计算出倾斜角的过程解释的清清楚楚、明明白白,推荐看看。
推导过程就不赘述了,直接说结论:
我们的目标是要得到如下的三个轴倾斜角:
我们可以利用如下公式计算得到,也就是知道加速度数据,就能够得到三个轴的倾斜角。
也就是说,只要使用 AlgoBuilder 工具实现上面的算法,我们就很容易的获取到倾斜角,而 AlgoBuilder 提供的计算等组件让这个过程格外简单。
使用 AlgoBuilder 软件实现如下,主要就是选好功能组件,然后连线即可。
右侧得到的三个数据就是倾斜角的数据。
2.2.2、何面朝上的判断
首先,如下图所示的标示,
我们定义的角度关系如下:
-
theta -- θ (X轴)
-
Psi -- Ψ (Y轴)
-
Phi -- Φ(Z轴)
知道了三个轴的倾斜数据,我们可以根据这些数据来判断朝上的是哪一个,其实就是找不同。
你可以用工程学的方法:你可以记录这四个面朝上时,这三个角的大小情况,然后根据哪些数据特征能够唯一标识该面朝上,就选择该数据作为判断依据。
由于只需要区分1,2,3,4 这四个面,我们可以只使用 Y 轴和 Z轴的倾斜角来判断,因为在这四个面朝上的情况中,X 轴的倾斜角是不变的,所以不用考虑 θ 角。
-
对于 1 面
Ψ 和 Φ 角都是接近 0的,给个45度的偏差范围,避免倾斜比较厉害判断错误。输出为 1 则说明该面朝上。
-
对于 2 面
Ψ 接近 -90度, Φ 角接近 90度,给个45度的偏差范围,避免倾斜比较厉害判断错误。输出为 1 则说明该面朝上。
-
对于 3 面
Ψ 接近 0度, Φ 角接近 180度,给个45度的偏差范围,避免倾斜比较厉害判断错误。输出为 1 则说明该面朝上。
其实对比发现,只需要 Φ 角就可以判断。
-
对于 4 面
Ψ 接近 90度, Φ 角接近 90度,给个45度的偏差范围,避免倾斜比较厉害判断错误。输出为 1 则说明该面朝上。
就这样,我们实现了 ”识别那个面朝上“ 和 “桌面倾斜度测量” 这两个功能。
2.3、实现环境 “温度”、“湿度” 和 “气压” 数据的测量
因为不需要计算直接就能得到,这几个数据在 AlgoBuilder 获取实在是太简单了。
测得当前环境的温度、湿度、气压如下:
2.4、实现 “根据朝上的面来输出对应测量数据” 功能
根据上面的数据的获取,我们得到了各个功能获取的数据,也得到了如何判断当前套件哪个面向上,使用 Switch 功能来判断是否输出测量数据。
以气压数据的输出为例,如下图所示,当判断到第 4 面朝上时,输出气压值数据,否则输出 0。
下面是整体的逻辑代码,
由于各个面朝上的情况是互斥的,所以同一时刻只能输出一个功能的数据。
三、效果展示
对应上图,
当第一个面朝上时,显示桌面的倾斜角度:
当第二个面朝上时,显示的是当前环境的温度:
当第三个面朝上时,显示的是当前环境的湿度:
当第四个面朝上时,显示的是当前环境的气压:
四、心得体会
很高兴能够参加这次活动,这次的活动的套件 SensorTile_box 小巧玲珑,不过功能很强大,且十分便携。通过这次活动,不仅得到了技术上的成长,也了解很多不同的开发方式,扩展了我的眼界。
时间有限,只能做目前这个简单的功能,只等之后有空,利用这个套件多做一些有趣好玩的应用。