当你带着树莓皮进入房间时,播放你自己的主题曲

你有没有想过回家接受一次私人的欢迎?在这个简单的Raspberry Pi项目中,我们将使用簧片开关在门打开时触发一个音调。...

你有没有想过回家接受一次私人的欢迎?一个树莓皮和一些简单的组件,你可以!在这个简单的项目中,我们将使用簧片开关在门打开时触发主题曲。我们将使用树莓Pi作为控制器在这里,虽然你可以使用几乎任何其他微控制器为这个项目使用相同的电路。这是一个演示。

raspi-room-door

你需要

你可能已经拥有了所有的零件,你需要做这个除了簧片开关,这是大约2-3美元,或者你可以得到一包5略高于8美元在这里。

  • 一个树莓圆周率(任何模型都适用)。
  • 1 x 220欧姆电阻器。
  • 1 x 1K欧姆电阻器。
  • 3 x 10K欧姆电阻器。
  • 1个磁簧开关。
  • 1个LED。
  • 2个按钮开关。
  • 试验板。
  • 连接电缆。
  • 电脑扬声器或类似设备。

我们将使用树莓皮播放一首歌曲时,房间是进入,并设计了一个电路与按钮在我们的实验板上启动它的延迟,并停止程序。

这个项目,虽然主要是为了好玩,涵盖了DIY家庭自动化和DIY家庭安全的许多应用的基础知识

入门

让我们先做一个电路。确保Pi未通电,并按以下方式设置电路:

Fritzing Annotated HQ

LED连接到pi上的引脚7。两个按钮开关连接到针脚11和13,簧片开关连接到针脚15。我们的电源连接到引脚1(3v3)和引脚6(Gnd)。

pin diagram

一定要检查所有东西都在正确的地方。

当你在测试这个项目的时候,把簧片开关放在你面前可能会有帮助,这样你就可以很容易地打开或关闭它。在这种情况下,簧片开关已经安装在门的上方。一旦项目启动并运行,您可以使用胶带将开关临时连接到门上,或者如果您更有信心,您可以更永久地连接它,以便在将来的项目中使用!

reed switch installed

将您的Pi的3.5毫米插孔输出连接到扬声器系统。一旦把所有的东西放在一起,它应该是这样的:

whole setup correct

注意,这里使用的面包板的电源轨与上面的烧结图相反。

现在打开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 GPIOimport timeGPIO.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()

此代码读取按钮的值,并在按钮更改时打印到屏幕上。这两个按钮有下拉电阻,所以按下时会显示高电平。簧片磁铁开关在其伴随的磁铁闭合时报告高。

switches

运行程序:

python test.py

当您按下两个按钮并将磁铁从簧片开关上拔下时,您应该会看到LED灯亮起,并向屏幕报告。如果你按下按钮时没有收到反馈,请再次检查电路,确保一切正常连接。完成测试后,按CTRL-C停止程序。

test

现在我们可以编写一个简单的程序来设置、触发和重置车门传感器。我们将把代码分成几个部分,并简要解释每个部分的作用,不过如果您想看到完整的代码,请向下滚动查看完整的代码。

我们需要从导入一些模块开始:

import Rpi.GPIO as GPIOimport pygame.mixerimport 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编程,但对于这个项目来说,它已经足够了。

