一、介绍

   蜂鸣器是音频信号装置,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器直接接上额定电源就可以连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能周期性地振动发声。


二、组件

★Raspberry Pi 3主板*1

★树莓派电源*1

★40P软排线*1

★有源蜂鸣器模块*1

★无源蜂鸣器模块*1

★双色LED模块*1

★面包板*1

★跳线若干

三、实验原理

  有源蜂鸣器内置振荡源,所以通电时会发出声音。但无源蜂鸣器没有这种内置振荡源,所以如果使用直流信号,他不会发出轰鸣声;相反,你需要使用频率在2k到5k之间的方波来驱动它。由于有内置振荡电路,所以有源蜂鸣器通常比无源蜂鸣器昂贵。
  将两个蜂鸣器的引脚朝上,你可以看到带有绿色电路板的引脚是一个无源蜂鸣器。而另一个带有黑色塑料外壳,而不是电路板的蜂鸣器是有源蜂鸣器。

四、实验步骤


有源蜂鸣器:

  第1步:连接电路。这里要注意的是:蜂鸣器的电源是使用的3.3V,而不是前面实验所使用的5V,若使用5V电源,蜂鸣器会异常。

树莓派 T型转接板 有源蜂鸣器
GPIO 0(序号11) GPIO 17 SIG(I/O)
3.3V 3.3V VCC
GND GND GND

  第2步:编程。通过改变输入到蜂鸣器的信号电平,低电平是响,高电平是停止响来控制蜂鸣器。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import timeBuzzer = 11    # pin11def setup(pin):global BuzzerPinBuzzerPin = pinGPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical locationGPIO.setup(BuzzerPin, GPIO.OUT)GPIO.output(BuzzerPin, GPIO.HIGH)def on():GPIO.output(BuzzerPin, GPIO.LOW)   #低电平是响
def off():GPIO.output(BuzzerPin, GPIO.HIGH)#高电平是停止响
def beep(x):    #响3秒后停止3秒on()time.sleep(x)off()time.sleep(x)def loop():while True:beep(3)def destroy():GPIO.output(BuzzerPin, GPIO.HIGH)GPIO.cleanup()                     # Release resourceif __name__ == '__main__':     # Program start from heresetup(Buzzer)try:loop()except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.destroy()

无源蜂鸣器:

  第1步:连接电路。这里要注意的是:蜂鸣器的电源是使用的3.3V,而不是前面实验所使用的5V,若使用5V电源,蜂鸣器会异常。

树莓派 T型转接板 无源蜂鸣器
GPIO 0(序号11) GPIO 17 SIG(I/O)
3.3V 3.3V VCC
GND GND GND

  第2步:编程前先介绍本次编程需要的几个知识点:
  使用无源蜂鸣器,只要输出不同频率的PWM波,即可发出不同的音符。不同的音符组合起来就是一个曲子了。

乐谱简析:

  • 音阶
      音阶是音乐必不可少的要素,主要由声音的频率决定。通过给蜂鸣器不同频率的音频脉冲,可以产生不同的音阶,而要产生某频率的音频脉冲,最简单的办法是以该音频的频率除以2的值,函数ChangeFrequency(Frequency)使用该值为参数改变蜂鸣器输入方波信号的频率,蜂鸣器上就可发出该频率的声音。
      若想改变音阶,只需要改变频率即可。下表为各音调音符频率对照表,据此可产生不同音阶的音符。“#”表示半音,用于上升或下降半个音,乘以2就提升该声音一个8度音阶,减半则降一个8度。
  • 节拍
      若要构成音乐,光有音阶是不够的,还需要节拍,也就是音符持续时间的长短,一般用拍数表示。至于1拍是多少秒,没有严格的规定,只要节拍适宜,声音悦耳即可。假如某首歌曲的节奏是每分钟120拍,那么1拍为0.5 s,1/4拍为0.125 s,以此类推可得到其他节拍对应的时长。这样,利用不同的频率,加上与拍数对应的延时,就构成了乐曲。

  第3步:开始编程。 按照蜂鸣器音阶频率对照表,定义C调低、中、高各音符,对应的频率的列表。CL表示C调低音符列表。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import timeBuzzer = 11CL = [0, 131, 147, 165, 175, 196, 211, 248]          # C调低音符的频率列表,第一位为0是占位用,后面不使用#除0外,依次是1do、2re、3mi、4fa、5sol、6la、7si
