0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在树莓派Pico上使用PIR传感器构建窃贼报警器

jf_zGNBEhbi 来源:趣无尽 2023-08-17 10:08 次阅读

微控制器MCU)在现实世界的另一个用途是在报警系统中。从早上叫你起床的闹钟到火灾警报、防盗警报,甚至是核电站出现问题时发出的警报,微控制器帮助保护我们所有人的安全。

本篇将带你构建自己的防盗报警器,实现一个特殊的运动传感器,不断扫描任何人进入房间的事件。无论你是在保护银行金库,还是只是想防止兄弟姐妹们出现在你的房间里,防盗报警器肯定会派上用场。

这个项目需要用到:
树莓派 Pico
面包板
任何颜色的 LED
一个 330Ω 电阻
有源蜂鸣器
一个或多个 HC-SR501 被动红外(PIR)传感器
若干公对公、公对母杜邦线
microUSB 数据线

将 Pico 连接到树莓派或其他运行 Thonny MicroPython IDE 的计算机。

HC-SR501 PIR 传感器

在前面的系列教程中,你已经使用了按钮开关形式的简单输入组件。这一次,你将使用被称为被动红外传感器(PIR)的传感器。有数百种不同的 PIR 传感器可用,HC-SR501 低成本、高性能,并与 Pico 完美适配。

被动式红外传感器被设计用来检测运动,特别是人和其他生物的运动。它的工作原理有点像照相机,但它不是捕捉可见光,而是寻找以红外辐射的形式从活体发出的热量。它被称为被动红外传感器,而不是主动红外传感器,因为就像相机传感器一样,它自己不发出任何红外信号

实际的传感器被埋在一个塑料镜头下,通常形状像半个球。镜头在技术上并不是传感器工作所必需的,但可以供更宽的视野(FOV),如果没有透镜,PIR 传感器只能看到传感器正前方一个非常窄的角度的运动。这种镜头可以从更宽的角度吸收红外线,这意味着一个 PIR 传感器就可以观察到房间里大部分的移动情况。

在商业防盗报警系统中,PIR 传感器只是使用的传感器之一。其它的传感器还包括:能告知窗 户何时被打碎的碎玻璃传感器、能监测门是开着还是关着的磁传感器、能捕捉窃贼脚步声的声音传感器以及能告知门锁是否被撬开的振动传感器。

然而,一个简单的 PIR 传感器对于低安全级别的地方就足够了。

现在拿起你的 HC-SR501 传感器看一看。首先要注意的是,它有自己的电路板。除了传感器和镜头,还有其他几个组件:驱动传感器的黑色芯片、一些电容和微小的贴片电阻。你也可以看到几个电位器,你可以用螺丝刀拧动它们,来调整传感器的灵敏度,以及当触发时它保持激活的时间。

你还会看到三个公排针,和 Pico 底部的排针一模一样。但是,你不能直接将它们插入面包板,因为面包板上的组件会碍事。取三根公对母杜邦线,将母线端插入 HC-SR501 的针脚上。接下来,拿起公的一端,把它们连接到面包板和 Pico 上。在将传感器连接到 Pico 上时,需要确认传感器的文档。不同公司生产的 HC-SR501 传感器,它们引脚的顺序会略有不同。

这里的传感器,引脚顺序为 GND 在底部,信号或触发引脚在中间,电源引脚在右边。

cdfa5bd0-3ca2-11ee-ac96-dac502259ad0.jpg

传感器的信号引脚连接到 Pico 的 GP28 引脚。GND 和 VCC 分别连接 Pico 的 GND 和 5V 引脚。

警报器代码

ce172f12-3ca2-11ee-ac96-dac502259ad0.jpg

对 Pico 进行编程才能识别传感器。这和读取按钮的操作类似。几乎可以使用相同的代码:

import machine
sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)

就像上一篇教程中做的反应游戏一样,防盗报警器的输入应该作为一个中断,停止程序正在做的任何事情,并在传感器被触发时做出反应。和前面一样,首先定义一个回调函数来处理中断:

def pir_handler(pin):
print("ALARM! Motion detected!")

最后,设置中断本身:

sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)

单击 Run 按钮,并将程序保存到 Pico 中,命名为 Burglar_Alarm.py。

在 PIR 传感器前面挥一挥你的手,你会看到一条消息出现在 Shell 区域,确认传感器检测到了手的移动。如果你一直挥动你的手,信息将持续输出,但是在每条消息之间有一个延迟,
这种延迟和内置在 HC-SR501 上的电位器设置相关。你可以插入一个螺丝刀,把它朝一个 方向转动来减少延迟,朝另一个方向转动来增加延迟。请参考传感器的文档,以确定哪个电位器是控制延迟的。

