#实验目的:通过人体红外传感器检测是否有人经过,从而触发继电器通电,然后触发七彩LED灯(或其他预警)闪烁预警。
#接线效果如图:
1、继电器接线具体可参考:http://www.shumeijiang.com/2019/11/23/继电器实验/
2、人体红外传感器接线具体可参考:http://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 = 20 ##继电器控制
detectPin = 23 ##人体红外传感器检测
GPIO.setmode(GPIO.BCM) ##此处采用的BCM编码 因为T型扩展板也是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:
pass
GPIO.cleanup()
#实验效果:
1、执行代码 Python jiujiang.py;
2、由于初始化为低电压,所以当人体红外传感器没有检测到人体时,不会触发预警;
3、当将手触放在人体红外传感器前,传感器会触发高电平,进而触发边沿事件,再而触发回调方法,触发LED闪烁。
4、由于回调方法有几秒延迟,因此可见LED等持续闪烁,直到时间到达,程序设置为低电平,LED灯熄灭;然后进入下一个检测周期。
#视频效果如下: