有源蜂鸣器与无源蜂鸣器的区别

这里的“源”不是指电源,而是指震荡源。

内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的。

内部没有震荡源的为无源蜂鸣器,给直流电不能响,需要提供一定频率的脉冲信号才能够有响声,而且声音随着频率的变化而变化。

所以我们要想实现蜂鸣器演奏音乐的话,只能选用无源蜂鸣器。

单片机驱动蜂鸣器发声原理" class="reference-link">单片机驱动蜂鸣器发声原理

单片机上面使用的蜂鸣器一般都是无源电磁式的蜂鸣器。它由外壳、振动膜片、磁铁、电磁线圈、及振荡器等组成。

接通电源后,电流通过电磁线圈,致使电磁线圈工作产生磁场,振动膜片在磁铁以及电磁线圈的相互作用下,周期性地振动发出一定频率的声音。

单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要设计一个电流放大的电路,具体实现如下图所示。

有源蜂鸣器和无源蜂鸣器的驱动电路是一样的,都是如上图所示。

有源蜂鸣器,只需要改变Buzzer(PB9)引脚的高低电平即可控制蜂鸣器。
当Buzzer引脚为低电平的时候,三极管导通,蜂鸣器响;
当Buzzer引脚为高电平的时候,三极管截止,蜂鸣器不响。

注意此处使用的蜂鸣器为3.3V/5V兼容版本的蜂鸣器。

无源蜂鸣器,Buzzer引脚要提供一个脉冲信号才能响。下面封装了一个输入参数为频率的无源蜂鸣器驱动函数。

频率的倒数即是时间,然后此处计算的是T/2的时间,所以为1秒钟是1000000us,一半即500000,所以下面的延时时间为:

  1. time = 500000/((u32)frq);

具体实现如下所示:

  1. void Sound(u16 frq)
  2. {
  3. u32 time;
  4. if(frq != 1000)
  5. {
  6. time = 500000/((u32)frq);
  7. BEEP = 0;
  8. delay_us(time);
  9. BEEP = 1;
  10. delay_us(time);
  11. }else
  12. delay_us(1000);
  13. }

当单片机用于演奏歌曲时,只需搞清楚两个概念即可,也就是“音符(音调)”和“节拍”。音调表示一个音符该唱的频率,节拍表示一个音符该唱多长的时间。

有了上面函数,我们即可以驱动无源蜂鸣器按照一定的频率发声了,那么我们如何知道某个音的频率呢?

音符

我们查阅网上资料,可以得到如下音符和频率的对应关系:

音符频率(Hz)低1 DO262#1 DO#277低2 RE294#2 RE#311低3 MI330低4 FA349#4 FA#370低5 SO392#5 SO#415低6 LA440#6466低7 SI494中1 DO523#1 DO#554……

由于钢琴的中央C基频约为261.63Hz,唱“DO”。根据国际标准,相邻的半个音(即钢琴相邻键)的基频相差2^(1/12)倍。

经过计算,我们能得到 #1 DO# 的频率为277。

以此类推,我们能够求出表格中每个音对应的频率,大家可以验证一下上面表格是否有这样的规律。

钢琴一个八度的12个琴键可以表示为如下形式:DO DO# RE RE# MI FA FA# SO SO# LA LA# SI

其中“#”表示比该音符高半个音的黑键。

按照上面的关系,我们可以得出:升一个八度其频率将翻番。

比如上面表格中的低1 DO中1 DO的频率就是翻番的。

所以我们想发出低1 DO的音的话,可以调用如下函数:

  1. Sound(262);

节拍

有了音符,也就是知道了这个音怎么发音,那么要想写出一个乐谱,还要知道,这个音发多长时间,这就引出了节拍的概念。

在一张乐谱中,我们经常会看到这样的表达式,如1=C(4/4)、1=G(3/4)… …等等,这里1=C(4/4)、1=G(3/4)表示乐谱的曲调。

3/4就是乐谱中,以四分音符为节拍,每一小节有三拍。

每一拍的时长是多少秒没有规定,一般在乐谱的前面会写到类似于:

表示该曲子每分钟要弹奏出96个四分音符。

