接近传感器 - 从零开始认识各种传感器【第十七期】

接近传感器|从零开始认识各种传感器

1、什么是接近传感器

接近传感器常被用于检测物体的距离或者是否有物体靠近。它通常发射电磁场或电磁波(例如红外线)来探测物体的位置。当有物体靠近时,传感器会接收到反射的电磁波信号,从而触发相应的电路或者控制系统。它广泛应用于物体感应接近开关等场合, 如自动水龙头,智能手机等。

2、接近传感器工作原理

接近传感器通过不同的工作原理来检测物体是否接近。常见的工作原理包括利用红外线、超声波、电容变化或磁场变化来感知物体的存在或距离。传感器发射特定信号并接收反馈,根据信号的变化来判断物体的位置或距离,从而触发相应的输出信号。 

3、常见的接近传感器的种类

依据测试原理不同,接近传感器可以分为红外,超声波,电容式和电感式接近传感器。

3.1 红外线接近传感器

红外接近传感器利用红外线来检测物体的接近。传感器内部包含一个红外发射器,它会发射红外线束;当红外线遇到物体时,部分红外线会被物体反射回传感器。传感器内部还有一个红外接收器,用于接收反射回来的红外线信号。传感器会分析接收到的信号,根据信号的强弱来判断物体的距离或者是否有物体靠近。

3.2 电容式接近传感器

电容接近传感器:通过测量物体与传感器之间的电容变化来检测物体的接近。传感器中的感应板与目标物体形成一个电容,电容随着与物体的距离变化而变化。由于电容容值的大小决定了振荡器产生的频率,对该频率进行监测,便可感知物体的接近。

电容式接近传感的一个示例是智能汽车门禁系统中。检测人手靠近的接近传感器位于车门把手内,一旦检测到有物体靠近,主控单元通过低频天线发送一个唤醒信号;该信号激活汽车钥匙发送器。汽车钥匙发送器于是与RFID接收器交换信息并完成开锁,整个过程在几分之一秒内就可完成,在人手摸到把手之前,门锁就已经打开了。

3.3 电感式接近传感器

电感式接近传感器一般仅适用于金属物体,多用于金属探测场景。它有一个电磁线圈用于产生交流磁场,在有金属物体接近时会改变磁场的强度或方向,从而触发传感器输出相应信号。

3.4 超声波接近传感器

超声波接近传感器利用超声波的回波来检测物体的距离。传感器发射超声波脉冲,当脉冲遇到物体时,会被反射回传感器,通过计算回波的时间或频率来确定物体与传感器的距离。

3.5 几种接近传感器的对比

从对比表格可以看出,超声波的检测范围最大,红外和电感接近传感器的成本相对更低,而电感接近传感器只可以用于金属探测,具体设计应用中的选择需要进行综合考量。

4、接近传感器实验演示

我们来演示使用MCU 读取显示接近传感器的数据。实验中使用的是一款常见的红外接近传感器。将手指慢慢靠近传感器,可以看到,随着手指距离越来越近,屏幕上显示的感应圆圈变得越来越大。

代码:

import uos
import test.st7789 as st7789
from test.fonts import vga2_8x8 as font1
from test.fonts import vga1_16x32 as font2
import random
import framebuf
from machine import Pin, SPI, ADC,PWM,I2C,freq
import time, math,array
from utime import sleep_ms
import struct
import vcnl4010
freq(180_000_000)

st7789_res = 0
st7789_dc  = 1
disp_width = 240
disp_height = 240
CENTER_Y = int(disp_width/2)
CENTER_X = int(disp_height/2)
spi_sck=Pin(2)
spi_tx=Pin(3)
spi0=SPI(0,baudrate=60_000_000, phase=1, polarity=1, sck=spi_sck, mosi=spi_tx)

display = st7789.ST7789(spi0, disp_width, disp_width,
                          reset=machine.Pin(st7789_res, machine.Pin.OUT),
                          dc=machine.Pin(st7789_dc, machine.Pin.OUT),
                          xstart=0, ystart=0, rotation=0)
display.fill(st7789.BLACK)


buttonM = Pin(5,Pin.IN, Pin.PULL_UP) #B
buttonS = Pin(6,Pin.IN, Pin.PULL_UP) #A
buttonL = Pin(7,Pin.IN, Pin.PULL_UP) #A
buttonPRESS = Pin(8,Pin.IN, Pin.PULL_UP) #A
buttonR = Pin(9,Pin.IN, Pin.PULL_UP) #A

i2c = I2C(1, scl=Pin(23), sda=Pin(22))

vcnl=vcnl4010.VCNL4010(i2c)
vcnl.startup()
def light_dot(x,y,color):
   display.pixel(x,y,color)

def draw_circle(x,y,r,color,fill=0):
   '''
   绘制圆形
   :param x,y  圆心坐标
   :param r  圆心半径
   :param fill 0 不填充  1 填充
   '''
   angleList = [0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.7853981633974483, 0.8, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45, 1.5, 1.55, 1.5707963267948966, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2.0, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.356194490192345, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3.0, 3.05, 3.1, 3.141592653589793, 3.15, 3.2, 3.25, 3.3, 3.35, 3.4, 3.45, 3.5, 3.55, 3.6, 3.65, 3.7, 3.75, 3.8, 3.85, 3.9, 3.9269908169872414, 3.95, 4.0, 4.05, 4.1, 4.15, 4.2, 4.25, 4.3, 4.35, 4.4, 4.45, 4.5, 4.55, 4.6, 4.65, 4.7, 4.71238898038469, 4.75, 4.8, 4.85, 4.9, 4.95, 5.0, 5.05, 5.1, 5.15, 5.2, 5.25, 5.3, 5.35, 5.4, 5.45, 5.497787143782138, 5.5, 5.55, 5.6, 5.65, 5.7, 5.75, 5.8, 5.85, 5.9, 5.95, 6.0, 6.05, 6.1, 6.15, 6.2, 6.25, 6.283185307179586];
   for i in angleList:
     light_dot(x+round(math.sin(i)*r),y+round(math.cos(i)*r),color)
   if fill:
     powR = math.pow(r,2)
     for xx in range(x-r,x+r):
       for yy in range(y-r,y+r):
         if ( (math.pow(xx-x,2)+math.pow(yy-y,2)) < powR):
           light_dot(xx,yy,color)

current_r = 0
turn = 0
while True :
    turn += 1
    current_r = int(vcnl.readProximity() * 100 / 65555)
    for i in range (current_r,current_r+3) :
        draw_circle(120,120,i,st7789.BLUE+0x10*current_r*turn,fill=0)
    if turn == 50 :
        turn = 0

其余代码文件请点此查看

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值