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

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

3天内不再提示

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

454398 来源:网络整理 作者:网络整理 2019-11-29 11:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

    关注

    122

    文章

    2082

    浏览量

    110769
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    零成本钢铁侠手套!树莓+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-16 16:16 1569次阅读
    零成本钢铁侠手套!<b class='flag-5'>树莓</b><b class='flag-5'>派</b>+OpenCV 秒变手势遥控器!

    如何使用树莓与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-14 17:45 2415次阅读
    如何使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>与OpenCV实现面部和运动追踪的云台系统?

    树莓屏幕怎么选?

    树莓很多人都用过,但用屏幕的倒不是很多。不少都是直接远程操作,或者直接接身边的显示设备了。但我觉得给开发板配一个屏幕还是很能提升使用体验的。这次我就介绍一下树莓的屏幕怎么选择。
    的头像 发表于 08-08 14:59 1739次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>屏幕怎么选?

    你可能从未听说过 9 款令人惊叹的树莓应用!

    强大却被低估的应用,涵盖媒体播放器、创意工具到生产力工具等。这些隐藏的宝藏能让你的树莓功能更全面、效率更高。我试用过许多超酷的树莓应用,
    的头像 发表于 08-07 18:19 1281次阅读
    你可能从未听说过 9 款令人惊叹的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>应用!

    树莓操作系统:版本、特性及设置完整指南!

    树莓操作系统是什么?树莓操作系统是由树莓基金会专为树莓
    的头像 发表于 07-28 18:26 1812次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>操作系统:版本、特性及设置完整指南!

    树莓6 传闻:发布日期与规格!

    每当我想再为我的收藏增添一款树莓时,总会在是立即购买还是等待硬件更强大的下一代之间犹豫不决。但新树莓型号的发布往往容易被错过,尤其是在你的信息流被病毒式传播的猫咪视频占据时。因此,
    的头像 发表于 07-11 16:21 3082次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>6 传闻:发布日期与规格!

    【正点原子STM32MP257开发板试用】5.播放音乐

    前言 感谢正点原子和电子发烧友论坛提供的这次机会让我有机会体验这款正点原子STM32MP257开发板,希望可以借这个机会好好学习一下。 环境搭建 播放音乐有很多Python库比如pygame
    发表于 06-28 14:27

    树莓小技巧:无需键盘或显示器,如何通过WiFi设置树莓

    树莓是一款小巧便携的USB供电计算机,可以隐藏起来用于小型项目,如网络服务器或家庭自动化。通常,设置树莓需要键盘和显示器来编辑和查看树莓
    的头像 发表于 06-26 15:41 1857次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>小技巧:无需键盘或显示器,如何通过WiFi设置<b class='flag-5'>树莓</b><b class='flag-5'>派</b>?

    搭载代码的树莓进入国际空间站!

    前言通过欧洲宇航挑战赛(EuropeanAstroPiChallenge),年轻人通过在国际空间站(ISS)上的树莓(RaspberryPi)计算机上运行代码的独特体验,参与计算编程。欧洲宇航
    的头像 发表于 06-19 17:11 1189次阅读
    搭载代码的<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>进入</b>国际空间站!

    树莓分类器:用树莓识别不同型号的树莓

    在本教程系列的第一部分中,您将学习如何使用树莓AI摄像头来检测不同的树莓型号。本系列由DavidPlowman创建,他是树莓
    的头像 发表于 06-13 16:39 1547次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>分类器:用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>识别不同型号的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>!

    关于 树莓5 超频:你需要知道的一切!

    。超频树莓5需修改config.txt启动设置文件,调整CPU速度设置。但超频可能缩短Pi5的使用寿命,并使保修失效,因此需谨慎操作。树莓
    的头像 发表于 06-10 17:29 3019次阅读
    关于 <b class='flag-5'>树莓</b><b class='flag-5'>派</b>5 超频:你需要知道的一切!

    树莓“揪出”家里的耗电怪兽!

    在本应用中,我们将使用树莓设置一个CE电流监测器,并通过网页界面显示电路的电流读数。本项目使用的组件硬件组件树莓2ModelBx112通道20安培电流监测控制器x1项目背景介绍在本
    的头像 发表于 06-04 15:33 2065次阅读
    用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>“揪出”家里的耗电怪兽!

    树莓“吉尼斯世界记录”:将树莓的性能发挥到极致的项目!

    树莓是一款功能强大、体积小巧且高度可定制的设备,多年来,我们见证了它被应用于众多领域。无论是将其装入3D打印的经典游戏机外壳,还是简单地将它隐藏起来作为家庭文件服务器,我们都报道过在社区里用树莓
    的头像 发表于 05-22 16:53 1722次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>“吉尼斯世界记录”:将<b class='flag-5'>树莓</b><b class='flag-5'>派</b>的性能发挥到极致的项目!

    能够精准定位的树莓机器人!

    我为我的自制机器人BigRob(同样由树莓驱动)配备了基于树莓的精准GPS导航系统。本项目所用组件硬件组件NV08C-CSMx1NV08C-CSM是一款集成式卫星导航接收器
    的头像 发表于 05-17 08:33 1548次阅读
    能够精准定位的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>机器人!

    树莓 Zero 打造的智能漫游车!

    使用PXFMini和树莓Zero打造您自己的自主漫游车。本项目所用组件硬件组件ErleRoboticsPXFmini×1树莓Zero×1树莓
    的头像 发表于 05-13 16:39 1309次阅读
    用 <b class='flag-5'>树莓</b><b class='flag-5'>派</b> Zero 打造的智能漫游车!