廉价的PIR传感器和Raspberry Pi –第2部分

6

PIR模块#3从我的第一个开始 PIR传感器模块文章 I thought I would create a 蟒蛇 script that allowed me to easily measure the reset 时间.

这样,我可以附加一个模块,运行脚本并测量输出引脚恢复到“低”状态所需的时间。然后,我可以调整微调电阻,并以更可控和更精确的方式将重置时间调整为我的首选值。

示例Python脚本

以下脚本假定您已将PIR模块连接到GPIO接头,如 Part 1。该示例使用GPIO7(引脚26)。

将下面的脚本剪切并粘贴到文本文件中,然后传输到Pi或使用以下方法直接下载脚本 这个连结 (推荐的)。

#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# pir_2.py
# Measure the holding 时间 of a PIR module
#
# Author : 马特 Hawkins
# Date   : 20/02/2013

# Import required 蟒蛇 libraries
import 时间
import RPi.GPIO as 通用输入输出

# Use BCM 通用输入输出 references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define 通用输入输出 to use 上 Pi
GPIO_PIR = 7

print "PIR Module Holding Time Test (CTRL-C to exit)"

# Set pin as input
GPIO.setup(GPIO_PIR,GPIO.IN)      # Echo

Current_State  = 0
Previous_State = 0

try:

  print "Waiting for PIR to settle ..."

  # Loop until PIR output is 0
  while 通用输入输出.input(GPIO_PIR)==1:
    Current_State  = 0

  print "  Ready"

  # Loop until users quits with CTRL-C
  while True :

    # Read PIR state
    Current_State = 通用输入输出.input(GPIO_PIR)

    if Current_State==1 and Previous_State==0:
      # PIR is triggered
      start_time=time.time()
      print "  Motion detected!"
      # Record previous state
      Previous_State=1
    elif Current_State==0 and Previous_State==1:
      # PIR has returned to ready state
      stop_time=time.time()
      print "  Ready ",
      elapsed_time=int(stop_time-start_time)
      print " (Elapsed 时间 : " + str(elapsed_time) + " secs)"
      Previous_State=0

except KeyboardInterrupt:
  print "  Quit"
  # Reset 通用输入输出 settings
  通用输入输出.cleanup()

另外,也可以使用以下命令行将脚本直接轻松下载到您的Pi上:

wget //www.ytguangda.com/archive/python/pir_2.py

然后可以使用以下命令运行脚本:

sudo 蟒蛇 pir_2.py
PIR模块#2

带两个微调控件的PIR模块

运行时,脚本等待输出引脚变为低电平。就像在pir_1.py中一样,当检测到移动时,它将在屏幕上显示一条消息。主要区别在于,它现在测量输出引脚变为高电平和返回到低电平之间的时间间隔。

您可以使用小螺丝刀调整“time” control to increase or decrease the 时间. Once you’触发了模块,保持静止很重要,这样您就不必’t increase the 时间 the output stays High which will mess up your results.

A half turn will result in the reset 时间 being increased by a few minutes so it’最好以较小的增量进行调整。


在eBay上可用。

分享。

6条留言

  1. 詹姆斯·罗伯茨

    嗨,马特,

    在寻找pi电路的电路实验室时偶然发现了您的站点。碰巧的是,昨天有一个等效的PIR到达了该职位,所以我’我会在您讲话时使用您的代码对其进行测试(尽管使用quick2wire接口板及其api– I’我是电子新手,所以没有’不要相信自己不要拿掉Pi!)。

    您如何找到PIR的性能– even when I’坐在视线之外,我似乎从中得到了一些虚假的读数–相当稳定的检测流,介于1到2秒之间。

    另外,我想这可能是Pi的性能问题,但是您是否注意到进行可检测的动作与它的注册之间存在很大的滞后性–似乎有明显的延迟(我’我在pi上运行agocontrol.com,但没有gui)。

    干杯
    詹姆士

  2. 嗨,马特,
    您是否尝试过使用多个PIR运动传感器? 1个传感器似乎工作良好,但是当我尝试从2个端口一一读取时,代码失败

    • 它应该与2个传感器一起使用,因为它们可以具有单独的GPIO引脚。许多代码将需要重复。它’这不是处理两个传感器的非常有效的方法,但应该可行。

  3. 几个传感器的更新:

    尝试使用2 PI’s:
    1- Grove,Raspberry pi的第一个模型+ 4个运动传感器(给一个大房间)– didn’t work,
    2-格罗夫+树莓派2– did work.

    我知道这不是处理传感器的最有效方法,因为您必须在依次读取和读取每个传感器之后强制睡眠,但是我的房间很大,有天花板阻塞。那么,更有效的方法是什么呢?

    • 更好的技术是创建一个‘class’ to define a PIR device. Then you use the 类 to create as many instances as required. This would reduce the code duplication.

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.