这三种光传感器都是不可见光传感器,光是由电场和磁场交替传播而形成的波动现象。光是一种电磁辐射,属于电磁波的一种。下图是电磁波的频谱范围,生活中多数光是看不到的,但是确真实存在,本文介绍几种光传感器,这几种光传感器实验比较简单,和树莓派的连接和之前介绍过的传感器也灭有什么不同,因此实验部分只做红外传感器,红外传感器也是用的比较多的,象智能小车的避障、循迹都采用红外传感器。
1、红外传感器
红外传感器(Infrared Sensor)是一种能够感知和测量红外线(Infrared Radiation)的设备。红外线是一种电磁辐射,波长比可见光长,无法被人眼直接看到。红外传感器利用红外线的特性,可以探测目标物体的温度、距离、运动等信息。
红外传感器广泛应用于各个领域,如家电、安防、医疗、工业等。在家电中,红外传感器常用于电视机、空调等设备的遥控功能,通过接收遥控器发出的红外信号来实现设备的操作。在安防领域,红外传感器可以用于监控系统,通过感知人体的红外辐射来触发报警。在医疗领域,红外传感器可以用于体温计,通过测量人体发出的红外线来测量体温。在工业领域,红外传感器可用于检测物体的温度,判断物体是否存在异常情况。
2、紫外传感器
紫外线是阳光中波长为 100~400nm 的光线。在自然界中,紫外线的主要光源是太阳。在太阳光谱上,紫外线的频率高于可见光线,可以分为UVA(紫外线 A,波长 320~400nm,长波)、UVB(波
280~320nm,中波)、UVC(波长100~280nm,短波)3种。
其中,UVA 的致癌性最强,晒红及晒伤作用是 UVB 的 1000 倍。UVC 一般会被臭氧层阻隔。过
量的紫外线照射会让皮肤产生大量自由基,导致细胞膜的过氧化反应,使黑色素细胞产生更多的黑色素,并往上分布到表皮角质层,造成黑色斑点。紫外线是造成皮肤皱纹、老化、松弛及黑斑的最大凶手,因此如何检测紫外线的强度对我们的健康十分必要。
VEML6075紫外传感器能够将日光的UV光强度转换成数字信号,准确地测量信号强度。即使长时间暴露在阳光的紫外辐射下,VEML6075紫外线传感器依然具有良好的性能,在-40℃~+85℃温度范围内具有很高的温度补偿稳定性。VEML6075紫外线传感器功耗低,具有关机模式,功耗可降低到800nA,工作电压为3.3V~5V,非常适合便携式电子产品和可穿戴设备,可用于气象站、火焰探测等领域。
3、激光传感器
激光传感器(Laser Sensor)是一种利用激光的高方向性、高单色性、高亮度、速度快、精度高、量程大和抗干扰能力强等特点实现目标检测和测距的传感器。它通过发射激光束并接收反射回来的光信号,通过测量光的传播时间或光的相位差来确定目标的位置、形状、距离和速度等信息。
激光传感器通常由激光发射器、光电二极管接收器、信号处理电路和数据输出接口等组成。激光发射器一般采用半导体激光器,能够发射出稳定、高能量、狭窄束的激光光束。接收器一般采用光电二极管或光电二极管阵列,能够接收并转换激光光束反射回来的光信号。信号处理电路负责对接收到的光信号进行放大、滤波、模数转换等处理,然后通过数据输出接口传输给用户系统。
激光传感器具有高精度、高分辨率、高速度、长测距范围的特点。它可以应用于工业自动化、机器人导航、测绘勘探、环境检测、安全监控等领域。在工业领域中,激光传感器可以用于测量物体的位置、形状、尺寸等参数,实现自动化生产和质量检测。在机器人导航中,激光传感器可以用于地图构建、环境感知和避障,提高机器人的自主导航能力。在测绘勘探中,激光传感器可以通过扫描地面或建筑物来获取地形、地貌等信息。在环境检测中,激光传感器可以用于气体浓度监测、颗粒物检测等。
激光测距芯片VL53L0X采用940nm垂直腔面发射激光器(Vertical-Cavity Surface-Emitting Laser,简称VCSEL)发射出激光,激光碰到障碍物后反射回来被VL53L0X接收到,测量激光在空气中的传播时间,进而得到距离。
4、实验代码与现象
本次实验只做红外传感器实验,接线比较简单,它只有3根线,out引脚接树莓派GPIO21(BOARD40),当用手遮挡,打印检测到障碍物,否则,没有检测到。
import time
import RPi.GPIO as GPIO
# 指定编号规则为BOARD
GPIO.setmode(GPIO.BOARD)
# 使用的GPIO引脚
gpio_pin = 40
# 将第40个引脚设置为输入模式
GPIO.setup(gpio_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def loop_detect():
while True:
# 当检测是否输出低电平信号
if GPIO.input(gpio_pin) == 0:
print("检测到障碍物")
else:
print("未检测到障碍物")
time.sleep(0.5)
if __name__ == '__main__':
try:
loop_detect()
except KeyboardInterrupt:
print("程序结束!")
finally:
GPIO.cleanup()
(1)智能小车的红外避障
其主要是通过红外传感器可精确地测量和障碍物的距离这一特性来实现的。在使用该模块测量距离时,其工作原理与超声波传感器类似,由红外发射管和红外接收管组成。发射管发射红外线,当前面没有障碍物时,红外线就一直往前照射,一旦遇到障碍物后,红外光就反射回来被接收管接收,经过比较器电路处理之后,输出指示灯亮起,同时在信号输出接口输出一低电平的数字信号,也可通过电位器旋钮调节检测距离,有效距离范围大概为 2~30cm。红外线的反射光越强,则说明障碍物的距离愈近。
当用手遮挡并且范围在20cm之内(感应距离主要看灵敏度阈值调整)指示灯会亮,传感器给树莓派一个低电平信号,当检测到低电平信号后,启动相应左转或右转功能。
如上图,这个车是2个红外模块,左右各一个,由于是面对读者,图左边的红外实际上定义为SensorRight,图右边的红外实际上定义为SensorLeft,2个传感器不停检测前方是否有障碍。有障碍产生低电平信号0,没有障碍变量值为1。
while True:
SR_2 = GPIO.input(SensorRight)
SL_2 = GPIO.input(SensorLeft)
if SL_2 == True and SR_2 == True:
print( "t_up")
t_up(50,0)
elif SL_2 == True and SR_2 ==False:
print( "Left")
t_left(50,0)
elif SL_2==False and SR_2 ==True:
print( "Right")
t_right(50,0)
else:
t_stop(0.5)
t_down(50,1)
该段程序代码实现的功能:
两边的红外均未检测出障碍,小车前进;
右边的红外检测到障碍,左边的未检测出障碍,小车左转;
左边的红外检测到障碍,右边的未检测出障碍,小车右转;
两边的红外均检测出障碍,小车停止运动。
(2)智能小车的红外循线(循迹)
红外巡线是一种常见的机器人技术,用于实现自动巡线功能。通过红外传感器检测地面上的巡线带,在机器人上进行反馈控制,从而实现沿着巡线带行驶的功能。
红外线的反射光越强,则说明障碍物的距离愈近。但当障碍物表面是黑色时,红外线容易被吸收,从而使反射光的强度减弱,这是它的不足之处,对于其他颜色的障碍物,红外线都有很好的反射效果。正是这一特点,因此小车可以用红外传感器做循迹,这个轨迹是黑色线才行。(超声波传器发射出的超声波也很有可能被吸音墙面吸收,并且速度受温度和风向的干扰)
编程思路:初始状态,小车位于车道线中间,左右的红外模块均检测不到黑线(持续产生低电平信号0,检测到黑线则产生高电平信号1,和避障相反),当右侧的红外检测到黑线,说明小车往左偏,右转;当左侧的红外检测到黑线,说明小车往右偏,左转。不太可能出现同时检测出黑线的情况。
有了这个思路和上面代码的样例,相信写出红外巡线的代码很容易了把。
如果是用树莓派做视觉小车的巡线,可以考虑另一种实现方式,毕竟树莓派的CPU功能还是比较强悍的,现在的树莓派已有第5代产品,性能是树莓派4B的2-3倍,完全可以用图像处理的方式来实现小车的循线。不管是黑线白线,单车道线还是双车道线都可以,毕竟使用了OpenCv图像处理库,那便可以随心所欲驰骋在人工智能和物联网的世界里。