5784|26

3386

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

MicroPython动手做(19)——掌控板之蜂鸣器与音乐 [复制链接]

 
 

掌控板板载无源蜂鸣器
其声音主要是通过高低不同的脉冲信号来控制而产生。声音频率可控,频率不同,发出的音调就不一样,从而可以发出不同的声音,还可以做出“Do、Re、Mi、Fa、So、La、Si”的效果。


此内容由EEWORLD论坛网友eagler8原创,如需转载或用于商业用途需征得作者同意并注明出处

最新回复

  详情 回复 发表于 2020-4-29 16:13
点赞 关注
 
 

回复
举报

3386

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 

1、蜂鸣器
是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“ZZG”、“LB”、“JD”等)表示。

 

电压式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出100~500HZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。

 

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 

2、有源蜂鸣器和无源蜂鸣器
有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。有源蜂鸣器与无源蜂鸣器的区别:这里的“源”不是指电源,而是指震荡源。

 

也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。有源蜂鸣器的优点是:程序控制方便。

 

而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的方波去驱动它。无源蜂鸣器的优点是:
1. 便宜
2. 声音频率可控,可以做出“多来米发索拉西”的效果
3. 在一些特例中,可以和LED复用一个控制口

 

 
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

4
 

插入插入。

microPytho用来做图像处理,识别,方便吗?

点评

中午好,也要结合硬件,效果不错,具体看我最近的学习记录贴:   @eagler8  MicroPython动手做(01)——春节后入手了一块K210芯片AI开发板  MicroPyt  详情 回复 发表于 2020-4-25 11:30
 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

5
 

3、最简单的警报器

 

#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
#最简单的警报器

from mpython import *

import music

import time
while True:
    music.pitch(784, 500)
    time.sleep_ms(100)

 

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

6
 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

7
 

mPython 图形编程

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

8
 

4、光电火灾报警器

 

#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
#光电火灾报警器

from mpython import *

import time

import music
while True:
    if light.read() > 3000:
        rgb.fill((int(255), int(0), int(0)))
        rgb.write()
        time.sleep_ms(1)
        oled.fill(0)
        oled.DispChar('火警! 火警!', 35, 22, 1)
        oled.show()
        music.pitch(698, 500)
        music.pitch(988, 500)
    else:
        rgb.fill((int(0), int(153), int(0)))
        rgb.write()
        time.sleep_ms(1)
        oled.fill(0)
        oled.DispChar('小心火烛!', 38, 22, 1)
        oled.show()
        music.stop()

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

9
 

mPython 图形编程

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

10
 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

11
 

5、持续变调警笛声(磁感应触发)

 

#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
#持续变调警笛声(磁感应触发)

from mpython import *

import time

import music
while True:
    oled.fill(0)
    oled.DispChar('磁力报警', 0, 0, 1)
    oled.DispChar((str(magnetic.get_field_strength())), 0, 16, 1)
    oled.show()
    magnetic.peeling()
    if magnetic.get_field_strength() > 3:
        rgb.fill((int(255), int(0), int(0)))
        rgb.write()
        time.sleep_ms(1)
        for freq in range(880, 1760, 16):
            music.pitch(freq, 50)
        for freq in range(1760, 880, 16):
            music.pitch(freq, 50)
    else:
        rgb.fill( (0, 0, 0) )
        rgb.write()
        time.sleep_ms(1)
        rgb[1] = (int(0), int(153), int(0))
        rgb.write()
        time.sleep_ms(1)
        music.stop()

可以通过频率设置来制作一些非音符的音调。 例如,创建警笛效果。使用 music.pitch 方法,它需要一个频率。 其中range函数用于生成数值范围。这些数字用于定义音调的高低。 range函数有三个参数,分别是起始值,结束值和步长。因此,range的第一次使用是“以16的步长创建880到1760之间的数字范围”; 第二个次是“以-16”的步长创建1760到880之间的一系列值,持续频率为50毫秒。因此获得像警报器一样在频率上升和下降的频率范围而制作出警笛效果。

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