调用第二个函数时,检查系统是否处于活动状态(或活动==1)。如果是,它会将系统设置为非活动(活动==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语句用于退出按钮。如果按下此按钮,音乐停止,程序退出。

第三个if语句用于切换系统是否处于活动状态。这个时间。睡眠这里的功能是在按下按钮时防止多个按钮读取。

现在是时候设置圆周率的引脚。

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的任何实验,你应该很熟悉。首字母=GPIO.低在引脚7的设置参数设置为低,一旦它是初始化。

现在我们可以调用函数,在程序启动时将系统设置为不活动。

activeSetup()

音乐大师!

在这一点上,我们应该开始思考要演奏的音乐。你可以选择任何你想要的音乐文件,但我们现在将选择一些对每个人都可用的。如果你看YouTube,你可能已经熟悉凯文·麦克劳德的音乐了。让我们下载一首他写的美妙的曲子,叫做“独眼大师”。这一点,连同他网站上的大部分音乐,都是在Creative Comm***下授权的,并且有很多很好的理由在你的项目中使用这些授权的内容。

wget

回到我们的代码中,我们需要启动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。

如果您将音乐文件下载到您的门.py当您定义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() breakGPIO.cleanup()

此while循环等待来自任一按钮的输入,并相应地退出或将状态更改为active。如果active的状态变为1,那么我们前面定义的watchDoor函数将被调用,下次门打开时,我们的曲调将播放。我们也叫GPIO.cleanup文件()在退出时重置引脚,这通常是Raspberry Pi上所有编程的良好实践。

这就是我们需要做的一切,让这个项目开始运行,下面是完整的代码:

import RPi.GPIO as GPIOimport pygame.mixerimport timedef 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: returndef 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() breakGPIO.cleanup()

如果你直接滚动到这里获取完整的代码,记住你仍然需要下载音乐到你的Pi上才能工作!

现在你应该有一个功能欢迎回家主题曲!把簧片开关装到门上,然后试一下。尴尬的舞蹈是可选的,但建议。

这个项目涵盖了家庭监控,安全和自动化的许多形式的基础知识,希望是有趣的!

既然你已经走了这么远,何必到此为止?你可以添加更多的曲目,让程序从列表中随机选择一首。您可以添加一个中继,并在进入时触发其他对象。如果你有家庭音乐系统,为什么不为每个房间都放一首主题曲呢?

relay lights

你会设计你自己的欢迎回家的信息吗?你家里的簧片开关在其他方面有没有发明?如果是这样的话,请在下面的评论部分对你正在计划或已经做的事情发表评论!

  • 发表于 2021-03-17 01:18
  • 阅读 ( 202 )
  • 分类:IT

你可能感兴趣的文章

你可以用树莓皮做5件乐器

你的树莓皮是一个极好的媒体中心。它可以进入轨道。你甚至可以用它来开发一些基于音乐的项目。毕竟,这是一个完美的大小,并有理想的连接,流音乐,并通过扬声器输出。 ...

  • 发布于 2021-03-11 19:59
  • 阅读 ( 294 )

9个奇妙的diy游戏站,你可以在短时间内建立

一看树莓皮向你表明,微型化影响生活的方方面面-甚至复古游戏!有了Raspberry Pi 3和4,几乎所有复古游戏平台都可以模仿。 ...

  • 发布于 2021-03-12 18:59
  • 阅读 ( 272 )

忘了snes经典:5复古控制台,你可以模仿树莓皮

... 当你可以创造自己的世嘉创世纪时,花钱买一个重新包装的世嘉创世纪毫无意义! ...

  • 发布于 2021-03-12 19:02
  • 阅读 ( 251 )

你需要了解的12个树莓皮音乐项目

... 高级:进入房间时播放主题曲 ...

  • 发布于 2021-03-12 21:52
  • 阅读 ( 401 )

树莓皮:非官方教程

... 8.14进入房间时,播放自己的主题曲 ...

  • 发布于 2021-03-13 15:59
  • 阅读 ( 289 )

安装recalbox在你的树莓皮复古游戏风格

... 这已经是一个很好的系统了,但是RecalBox还有一个窍门。当你玩完游戏想看电影的时候,你可以很容易地换成Kodi!不用下车,只需打开主菜单并选择Kodi选项。RecalBox将关闭,Kodi将启动。 ...

  • 发布于 2021-03-14 21:13
  • 阅读 ( 314 )

6种树莓皮可以帮助你为世界末日做好准备

...,尽管这可能是一个完美的方法来记录所有重要的啤酒,当你真的最需要它的时候。 ...

  • 发布于 2021-03-15 11:49
  • 阅读 ( 231 )

12个树莓皮圣诞项目,你可以在一天内

... 那么,为什么不适应这个?你不想演奏自己的主题曲,而是用树莓皮来演奏一首最喜欢的圣诞歌曲?这可能是一个流行的热门歌曲,或者是圣诞颂歌,或者只是叮当的钟声。只要确保你的选择能设定季节的心情! ...

  • 发布于 2021-03-17 19:30
  • 阅读 ( 322 )

将视频游戏从pc传输到电视的5种方式

...使用。最重要的是,它还可以运行在三星智能电视,甚至树莓皮(见下文)。 ...

  • 发布于 2021-03-18 08:06
  • 阅读 ( 298 )

适合初学者的11个最佳树莓圆周率项目

...的小机器-它的负担得起,高度便携,用户友好。但是,当你第一次得到一个,它可能是棘手的,以找出哪些项目,你应该首先承担。 ...

  • 发布于 2021-03-19 13:42
  • 阅读 ( 272 )