您是否曾经想过个人欢迎回家?有了Raspberry Pi和一些简单的组件,您就可以!在这个简单的项目中,我们将使用簧片开关在门打开时触发主题曲。尽管您可以使用相同的电路在该项目中使用几乎任何其他微控制器,但在这里我们将使用Raspberry Pi作为控制器。这是一个演示。
您将需要
您可能已经拥有制作所需的所有零件,除了簧片开关(大约$ 2-3),或者您可以得到一包5个,刚好超过8美元。
一个Raspberry Pi(任何型号都可以使用)。
1 x 220欧姆电阻。
1 x 1K欧姆电阻。
3 x 10K欧姆电阻。
1 x磁簧开关。
1 x LED。
2个按钮开关。
面包板。
连接线。
进入房间后,我们将使用Raspberry Pi播放歌曲,并在面包板上设计带有按钮的电路以延迟激活它,并停止程序。
该项目虽然主要是为了娱乐,但它涵盖了DIY家庭自动化以及DIY家庭安全中许多应用程序的基础。
入门
让我们从制作电路开始。确保您的Pi没电,并按如下所示设置电路:
LED连接到我们pi的引脚7。两个按钮开关分别连接到引脚11和13,簧片开关连接到引脚15。我们的电源流向引脚1(3v3)和引脚6(Gnd)。
请确保检查所有内容均在正确的位置。
在测试该项目时,它可能有助于将簧片开关置于您的面前,以便您轻松切换它打开或关闭。在这种情况下,舌簧开关已经安装在门上方。项目启动并运行后,您可以使用磁带将开关暂时连接到门上,或者如果您更有信心,可以将其更永久地连接以用于将来的项目中!
将Pi的3.5mm插孔输出连接到扬声器系统。一旦所有内容放在一起,它应该看起来像这样:
请注意,此处使用的面包板具有电源轨,与Fritzing图相反
现在打开您的Pi的电源,并使用SSH访问它,以便我们可以访问终端。如果您不确定如何执行此操作,本指南可以为您提供帮助。如果您将Raspberry Pi与显示器,鼠标和键盘一起使用,请跳过此步骤并打开终端。
在开始之前,值得检查您是否最新。在终端中输入sudo apt-get update。
现在我们可以继续让Pi与电路进行通讯了。
测试设置
开始,让我们使用一个简单的程序检查电路。如果您确信到目前为止一切都正确,您可以跳过此步骤,尽管我建议您这样做,因为这样可以避免以后出现头痛。
如果您以前从未使用过Python编程并且感到有点畏缩,有很多很棒的网站可以帮助您入门。
在终端中,创建一个新脚本:
nano test.py
打开后,将此代码添加到文件中,然后按Ctrl-C退出,并遵循保存对话框:
#This code was written for an article on www.MakeUseOf.com by Ian Buckley.
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(11,GPIO.IN)
GPIO.setup(13,GPIO.IN)
GPIO.setup(15,GPIO.IN)
while True:
GPIO.output(7,GPIO.HIGH)
if (GPIO.input(11)==1):
print(“Button on GPIO 11”)
time.sleep(1)
if (GPIO.input(13)==1):
print(“Button on GPIO 13”)
time.sleep(1)
if (GPIO.input(15)==1):
print(“Button on GPIO 15”)
time.sleep(1)
GPIO.cleanup()
此代码读取按钮的值并打印到当它们改变时的屏幕。两个按钮具有下拉电阻,因此按下时它们报告为高电平。只要其随附的磁铁闭合,磁簧开关就会报告为HIGH。
运行程序:
python test.py
当您按下两个按钮并将磁铁从簧片开关上拉开时,您应该会看到LED亮起,并向屏幕报告。如果您在按按钮时没有收到反馈,请再次检查电路,并确保一切均已连接。完成测试后,请按 CTRL-C 停止程序。
现在我们可以编写一个简单的程序设置,触发和重置我们的门传感器。我们将遍历各部分的代码,并简要说明每个部分的功能,但是如果您想向下滚动完整的代码以查看完整的内容,则可以使用。
我们需要从导入一些模块开始:
import Rpi.GPIO as GPIO
import pygame.mixer
import time
我们将使用 Pygame 模块播放音乐。它是Raspbian Jessie的标准配置,并且是编写Python游戏和许多其他出色项目所需的一切的强大库。
我们将使用名为 active 的变量决定我们的系统是否处于活动状态。让我们定义几个为我们执行此操作的函数:
def activeSetup():
global active
active=0
print(“Currently Not Active”)
def activeState():
global active
if active==1:
active=0
GPIO.output(7,GPIO.LOW)
print(“Currently Not Active”)
elif active==0:
print (“Activating in 10 seconds”)
for x in range(0,10):
GPIO.output(7,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(7,GPIO.LOW)
time.sleep(0.5)
active=1
GPIO.output(7,GPIO.HIGH)
print(“Currently Active”)
else: return
此处的第一个函数创建一个名为 active 的变量,并将其设置为0。给活动状态一个数值意味着,如果您打算以后扩展程序以具有不同的活动状态,则可以对它们进行相应编号。尽管它可能不是世界上最好的Python编程,但对于这个项目来说已经足够了。
调用时的第二个函数检查系统是否处于活动状态(或 active == 1 )。如果是,它将设置系统为非活动状态( active == 0 ),关闭LED并打印到控制台。如果不是,那么它会为您提供10秒钟的倒数时间,使其离开LED闪烁的房间,然后继续显示系统处于活动状态。
现在,我们可以定义一个函数来观察我们的磁簧开关:
def watchDoor():
global playing
playing = False
while True:
if active==1 and GPIO.input(15)==1 and playing == False:
playing=True
pygame.mixer.music.play()
if GPIO.input(13)==1:
print(“Stop button pressed: Exiting”)
pygame.mixer.music.stop()
break
if GPIO.input(11)==1:
activeState()
time.sleep(0.5)
我们在这里创建了另一个名为 playing 的变量-只是为了阻止程序尝试在出现以下情况时反复开始播放
在while循环中,第一个if语句开始播放音乐(我们还没有音乐,但不用担心,它来了)。仅当系统处于活动状态,簧片开关打开且尚未播放时,音乐才能开始播放。
第二个if语句用于退出按钮。如果按下此按钮,音乐将停止并且程序将退出。
第三个if语句用于切换系统是否处于活动状态。此处的 time.sleep 功能是防止在按下按钮时读取多个按钮。
现在是时候设置Pi的引脚了。
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(11,GPIO.IN)
GPIO.setup(13,GPIO.IN)
GPIO.setup(15,GPIO.IN)
如果您在使用Pi之前已经做过任何实验,那么您应该已经熟悉了。引脚7设置中的 initial = GPIO.LOW 参数将在初始化后立即将其设置为低电平。
现在,我们可以调用函数,将系统设置为不
activeSetup()
音乐大师!
这时,我们应该开始考虑要播放的音乐。您可以选择所需的任何音乐文件,但是我们现在将选择适合所有人的内容。如果您观看YouTube,您可能已经很熟悉Kevin MacLeod的音乐。让我们下载他的一首美妙的乐曲,称为“独眼大师”。这些内容以及他网站上的许多音乐均已获得知识共享(Creative Commons)的许可,并且有很多充分的理由将这些许可的内容用于您的项目。
回到我们的代码中,我们需要启动Pygame混音器并加载我们的音乐。
pygame.mixer.init(44100,-16,2,1024)
pygame.mixer.music.set_volume(1.0)
name = “One-eyed Maestro.mp3”
pygame.mixer.music.load(name)
print(“Loaded track - ”+ str(name))
此块的第一行启动 Pygame 混音器。括号中的最后一个参数是缓冲区,该缓冲区控制播放声音的延迟。如果以后播放音乐时出现断断续续的播放,请尝试将此数字增加到4096。在Pi 3上可以正常使用的设置。
如果将音乐文件下载到其他目录,您的 door.py 程序,定义名称变量时需要在方括号内提供完整路径。
现在剩下要做的就是建立一个循环
while True:
if(GPIO.input(13)==1):
print(“Stop button pressed: Exiting”)
pygame.mixer.music.stop()
break
if(GPIO.input(11)==1):
activeState()
time.sleep(0.5)
if(active==1):
watchDoor()
break
GPIO.cleanup()
此while循环等待来自任一按钮的输入,然后退出或将状态更改为活动状态相应地。如果活动状态变为1,则将调用我们之前定义的 watchDoor 函数,并且在下次打开门时将播放我们的乐曲。我们还调用 GPIO.cleanup()来重置退出时的引脚,这通常是对Raspberry Pi上所有编程的一个好习惯。
这就是我们要做的一切启动并运行该项目,下面是完整的代码:
import RPi.GPIO as GPIO
import pygame.mixer
import time
def activeSetup():
global active
active=0
print(“Currently Not Active”)
def activeState():
global active
if active==1:
active=0
GPIO.output(7,GPIO.LOW)
print(“Currently Not Active”)
elif active==0:
print (“Activating in 10 seconds”)
for x in range(0,10):
GPIO.output(7,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(7,GPIO.LOW)
time.sleep(0.5)
active=1
GPIO.output(7,GPIO.HIGH)
print(“Currently Active”)
else: return
def watchDoor():
global playing
playing = False
while True:
if active==1 and GPIO.input(15)==1 and playing == False:
playing=True
pygame.mixer.music.play()
if GPIO.input(13)==1:
print(“Stop button pressed: Exiting”)
pygame.mixer.music.stop()
break
if GPIO.input(11)==1:
activeState()
time.sleep(0.5)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(11,GPIO.IN)
GPIO.setup(13,GPIO.IN)
GPIO.setup(15,GPIO.IN)
activeSetup()
pygame.mixer.init(44100,-16,2,1024)
pygame.mixer.music.set_volume(1.0)
name = “One-eyed Maestro.mp3”
pygame.mixer.music.load(name)
print(“Loaded track - ”+ str(name))
while True:
if(GPIO.input(13)==1):
print(“Stop button pressed: Exiting”)
pygame.mixer.music.stop()
break
if(GPIO.input(11)==1):
activeState()
time.sleep(0.5)
if(active==1):
watchDoor()
break
GPIO.cleanup()
如果您在此处向下滚动以立即获取完整的代码,请记住您仍然需要将音乐下载到您的Pi上以使其正常工作!
现在,您应该可以正常运行欢迎的主题音乐了!将簧片开关安装到门上,然后尝试一下。令人尴尬的跳舞是可选的,但建议这样做。
该项目涵盖了各种形式的家庭监控,安全性和自动化的基础知识,希望它也很有趣!
现在您已经走了这么远,为什么停在那里?您可以添加更多轨道,并让程序从列表中随机选择一个。您可以添加一个中继,并在输入时触发其他对象。如果您有家庭音乐系统,为什么不为每个房间都准备主题曲呢?
责任编辑:wv
-
树莓派
+关注
关注
116文章
1707浏览量
105627
发布评论请先 登录
相关推荐
评论