用SensorTile.box制作的多功能探测盒
使用SensorTile.box 立方体较大的四个面,实现四个不同的功能: · 面1,测量桌面倾斜程度; · 面2,测量温度; · 面3,测量湿度; · 面4,测量气压;
标签
嵌入式系统
eetree_study
更新2021-06-10
940

      这是我第二次参加Funpack活动,也是首次使用STM32系统进行项目设计,选择任务一进行设计。

      任务要求使用SensorTile.box 立方体较大的四个面,实现四个不同的功能,如:FmngGQMz9YB-TggczMv-EdkuhO6P

  • 面1,测量桌面倾斜程度;
  • 面2,测量温度;
  • 面3,测量湿度;
  • 面4,测量气压;

项目使用SensorTile.box套件盒,通过Algobuilder软件进行图形化编程,使用STM32CubeIDE编译,使用STM32CubeProgrammer烧录。通过Unicleo-GUI完成数据的可视化。

SensorTile.box上具有以下的高精度传感器:

  • 数字温度传感器(STTS751)
  • 六轴惯性测量单元(LSM6DSOX)
  • 三轴加速度计(LIS2DW12和LIS3DHH)
  • 三轴磁力计(LIS2MDL)
  • 高度计/压力传感器(LPS22HH)
  • 麦克风/音频传感器(MP23ABS1)
  • 湿度传感器(HTS221)

      可以看到,板载传感器覆盖了任务需要,不必外接传感器。

      由于采用图形化编程,只需要连接相应的功能块,就可以完成设计,当连接复杂时还可以通过子设计和自定义功能块来化简主程序设计

      我的设计中,主要分为以下几个部分

1.判断向上面

      项目要求使用不同的面完成不同的功能,因此首先需要对不同的面做出区分,这里采用加速度作为区分项,当不同的面向上时,加速度传感器采集到的数据大小方向各不一样,因此可以作为区分的指标,区分的方案参考了系统例程Example08_6D_Detection.xml,并做了简化修改FkwNieMvawb-1LMISVv-a1S8iqy7

      如图是6D_Detection的设计,其设计思路是比较加速度传感器采集的重力分量与预设阈值的大小,将比较结果输出为一个数组,显而易见,数组中只有一位为1,从而判断出向上面。设计可以判断出立方体6个面的朝向,通过调整预设阈值的大小,可以改变判断的敏感度。

      由于任务只需要判断出四个较大面的朝向,在整个项目中,其结果作为中间值,也不需要通过逻辑分析仪进行显示分析等,因此对例程做了一定的简化,具体为:删去对两个侧面的判断,删去加速度的可视化,删去阈值的计算结果。

      为了方便使用以及美观,将修改后的设计通过子设计,包装成功能块,留待调用,子设计如下图Fkhd_VIUSazF-S1OppmXHNV0dDIg

2.数据采集,处理,显示

      在algobuilder中,设置数据采集非常容易,将通过拖拽需要的数据功能块到主设计面板,将输入端连接Sensorhub功能块,设置相应参数,即可完成数据的采集设置,

      任务要求,在特定面朝向上时测量特定数据,因此需要对采集的数据进行相应处理,通过分析,当 盒子的朝向满足特定方向时,输出相应数据,当 不满足时,将相应的数据清零,输出零值,保持到满足输出条件。相应设计可以通过Switch功能块完成,为了在主设计中更加清晰,可以将相应设计在子设计中完成,在主设计中调用。例如对倾斜数据的处理,当判断条件为真时,输出三个倾斜角,反之则输出0.Fn7R6_5Gv5D_OeCyt5k2GDaQpjG2

      在algobuilder中,通过选用不同功能块,可以灵活采用角度图,柱状图,散点图,折线图,数值以实时显示数据,还可以编辑数据的名称、单位,以及设置量程等。FsEHgxN9rLX7E7W-jarAdQOrkdW1

      任务需要识别向上面,因此我在任务基本要求以外额外添加了显示特定面编号的功能,功能通过对子设计Detection的输出结果做加权和求得。新的子设计Face_num如下图所示:FqWbMsA-_3gZx6WpimIsvio6BI3d

      也可以将子设计Detection和子设计Face_num进行复合,使用一个子设计完成数据选择和编码的效果FiVLX_pJmMj-n8hvrUmAQnuiD3UI

3.功能演示

     经测试,设计编译正常,烧录后能够完成预期目标,如下图所示

FqaHRp5ipHdKhfKpl7jLMudHuUAo

4.心得体会

      这是头一次使用图形化编程,也是头一次使用STM32系统做项目,对图形化编程的优缺点有了一定的体会。

      使用algobuilder编程时,方便之处在于不需要像FPGA或者C语言编程单片机一样考虑信号,数据的具体处理,只需要关注功能块之间的连接次序,信号或者数据的传递方向,当编程规模较小时编程思路直观易懂。

      缺点在于预设功能块扔有不足,而自定义功能块需要了解软件对编程语言的特定要求,十分繁琐;在编程时常遇到一个简单的判断逻辑需要6,7个乃至于更多功能块组合的情况;当设计比较复杂时,各种连线会使得设计显得十分混乱。再者就是algobuilder软件本身的问题,配套的使用文档十分简略,很多要求没有说明,例如:在子设计中,不同输出块的名称必须不同,不能使用缺省,不能包含[ ]这类符号,不能含有空格;子设计块的名称中不能包含空格,相同功能的子设计块在主程序中多次调用后输出值会重复第一个输出……但这些默认要求往往在主设计中并不存在,而程序检查报错又纯粹是检查设计框图转换的C语言代码,不对框图做提示。这给使用子设计化简主设计增加了很多不必要的麻烦,最后多用了1,2天的时间来修改。

      但总而言之,这次任务是一个不同以往的新体验。

附件下载
Funpack9 .zip
程序,电路图
团队介绍
个人团队
团队成员
eetree_study
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号