万圣节快到了,这是我最喜欢的节日和派对时光之一。今年,我决定用自动化运动感应来为我的部分装饰品增添(南瓜)风味。这篇惊悚的文章将逐步向您展示我是如何制作它们的,从构建和接线到编码。这不是您普通的周末项目,它需要大量的用品和构建时间。但这是一种有趣的玩转 Raspberry Pi 并融入这个令人难忘的节日气氛的方式。
此项目所需物品
- 一个大型塑料南瓜
- 一台 Raspberry Pi 4(带外围设备)
- 一套与 Raspberry Pi 兼容的 Arduino 入门套件
- 一把热熔胶枪
- 彩带,最好是节日主题颜色
您在入门套件中需要的物品包括一个红外运动传感器、一个面包板、两个小型 LED 灯、一条将面包板连接到 Raspberry Pi 的带状线,以及将所有这些部件连接在一起的电缆。您可以在网上找到所有这些物品,我建议购买入门套件,以便您可以进行超出此项目的其他有趣的事情。

Jess Cherry CC BY-SA 4.0

Jess Cherry CC BY-SA 4.0

Jess Cherry CC BY-SA 4.0
安装 Raspberry Pi OS 和预配置
收到我的 Pi(包括 SD 卡)后,我上网并按照 Raspberry Pi Imager 说明进行操作。这允许将操作系统快速安装到 SD 卡上。注意:您需要能够将 SD 卡放入 SD 卡读卡器插槽中。我有一个外接 SD 卡读卡器,但有些计算机内置了读卡器。在您的本地计算机上,您还需要一个 VNC 查看器。
安装操作系统并运行更新后,我还需要执行一些额外的步骤才能使一切正常工作。为此,您需要以下内容
- Python 3
- Python3-devel
- Pip
- RPi GPIO (pip install RPi.GPIO)
- 代码编辑器(Thonny 在 Raspberry Pi OS 上)
接下来,设置 VNCviewer,以便在您将 Pi 隐藏在南瓜中时可以登录。
为此,运行以下命令,然后按照以下说明进行操作。
sudo raspi-config
当此菜单弹出时,选择“接口选项”

Jess Cherry CC BY-SA 4.0
接下来,选择 VNC 并在弹出窗口中启用它

Jess Cherry CC BY-SA 4.0
您也可以使用安全外壳 (SSH) 来执行此操作,但在故障排除阶段,我使用了 VNC。登录到您的 Raspberry Pi 后,收集 IP 地址并将其用于 SSH 和 VNC 连接。如果您已移动房间,您也可以使用路由器或 WiFi 交换机来告诉您 Pi 的 IP 地址。
现在一切都已安装完毕,您可以继续使用灯构建面包板了。
每个人都应该尝试南瓜面包(板)
许多人没有见过或使用过面包板,因此我添加了我的零件图片,从我的基本组件开始。

Jess Cherry CC BY-SA 4.0

Jess Cherry CC BY-SA 4.0
这两个部件与中心的扩展护罩组装在一起,如图所示。

Jess Cherry CC BY-SA 4.0
带状线连接到 Raspberry Pi 中的引脚插槽,使该板成为我们可以编码和玩耍的新扩展。带状线不是必需的,它只是使 GPIO 引脚的使用更加方便。如果您不想购买带状线,您可以将母对公跳线直接从 Pi 上的引脚连接到面包板。以下是您需要的组件
- Raspberry Pi(版本 4 或 3)
- 面包板
- GPIO 扩展带状电缆
- 跳线(x6 公对公)
- 电阻 220Ω
- HC-SR501 或任何类似的接近传感器 (x1)
- LED (x2)
组装电路板
一旦您拥有了所有部件,就可以将所有东西组装在一起。首先,查看电路板上引脚的定义方式。这是我的个人扩展板;您拥有的扩展板可能不同。引脚定义在您进行编码时很重要,因此请务必妥善保管您的电缆。以下是我的扩展原理图。
如您所见,原理图既有物理板上定义的 BCM(Broadcom SOC 通道)GPIO 编号,也有您在代码中使用的物理编号,用于创建例程和函数。

