Funpack3-3使用X-NUCLEO-IKS4A1触摸功能实现传感器选择和切换
该项目使用了stm32cubeide、matlab,实现了使用X-NUCLEO-IKS4A1触摸功能实现传感器选择和切换的设计,它的主要功能为:使用板卡上的触摸按键,实现点按和左右滑动,实现传感器选择和切换,并将数据发送到上位机,功能选择的可视化也在上位机完成。。
标签
嵌入式系统
Funpack活动
开发板
sdgdrdfc
更新2024-07-08
南京信息工程大学
30

项目介绍

本项目依托Funpack第三季第三期一起玩NUCLEO系列开发板,基于X-NUCLEO-IKS4A1以及NUCLEO-G0B1RE,实现了传感器选择和切换。本项目通过matlab上位机、2个电容触摸和实现了传感器选择和切换功能,取得了良好的效果,具有一定的价值。

硬件介绍

本项目的核心硬件是X-NUCLEO-IKS4A1扩展板,它是一款由STMicroelectronics推出的用于搭配STM32 Nucleo的运动MEMS和环境传感器扩展板。该板卡集成了多种先进的传感器,包括:

  • LSM6DSO16IS:一款集成了3D加速度计和3D陀螺仪的MEMS传感器,支持智能传感器处理单元(ISPU),用于高效的信号处理。
  • LIS2MDL:一款高精度的3D磁力计,用于检测地球磁场,适用于指南针和位置跟踪应用。
  • LIS2DUXS12:一款超低功耗的3轴加速度计,适合电池供电设备,用于活动监测和手势识别。
  • SHT40AD1B:一款高精度超低功耗的温湿度传感器,用于环境监测。
  • STTS22H:一款低电压、超低功耗的温度传感器,提供0.5°C的精度,适用于多种温度监测场景。

此外,板卡还包括一个可拆卸的Qvar触摸/滑动电极附加板MKE001A,用于实现电容式触摸感应,支持点按和滑动操作。

设计思路

本项目的设计思路基于以下几个关键点:

1.  下位机循环检测触摸输入,将传感器数据输入上位机。

2.  上位机接收数据并做可视化处理。

3.  根据触摸输入和上位机选择调整传感器状态。

设计流程图


系统架构与工作流程

系统架构

系统的整体架构分为三个主要部分:传感器模块、控制处理模块和上位机显示模块。

  1. 传感器模块:负责收集环境数据,包括加速度、温度、湿度、气压等信息。
  2. 控制处理模块:基于STM32 Nucleo微控制器,负责接收触摸输入,控制传感器数据的采集,以及将数据发送到上位机。
  3. 上位机显示模块:运行于PC或其他智能设备上,负责接收和处理来自控制处理模块的数据,并通过图形化界面展示给用户。

工作流程

初始化:系统启动后,控制处理模块初始化所有传感器,并准备接收触摸输入。

#include "iks4a1_mems_control.h"
#include "iks4a1_motion_sensors.h"
#include "lsm6dsv16x_reg.h"
#include "lsm6dsv16x.h"
extern void
*MotionCompObj[IKS4A1_MOTION_INSTANCES_NBR];
void BSP_SENSOR_LSM6DSV16X_ACC_Init(void)
{
(void)IKS4A1_MOTION_SENSOR_Init(IKS4A1_LSM6DSV16X_0, MOTION_ACCELERO);
}
void BSP_SENSOR_LSM6DSO16IS_ACC_Init(void)
{
(void) IKS4A1_MOTION_SENSOR_Init(IKS4A1_LSM6DSO16IS_0, MOTION_ACCELERO);
}
void BSP_SENSOR_MAG_Init(void)
{
(void)IKS4A1_MOTION_SENSOR_Init(IKS4A1_LIS2MDL_0, MOTION_MAGNETO);
}
void BSP_SENSOR_PRESS_Init(void)
{
(void)IKS4A1_ENV_SENSOR_Init(IKS4A1_LPS22DF_0, ENV_PRESSURE);
}
void BSP_SENSOR_QVAR_GetValue(int16_t *Axes)
{
(void)LSM6DSV16X_QVAR_GetData(MotionCompObj[IKS4A1_LSM6DSV16X_0], Axes);
}
//全部代码较长,不全部放出

