家里曾经买过一种灯,放在门口门厅的位置;尤其是晚上当感应到人的时候会自动亮灯,从而方便找到物品或者电灯开关的位置;好像也叫红外感应灯;由于手里有继电器,红外感应传感器以及七彩LED灯(此处用于替代灯泡的作用),所以尝试模仿制作一个红外感应灯。
先看自己的效果:
从上面的动图可以看到,当手放在红外传感器的前面就会自动触发七彩LED灯点亮;此处可以理解为将灯泡点亮。
具体接线可以参考文章:
继电器部分:https://www.shumeijiang.com/2019/11/23/继电器实验;
红外传感器部分:https://www.shumeijiang.com/2019/12/28/人体红外传感器探测实验。
代码示例:
#!usr/bin/env python
#coding:utf-8
'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''
import RPi.GPIO as GPIO ##引入GPIO模块
import time ##引入time库
ledPin = 18 ##继电器控制
detectPin = 17 ##人体红外传感器检测
GPIO.setmode(GPIO.BCM) ##此处采用的BCM编码
GPIO.setup(ledPin, GPIO.OUT) ##设置继电器为输出模式
GPIO.setup(detectPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) ##设置人体红外传感器为输入模式 并初始化拉低电平
GPIO.output(ledPin, GPIO.LOW) ##初始化继电器为低电平
##定义七彩LED灯预警闪烁方法
def startWarning():
GPIO.output(ledPin, GPIO.HIGH) ##高电平闪烁
time.sleep(8) ##闪烁8秒
GPIO.output(ledPin, GPIO.LOW) ##低电平熄灭
GPIO.add_event_detect(detectPin, GPIO.RISING) ##添加一个边沿检测事件 检测电压升高
GPIO.add_event_callback(detectPin, startWarning) ##同时添加一个回调动作
try:
while True:
if GPIO.event_detected(detectPin): ##检测是否触发事件 电压升高触发
print "触发预警"
else:
pass
time.sleep(1) ##检测频率为1秒/次 可自定义
except KeyboardInterrupt:
print('预警结束')
GPIO.cleanup()
由上面代码可看到:
1、定义LED灯为输出模式;
2、定义人体红外传感器为输入模式,并初试化拉低电压;
3、添加边沿加测事件,由于人体红外传感器高电平触发,因此定义一个电压升高事件,RISING事件;
4、添加一个回调函数,函数定义七彩LED亮灯动作;
5、遍历检测人体红外是否触发电压升高事件,如果触发则回调七彩LED亮灯函数;
6、定义检测频率,每秒检测一次,这个可自定义。