Jess Cherry CC BY-SA 4.0
现在是时候连接一些电缆了。首先,从传感器开始。我的套件中提供了连接电缆,因此我将在进行过程中添加图片。这是传感器,带有电源 (+) 接地 (-) 和传感器连接到扩展板的连接。

Jess Cherry CC BY-SA 4.0
对于电缆颜色:电源为红色,接地为黑色,黄色传输传感器数据。

Jess Cherry CC BY-SA 4.0
我将电缆插入,电源/红色连接到 5V 引脚,接地/黑色连接到 GRN 引脚,传感器/黄色连接到 GPIO 17 引脚,稍后在代码中定义为 11。

Jess Cherry CC BY-SA 4.0
接下来,是时候设置灯了。每个 LED 灯都有两个引脚,一个比另一个短。长边(阳极)始终与引脚电缆对齐,短边(阴极)与接地和电阻器对齐。

Jess Cherry CC BY-SA 4.0
对于第一个灯,我使用 GPIO18(引脚 12)和 GPIO25 作为信号。这很重要,因为代码与这些引脚通信。您可以更改您使用的引脚,但随后您必须更改代码。这是最终结果的图表

Jess Cherry CC BY-SA 4.0
现在一切都已连接好,是时候开始编写代码了。
如何使用 Python 设置南瓜
如果您已经安装了 Python 3,那么您已经拥有了逐行开始工作所需的一切。在本例中,我将 Python 3 与 RPI 包一起使用。从导入的包开始,RPI 和 time from sleep(这有助于创建教程后面描述的闪烁效果)。我将我的 Python 文件命名为 senseled.py,但您可以将您的文件命名为您想要的任何名称。
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import os
from time import sleep
接下来,定义您的两个 LED 引脚和传感器引脚。在本帖的前面,我在连接卡时提供了这些引脚编号,因此您可以在下面看到这些确切的编号。
ledPin1 = 12 # define ledPins
ledPin2 = 22
sensorPin = 11 # define sensorPin
由于在本例中您有两个灯要设置为一起闪烁,因此我还创建了一个定义的数组以供稍后使用
leds = [ledPin1, ledPin2]
接下来,使用 RPi.GPIO 包定义电路板和引脚的设置。为此,设置电路板上的模式。我选择在我的设置中使用物理编号系统,但如果您愿意,可以使用 BCM。请记住,您永远不能同时使用两者。以下是每个示例
# for GPIO numbering, choose BCM
GPIO.setmode(GPIO.BCM)
# or, for pin numbering, choose BOARD
GPIO.setmode(GPIO.BOARD)
对于本示例,请使用我的设置中的引脚编号。将两个引脚设置为输出模式,这意味着所有命令都输出到灯。然后,将传感器设置为输入模式,以便当传感器检测到运动时,它会将数据输入到电路板以输出灯。以下是这些定义的示例
def setup():
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(ledPin1, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(ledPin2, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(sensorPin, GPIO.IN) # set sensorPin to INPUT mode
现在电路板和引脚已定义,您可以将您的主函数放在一起。为此,我在 for
循环中使用数组,然后根据传感器输入使用 if 语句。如果您不熟悉这些函数,您可以查看此
快速指南.
如果传感器接收到输入,则 LED 输出为高电平(通电)0.03 秒,然后为低电平(断电),同时打印消息 led turned on.
。如果传感器未收到输入,则 LED 关闭电源,同时打印消息 led turned off
。
def main():
while True:
for led in leds:
if GPIO.input(sensorPin)==GPIO.HIGH:
GPIO.output(led, GPIO.HIGH)
sleep(.05)
GPIO.output(led, GPIO.LOW)
print ('led turned on >>>')
else :
GPIO.output(led, GPIO.LOW) # turn off led
print ('led turned off <<<')
虽然您可以在数学上选择亮度级别,但我发现设置通电和断电之间的睡眠计时器更容易。我在多次测试创建闪烁蜡烛效果所需的时间后设置了此计时器。
最后,您需要进行一些清理以在程序结束时释放您的资源
def destroy():
GPIO.cleanup() # Release GPIO resource
现在一切都已定义为运行,您可以运行您的代码了。启动程序,运行设置,尝试您的 main,如果收到 KeyboardInterrupt,则销毁并清理所有内容。
if __name__ == '__main__': # Program entrance
print ('Program is starting...')
setup()
try:
main()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
现在您已经创建了您的程序,最终结果应如下所示
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import os
from time import sleep
ledPin1 = 12 # define ledPins
ledPin2 = 22
sensorPin = 11 # define sensorPin
leds = [ledPin1, ledPin2]
def setup():
GPIO.setmode(GPIO.BOARD) # use PHYSICAL GPIO Numbering
GPIO.setup(ledPin1, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(ledPin2, GPIO.OUT) # set ledPin to OUTPUT mode
GPIO.setup(sensorPin, GPIO.IN) # set sensorPin to INPUT mode
def main():
while True:
for led in leds:
if GPIO.input(sensorPin)==GPIO.HIGH:
GPIO.output(led, GPIO.HIGH)
sleep(.05)
GPIO.output(led, GPIO.LOW)
print ('led turned on >>>')
else :
GPIO.output(led, GPIO.LOW) # turn off led
print ('led turned off <<<')
def destroy():
GPIO.cleanup() # Release GPIO resource
if __name__ == '__main__': # Program entrance
print ('Program is starting...')
setup()
try:
main()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
当它运行时,它应该类似于这样。(注意:在此录制期间我仍在测试睡眠时间。)
是时候烤南瓜了
首先,我有一个非常大的塑料南瓜,是我们的家人送给我和我丈夫的礼物。

Jess Cherry CC BY-SA 4.0
最初,它的背面有一个插头,灯泡烧坏了,这首先激发了这个想法。我意识到我必须进行一些修改,首先是用钻头和曲线锯在底部切一个孔。

Jess Cherry CC BY-SA 4.0

Jess Cherry CC BY-SA 4.0
幸运的是,南瓜背面已经有一个孔,用于连接到原始灯的电线。我可以将所有设备塞进南瓜内部,但我需要一种隐藏传感器的方法。
首先,我必须为传感器制作一个可以外部连接到南瓜的位置,所以我用茎钻了一个孔

Jess Cherry CC BY-SA 4.0
然后我将传感器的所有接线都穿过孔,结果又出现了一个问题:传感器又大又怪异。我开始寻找一种装饰性的方法来解决这个问题。

Jess Cherry CC BY-SA 4.0
事实上,我制作了全人类最可怕的彩带装饰(覆盖着热熔胶枪糊状物),但您不会注意到传感器。

Jess Cherry CC BY-SA 4.0
最后,我将 Pi 和扩展卡放入南瓜中,并将电源线从背面穿过。

Jess Cherry CC BY-SA 4.0
一切都连接好后,我准备好 VNC 进入我的 Pi 并打开 Python,然后等待有东西移动来测试它。

Jess Cherry CC BY-SA 4.0

Jess Cherry CC BY-SA 4.0
烘烤后注意事项
这是一个非常漫长且经过大量研究的构建过程。正如我在介绍中说的那样,这不是一个周末项目。当我开始时,我对面包板一无所知,我花了一段时间才重新编码并确定我到底想要什么。我在这里没有包含一些非常细致的细节。例如,传感器有两个旋钮,用于定义它可以拾取运动的距离以及传感器输入需要持续多长时间。虽然这是一件很棒的学习事情,但我绝对会在开始这段旅程之前做大量的研究。
我没有完成我真正想要的项目的一部分:连接到蓝牙设备并发出怪异的声音的能力。也就是说,玩 Raspberry Pi 总是很有趣的,无论是用于家庭自动化、天气跟踪,还是仅仅是愚蠢的装饰品。我希望您喜欢这次演练,并受到启发尝试类似的DIY项目。
评论已关闭。