我们一般以四分音符为一拍,一般说来,如果乐曲没有特殊说明,一拍的时长大约为400-500ms。

上图中,其中 1、2为一拍,3、4、5为一拍,6为一拍共三拍。
1、2的时长为四分音符的一半,即为8分音符长;
3、4的时长为八分音符的一半,即为十六分音符长;
5的时长为四分音符的一半,即为八分音符长;
6的时长为四分音符长。

由上面的关系,我们就可以随便找到一个简谱,如果1拍为0.4秒,那么1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。然后按照上面的关系写出程序中的乐谱。

比如在我老婆的协助一下写出下面《你笑起来真好看》的乐谱如下:

  1. u8 music[]={
  2. 5,10,10,5,5,9,9,16,8,8,8,9,10,5,5,16, //想去远方的山川,想去海边看海鸥
  3. 6,8,8,6,5,10,10,16,9,8,8,6,9,16, //不管风雨有多少,有你就足够
  4. 5,10,10,5,5,9,9,16,8,8,8,6,5,10,10,16, //喜欢看你的嘴角,喜欢看你的眉梢
  5. 6,11,11,6,5,10,10,16,9,8,8,6,8,16, //白云挂在那蓝天,像你的微笑
  6. 5,12,5,5,12,5,9,16,8,6,8,8,8,10,12,16, //你笑起来真好看,像春天的花一样!
  7. 8,6,8,8,8,13,12,10,9,8,6,8,8,10,9,16, //把所有的烦恼,所有的忧愁,统统都吹散
  8. 5,12,5,5,12,5,9,16,8,6,8,8,13,12,16, //你笑起来真好看,像夏天的阳光
  9. 8,8,8,13,12,10,9,8,6,8,8,9,8,16, //整个世界全部的时光,美得像画卷。
  10. };

上面数组的数字是MusicalNote数组的索引,进而可以求得该音符的频率:

  1. // 低7 1 2 3 4 5 6 7 中1 中2 中3 中4 中5 中6 中7 高1 高2 不发音
  2. uc16 MusicalNote[] = {247,262,294,330,349,392,440,494,523,587,659,698,784,880,988,1046,1000};
  1. u8 time[] = {
  2. 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, //想去远方的山川,想去海边看海鸥
  3. 4,4,4,4,4,4,4,4,4,4,4,4,8,4, //不管风雨有多少,有你就足够
  4. 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, //喜欢看你的嘴角,喜欢看你的眉梢
  5. 4,4,4,4,4,4,4,4,4,4,4,4,8,4, //白云挂在那蓝天,像你的微笑
  6. 4,4,2,2,4,4,4,4,4,4,2,2,4,4,8,4, //你笑起来真好看,像春天的花一样!
  7. 4,4,2,2,4,4,4,4,4,4,4,4,4,4,8,4, //把所有的烦恼,所有的忧愁,统统都吹散
  8. 4,4,2,2,4,4,4,4,4,4,4,4,4,8,4, //你笑起来真好看,像夏天的阳光
  9. 4,4,4,4,4,4,4,4,4,4,4,4,8,4, //整个世界全部的时光,美得像画卷。
  10. };

数组time中的数字代表music数组中每个音的节拍(响的时间),其中4代表一个四分音符,即一拍,本程序中为400ms,8代表一个二分音符,代表两拍,即800ms;2代表一个八分音符,1/2拍,即耗时200ms。详情:https://www.icxbk.com/article/detail/1573.html