组装输入和输出之后的代码

真正的防盗警报器有灯和警报器来醒周围的人有问题了,下面我们就来添加它们。如图所示添加 LED 和有源蜂鸣器。其中,LED 正极与 Pico 的 GP15 引脚相连,蜂鸣器的正极与 Pico 的 GP14 相连。GND 均与 Pico 的 GND 引脚相连。

ce30ecd6-3ca2-11ee-ac96-dac502259ad0.jpg

加入 LED 和蜂鸣器之后的完整代码如下:

import machine
import utime


sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)
led = machine.Pin(15, machine.Pin.OUT)
buzzer = machine.Pin(14, machine.Pin.OUT)


def pir_handler(pin):
print("ALARM! Motion detected!")
for i in range(50):
  led.toggle()
  buzzer.toggle()
  utime.sleep_ms(100)


sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)


while True:
  led.toggle()
  utime.sleep(5)

点击 Run 按钮,然后在 PIR 传感器前再次挥舞你的手,这时不仅会有消息提示出现在 Shell 区域,LED 将开始快速闪烁 50 次并伴随着警报器哔声(间隔 100 毫秒)。

为了让防盗报警器更具震慑力,它在没有察觉到任何动静的情况下也会缓慢闪烁(每 5 秒一次),以此 警告潜在的入侵者,你的房间已经被人监视了。

祝贺你,这应该足以吓入侵者了!

如果你使用的是无源蜂鸣器,尝试这个版本的程序代替:

import machine
import utime


sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN) led = machine.Pin(15, machine.Pin.OUT)
buzzer = machine.Pin(14, machine.Pin.OUT)


def pir_handler(pin):
  print("ALARM! Motion detected!")
  for i in range(50):
    led.toggle()
    for j in range(25):
      buzzer.toggle()
      utime.sleep_ms(3)


sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)


while True:
  led.toggle()
  utime.sleep(5)

在蜂鸣器的使用上,上面的代码是通过快速切换蜂鸣器引脚的电压来模拟有源蜂鸣器振荡器的效果。

尝试将延迟时间从 3 毫秒改为 4 毫秒,你会发现蜂鸣器的声音音调更低。改变延迟会改变蜂鸣器振荡的频率:延迟越长,蜂鸣器振荡的频率就越低,声音的音调就越低;延迟越短,它的振动频率 就越高,声音的音调也就越高。

扩展警报器

添加多个 HC-SR501 传感器可以覆盖更多区域。我们以两个为例,将新增的传感器信号脚连接到 Pico 上的 GP22 引脚,如图所示。

ce40fdf6-3ca2-11ee-ac96-dac502259ad0.jpg

在设置第一个传感器的地方添加一行新代码:

sensor_pir2 = machine.Pin(22, machine.Pin.IN, machine.Pin.PULL_DOWN)

然后创建一个新的中断,同样在第一个中断的下面:

 
sensor_pir2.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)

请记住,一个处理程序可以有多个中断,因此不需要更改终端处理程序的部分。

点击 Run 按钮,并在第一个 PIR 传感器上挥一挥你的手,你会看到警报信息,LED 闪光,蜂鸣器的声音和之前一样。等他们完成,然后在第二个 PIR 传感器上挥挥手,你会看到你的防盗警报以完全相同的方式响应。

为了使闹钟变得非常智能,你可以根据哪个引脚负责中断来自定义消息,它的工作方式与你之前编写的双人反应游戏中完全相同。

回到你的中断处理程序并修改它:

def pir_handler(pin):
if pin is sensor_pir:
print("ALARM! Motion detected in bedroom!")
elif pin is sensor_pir2:
print("ALARM! Motion detected in living room!")
for i in range(50):
led.toggle()
buzzer.toggle()
utime.sleep_ms(100)

就像在系列教程「反应游戏」项目中,这段代码让中断报告它被哪个引脚触发。最终完整的代码如下:

import machine
import utime


sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN) sensor_pir2 = machine.Pin(22, machine.Pin.IN, machine.Pin.PULL_DOWN) led = machine.Pin(15, machine.Pin.OUT)
buzzer = machine.Pin(14, machine.Pin.OUT)


def pir_handler(pin):
  if pin is sensor_pir:
    print("ALARM! Motion detected in bedroom!")
  elif pin is sensor_pir2:
    print("ALARM! Motion detected in living room!")
    for i in range(50):
    led.toggle()
    buzzer.toggle()
    utime.sleep_ms(100)


sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler) sensor_pir2.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)


while True:
  led.toggle()
  utime.sleep(5)

祝贺你!你现在学会如何构建一个模块化的防盗报警器来覆盖你需要的所有监测区域了!

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7487

    浏览量

    151034
  • 传感器
    +关注

    关注

    2548

    文章

    50663

    浏览量

    751879
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16984

    浏览量

    350275
  • 报警器
    +关注

    关注

    12

    文章

    919

    浏览量

    108713
  • 树莓派
    +关注

    关注

    116

    文章

    1698

    浏览量

    105520

原文标题:窃贼报警器:在树莓派 Pico 上使用 PIR 传感器

文章出处:【微信号:趣无尽,微信公众号:趣无尽】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用树莓Pico的RP2040微控制内置温度传感器

    树莓 Pico 的 RP2040 微控制内置了温度传感器,它可以通过第四个模拟数字转换通道
    的头像 发表于 09-11 10:14 1869次阅读

    树莓DIY:无线感应报警器

    通过把LCD1602,蜂鸣器和单路径循迹传感器模块都接入到树莓的GPIO引脚上面,用单路径循迹传感器检测物体的距离或颜色。当物体距离过近时,此时路径
    发表于 05-23 08:00

    基于树莓pico的FM接收

    描述Pico 收音机是一个简单的基于树莓 pico 的 FM 接收,它使用 rda5807m 调谐到 FM 频道。可以通过
    发表于 07-08 07:56

    树莓传感器教程

    树莓传感器教程
    发表于 10-07 07:13

    树莓传感器教程资料下载

    树莓传感器
    发表于 05-07 15:20 32次下载

    PIR传感器怎样与树莓连接

    无源红外传感器,通常称为PIR传感器(也称为红外运动传感器和热释电传感器),是基本检测红外辐射
    的头像 发表于 07-29 10:58 7988次阅读

    PicoBoy带有Wii遥控树莓Pico

    电子发烧友网站提供《PicoBoy带有Wii遥控树莓Pico.zip》资料免费下载
    发表于 11-08 11:16 0次下载
    PicoBoy带有Wii遥控<b class='flag-5'>器</b>的<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>

    距离检测报警使用树莓Pico

    电子发烧友网站提供《距离检测报警使用树莓Pico.zip》资料免费下载
    发表于 11-09 11:49 0次下载
    距离检测<b class='flag-5'>报警</b>使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>

    使用PIR传感器的车辆停车报警系统

    电子发烧友网站提供《使用PIR传感器的车辆停车报警系统.zip》资料免费下载
    发表于 11-21 11:48 0次下载
    使用<b class='flag-5'>PIR</b><b class='flag-5'>传感器</b>的车辆停车<b class='flag-5'>报警</b>系统

    使用PIR传感器的防盗报警器

    电子发烧友网站提供《使用PIR传感器的防盗报警器.zip》资料免费下载
    发表于 02-06 09:25 3次下载
    使用<b class='flag-5'>PIR</b><b class='flag-5'>传感器</b>的防盗<b class='flag-5'>报警器</b>

    基于PIR传感器的安全报警系统电路设计

    本文中,工程师们列举了一个更加简单的安全报警系统单片机方案,既节省了功耗,又实现了低成本。PIR传感器是无源红外传感器的缩写,也是比较经济
    的头像 发表于 07-11 09:47 1155次阅读
    基于<b class='flag-5'>PIR</b><b class='flag-5'>传感器</b>的安全<b class='flag-5'>报警</b>系统电路设计

    如何利用树莓和气体传感器保护厨房呢?

    其实市面上有很多商业解决方案,喜欢自己动手的,可以用树莓Pico和气体传感器做一个。
    发表于 08-16 09:24 320次阅读

    树莓 Pico内置温度传感器的应用

    树莓 Pico 的 RP2040 微控制内置了温度传感器,它可以通过第四个模拟数字转换通道
    发表于 09-11 10:14 754次阅读

    树莓Pico文件系统应用:数据记录

    在前面的章节中,你一直使用树莓 Pico 连接到树莓或其他电脑。不过,与所有微控制
    的头像 发表于 10-24 10:51 1267次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>文件系统应用:数据记录<b class='flag-5'>器</b>

    如何在树莓Pico使用红外线接收模块?

    树莓 Pico 使用红外线接收模块(HX1838 型),我们采用开源的 pico_ir 库
    的头像 发表于 11-30 09:08 2120次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b><b class='flag-5'>上</b>使用红外线接收模块?