树莓派基础实验9:蜂鸣器实验
一、介绍
蜂鸣器是音频信号装置,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器直接接上额定电源就可以连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能周期性地振动发声。
二、组件
★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:蜂鸣器实验相关推荐
- 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...
1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...
- 【树莓派C语言开发】实验09:有源和无源蜂鸣器模块
文章目录 前言 1.实验器材 2.实验原理 3.有源蜂鸣器模块 3.1代码示例 3.2编译代码 3.3实验效果 4.无源蜂鸣器 4.1代码示例 音符频率对照表 softTone软件音频库 4.2编译代 ...
- 树莓派4bpython串口通信解读数据_树莓派基础实验36:通用串口通信实验
一.介绍 对于树莓派 3B+来说,他的UART功能有三种: 1.内部蓝牙使用: 2.控制终端使用: 3.与其他设备进行串口通信. 在树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树 ...
- 树莓派基础实验20:火焰报警传感器实验
一.介绍 火焰传感器模块通过捕获来自火焰的红外波长来执行检测.它可以用来探测火焰是否存在,在这个实验中,我们使用火焰传感器来检测火焰并发出报警信号. 二.组件 ★Raspberry Pi主板*1 ...
- 树莓派基础实验18:声音传感器实验
一.介绍 声音传感器是一种接受声波并将其转换为电信号的组件,它像麦克风一样检测周围环境中的声音强度. 二.组件 ★Raspberry Pi主板*1 ★树莓派电源*1 ★40P软排线*1 ★PCF ...
- 树莓派基础实验14:PS2操纵杆实验
一.介绍 操纵杆是一种输入设备,由一根可在基座上旋转,并向其控制的设备报告其角度或方向的操纵杆组成.操纵杆通常用于控制视频游戏和机器人.这里使用操纵杆PS2. 二.组件 ★Raspberry P ...
- 树莓派基础实验39:解析无线电接收机PWM、SBUS信号
一.介绍 虽然如今或者将来,5G网络的建设带来人工智能和工业自动化的全面升级,生产活动中劳动力的需求大大减少,大量的劳动力将向内容生产行业和服务行业转移.教育.医疗.娱乐.公共管理等诸多领域,乃至 ...
- 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验
一.介绍 MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备. 它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...
- 树莓派基础实验16:霍尔传感器实验
一.介绍 霍尔传感器是根据霍尔效应制作的一种磁场传感器.霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855-1938)于1879年在研究金属的导电机构时发现的.后来发现半导体. ...
- 树莓派基础实验17:温度传感器实验
一.介绍 温度传感器是检测温度并将其转换为输出信号的组件.根据材料和部件的特点,温度传感器可分为热电阻和热电偶两种,热敏电阻是前者的一种,他由半导体材料制成.大多数热敏电阻是负温度系数(NTC) ...
最新文章
- 判断图有无环_链表:环找到了,那入口呢?
- 计算机ppt制作教案,全国计算机一级B考试基础篇制作人徐守威PPT教案学习.pptx
- 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表
- 【软件工程导论题型大总结】名词解释总结
- C#图解教程 第十三章 委托
- JavaWeb开发必会技巧1——导入jar包
- jquery.validation.js 表单验证
- Redis通过IO进行序列化+反序列化
- JPA mappedBy、JoinColumn、FetchType.LAZY和FetchType.EAGER介绍
- 双向可控硅的工作原理
- 计算机-库win10,Win10如何在资源管理器中显示“库”
- java毕业设计博雅楼自习室预约系统Mybatis+系统+数据库+调试部署
- 怎么制作linux光盘镜像,linux光盘镜像文件制作攻略
- 即构推出微信引流方案,助力在线教育平台大幅降低获客成本
- 【Pytorch->ONNX->NCNN->NCNNfp16->vs编译】Windows NCNN部署
- 深入理解操作系统实验——bomb lab(phase_2)
- centos7重启桌面服务_centos7安装ghome桌面以及配置vcn服务
- 顶点片元Shader(Unity)
- c语言中printf的转义字符,C语言Printf格式
- 数据库的内连接和外连接