arduino蜂鸣器音乐代码_STM32驱动蜂鸣器演奏音乐“你笑起来真好看”相关推荐

  1. 32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃

    在小哈公众号上,公众号:嵌入式从0到1,小哈用鸿蒙平台做了个播放爱若琉璃歌曲的文章,写的非常详细,视频做的也非常好,伙伴们可以去看看,哈哈,说了这么多,就是为了抄点素材...鉴于stm32f103c8 ...

  2. 树莓派蜂鸣器python代码_树莓派+蜂鸣器=整点报时器

    试了下用树莓派外加一个有源蜂鸣器,实现了一个简单的报时功能. 对于有源.无源蜂鸣器的区别,简短介绍下: 一.无源蜂鸣器: 1.无源内部不带震荡源,所以如果用直流信号无法令其鸣叫.必须用2K~5K的方波 ...

  3. python 背景音乐程序代码_用Python演奏音乐

    背景 笔者什么乐器也不会,乐理知识也只有中小学音乐课学的一点点.不过借助Python,调用编曲家常用的MIDI程序库,也能弹奏出一些简单的音乐,以下是笔者的一些心得. 准备 安装mingus 首先是安 ...

  4. arduiono电子音乐代码_用ARM实现音乐电子相册

    (前段时间在做嵌入式的课程设计,特将学习心得整理如下) 一.开发工具及环境介绍 1.ARM处理器 ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计. ARM ...

  5. arduino音乐播放器(蜂鸣器版)

    蜂鸣器是我们常见的一个电子元器件,它可以发出类似蜂鸣的声音,采用低电压直流供电,广泛运用于计算机.打印机.报警器.电子玩具等众多场合,一般作为提示.警报较多: 我们不以结构论述,以工作原理可将其分为有 ...

  6. 【arduino】继续蜂鸣器音乐播放,arduinoIDE里调用音乐播放库

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 昨天简单的介绍了一下蜂鸣器硬件和米思齐上如何演奏音乐(一种非常简单的用arduino控 ...

  7. arduino 嗡鸣器 音乐_【arduino】继续蜂鸣器音乐播放,arduinoIDE里调用音乐播放库...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 昨天简单的介绍了一下蜂鸣器硬件和米思齐上如何演奏音乐(一种非常简单的用arduino控 ...

  8. 【FPGA】用Verilog代码实现无源蜂鸣器驱动实验

    目录 一.理论部分 1.蜂鸣器概述 2.驱动原理 3.实验目标 二.模块框图 三.波形图 1.时钟与复位信号 2.计数器 (1)0.5s计数器 (2)音调频率计数器 (3)分频计数器 (4)频率变量最 ...

  9. arduino无源蜂鸣器歌曲编码_基于Arduino使用低电平触发无源蜂鸣器模块

    蜂鸣器模块 我们可以使用Arduino进行很多互动作品,其中最常用的是声光显示器.之前的所有实验都与LED有关.但是,这个实验中的电路可以产生声音.通常,实验是通过蜂鸣器或扬声器完成的,而蜂鸣器更简单 ...

最新文章

  1. Floyd cycle算法
  2. php 按条件进行计算的方法
  3. 不能错过的RTS经典:《蘑菇战争2》是如何做玩法创新的?
  4. 腾讯会议核心数据库TDSQL,如何做到快速无损在线扩容?
  5. bzoj1016 [JSOI2008]最小生成树计数
  6. 轻量级锁_并发编程实战05:锁的状态
  7. JeecgBoot 单体升级微服务快速方案(十分钟搞定)
  8. jsoup对象的使用
  9. StickyListHeaders的使用
  10. c语言关键字中文意思,C语言的32个关键字是什么意思啊
  11. java加载失败是什么原因_这个加载失败是什么问题呢
  12. idea中编辑*.vue文件没有任何提示
  13. Android Telephony —— 手机信号实时变化源码分析过程记录
  14. net根据list创建xml_#一起学spring#创建多模块项目
  15. Lync Server 2010 客户端访问提示验证服务器中的证书时遇到问题解决方法
  16. cordova 美洽_phonegap-cordova-美洽客服插件-Android
  17. Doris 运维篇:Apache Doris 如何定位处理问题的Tablet
  18. 服务端渲染(SSR)
  19. 剑指offer整理(附python代码)——递归
  20. steam邮箱登录教程

热门文章

  1. 消息复杂计算的抽象和简化
  2. Spring 如何解决循环依赖问题
  3. 大学毕业一年 - 北漂生活
  4. easyExcel出现 Analyse excel occur file error fileType XLS
  5. (2)esp8266多国语言翻译系统
  6. UTF-8转ASCII
  7. BIO-NIO-AIO笔记
  8. B 字符串处理1000MS64MB Description 输入一个英文名字。去掉该英文名字两端的空格,并首字母大写后,输出问候语Hello, 加名字 Input 一个英文名字 Output 去
  9. mp3封面、专辑、作者等信息的解析
  10. learn git branching学习整理3