标签人体红外传感器

红外感应灯实验

    家里曾经买过一种灯,放在门口门厅的位置;尤其是晚上当感应到人的时候会自动亮灯,从而方便找到物品或者电灯开关的位置;好像也叫红外感应灯;由于手里有继电器,红外感应传感器以及七彩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、定义检测频率,每秒检测一次,这个可自定义。

人体红外传感器检测触发七彩LED灯闪烁实验

#实验目的:通过人体红外传感器检测是否有人经过,从而触发继电器通电,然后触发七彩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灯熄灭;然后进入下一个检测周期。
#视频效果如下:

人体红外传感器探测实验

#实验目的:通过人体红外传感器感测到人体经过,从而发出预警信息。
#接线效果如图
接线示例
#传感器说明
传感器去掉外罩后可见各引脚含义
传感器说明
#实验代码
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO  ##引入GPIO模块
import time              ##引入time库

detectPin = 18

GPIO.setmode(GPIO.BCM)   ##此处采用的BCM编码 因为T型扩展板也是BCM编码 方便统一
GPIO.setup(detectPin, GPIO.IN) ##设置检测引脚我输入状态

try:
    while True:
        status = GPIO.input(detectPin)
        print status
        if status == 1:  ##高电平触发报警
            print '报警 发现有人'
        else:
            pass
        time.sleep(1)

except KeyboardInterrupt:
    pass

GPIO.cleanup()
#实验效果
1、执行代码 Python jiujiang.py;
2、可见默认输出 低电平状态;
3、当有人经过或将传感器指向自己,则发现输出”报警 发现有人“;
4、将传感器指向没有人的地方,可见一定延迟后输出低电平状态。
#视频效果如下: