跳到内容

维基少年:树莓派/树莓派乐高®防盗报警器

来自维基教科书,为开放世界提供开放书籍

Andrew Oakley 的教程
公有领域 2016-04-24 更新 2018-03-01
www.cotswoldjam.org

LEGO® 是乐高集团公司的商标,该公司不赞助、授权或认可本教程或 Cotswold Raspberry Jam。

本教程将向您展示如何制作一个防盗报警器,当乐高®门打开时会发出警报声。

Words you will see on the screen, or that you need to type in, are highlighted like this

在每行结尾,您通常需要按 ↵ Enter 键。您的导师应该已经为您准备了树莓派,并给您一个元件包。如果没有,请参阅结尾处的“准备”部分。

电子元件

[编辑 | 编辑源代码]

压电蜂鸣器

[编辑 | 编辑源代码]

压电蜂鸣器在电流通过时会发出哔哔声。

它有两个“腿”连接器;一个长一个短。

  • 长腿必须连接到正极
  • 短腿必须连接到地线(负极)。

簧片开关

[编辑 | 编辑源代码]

簧片开关是一个玻璃管,里面有两块金属,中间隔着一个小缝隙。当附近有磁铁时,两块金属会接触,让电流通过。簧片开关可以在任一侧连接正极或负极。

跳线(也称为杜邦线)用于将电子元件连接到树莓派或面包板。

您还应该有四根母对母跳线。

一块小磁铁和一个乐高®门

[编辑 | 编辑源代码]

一块小磁铁和一个乐高®门。您的导师应该已经用胶带将簧片开关粘贴到门框的顶部内侧,并将磁铁粘贴到门的顶部内侧。

如果您家里有防盗报警器,可以拿一个脚凳看看门顶。我敢打赌您会看到一些白色的塑料块——门框上一个,门顶一个。这些里面包含一个簧片开关和一个磁铁,就像本教程一样。

树莓派使用两组数字来指代通用输入输出引脚(GPIO 引脚)。

“板编号”只是从左下角开始,从 1 开始,一直向上和向右,直到 40。

“BCM 编号”(Broadcom 编号)是树莓派处理器看到引脚连接的方式。

我们将使用 GPIO Zero 进行编程,它使用 BCM 编号。

  1. 将簧片开关连接到 GPIO 引脚 9(GND)引脚 7(GPIO 4)
  2. 将压电蜂鸣器的短腿连接到 GPIO 引脚 14(GND),并将长腿连接到 GPIO 引脚 16(GPIO 23)

检测门打开

[编辑 | 编辑源代码]

启动树莓派并进入桌面。

从菜单中选择编程 - Python 3。然后使用文件,新建窗口创建新程序。

在程序中输入以下内容,或者您可以使用文件,打开打开 python/burglar 文件夹中的 burglar1.py 程序。

from gpiozero import Button

button=Button(4)

button.wait_for_release()
print ("Door opened")

使用文件,保存将此程序保存为 burglar1.py,然后通过选择运行菜单,运行模块来运行它。

关闭门然后打开门。您应该在屏幕上看到“门已打开”字样。

没有起作用?检查您是否

  • 电线连接到正确的 GPIO 引脚。
  • 簧片开关与磁铁对齐。轻轻旋转它,使触点被磁铁拉到一起。
  • 簧片开关没有断裂(如果断裂,请向您的导师索要另一个)。
  • 没有拼写错误,没有缺失的括号,并且您使用了圆括号而不是尖括号、大括号或方括号。

这个程序在做什么?

[编辑 | 编辑源代码]
from gpiozero import button

第一行告诉计算机学习一个新事物。计算机可以从其他程序员编写的程序中学习,我们称这些其他程序为“库”。我们的指令告诉计算机学习关于按钮,按钮可以按下或释放。

button=Button(4)

簧片开关是一种特殊的按钮。它是“常开”的(释放),没有电流通过。当附近有磁铁时,它会闭合(就像按下按钮一样),电流从 GPIO4 引脚流向接地引脚。

button.wait_for_release()

这会导致程序等待直到簧片开关重新打开——它必须从闭合状态变为打开状态。如果门在程序开始时已经打开,则不计入。

print ("Door opened")

这将在屏幕上打印一条消息。

循环程序

[编辑 | 编辑源代码]

让我们添加一个循环,这样我们就可以不断地打开和关闭门。

from gpiozero import Button

button=Button(4)

while (True):
   button.wait_for_release()
   print ("Door opened")
   
   button.wait_for_press()
   print ("Door closed")

或者,如果您不想输入,可以加载 burglar2.py 程序。

while 命令会重复程序的一部分;True 词语会让它永远重复。

缩进在 Python 中很重要。例如,您必须在 while 后面的行中输入两个空格。这样的缩进定义了一块代码。

Python 对标点符号和大小写也很挑剔。True 的第一个字母必须是大写,并且 while (True): 行必须以冒号结尾。

使用文件,保存将此程序保存为 burglar.py,然后通过选择运行菜单,运行模块来运行它。尝试打开和关闭门。

通过选择 Shell 菜单,重新启动 Shell 来停止程序。

蜂鸣器

[编辑 | 编辑源代码]

修改程序以添加蜂鸣器。或者,加载burglar3.py文件。

from gpiozero import Button, Buzzer

button=Button(4)

buzzer=Buzzer(23)

while (True):
  button.wait_for_release()
  print ("Door opened")
  buzzer.beep(1,0,1)
   
  button.wait_for_press()
  print ("Door closed")

请注意,我们已经从库中导入了蜂鸣器对象,以及按钮。

接下来,我们将蜂鸣器设置为在 GPIO23 上工作。

当门被打开时,我们使用

  buzzer.beep(1,0,1)

此命令具有三个数字,称为参数

  1. 蜂鸣器发声的秒数(1)
  2. 蜂鸣器保持静音的秒数(0,零)
  3. 循环遍历声音和静音期的次数(1,仅一次)

1,0,1 将给我们一个单一的 1 秒蜂鸣声。你可以更改它,使其发出非常烦人的声音!

使用文件,保存将此程序保存为 burglar3.py,然后通过选择运行菜单,运行模块来运行它。

现在,当你打开门时,蜂鸣器应该会响一秒钟。

通过选择 shell 菜单,重启 shell 来停止程序。

从以下位置下载示例程序文件:http://www.cotswoldjam.org/downloads/2016-04

从 Bricklink.com 或 LEGO® 零件专家处从 cpc.farnell.com 或电子元件零售商处
60623 1×4×6 钉门 SW01130小型钕块磁铁
60596 1×4×6 钉门框 SW00757低压玻璃簧片开关
3032 4×6 钉板 LS03804低压压电蜂鸣器
 SC12901 ×4 母-母 杜邦跳线

玻璃簧片开关容易断裂。弯曲时握住支腿,不要依赖玻璃支撑它们。使用透明胶带® 以确保任何碎片在开关断裂时不会逃逸。

Cjam-burglar-tutorial-2018.pdf

[编辑 | 编辑源代码]

本教程的原始 PDF 可以在维基共享资源上找到:Cjam-burglar-tutorial-2018.pdf

burglar1.py

[编辑 | 编辑源代码]
from gpiozero import Button

button=Button(4)

button.wait_for_release()
print ("Door opened")

burglar2.py

[编辑 | 编辑源代码]
from gpiozero import Button

button=Button(4)

while (True):
  button.wait_for_release()
  print ("Door opened")

  button.wait_for_press()
  print ("Door closed")

burglar3.py

[编辑 | 编辑源代码]
from gpiozero import Button, Buzzer

button=Button(4)
buzzer=Buzzer(23)

while (True):
  button.wait_for_release()
  print ("Door opened")
  buzzer.beep(1,0,1)

  button.wait_for_press()
  print ("Door closed")
华夏公益教科书