这篇文章来源于DevicePlus.com英语网站的翻译稿。红外线是一种没有特殊设备的辅助就无法看到的光线,但是我们可以通过热量感受到它的存在。这种光线被称为“红外线”,是因为它的波长超出了可见光谱中的红色光线边界。
这引起了设备制造商的兴趣,有一部分原因是人类、动物和物体会一直辐射红外线。
虽然这听起来很奇怪,但是其实您应该已经对某些类似的东西很熟悉了:火,温度非常高,会发出热量和可见光。
虽然火可以达到足够高的温度来发出可见光,但是我们的身体不会,而且我们所辐射的光—红外线—人眼是无法看到的。
如果Raspberry Pi可以利用红外线来查看是否有人出现,会不会有人觉得很便利呢?
通过使用非常便宜、可用、耐用、可靠和经济的组件,我们可以做到这一点!
这种设备叫“被动红外运动传感器”,通常称为“被动红外传感器”或者简称“PIR传感器”。
PIR运动传感器是如何工作的
PIR运动传感器由一对热释电传感器上的透镜组成:一种晶体材料,当它接收到红外光时会产生电压。
但是任何含有一定热量的物体都会辐射出一些红外线。这意味着单个热释电传感器会一直产生电压,即使视野中的所有物体都是完全静止的。
那么如何将它变成一个运动传感器呢?这很简单,但是很有技巧性。将两个热释电传感器进行连接,这种连接使得来自环境红外线的信号可以相互抵消。
当足够大且具有一定温度的物体在镜头前移动时,两个信号将会停止相互抵消,传感器会报告有物体在移动。
PIR运动传感器可能会产生误报
当您将PIR运动传感器连接到电源时,它需要30秒到60秒才能稳定下来。在还没有稳定的时候就运行可能会引发误报,这在某些电路中会很让人头疼。在Raspberry Pi项目中,很容易编写出软件来让它在启动后等待片刻再运行。
更大的问题是由动物、昆虫甚至阵风所触发的传感器响应。
您通常可以将组件校准到更低的敏感度,这样可以阻止您的小猫或者小狗触发警报。而对于在传感器前飞行的昆虫来说,这种调整的作用不大。
但是,不要把这些误报看作是一个破坏者,而是想想如何聪明地处理它们。
在Python中处理PIR运动传感器
从可视化编程工具(如Scratch down)到“close-to-the-metal(能够以编程方式管理操作系统内存)”的编程语言(例如C),有很多方法可以将PIR运动传感器和Raspberry Pi进行连接。
在这里,我们将使用Python 和GPIO Zero库,这些库已经帮我们整理好了大部分的细节内容。
如果您从来没有写过Python代码,可以尝试学习来自“Automate the Boring Stuff With Python(用Python将枯燥的工作自动化)”的一些教程。如果您不打算了解这些内容,也可以直接使用下面的代码,如果您能理解下文代码中的内容,将会学到更多的知识。
本文假设您对GPIO 引脚有了基本的了解。如果它对您来说是全新的知识,请查看过去的指南。下面的图表会提醒您有哪些相关基础知识。
将PIR运动传感器连接到Raspberry Pi
为了开始构建您的Raspberry Pi 运动传感器,您将需要:
一个带电源的Raspberry Pi以及一个安装了Raspbian的SD卡 | |
一个面包板 | |
一个GPIO 扩展板(可选,但是推荐使用) | |
一个PIR 运动传感器 (我使用的是XC-4444) |
您还需要一些可以让您输入代码的设备,例如USB键盘或者SSH连接。
将组件连接到面包板
从背面看这台XC-4444,可以看到引脚在底部,这些引脚为:
• 左边用于5伏电源
• 中间用于数字输出
• 右边用于接地
虽然PIR运动传感器往往大同小异,但是不同型号上的引脚可能顺序会有所不同。如果您不确定的话,请查看组件规格。
将Raspberry Pi上的5伏引脚连接到正电源轨,然后将接地引脚连接到负电源轨。
然后,让镜头背对您,将运动传感器的电源引脚连接到正电源轨,将接地引脚连接到负电源轨,并将数字输出引脚连接到面包板中间的某处。
最后,将该面包板行连接到GPIO引脚,我使用的是引脚13。
将其与GPIO Zero接合
现在是时候编写一个快速脚本了。启用命令提示符,并通过输入以下内容打开文本编辑器:
nano intruderAlarm.py
GPIO Zero已经为我们的运动传感器创建了一个类,所以我们直接导入这个类,并导入来自time模块的sleep函数。
from time import sleep
from gpiozero import MotionSensor
现在我们编写一个函数,功能为当传感器检测到运动物体时将消息打印到屏幕上。
def detectIntruders():
pir.wait_for_motion()
print(‘Intruder Alert!’)
sleep(5)
sleep指令表示打印完消息后将等待5秒钟。如果没有该指令,我们的脚本将在脉冲持续时间内用消息填满整个屏幕,这样的话就很难了解运行状况了。
如果我们不对MotionSensor对象进行初始化,那么detectIntruders()函数将无法工作,所以让我们将其设置为引脚13:
pir = MotionSensor(13)
您能相信到此我们已经快要完成了吗?现在我们只需要一个循环程序来运行我们的函数就可以完成了。
while True:
detectIntruders()
按下Ctrl+O来保存脚本,然后按下Ctrl+X退出文本编辑器。想要运行程序,请输入:
python3 intruderAlarm.py
现在起身并走过传感器,您看到打印的信息了么?
如果不起作用,请检查所有引脚是否正确连接。PIR运动传感器的接地和电源引脚很容易混淆。
如果想要停止脚本的运行,请按下Ctrl+C。
校准PIR运动传感器
这款XC-4444有两个关键指标:一个是脉冲长度,标记为Tx,另一个是灵敏度,标记为Sx。
在某些项目中,调整脉冲长度可能会很有用,但是我倾向于保持它的大小,通过编写代码来处理Raspberry Pi对信号的响应工作。
调整灵敏度会更有趣。您可以通过调整灵敏度来决定传感器需要检测出什么程度的运动才能发出信号。
一些PIR运动传感器具有更多的控件。对于一些响应特征,比如只要检测到运动,脉冲就一直维持,或者模块是否发处重复的脉冲,这些传感器会有所不同。
PIR运动传感器有多种用途
我们刚刚探讨的工作原理不仅仅只适用于警报。
它们还适用于各种家庭中的自动化项目:照明、温度控制、开门,甚至还可以在您下班回家时为您播放一些专业的摔跤风格的入口音乐。
如果您想要在某人出现的时候获悉消息,这将会是您的得力助手。