12
 

mPython 图形编程

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

13
 

音乐控制类指令

 

music.pitch()
描述: 播放一定时长的频率

 

music.pitch(frequency, duration=-1, pin=6, wait=True)
frequency - 频率
duration - 毫秒数,如果为负,则连续播放频率,直到阻塞或者被中断,或者在后台呼叫的情况下,设置或调用新频率stop
pin - 默认是掌控板的P6引脚,一次只能在一个引脚上播放频率
wait - 阻塞,如果为 True 则阻塞,反之则不

 

range()
描述: 创建一个整数列表,一般用在 for 循环中

 

range(start, stop[, step])
start - 计数从 start 开始,默认是从 0 开始,例如range(5)等价于range(0, 5)
stop - 计数到 stop 结束,但不包括 stop,例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step - 步长,默认为1,例如:range(0, 5) 等价于 range(0, 5, 1)

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

14
 

6、按键A、B来控制蜂鸣器播放ENTERTAIER,OLED显示歌曲名

 

#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
#按键A、B来控制蜂鸣器播放ENTERTAIER,OLED显示歌曲名

from mpython import *

import time

import music
while True:
    rgb.fill( (0, 0, 0) )
    rgb.write()
    time.sleep_ms(1)
    if button_a.value() == 0:
        rgb[1] = (int(0), int(153), int(0))
        rgb.write()
        time.sleep_ms(1)
        oled.fill(0)
        oled.DispChar('播放:ENTERTAIER', 0, 16, 1)
        oled.show()
        music.play(music.ENTERTAINER, wait=True, loop=False)
    if button_b.value() == 0:
        oled.fill(0)
        oled.show()
        rgb[1] = (int(255), int(0), int(0))
        rgb.write()
        time.sleep_ms(1)
        music.stop()
        time.sleep(1)

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

15
 

音乐控制类指令之二

 

music.play()
描述: 播放音乐

 

music.play(music, pin=6, wait=True, loop=False)
music - 内置音乐,如music.PYTHON;音符,如’c1:4’;音符列表,如[‘r4:2’, ‘g’, ‘g’, ‘g’, ‘eb:8’, ‘r:2’, ‘f’, ‘f’, ‘f’, ‘d:8’]
pin - 默认是掌控板的P6引脚
wait - 阻塞,如果为 True 则阻塞,反之则不
loop - 如果 loop 设置为 True ,则重复调整直到stop被调用或阻塞调用被中断

 

music.set_tempo()
描述: 设置播放节拍

 

music.set_tempo(ticks=4, bpm=120)
ticks - 一定数量的ticks(整数)构成单个节拍
bpm - 每分钟节拍数

 

music.get_tempo()
描述: 获取当前速度作为整数元组: (ticks, bpm)

 

music.reset()
描述: 以下列方式重置以下属性的状态
ticks = 4
bpm = 120
duration = 4
octave = 4
 
music.stop()
描述: 停止给定引脚上的所有音乐播放
 
music.stop(pin=6)
pin - 默认是掌控板的P6引脚

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

16
 

mPython 图形编程

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

17
 

7、触摸按键点播六首曲子

 

#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
# 触摸按键点播六首曲子

from mpython import *
import time
import music
from machine import Timer

def on_button_a_down(_):
    time.sleep_ms(10)
    if button_a.value() == 1: return
    music.stop()

_status_p = _status_y = _status_t = _status_h = _status_o = _status_n = 0
def on_touchpad_P_pressed():pass
def on_touchpad_P_unpressed():pass
def on_touchpad_Y_pressed():pass
def on_touchpad_Y_unpressed():pass
def on_touchpad_T_pressed():pass
def on_touchpad_T_unpressed():pass
def on_touchpad_H_pressed():pass
def on_touchpad_H_unpressed():pass
def on_touchpad_O_pressed():pass
def on_touchpad_O_unpressed():pass
def on_touchpad_N_pressed():pass
def on_touchpad_N_unpressed():pass

