光电传感器是将光信号转换为电信号的装置。其工作原理是基于光电效应。光电效应是指当光照射在某些物质上时,物质的电子吸收光子的能量,产生相应的电效应现象。光电效应根据光电效应现象分为外光电效应、内光电效应和光生伏特效三类。光电器件包括光电管、光电倍增管、光敏电阻、光敏二极管、光敏三极管、光电池等。分析了光电器件的性能和特性曲线。
这里使用的激光照射到目标物体,并通过反射的光来判断物体是否存在。该传感器可以调整激光与物体之间的距离。
光电传感器图
这种光电传感器一般用于工业,电源电压一般为24V。而树莓派的GPIO是3.3V,不能直接连接。我们之间有一个光耦合来隔离这两个电源。光电传感器有三条线(棕色) 、蓝色,黑色信号线)。v电源输出后,同2个500欧姆的电阻分压GPIO17。
当有物体遮挡光电传感器时,通过上述接线,gpio17接收高电平,否则接收低电平。我们可以根据这个信号进行计数。
import RPi.GPIO as GPIO import time #设置警告信息不输出 GPIO.setwarnings(False) #设置gpio模式为bcm模式 GPIO.setmode(GPIO.BCM) #设置GPIO17引脚为输入模式 GPIO.setup(17,GPIO.IN) #定义检测有什么东西被阻挡,判断它是否离开了函数 def triggerup(): #获取gpio目前检测到17引脚的电平 input_value = GPIO.input(17) #如果当前电平较低 if input_value == False: #防止电平抖动造成误判,延时10ms后再次检测 time.sleep(0.01) #获取gpio目前检测到17引脚的电平 input_value = GPIO.input(17) #如果当前电平仍然很低,这个信号可以信任 if input_value == False: #返回真实,物体离开传感器 return True else : #否则返回假期,为电平抖动,信号不可信 return False else: #返回假,目前还没有物体 return False #定义检测物体阻挡的函数 def triggerdown(): #获取gpio目前检测到17引脚的电平 input_value = GPIO.input(17) #如果电平为高 if input_value == True: #防止电平抖动造成误判,延时10ms后再次检测 time.sleep(0.01) #获取gpio目前检测到17引脚的电平 input_value = GPIO.input(17) #如果电平仍然很高,你可以信任这个信号 if input_value == True: #返回真,传感器被挡住了传感器 return True else : #返回假期,抖动电平,信号不可信 return False else: #返回假 return False #计数变量 count = 0 #循环 while True: #获取时,物体挡住传感器 input_value = triggerdown() #如果input_value是true,传感器被挡住了传感器 if input_value == True: #计数加一 count =1 #打印输入当前计数值 print("count:%d" % count) #循环等待物体离开 while True: #获取物体是否离开传感器 input_value = triggerup() #如果input_value是true,物体离开了传感器 if input_value == True: #跳出这个循环 break GPIO.cleanup();