CM = [0, 262, 294, 330, 350, 393, 441, 495]          # Frequency of Middle C notesCH = [0, 525, 589, 661, 700, 786, 882, 990]           # Frequency of High C notes

  第4步: 利用上面定义的频率的列表,定义歌曲的音符和节拍列表。

song_0 = [      CL[1], CL[2], CL[3], CL[4], CL[5], CL[6], CL[7],CM[1], CM[2], CM[3], CM[4], CM[5], CM[6], CM[7], CH[1], CH[2], CH[3], CH[4], CH[5], CH[6], CH[7] ]# song_0表示从低音do依次到高音si的音符列表
beat_0 = [      2, 2, 2, 2, 2, 2, 2,                         2, 2, 2, 2, 2, 2, 2,  2, 2, 2, 2, 2, 2, 2  ]# song_0的节拍, 2表示2个1/8节拍。一个1/8节拍为0.5秒延迟。
song_1 = [      CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3], CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]
# Notes of song1
beat_1 = [      1, 1, 3, 1, 1, 3, 1, 1,                         1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3 ]
# Beats of song 1, 1 means 1/8 beats
song_2 = [      CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1], CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2], CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1], CM[3], CM[2], CL[5], CL[7], CM[2], CM[1]        ]
# Notes of song2
beat_2 = [      1, 1, 2, 2, 1, 1, 2, 2,                         1, 1, 2, 2, 1, 1, 3, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 3 ]
# Beats of song 2, 1 means 1/8 beats,0.5 second

  第5步: 定义初始化设置函数setup()。

def setup():GPIO.setmode(GPIO.BOARD)                # Numbers GPIOs by physical locationGPIO.setup(Buzzer, GPIO.OUT)    # Set pins' mode is outputglobal Buzz                                             # Assign a global variable to replace GPIO.PWM Buzz = GPIO.PWM(Buzzer, 440)    # 440 is initial frequency.Buzz.start(50)                                  # Start Buzzer pin with 50% duty ration

  第6步: 定义循环函数loop(),主要有三部分,分别播放3首曲子。

def loop():while True:#--------------------------------------------print '\n\n    Playing Low C notes...'for i in range(0, 7):         # Play song 0的C调低音音符Buzz.ChangeFrequency(song_0[i])# 根据歌曲的音符改变频率print i      #打印i的值time.sleep(beat_0[i] * 0.5)     # 根据节拍列表每个音符延迟1秒,2 beats*0.5s=1sprint '\n\n    Playing Middle C notes...'for i in range(7, 14):         # Play song 0Buzz.ChangeFrequency(song_0[i]) # Change the frequency along the song noteprint itime.sleep(beat_0[i] * 0.5)     # delay a note for beat * 0.5sprint '\n\n    Playing High C notes...'for i in range(14, 21):         # Play song 0Buzz.ChangeFrequency(song_0[i]) # Change the frequency along the song noteprint itime.sleep(beat_0[i] * 0.5)     # delay a note for beat * 0.5sBuzz.ChangeFrequency(0.5)  #一首曲子结束,间隔3秒time.sleep(3)#--------------------------------------------   print '\n    Playing song 1...'for i in range(0, len(song_1)):         # Play song 1Buzz.ChangeFrequency(song_1[i]) # Change the frequency along the song notetime.sleep(beat_1[i] * 0.5)     # delay a note for beat * 0.5sBuzz.ChangeFrequency(0.5) #一首曲子结束,间隔3秒time.sleep(3)                          #--------------------------------------------print '\n\n    Playing song 2...'for i in range(0, len(song_2)):         # Play song 1Buzz.ChangeFrequency(song_2[i]) # Change the frequency along the song notetime.sleep(beat_2[i] * 0.5)     # delay a note for beat * 0.5sBuzz.ChangeFrequency(0.5)time.sleep(3)

  第7步。

def destory():Buzz.stop()                                     # Stop the buzzerGPIO.output(Buzzer, 1)          # Set Buzzer pin to HighGPIO.cleanup()                          # Release resourceif __name__ == '__main__':              # Program start from heresetup()try:loop()except KeyboardInterrupt:       # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.destory()

