视频演示
光敏电阻传感器模块
模块参数:
工作电压:3.3V-5V
光敏电阻模块对环境光线敏感,一般用来检测周围环境的光线的亮度。模块在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平。
线路连接(*连接线路时树莓派务必断电操作)
根据声控灯教程增加光敏电阻模块(查阅上一篇教程),模块VCC端接树莓派2号(5V)引脚,GND端接25号引脚,DO(OUT)端接18号引脚。
编写程序light.py(只用到光敏模块)
import RPi.GPIO as GPIO
import time
#初始化
def init():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18,http://GPIO.IN)
GPIO.setup(40,GPIO.OUT)
#点亮led检测是否工作
GPIO.output(40, 1)
time.sleep(0.1)
pass
#灯函数(这里数值控制灯亮的时间)
def beep():
while GPIO.input(18):
GPIO.output(40,GPIO.HIGH)
time.sleep(3)
GPIO.output(40,GPIO.LOW)
time.sleep(0.1)
#感应器侦测函数
def detct():
#因为是仅仅试验,所以只让它循环运行100次
for i in range(1,101):
#如果感应器针脚输出为True,则打印天黑了。
if GPIO.input(18) == True:
print('天黑了!')
beep()
#否则将LED针脚电平设置为LOW
else:
GPIO.output(40,GPIO.LOW)
print('天亮了!')
time.sleep(2)
time.sleep(3)
init()
detct()
#脚本运行完毕执行清理工作
GPIO.cleanup()
运行程序,开始led灯将点亮0.1秒后熄灭说明开始工作,如果光线充足,led熄灭屏幕上打印出“天亮了”,遮住光敏模块后led灯点亮并打印出“天黑了”。
增加声控:编写程序 soundandlight.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
LED = 40 # LED正极连接的GPIO
LIGHT = 18 # 光感
SOUND = 12 # 声感
flg = False # 当前LED灯的开关状?
# 指定GPIO4(声音感应器的OUT口连接的GPIO口)的模式为输入模式
# 默认拉高到高电平,低电平表示OUT口有输出
GPIO.setup(LIGHT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SOUND , GPIO.IN, pull_up_down=GPIO.PUD_UP)
# 指定GPIO40(LED长针连接的GPIO针脚)的模式为输出模
GPIO.setup(LED, GPIO.OUT)
GPIO.output(LED, 1)
time.sleep(0.1)
pass
# 当内部作用域想修改外部作用域的变量时,用到global和nonlocal关键字
num = 0
def callback(channel):
global num
#检测声音模块是否输出低电平,如果是表示声音被检测到,点亮或关闭LED
print(channel, GPIO.input(LIGHT), GPIO.input(SOUND ))
num += 1
print(num)
#如果没有灯光,触发点亮led
if (GPIO.input(LIGHT) == 1):
GPIO.output(LED, 1)
#稍微延时一会,避免刚点亮就熄灭,或者刚熄灭就点亮
#这里数值控制灯亮的时间
time.sleep(3)
GPIO.output(LED, 0)
# 监听光感
GPIO.add_event_detectLIGHT, GPIO.RISING, callback)
# 监听声控
GPIO.add_event_detect(SOUND ,GPIO.RISING,callback,bouncetime=200)
while True:
time.sleep(10)
GPIO.cleanup()
运行程序,开始led灯将点亮0.1秒后熄灭说明开始工作,如果光线充足LED灯熄灭;遮住光敏模块后,发出声音被声音传感器检测到后LED灯点亮3秒。