上一节我们做的奇葩的blink这个小程序用到了蜂鸣器。不过没有让蜂鸣器能够好好的发出一个声音。那么这一节将带领大家真正的开始用一下蜂鸣器。简单阐述一下蜂鸣器的原理、发出警报声最后用它播放一个歌曲。
步骤1 初识蜂鸣器
这个PinPong Board这个板子上的蜂鸣器就长这样。小小的一个。那么蜂鸣器是什么呢?
简单理解蜂鸣器就是一个小喇叭,可以用它发出一些声音,一般蜂鸣器分为有源和无源两种蜂鸣器,有源蜂鸣器通电就可以发出声音。而无源就比较麻烦了。在板子上的蜂鸣器是一个无源蜂鸣器,无源蜂鸣器想要发出声音就需要震动。想要控制蜂鸣器震动就需要我们给一个脉冲信号。给脉冲信号其实很简到,只需要让他快速的开关就可以,如果一秒钟让他开关500次那么它就是500Hz的震动频率。先看下500Hz如何发出来。
步骤2 用脉冲信号控制发出声音
脉冲信号简单来说就是高点平加上低电平就是一个脉冲,那么500Hz就是500个脉冲,简单来说就是高低电平500次,参考一下程序。
# -*- coding: utf-8 -*-
#效果:发出500Hz赫兹的声音
#接线:使用windows电脑连接一块PinPong主控板,主控板D5引脚的蜂鸣器
import time
from pinpong.board import Board,Pin
#Board("uno").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
ip = "192.168.31.128" #网络配置中OLEB屏上显示的ip
port = 8081 #网络配置中OLEB屏上显示的port
Board(ip, port)
sound = Pin(Pin.D5, Pin.OUT) #引脚初始化为电平输出
while True:
sound.value(1) #输出高电平
time.sleep(0.001) #等待1秒 保持状态
sound.value(0) #输出低电平
time.sleep(0.001) #等待1秒 保持状态
步骤3 使用Tone函数
原来发出声音这么简单。不过用着一种方法如果想发出一个261Hz的声音就有点难了。那怎么搞呢?其实我们可以用pinpong库当中的Tone函数就可以非常方便的使用了。.freq是设定频率 .on()播放 .off()关闭声音。下面这个程序就是简单播放一个261Hz的声音。
# -*- coding: utf-8 -*-
#效果:发出261Hz声音
#接线:使用windows电脑连接一块PinPong主控板,主控板D5引脚的蜂鸣器
import time
from pinpong.board import Board,Pin,Tone
ip = "192.168.31.128" #网络配置中OLEB屏上显示的ip
port = 8081 #网络配置中OLEB屏上显示的port
Board(ip, port)
sound = Tone(Pin(Pin.D5)) #将Pin传入Tone中实现模拟输出
sound.freq(200) #按照设置的频率播放
while True:
sound.on() #打开蜂鸣器
使用Tone函数后发现我想要什么频率就可以有什么频率非常简单,由此我可以做一个简单的报警器的效果。也就是声音频率从200Hz开始慢慢的到5000Hz然后再慢慢降到200Hz。
# -*- coding: utf-8 -*-
#接线:使用windows电脑连接一块PinPong主控板,主控板D5引脚的蜂鸣器
import time
from pinpong.board import Board,Pin,Tone
ip = "192.168.31.128" #网络配置中OLEB屏上显示的ip
port = 8081 #网络配置中OLEB屏上显示的port
Board(ip, port)
sound = Tone(Pin(Pin.D5)) #将Pin传入Tone中实现模拟输出
sound.freq(200) #按照设置的频率播放
while True:
for my_variable in range(200, 5001, 1):
sound.freq(my_variable)
sound.on() #打开蜂鸣器
time.sleep(0.001)
pass
for my_variable in range(5001, 199, -1):
sound.freq(my_variable)
sound.on() #打开蜂鸣器
time.sleep(0.001)
pass
步骤4 播放小星星
接下来我们尝试用PinPong Board来播放一个音乐。先来看看一个简单的歌曲,《小星星》作为例子。当然我的程序只是写了一个简单的前两个小节内容,有兴趣的可以接着往下写。或者用更简单的方法写出来。我在这里只是抛砖引玉简单的举例说明一下怎么来用蜂鸣器。
# -*- coding: utf-8 -*-
#接线:使用windows电脑连接一块PinPong主控板,主控板D5引脚的蜂鸣器
import time
from pinpong.board import Board,Pin,Tone
ip = "192.168.31.128" #网络配置中OLEB屏上显示的ip
port = 8081 #网络配置中OLEB屏上显示的port
Board(ip, port)
sound = Tone(Pin(Pin.D5)) #将Pin传入Tone中实现模拟输出
while True:
sound.on() #打开蜂鸣器
for my_variable in range(2, 201):
sound.freq(261)
sound.on() #打开蜂鸣器
time.sleep(1)
sound.off()
time.sleep(0.2)
sound.freq(261)
sound.on() #打开蜂鸣器
time.sleep(1)
sound.off()
time.sleep(0.2)
sound.freq(392)
sound.on() #打开蜂鸣器
time.sleep(1)
sound.off()
time.sleep(0.2)
sound.freq(392)
sound.on() #打开蜂鸣器
time.sleep(1)
sound.off()
time.sleep(0.2)
sound.freq(440)
sound.on() #打开蜂鸣器
time.sleep(1)
sound.off()
time.sleep(0.2)
sound.freq(440)
sound.on() #打开蜂鸣器
time.sleep(1)
sound.off()
time.sleep(0.2)
sound.freq(392)
sound.on() #打开蜂鸣器
time.sleep(2)
sound.off()
time.sleep(0.2)
pass
各个音符所对应的频率的就在以下表格中。
因为python语言不熟可能有些程序可能不够严谨,欢迎留言更正。
CC BY-NC-SA
评论