赞
踩
蜂鸣器和喇叭都属于发声器件,区别在于蜂鸣器是有源器件,喇叭无源。有源指的是有振荡源,靠振荡源起振输出频率,再由阻抗匹配器推动压电蜂鸣片发声。
生活中常见的座机铃声、电子闹钟、玩具、空调等都是应用了蜂鸣器发声。
喇叭自不用说,没有振荡源,发声靠驱动器带动线圈运行,从而使外面一层振动膜发声,声音频率可调。
蜂鸣器有正负两极的接线柱,直接接到直流正负极即可发声。给不同的电压,可发出不同频率的声响。
前面在学习PWM的时候,咱们知道,开发板可通GPIO管脚,在PWM模式下输出不同的电压,那这样接线就简单了,找出支持PWM模式的GPIO管脚接蜂鸣器正极,负极接到GND端就可以了。
音乐国标频率中,A4是440Hz的频率,C4(钢琴的中央C)是261.626Hz,就是说使用PWM的freq=262即可得到“哆”音。
占空比是设置高电平的占周期内的比例,因为歌曲每个小节后面都有一个空拍,那我们就固定空拍占空比为0,其它有音节的拍占空比大一些,为1000好了。
这个小星星是从网上找的简谱,因为里面没有连音什么的,咱们简单处理就成了,让每拍占秒时间,拍与拍之间都要有个小停顿。
这里使用nodemcu开发板上的D7(GPIO 13)做PWM接线口,原因是它距离GND端刚好间隔两个脚,在面包板上直接把蜂鸣器两个正负极插下就对应上了,不用跳线(哈哈哈~)
上代码:
from machine import Pin, PWM import utime # 定义音调频率 tones = {'1': 262, '2': 294, '3': 330, '4': 349, '5': 392, '6': 440, '7': 494, '-': 0} # 定义小星星旋律 melody = "1155665-4433221-5544332-5544332-1155665-4433221" # 设置D7(GPIO 13)口为IO输出,然后通过PWM控制无缘蜂鸣器发声 beeper = PWM(Pin(13, Pin.OUT), freq=0, duty=1000) for tone in melody: freq = tones[tone] if freq: beeper.init(duty=1000, freq=freq) # 调整PWM的频率,使其发出指定的音调 else: beeper.duty(0) # 空拍时一样不上电 # 停顿一下 (四四拍每秒两个音,每个音节中间稍微停顿一下) utime.sleep_ms(400) beeper.duty(0) # 设备占空比为0,即不上电 utime.sleep_ms(100) beeper.deinit() # 释放PWM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。