带DIY动作激活音箱的Scare捣蛋游戏

这又是每年的那个时候,社会上普遍认为吓坏年幼的孩子并给他们糖果。哦,高兴。我在这里通过向您展示如何制作一个简单的动作感应Raspberry Pi Halloween音箱来使您的工作更轻松。这是一个演示:

这就是您所需要的

可能您唯一还没有的部分就是运动传感器,这是您应该能够找到的小而便宜的部分

  • Raspberry Pi(任何型号都可以)。
  • 运动传感器(〜3美元)。
  • 连接线。
  • 有线扬声器(大多数蓝牙扬声器可以选择使用输入)。
  • 3.5毫米立体声电缆,公对公。
  • 一旦您完成后,您可能还想添加一些同步的灯光效果,但是在本教程中,我们将仅涵盖可怕的声音!

    设置

    我们正在使用Raspbian Jessie Lite和Python 2.7,但是在您的Pi上运行的任何Linux发行版都应该可以。我将其保留在标准主机名“ raspberrypi.local"上,因此首先使用SSH远程登录(如果您使用的是Mac,请打开“终端"窗口。这是在Windows中执行相同操作的方法),或者选择使用带有桌面GUI的完整Raspbian,请随时跳过更新。

    ssh [email protected](enter raspberry as the password)sudo apt-get updatesudo apt-get install python-pipsudo pip install gpiozero

    这将安装一个简单的库,用于使用Python中的GPIO引脚以及多种类型的内置传感器和按钮。用GPIO4上的信号引脚,VCC连接至5V以及GND连接至GND的方式连接传感器。这可能会因您的确切型号而有所不同,因此请使用引脚图进行确认。

    有帮助的是,我的Pimoroni Pi 2盒的引脚图直接被激光刻蚀到了它。 >现在让我们制作运动检测脚本。

    nano motion.py

    粘贴:

    from gpiozero import MotionSensorpir = MotionSensor(4)while True:    if pir.motion_detected:        print("Motion detected!")    else:        print ("No motion")

    先按CTRL-X,然后单击Y保存并退出,然后运行:

    python motion.py

    您应该会在屏幕上看到“无动作"消息重复出现,直到您的手在传感器前挥手为止,直到它停留在“检测到运动"!

    如果该消息没有出现根本没有任何变化。

    如果您想了解有关此简单GPIOZero库的更多信息,请查看此出色的备忘单。

    播放声音

    连接便携式扬声器,并在需要时确保已接通电源。我们将使用 pygame 库播放声音,因此请继续安装它:

    sudo apt-get install python-pygame

    首先,我们需要一个声音文件来播放。如果您是在桌面环境中执行此操作,请继续从某个位置下载 WAV OGG 文件(我在这里找到了很多免费的万圣节声音) ,并将其放在您的主目录中。我建议先进行降采样,然后再转换为OGG格式。

    如果您是远程连接且仅使用命令行,则由于 wget 命令可能无法获取实际文件。相反,我们可以将其本地下载到我们的桌面,然后使用 scp (安全副本)命令在命令行上进行复制。您可以在此处了解更多有关scp的信息,但现在,打开一个新的Terminal标签,然后输入:

    scp thunder.ogg [email protected]:

    根据需要重命名thunder.ogg,但不要忘记最后一个 (如果没有该命令,该命令将完成,但不会执行我们想要的操作)。默认情况下,这会将文件传输到Pi用户的主目录。

    现在,让我们修改脚本以播放声音。首先导入一些新模块:

    import pygame.mixerfrom pygame.mixer import Sound

    然后,在现有import语句之后,我们将一遍又一遍循环相同的声音以进行测试。剩下的动作检测代码保持原样-它不会运行,因为它将永远被困在此声音播放循环中。

    pygame.init()pygame.mixer.init()#load a sound file, in the home directory of Pi user (no mp3s)thunder = pygame.mixer.Sound("/home/pi/thunder.ogg")while True:        thunder.play()        sleep(10)        thunder.stop()

    请注意,当我最初尝试此过程时,声音拒绝播放,只是点击了。罪魁祸首是文件大小或比特率:它是24位,并且15秒剪辑超过5 MB。使用上面链接到的转换器将其缩减到16位,一切正常,并且大小减小到260KB!

    如果您在运行Python应用程序时发现扬声器发出嘶嘶声,但不要这样,键入:

    sudo nano /boot/config.txt

    ,并在末尾添加以下行:

    disable_audio_dither=1

    重新启动以使更改生效。还是不要打扰,因为无论如何我听起来还是下雨了。

    最后,让我们修改主运动检查循环,以在检测到运动时播放声音。我们将使用15秒的延迟,以便可以播放整个循环,并在大量不间断运动时充当垃圾邮件缓冲区。

    while True:    if pir.motion_detected:        print("Motion detected!")        thunder.play()        # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound        sleep(15)        thunder.stop()    else:        print ("No motion")

    自动启动

    我们可能想在没有电池且没有互联网连接的地方进行设置,因此脚本需要在重新启动时运行,而不必打开命令行。为此,我们将使用最简单的方法:crontab。输入:

    sudo crontab -e

    如果这是第一次运行此命令,首先会询问您要使用的编辑器。我为nano选择了选项2。它将启动到您选择的编辑器中,因此添加以下行:

    @reboot python /home/pi/motion.py &

    这意味着您的motion.py脚本将在每次启动时运行,并且以静默方式运行(因此该脚本的任何输出都将被忽略)。重新启动进行尝试。

    如果尽管有运动,但没有任何声音,或者听到一点点咔嗒声,则说明您可能没有使用完整的文件路径,或者您的文件可能需要转换为较低的比特率,较小的文件大小。

    添加更多声音

    一遍又一遍地播放相同的效果有点无聊,所以让我们添加一些随机性。下载更多万圣节的声音,记住将它们缩小到合理的大小和比特率,然后像以前一样使用 scp 将它们发送到您的Pi。我添加了三种不同类型的尖叫声。

    修改代码,以使我们实际上没有创建一个 array <数组,而没有定义一个 pygame.mixer.Sound 变量。 / em>的声音。对于Python来说这很简单,只需用方括号将逗号分隔的列表括起来,如下所示:

    sounds = [        pygame.mixer.Sound("/home/pi/thunder.ogg"),        pygame.mixer.Sound("/home/pi/scary_scream.ogg"),        pygame.mixer.Sound("/home/pi/girl_scream.ogg"),        pygame.mixer.Sound("/home/pi/psycho_scream.ogg")        ]

    下一步,将随机库导入文件中,

    import random

    现在修改主运动感应环,如下所示:

    while True:    if pir.motion_detected:        print("Motion detected!")        playSound = random.choice(sounds)        playSound.play()        # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound        sleep(15)        playSound.stop()    else:        print ("No motion")

    请注意次要更改:我们不是使用单个Sound变量,而是使用 random.choice 函数选择一个

    下面是完整代码,以防万一您遇到问题:

    import pygamefrom pygame.mixer import Soundfrom gpiozero import MotionSensorfrom time import sleepimport randompygame.init()pygame.mixer.init()#load a sound file, same directory as script (no mp3s)sounds = [        pygame.mixer.Sound("/home/pi/thunder.ogg"),        pygame.mixer.Sound("/home/pi/scary_scream.ogg"),        pygame.mixer.Sound("/home/pi/girl_scream.ogg"),        pygame.mixer.Sound("/home/pi/psycho_scream.ogg")        ]pir = MotionSensor(4)while True:    if pir.motion_detected:        print("Motion detected!")        playSound = random.choice(sounds)        playSound.play()        # ensure playback has been fully completed before resuming motion detection, prevents "spamming" of sound        sleep(15)        playSound.stop()    else:        print ("No motion")

    只有四个样本,每个样本都有很高的重复概率时间,但您可以在烦人的情况下添加更多样本。

    就是这样!用可怕的LED怪兽眼睛将其藏在灌木丛中,您应该能够为自己节省一些糖果,因为所有孩子甚至在进门前就尖叫着逃跑。还是躲在壁橱里,因为在约翰尼哭泣之后生气的妈妈已经被抽血了。

    免责声明:PCPC.me对您因使用此项目而造成的任何人身伤害不承担任何责任!

    您会制作这个动作激活的音箱来吓local当地的捣蛋鬼吗?这个万圣节你有没有用Raspberry Pi设置任何恐怖效果?请在下面的评论中告知我们!

    标签: 万圣节 Raspberry Pi