怎样使树莓派进入房间时播放音乐

电子说

1.2w人已加入

描述

您是否曾经想过个人欢迎回家?有了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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分