Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread
RT-Thread一般讨论
基于电容+压力的人机交互按键解决方案
发布于 2024-09-15 11:45:47 浏览:269
订阅该版
[tocm] # 背景 随着汽车智能化的普及,我们可以看到电动车内很多传统的机械开关变成了触摸开关。但是电容有易受干扰,怕水等问题,所以使用体验不是很好,容易误触。如果可以再加上压力方案来做二重检测,那就可以防止误触,提高用户的体验。 ![1.png](https://oss-club.rt-thread.org/uploads/20240908/84e554f64d93f2bebcc230a2ed4ad92c.png.webp) # 方案介绍 ## 原理 本方案用了UltraSense的CapForce模组,有需要了解的可以看下官网:https://ultrasensesys.com/ 压力检测是基于压电材料的正压电效应。 ![压电材料.png](https://oss-club.rt-thread.org/uploads/20240908/509fdbd6edf028866c8652bb183efbe5.png.webp) 用压电材料去检测压力,有可以免疫预应力,温度变化的影响等好处,因为压电材料只能检测到瞬态的压力变化。 ![工作原理.png](https://oss-club.rt-thread.org/uploads/20240908/1c3267541525e5aba4c16a5097f844c7.png.webp) ## 硬件 FRDM-MCXN947是一款紧凑且可扩展的开发板,可让用户快速基于MCX N94和N54 MCU开展原型设计。它们提供行业标准的接口,可轻松访问MCU的I/O、集成的开放标准串行接口、外部闪存和板载MCU-Link调试器。MCX-N947有两个Arm™ Cortex™-M33内核,每个内核的主频均为150MHz,优化了性能效率,高达2MB的双块Flash存储器,带可选的全ECC RAM,外部闪存 ,神经处理单元、PowerQuad、Smart DMA等。 ### 主板+扩展板 此扩展板是之前项目做的Arduino接口板,引出I2C(P4_1,P4_0)接到了Capforce模组,同时用两个IO口(P1_23,P0_29)去控制绿色和蓝色LED。 ![EVK.jpg](https://oss-club.rt-thread.org/uploads/20240908/c2793577d1b36ad5e9077c4e147732d3.jpg.webp) ## 软件 这次RT-Thread Studio没有适配FRDM-MCXN947这款板子,于是只能Keil+env来开发(各有优势,RTT Studio的界面配置更容易操作些,env其实跟Linux很像,上手后也能快速开发)。结果git拉下代码(https://github.com/RT-Thread/rt-thread.git v5.1.x分支),编译竟然报错,最后装配好env后,通过scons --target=mdk5命令更新了工程,并且用Keil 5.40(5.28不行)编译通过。 ![S1.png](https://oss-club.rt-thread.org/uploads/20240908/10fc9d3afef9ebcb49b8e4a30aa75a4e.png.webp) ![S2.png](https://oss-club.rt-thread.org/uploads/20240908/6de567d3045df895cb2e5dda3515fdce.png) ![S3.png](https://oss-club.rt-thread.org/uploads/20240908/be72b0fd85771c6668fa219bc39217a9.png) ### env配置 通过env配置模拟I2C,pin序号参考工程内LED的设置,PA_B是((Ax32)+B),所以P4_1,P4_0是129和128。参考RT-Thread文档中心的设备和驱动编写I2C驱动。https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c ![env1.png](https://oss-club.rt-thread.org/uploads/20240908/059641c3df5a110ea25772b0116c3a0a.png.webp) ![env2.png](https://oss-club.rt-thread.org/uploads/20240908/6d932ab9db38907d27a47abb65514dcd.png.webp) 一开始I2C能读到sensor的ID,理论上读寄存器包含写寄存器地址和读操作,所以这个成功了I2C的读写函数应该都没问题,实际上报错了。 ![I2C2.png](https://oss-club.rt-thread.org/uploads/20240908/638b07bd26c4d37a8497d6e89e417c14.png) ![I2C3.png](https://oss-club.rt-thread.org/uploads/20240908/90c97aaf661b60bf21da230afcd0a66e.png) 通过打开I2C debug message,定位到我把写函数这个num填成了数据长度,实际应该是1,修改后问题解决。 ![I2C1.png](https://oss-club.rt-thread.org/uploads/20240908/216570125f3ab90944c7c34d3086c501.png.webp) I2C成功后,就是初始化Capforce模组,传感器即可自行工作起来,接着通过I2C读取电容ADC,如果超过阈值则用P0_29控制蓝灯亮。如果I2C读取按键状态发现为2,则表示压力达到阈值了,此时如果电容也超过阈值,则用P1_23控制蓝灯和绿灯都亮起来。具体可参考下面演示的视频。 ![solution.png](https://oss-club.rt-thread.org/uploads/20240908/570764986b510abf699414890c47fb49.png.webp) PS:UltraSense的sensor内部是有MCU的,sensor的spec以及相关的驱动和固件如果需要,可以联系上面的网站。 # 演示视频 首先是基本功能测试,从视频里可以看到,手指按压圆圈以外的地方按键不会触发(因为电容电极只在圆圈区域)。轻触圆圈部分,电容触发,蓝灯亮,再用点力按压,压力传感器达到阈值,同时因为电容触发了,电容+压力都满足了要求,所以按键触发,绿灯亮。 链接:https://www.bilibili.com/video/BV1ad4CeBE6J/?spm_id_from=333.999.0.0&vd_source=7e1bfa5af4bbbe357cae20c58802b8d6 然后是验证防水功能,从视频里可以看到,将水滴到圆圈处,电容达到阈值触发蓝灯亮,但是因为压力没触发,绿灯不会亮。只有此时用力按按键,让压力达到阈值,电容+压力都有了,按键才会触发,绿灯亮。 链接:https://www.bilibili.com/video/BV1Xd4CeBEsV/?spm_id_from=333.999.0.0&vd_source=7e1bfa5af4bbbe357cae20c58802b8d6 # 进阶 完成了demo后我又买了NXP官方的3.5英寸480x320 IPS TFT LCD模块PAR-LCD-S035,用MCUXpresso IDE可以快速开发,移植到RT-Thread费了一番功夫,参考一些RTT移植LVGL的工程,终于是点亮了屏幕。 ![TFT-LCD.jpg](https://oss-club.rt-thread.org/uploads/20240915/8b1a287cb96116293437eae9165d13ee.jpg.webp) ## 代码 https://gitee.com/charon-chu/frdm-mcxn947 因为屏幕的触摸GT911的I2C也是P4_0和P4_1, 所以我先关闭了上面电容+压力传感器的模拟I2C,注释掉了对应功能。 如下工程文件列表,主要是通过env导入了LVGL库和GT911驱动,从NXP的官方工程移植了lcd_impl_flexio.c/h, st7796_lcd.c/h等文件,创建dispaly.c去初始化屏幕,lv_port_indev.c去初始化GT911, lv_port_disp.c去初始化lvgl的显示,lv_user_gui.c去定位LVGL的初始化。 ![code tree.png](https://oss-club.rt-thread.org/uploads/20240915/5c4687c39e91fbbb3791941d80a68a33.png) GUI显示的内容由NXP官方的GUI Guider的HMI设计软件来生成对应的代码,这个IDE非常方便好用。 ![Gui Guider.png](https://oss-club.rt-thread.org/uploads/20240915/67aad5445707a6175e8133f6f9de526c.png.webp) # 总结 非常感谢RT-Thread和NXP提供的机会,让我可以用这块开发板开发学习。这次活动我收获很多,在完成既定的计划基础上,又学习了display相关的,后面会继续研究RT-Thread在FRDM-MCXN947开发板上的各种应用。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Charon_Chu
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部