触摸输入处理:当用户通过触摸按键进行点按或滑动操作时,控制处理模块识别触摸事件,并根据事件类型执行相应操作。

#include"algorithm.h"
#include"main.h"
#include <stdio.h>
int value_l=0;
int value_n=0;
int value_l=0;
int value_ss[3]={0};
int value_c=0;
int value_sv=0;
int torage=0;
void qvar_digital(int16_t value,int * act_output)
{
int value_deviation=value-value_l;
int act=0;
if (value_deviation>=54600)
value_n=1;
else if(value_deviation>=23400)
value_n=value_l+1;
else if(value_deviation<=-54600)
value_n=-1;
else if(value_deviation<=-23400)
value_n=value_l-1;
else
value_n=value_l;
value_l= value_n * 32760;
if (value_n==value_l)
{
value_c+=1;
if ((value_c>=1)&&(value_n!=0)&&(value_n!=value_ss[0]))
{
value_c=0;
value_sv=1;
value_ss[2]=value_ss[1];
value_ss[1]=value_ss[0];
value_ss[0]=value_n;
}
else if((value_c>=1)&&(value_n==0))
{
value_c=0;
value_sv=1;
value_ss[2]=value_ss[1];
value_ss[1]=value_ss[0];
value_ss[0]=value_n;
}
}
else
value_c=0;
if (value_sv)
{
value_sv=0;
if ((value_ss[2]==0)&&(value_ss[0]==0)&&(torage==0))
{
torage=value_ss[1];
act=0;
}
else if((value_ss[1]==-1)&&(value_ss[2]==1))
{
act=-1;
torage=0;
}
else if((value_ss[1]==1)&&(value_ss[2]==-1))
{
act=1;
torage=0;
}
else if((value_ss[2]==torage)&&(value_ss[1]==0)&&(value_ss[0]==0))
{
act=torage+torage;
torage=0;
}
else if((value_ss[2]*2==torage)&&(value_ss[1]==0)&&(value_ss[0]==0))
{
act=torage+torage;
torage=0;
}
else if((value_ss[0]==value_ss[2])&&(value_ss[0]==torage)&&(torage!=0)&&(value_ss[1]==0))
{
torage=torage+torage;
}
else if((value_ss[2]==0)&&(value_ss[0]==0)&&(torage!=0))
{
;
}
else
{
act=0;
torage=0;
}
}
else
act=0;
value_l=value_n;
*act_output=act;
}

以上代码它计算当前值(value)与前一个值(value_o)之间的差(value_s)。

根据value_s的值,更新value_n(新值)和value_l(上次的新值)。

如果value_n等于value_l,则增加value_c(计数器)的值。如果满足特定条件,则更新value_ss数组(存储最近三个新值的历史记录),并将value_sv(状态变化标志)设置为1。

如果value_sv为1,则根据value_ss数组的内容和torage(存储值)的状态,计算并设置act(动作)的值。这个过程涉及多个条件判断,包括检查历史值是否为0、正负交替、重复出现等情况,并据此更新torageact的值。

最后,将value_l更新为value_n,并将act的值赋给*act_output,作为函数的输出。

实现效果为滑动输出正负1,点按输出2,双击输出4。


数据采集与发送:选定的传感器开始采集数据,并将数据发送到上位机。

数据可视化:上位机接收到数据后,通过图形化界面展示给用户,用户可以实时查看环境数据。

传感器选择与切换:用户通过点按选择传感器类型,通过滑动切换传感器或数据通道。

t初始为0,左右滑增加减少。根据t值选择不同传感器,当双击或点按时,切换传感器显示状态。

循环监测:系统持续监听触摸输入,并根据用户的选择动态调整传感器的工作状态。

功能展示

运行后点击打开串口,各传感器数据发送并显示。左边下拉框显示当前选择传感器。

左划两次触摸板切换至LIS2DUXS12传感器,点击触摸板关闭,再次点击打开。

活动总结与未来计划

该项目已经成功实现了触摸实现传感器选择和切换功能,并达到了预期指标。

通过这个项目,我对stm32有了更深入的了解,也对嵌入式开发有了新的体会。未来我会继续参加活动,了解更多知识,获取更多技能。

附件下载
chumoban.zip
cubeide文件
appchumoban.mlapp
matelab上位机
团队介绍
南京信息工程大学2022级学生
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号