简介
本人是Thomas,参加了FUNPACK第九期的活动,这次活动是一个STM32的传感器开发板。
本项目实现了一个类似于骰子的功能,一个长方体的小盒子,根据不同面朝上,实现不同的功能,例如
-
面1,测量桌面倾斜程度;
-
面2,测量温度;
-
面3,测量湿度;
-
面4,测量气压;
根据直播老师的指导,直播地址
任务思路解析
根据直播老师指导,这个STM32有很多种编程方式,有
-
手机APK编程ble sensor
-
AlgoBuilder 编程
-
CUBEMX编程
-
裸机编程
本来本人尝试了使用手机APK编程,但是发现无法细化到某个面朝上的编程,所以决定官方应该建议使用AlgoBuilder 来编程。学习了下algoBuilder里面的example
发现图形化编程很方便,
主要功能
方向判断
参考example中的例程,可以得出以下功能框图
首先从sensor hub中获取重力加速度的x,y,z轴的值, Demux可以理解为拆分,把Acceleration的值拆分成3个x,y,z 参考的代码
Accelero_Sensor_GetData(Sensor_Hub_1_out, Acceleration_g_1_data);
Demux_3_float(Acceleration_g_1_data, Demux_Float_1_out1, Demux_Float_1_out2, Demux_Float_1_out3);
接着从这3个浮点数的正负值,可以判断出6个不同的面,而这个值的范围基本是
例如x,y 平面水平的时候,z轴的绝对值趋向于1,我们可以选择大于某个角度,
如何根据角度算出某个常量呢?
Input_Value_Float_1_out[0] = 50;
Input_Value_Init(Input_Value_Float_1_out, &display_info_list[3]);
Dec_To_Rad_1_out[0] = (3.14159265f * Input_Value_Float_1_out[0]) / 180.0f;
Sin_1_out[0] = sinf(Dec_To_Rad_1_out[0]);
根据输入的角度不同,可以得出不同的值,这边我用的是50度,角速度约等于0.766
这边可以用如下所示的value值打印出来
然后根据不同的正负值,大于小于符号,判断出6个面
接着还是可以用Mux来合并为一个数组,用value来显示,这样可以方便来调试数据的正确性。
数值判断
接着根据每个面的对应的垂直的x,y,z的值来判断当前哪一个面朝上,用一个switch,如果朝上则用value2如果不朝上,则选择输出值为0.
最后将值合并Mux到value上
倾斜角度判断
倾斜角度的判断,根据Tilt Sensing模块,可以获取当前的倾斜角度,最后通过Angle Level来转换
同时,为了方便显示,可以用一个四元组来显示当前的状态
最后演示结果显示
面1:测量桌面倾斜程度
面2: 测量温度
面3: 测量湿度
面4: 测量大气压
本活动的心得体会
这次活动实在是太好了,之前的STM32图形化CUBEMX编程已经让我体会到STM32的强大,现在通过各种STM32的生态,了解到STM32的传感器的MEMS的生态的强大。从此,传感器的编程再也不会枯燥化了。可以让工程师更加专注于上层应用的构建,和产品的debug调试。这次任务学到的东西非常多。