tim12 = Timer(12)

def timer12_tick(_):
    global _status_p, _status_y, _status_t, _status_h, _status_o, _status_n
    try:
        touchPad_P.read();pass
    except:
        return
    if touchPad_P.read() < 400:
        if 1 != _status_p:_status_p = 1;on_touchpad_P_pressed()
    elif 0 != _status_p:_status_p = 0;on_touchpad_P_unpressed()
    if touchPad_Y.read() < 400:
        if 1 != _status_y:_status_y = 1;on_touchpad_Y_pressed()
    elif 0 != _status_y:_status_y = 0;on_touchpad_Y_unpressed()
    if touchPad_T.read() < 400:
        if 1 != _status_t:_status_t = 1;on_touchpad_T_pressed()
    elif 0 != _status_t:_status_t = 0;on_touchpad_T_unpressed()
    if touchPad_H.read() < 400:
        if 1 != _status_h:_status_h = 1;on_touchpad_H_pressed()
    elif 0 != _status_h:_status_h = 0;on_touchpad_H_unpressed()
    if touchPad_O.read() < 400:
        if 1 != _status_o:_status_o = 1;on_touchpad_O_pressed()
    elif 0 != _status_o:_status_o = 0;on_touchpad_O_unpressed()
    if touchPad_N.read() < 400:
        if 1 != _status_n:_status_n = 1;on_touchpad_N_pressed()
    elif 0 != _status_n:_status_n = 0;on_touchpad_N_unpressed()

tim12.init(period=100, mode=Timer.PERIODIC, callback=timer12_tick)

def on_touchpad_P_pressed():
    music.play(music.DONG_FANG_HONG, wait=False, loop=False)

def on_touchpad_Y_pressed():
    music.play(music.BIRTHDAY, wait=False, loop=False)

def on_touchpad_T_pressed():
    music.play(music.MO_LI_HUA, wait=False, loop=False)

def on_touchpad_H_pressed():
    music.play(music.ODE, wait=False, loop=False)

def on_touchpad_O_pressed():
    music.play(music.PRELUDE, wait=False, loop=False)

def on_touchpad_N_pressed():
    music.play(music.CAI_YUN_ZHUI_YUE, wait=False, loop=False)

button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)


while True:
    oled.fill(0)
    oled.DispChar("A键:停止", 35, 0, 1)
    oled.DispChar("P:东方红  Y:生日快乐", 6, 20, 1)
    oled.DispChar("T:茉莉花  H:欢乐颂", 11, 35, 1)
    oled.DispChar("O:婚宴 N:彩云追月", 13, 50, 1)
    oled.show()

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

18
 

mPython X 图形编程

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

19
 

视频:触摸按键点播六首曲子
https://v.youku.com/v_show/id_XNDY1Mzc0MTc0OA==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle

 


 

 

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

20
 

掌控板有很多内置的旋律,完整的清单如下:

music.DADADADUM

music.ENTERTAINER

music.PRELUDE

music.ODE

music.NYAN

music.RINGTONE

music.FUNK

music.BLUES

music.BIRTHDAY

music.WEDDING

music.FUNERAL

music.PUNCHLINE

music.PYTHON

music.BADDY

music.CHASE

music.BA_DING

music.WAWAWAWAA

music.JUMP_UP

music.JUMP_DOWN

music.POWER_UP

music.POWER_DOWN

GE_CHANG_ZU_GUO - 歌唱祖国

DONG_FANG_HONG - 东方红

CAI_YUN_ZHUI_YUE - 彩云追月

ZOU_JIN_XIN_SHI_DAI - 走进新时代

MO_LI_HUA - 茉莉花

YI_MENG_SHAN_XIAO_DIAO - 沂蒙山小调

 

 

我们可以播放一些内置旋律:

import music

music.play(music.BIRTHDAY)

 

提示

music.BIRTHDAY指内置旋律的名称,如若播放其它旋律,只需把music.BIRTHDAY更换为想要播放的旋律即可。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表