触摸传感器 - 从零开始认识各种传感器【第五期】

触摸传感器|从零开始认识各种传感器

1. 什么是触摸传感器?

触摸传感器也叫做触觉传感器, 它对于触摸或者压力敏感, 是一种用来检测物体接触或靠近的传感器。通常它是通过检测触摸界面的电容或电阻的变化,或者是检测声波反射等方式来工作,通常用于触摸屏、键盘和其他电子设备。触摸传感器可以取代机械按钮和开关,提供更直观和方便的用户界面。

图1  触摸传感器

2. 触摸传感器是如何工作的?

触摸传感器的工作原理和开关非常类似:当它被触摸或者接近时,传感器内部的电路闭合并且导致电流流动。当释放触点时,电路断开,电路中没有电流流动。

图2  触摸传感器工作原理

3. 常见的触摸传感器的种类

目前市场上常用的触摸传感器主要是电容式触摸传感器和电阻式触摸传感器。另外还有红外,以及超声波触摸等其他类型。

3.1 电容式触摸传感器

最常见的触摸传感器是电容式触摸传感器:目前我们使用的大多数带有触摸功能的便携设备,比如手机,平板等都是使用的电容式触摸传感器。

图3  电容式触摸传感器

传感器的两个电极之间的电荷在没有触摸时是固定的,形成一个固定的电容Cp,测量电路会定期测量电容值。如果导电物体比如手指接触或接近传感器电极,人体手指与大地构成的感应电容Cr与Cp形成并联,输出电容变大,测量电路IC将检测到电容的变化并将其转换为触发信号。

图4  电容式触摸传感器原理

3.2 电阻式触摸传感器

电阻式触摸的原理和电容式不同。它是在两个电极膜之间形成一定的绝缘空腔。当手指或者其他物品比如钥匙对表面薄膜接触并施加一定压力的时候,使得表面电极膜弯曲,和下面的电极膜接触,从而产生电流被检测到。

图5  电阻式触摸传感器

它的触摸是需要施加一定压力的使得电极模弯曲,而电容式触摸传感器则不需要,这是他们的一个主要区别。对于电阻式触摸传感器,任何能施加压力的物体都可以触发触摸动作,比如带着手套的手,这使得它的应用场景更为广泛。

图6  电阻式触摸传感器原理

3.3 红外触摸传感器

图7  红外触摸传感器

红外触摸传感器:它一般是运用X,Y方向上布满红外线的矩阵来检查并定位用户的触摸。通常应用在电子白板,触控一体机等大尺寸屏幕上。这种红外触摸屏是安装在在显示屏幕前面的一个电路板外框,电路板在屏幕四边排布红外线发射管和红外接收管。用户在触摸屏幕时,手指就会挡住经过该方位的红外线,因此能够判别出触摸点在屏幕的方位。相应的,超声触摸传感器也是基于类似的原理。

图8  红外触摸传感器原理

3.4 几种触摸传感器的比较

图9  触摸传感器的特性比较

这里列出了三种触摸传感器的对比。可以看到,电容触摸传感由于其出色的响应速度和对多点触控及手势操作的支持,成为了手机等智能设备的首选。而电阻式触摸传感由于不依赖于手指操作且能适应各种恶劣环境,广泛应用于医疗以及户外设备。相比之下,红外和超声触控主要适用于一些大尺寸的场合。

4. 触摸传感器演示 

最后,我们来演示如何使用配备显示屏的树莓派读取并显示触摸传感器的数据。这里我们选用的是一款电阻式触摸传感器。树莓派MCU通过模拟接口读取到的数字进行数字化处理后,在显示屏上直观地显示出来。

图10  树莓派读取触摸传感器展示

完整代码如下

from breakout_colourlcd240x240 import BreakoutColourLCD240x240
from machine import ADC, Pin, Timer, PWM,I2C
from utime import sleep
import time, math,array
#------------------------------------------------------------------
#初始化

width = BreakoutColourLCD240x240.WIDTH
height = BreakoutColourLCD240x240.HEIGHT
display_buffer = bytearray(width * height*2)
display = BreakoutColourLCD240x240(display_buffer)

stemp = ADC(2)        

#全局变量

global current_temp               
current_temp = 0                   #当前数据
#-------------------------------------------------------------------
#屏幕基本图形绘制
def display_init():  
  
    display.set_pen(0,255,0)
    display.rectangle(58,30,13,160)
    display.circle(64,190,6)
    display.set_pen(255,0,0)

    display.text("current", 150, 20, 194, 2)
    display.text("force", 150, 35, 194, 2)
    display.update()
  
    for i in range(6):
        display.set_pen(0,200,0)
        display.pixel_span(80,27 + i*30,10)
        display.text(str(100 - i *20), 100, 20+i*30, 194, 2)
        display.set_pen(0,0,220)
        if i < 5:
            for j in range(4):
                display.pixel_span(80,33 + j*6 + i * 30,5)
        display.update()
    display.update()
#---------------------------------------------------------------------
#实时刷新
def display_change(temp, color):
    global current_temp
    current_temp = temp
    #print(temp)
    display.set_pen(color[0], color[1], color[2])
    display.rectangle(58,30,13,160)
    display.circle(64,190,6)
    display.set_pen(0,0,150)
    display.rectangle(58,20,13,7+int((50-temp/2)/2)*6)
    display.set_pen(0,0,0)
    display.rectangle(150,50,90,40)
    display.set_pen(0,255,0)
    display.text(str(temp), 150, 50, 5, 5)
    display.update()
#----------------------------------------------------------------------
#数据获取
def get_temp():
    Analogvalue=stemp.read_u16()
    voltage=(80-100*float(Analogvalue)/65535)
    #print(voltage)
    return voltage

#----------------------------------------------------------------------

def main():
    global current_temp,x
    
    color = [0,255,0]    
    timer1 = Timer()
  
    #基本图形绘制
    display_init()
    
    #timer1初始化
    timer1.init(freq=15,mode=Timer.PERIODIC, callback=lambda t:display_change(round(get_temp(),1), color))
    

    while True:
      sleep(0.1) 
main()

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值