驱动光电传感器实现计数
光电传感器是将光信号转换为电信号的一种器件。其工作原理基于光电效应。光电效应是指光照射在某些物质上时,物质的电子吸收光子的能量而发生了相应的电效应现象。根据光电效应现象的不同将光电效应分为三类:外光电效应、内光电效应及光生伏特效应。光电器件有光电管、光电倍增管、光敏电阻、光敏二极管、光敏三极管、光电池等。分析了光电器件的性能、特性曲线。
工作方式
这里用的这款是通过射出的激光,照射到目标物体,通过反射回来的光来判断物体是否有无。这种传感器可以调整激光到物体起作用的距离。
光电传感器图示
接线方式
一般这种光电传感器是工业用的,电源电压一般都是24V。而树莓派的GPIO是3.3V,不能直接接上去。我们再两者之间接个光耦,隔离这两个电源。光电传感器一共3条线(棕色+、蓝色-、黑色信号线)。通过5v电源输出后同个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():
#获取gpio17引脚当前检测到的电平
input_value = GPIO.input(17)
#如果当前的电平为低
if input_value == False:
#防止电平抖动造成误判,延时10ms后再次检测
time.sleep(0.01)
#获取gpio17引脚当前检测到的电平
input_value = GPIO.input(17)
#如果当前的电平任然为低,此信号可以信任
if input_value == False:
#返回真,物体离开了传感器
return True
else :
#否者返回假,为电平抖动,信号不可信
return False
else:
#返回假,当前并无物体
return False
#定义检测有物体挡住的函数
def triggerdown():
#获取gpio17引脚当前检测到的电平
input_value = GPIO.input(17)
#如果电平为高
if input_value == True:
#防止电平抖动造成误判,延时10ms后再次检测
time.sleep(0.01)
#获取gpio17引脚当前检测到的电平
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();