树莓派基础实验9:蜂鸣器实验相关推荐

  1. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...

    1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...

  2. 【树莓派C语言开发】实验09:有源和无源蜂鸣器模块

    文章目录 前言 1.实验器材 2.实验原理 3.有源蜂鸣器模块 3.1代码示例 3.2编译代码 3.3实验效果 4.无源蜂鸣器 4.1代码示例 音符频率对照表 softTone软件音频库 4.2编译代 ...

  3. 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验

    一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...

  4. 树莓派基础实验20:火焰报警传感器实验

    一.介绍    火焰传感器模块通过捕获来自火焰的红外波长来执行检测.它可以用来探测火焰是否存在,在这个实验中,我们使用火焰传感器来检测火焰并发出报警信号. 二.组件 ★Raspberry Pi主板*1 ...

  5. 树莓派基础实验18:声音传感器实验

    一.介绍    声音传感器是一种接受声波并将其转换为电信号的组件,它像麦克风一样检测周围环境中的声音强度. 二.组件 ★Raspberry Pi主板*1 ★树莓派电源*1 ★40P软排线*1 ★PCF ...

  6. 树莓派基础实验14:PS2操纵杆实验

    一.介绍    操纵杆是一种输入设备,由一根可在基座上旋转,并向其控制的设备报告其角度或方向的操纵杆组成.操纵杆通常用于控制视频游戏和机器人.这里使用操纵杆PS2. 二.组件 ★Raspberry P ...

  7. 树莓派基础实验39:解析无线电接收机PWM、SBUS信号

    一.介绍   虽然如今或者将来,5G网络的建设带来人工智能和工业自动化的全面升级,生产活动中劳动力的需求大大减少,大量的劳动力将向内容生产行业和服务行业转移.教育.医疗.娱乐.公共管理等诸多领域,乃至 ...

  8. 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验

    一.介绍    MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备.    它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...

  9. 树莓派基础实验16:霍尔传感器实验

    一.介绍    霍尔传感器是根据霍尔效应制作的一种磁场传感器.霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855-1938)于1879年在研究金属的导电机构时发现的.后来发现半导体. ...

  10. 树莓派基础实验17:温度传感器实验

    一.介绍    温度传感器是检测温度并将其转换为输出信号的组件.根据材料和部件的特点,温度传感器可分为热电阻和热电偶两种,热敏电阻是前者的一种,他由半导体材料制成.大多数热敏电阻是负温度系数(NTC) ...

最新文章

  1. 判断图有无环_链表:环找到了,那入口呢?
  2. 计算机ppt制作教案,全国计算机一级B考试基础篇制作人徐守威PPT教案学习.pptx
  3. 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表
  4. 【软件工程导论题型大总结】名词解释总结
  5. C#图解教程 第十三章 委托
  6. JavaWeb开发必会技巧1——导入jar包
  7. jquery.validation.js 表单验证
  8. Redis通过IO进行序列化+反序列化
  9. JPA mappedBy、JoinColumn、FetchType.LAZY和FetchType.EAGER介绍
  10. 双向可控硅的工作原理
  11. 计算机-库win10,Win10如何在资源管理器中显示“库”
  12. java毕业设计博雅楼自习室预约系统Mybatis+系统+数据库+调试部署
  13. 怎么制作linux光盘镜像,linux光盘镜像文件制作攻略
  14. 即构推出微信引流方案,助力在线教育平台大幅降低获客成本
  15. 【Pytorch->ONNX->NCNN->NCNNfp16->vs编译】Windows NCNN部署
  16. 深入理解操作系统实验——bomb lab(phase_2)
  17. centos7重启桌面服务_centos7安装ghome桌面以及配置vcn服务
  18. 顶点片元Shader(Unity)
  19. c语言中printf的转义字符,C语言Printf格式
  20. 数据库的内连接和外连接

热门文章

  1. python多PDF文件合成一个
  2. 阵列信号处理知识概括总结
  3. Matlab 输入输出操作
  4. 机顶盒两个灯出现红色
  5. Labview实现画板
  6. 人工智能 一种现代方法 第9章 一阶逻辑的推理
  7. TamronOS IPTV系统任意用户添加修改
  8. 查询linux信号量命令,Linux信号量动作和说明列表
  9. Ubuntu20安装向日葵
  10. QT 5.9.0下载安装及配置教程