MAKER:Ash/译:趣无尽 Cherry(转载请注明出处)
20世纪90年代曾有一款风靡一时的“智能家居”产品,只需要拍拍手就可以使唤家里的家电。
当年的奥秘就藏在这个盒子里面,来回顾这段经典广告视频吧:
虽然现在的智能家居已经离智能更进一步,但就使用便捷性来说,拍拍手还是比吼一嗓子“XX精灵”要更有范儿吧!
下面我们介绍如何用树莓派实现一个“啪啪”声控开关。
在本项目中,它被用来控制 LED 灯的开关。项目是使用拍手来启动开关并执行基本命令。设备还可以通过拍手来实现其他操作,如关闭树莓派,调整灯光,播放音乐,激活电机,甚至可以将树莓派连接到社交媒体并发送推文等。总之,只要动动手就有无限可能~
材料清单
树莓派(Raspberry Pi)3B+ ×1
母对母跳线 ×2
红色 LED ×1
安装并更新Raspbian
安装最新版本的 Raspbian 。查看详细步骤。
安装树莓派的 GPIO
1、访问树莓派终端。你可以通过 Raspbian 桌面或使用 PuTTY 等远程登录工具来操作。
2、启用 SSH 。请点击查看,了解如何通过SSH登录树莓派。
3、运行以下脚本,安装 GPIO 工具。
树莓派拍手开关将激活 LED 灯。发送信号让它运行,在此,需要使用 GPIO 引脚,使用树莓派 GPIO 来控制它们。
1 | pip install RPi.GPIO |
安装 pyaudio
拍手动力机制将通过麦克风输入进行控制。要在脚本中使用音频,需要安装 pyaudio 。安装很简单,只需运行以下脚本即可。
1 | sudo apt-get install python-pyaudio |
安装树莓派“拍手”脚本
我使用的拍手检测脚本是由 nikhiljohn10在 github 上创建的。
可以在项目文件库中下载。
https://make.quwj.com/project/97
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #!/usr/bin/python import pyaudio import sys import thread from time import sleep from array import array import RPi.GPIO as GPIO clap = 0 wait = 2 flag = 0 pin = 24 exitFlag = False def toggleLight(c): GPIO.output(c,True) sleep(1) GPIO.output(c,False) print("Light toggled") def waitForClaps(threadName): global clap global flag global wait global exitFlag global pin print "Waiting for more claps" sleep(wait) if clap == 2: print "Two claps" toggleLight(pin) # elif clap == 3: # print "Three claps" elif clap == 4: exitFlag = True print "Claping Ended" clap = 0 flag = 0 def main(): global clap global flag global pin chunk = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 threshold = 3000 max_value = 0 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, output=True, frames_per_buffer=chunk) GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) try: print "Clap detection initialized" while True: data = stream.read(chunk) as_ints = array('h', data) max_value = max(as_ints) if max_value > threshold: clap += 1 print "Clapped" if clap == 1 and flag == 0: thread.start_new_thread( waitForClaps, ("waitThread",) ) flag = 1 if exitFlag: sys.exit(0) except (KeyboardInterrupt, SystemExit): print "\rExiting" stream.stop_stream() stream.close() p.terminate() GPIO.cleanup() if __name__ == '__main__': main() |
请将其放在/home/pi目录下。
连接麦克风
树莓派通过麦克风收集拍手的声音,我使用 USB 麦克风。请将你的首选设备连接到树莓派。
根据房间里的噪音水平,你可能会发现不同麦克风的收音音频效果不一样。你可以使用在文本编辑器来编辑拍手脚本,手动调整拍手阈值。该项目需要对麦克风和拍手脚本设置进行一定程度的微调。
连接输出设备
触发“拍手”的设备是由你自己决定的。你可以选择激活特定设备、运行程序、播放特定声音、或其他由 Python 脚本触发的内容。
本教程中,使用2个拍子点亮 LED,4个拍子关闭 LED 。
将触发的设备连接到 GPIO 引脚。设置LED的接线电路如图所示。根据不同的 LED,你可能需要一个电阻。
测试拍手的次数
重启树莓派。打开终端或使用 SSH 连接到树莓派。运行 clap.py。
1 | sudo python clap.py |
拍手!如果一切正常,需要注册并检查终端确认。如果检测到拍手,程序将打出一行文字。
这是你微调麦克风灵敏度和调整拍击脚本设置的机会。尝试使用阈值限制来减少因拍手而检测到的额外噪音。
设置开机启动
把 clap.py 添加到 crontab 启动列表中。使用以下命令打开 crontab 文件。
1 | crontab -e |
在文件的底部,添加一行。
1 | @reboot nohup python clap.py & |
保存文件并关闭。现在,你的树莓派将在启动时自动开始侦听拍手声了。
测试成品
一切完成后,重新启动树莓派。
当它启动时,树莓派应该立即启动拍手检测脚本。大概10-20秒后即可拍手检测!
你现在可以用拍手去控制你想开关的任何设备!
那我啪啪啪的时候会不会来回闪?
666
秀儿,是你吗?
陈老师,坐下说!坐下说!
我觉得吧换成响指更有范儿
首先…这不能放卧室
会重复开关开关开关开关
看这个标题 我以为是情趣灯
下一个复古
有没有大神知道这个怎么才能控制220V电源的开关
加一个5V控制220V的继电器模块不就可以了,或者用三极管加电阻实现开关控制电路
为什么最后运行sudo python clap.py会出现输入溢出的错误啊?求解答!
是不是按着这个步骤操作就可以把这个声控开关做出来
厉害,做成控制家里灯的更厉害
这都能开?!!