资源描述
arduino蜂鸣器发声教案
arduino蜂鸣器发声教案
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(arduino蜂鸣器发声教案)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为arduino蜂鸣器发声教案的全部内容。
第4课 蜂鸣器发声
一、学生情况分析
《蜂鸣器发声》是本课程的第四课,经过上一节课的学习,学生初步了解按钮,掌握选择结构以及数字口的输入,体验Arduino机器人控制和按钮控制LED编程的过程。这一节课主要是让学生们的电路发出声音。
二、教学目标
1。通过制作蜂鸣器发声实验,初步了解蜂鸣器,掌握蜂鸣器的接线方法。
2.体验不同蜂鸣器的不同接线方法以及发出声音的不同要求。
3。体验蜂鸣器编程的过程,激发对编程的兴趣.
三、教学重难点
教学重点:蜂鸣器的连接方法、tone函数的使用
教学难点:tone函数的使用
四、教学流程
1.复习旧知,引入新课。
教师:上节课我们制作了按键控制的LED,其中用到了哪些知识呢?
通过制作按钮控制的LED,初步了解按钮,掌握选择结构以及数字口的输入。按钮控制LED一般应用在走廊的灯、台灯等需要启动才会亮的灯上。今天我们来学习声音,能让电路发出声音的元器件。
出示课题《蜂鸣器发声》。
2.教学新课
(1)元器件介绍
1)蜂鸣器,是一种电子发声元器件,可以发出"beep beep”的声音。蜂鸣器在电路中用字母“FM”、“H"或“HA” 或“ZZG”、“LB”、“JD”等表示。
蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种,两者的区别是:内部是否有震荡源。有源蜂鸣器内部带震荡源,所以只要一通电就会叫;无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的波形脉冲信号去驱动它。有源蜂鸣器往往比无源的略贵,就是因为里面多个震荡电路。
2)PNP型三极管(型号8550),在该电路中三极管相当于一个开关,其引脚如下图:
1脚=E(发射极,电路图中带箭头的那个)
2脚=B(基极,电路图中跟R相接的那个)
3脚=C(集电极,与E相对的那个)
运行原理如下:
1.当输出高电平,三极管B极与E极间没有电压差,三极管E极与C极间不通,有源蜂鸣器FM没有电流通过,蜂鸣器不响。
2.当输出低电平,三极管B极与E极间形成电压差,三极管E极与C极之间导通,电流通过蜂鸣器FM,如果是有源蜂鸣器,则立即发出beep声。
3)Arduino与蜂鸣器的接线
有源蜂鸣器和无源蜂鸣器脚的数目不同,因此接线方式不同。
无源蜂鸣器模块有三个管脚,其中标注‘-’的管脚接地(GND),中间的管脚接 5V,标注”S"的管脚接信号(数字I/O)。
有源蜂鸣器是一通电就响的,两个脚分别是正负极,两个脚一长一短,短脚为负极,长脚为正极接VCC。
有源蜂鸣器 无源蜂鸣器
(2)基础任务:初步尝试使用无源蜂鸣器发声
1)任务描述
蜂鸣器发出”beep beep”声音,响一秒,停两秒。
2)搭建硬件
无源蜂鸣器模块有三个管脚,其中标注‘-’的管脚接地(GND),中间的管脚接 5V,标注”S"的管脚接信号(数字I/O)。
3)编写程序
(3)基础任务:初步尝试使用有源蜂鸣器发声
1)任务描述
1。当输出高电平,三极管B极与E极间没有电压差,三极管E极与C极间不通,蜂鸣器FM没有电流通过,蜂鸣器不响。
2.当输出低电平,三极管B极与E极间形成电压差,三极管E极与C极之间导通,电流通过蜂鸣器FM,立即发出beep声.
2)搭建硬件
如图,用一个PNP型三极管做为控制开关, 图中FM是蜂鸣器。三极管C极接GND,E极接有源蜂鸣器的负端(短脚),三极管的B极接1K欧姆电阻 。 再接到Arduino D3脚 , 有源蜂鸣器的正端(长脚)接VCC。
3)编写程序
(3)提高任务:蜂鸣器的应用
1)任务描述
使用无源蜂鸣器,播放一首葫芦娃
2)搭建硬件
无源蜂鸣器标注‘-'的管脚接地(GND),中间的管脚接 5V,标注”S”的管脚接信号(数字I/O)。
3)编写程序
#define NOTE_D0 —1
#define NOTE_D1 262
#define NOTE_D2 293
#define NOTE_D3 329
#define NOTE_D4 349
#define NOTE_D5 392
#define NOTE_D6 440
#define NOTE_D7 494
#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278
#define NOTE_DH1 523
#define NOTE_DH2 586
#define NOTE_DH3 658
#define NOTE_DH4 697
#define NOTE_DH5 783
#define NOTE_DH6 879
#define NOTE_DH7 987
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。
#define WHOLE 1
#define HALF 0。5
#define QUARTER 0。25
#define EIGHTH 0。25
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看
int tune[] =
{
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,NOTE_D6,
NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,NOTE_D6,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,
NOTE_D1,NOTE_D1,NOTE_D3,
NOTE_D1,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,
NOTE_D5,
NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,
NOTE_D1,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_DH1,NOTE_D0,NOTE_D7,NOTE_D5,
NOTE_D6,
};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
float duration[]=
{
1,1,0.5,0.5,1,
0.5,0.5,0。5,0.5,1,0。5,0。5,
0。5,1,0。5,1,0。5,0.5,
0。5,0。5,0。5,0。5,1,1,
、
1,1,1+1,
0。5,1,1+0.5,1,
1,1,0。5,0.5,1,
0.5,1,1+0。5,1,
0.5,0.5,0.5,0。5,1+1,
0。5,1,1+0.5,1,
1+1,0.5,0.5,1,
1+1+1+1,
0。5,0。5,0。5+0。25,0.25,0。5+0。25,0.25,0.5+0.25,0。25,
0.5,1,0。5,1,1,
0。5,0。5,0.5+0。25,0.25,0.5+0.25,0.25,0。5+0。25,0.25,
0。5,1,0。5,1,1,
1+1,0.5,0.5,1,
1+1+1+1,
0。5,1,0.5,1+1,
0.5,1,0.5,1+1,
1+1,0。5,0。5,1,
1+1+1+1
};//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin=9;//蜂鸣器的pin
void setup()
{
pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
}
void loop()
{
for(int x=0;x<length;x++)
{
tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符
delay(400*duration[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
noTone(tonePin);//停止当前音符,进入下一音符
}
delay(5000);//等待5秒后,循环重新开始
}
3. 拓展提升
如果我们能够控制好频率和节拍,那就有可能演奏出动听的音乐。因此,我们首先需要搞清楚各音调的频率,具体见下表:
低音:
音调
音符
1#
2#
3#
4#
5#
6#
7#
A
221
248
278
294
330
371
416
B
248
278
294
330
371
416
467
C
131
147
165
175
196
221
248
D
147
165
175
196
221
248
278
E
165
175
196
221
248
278
312
F
175
196
221
234
262
294
330
G
196
221
234
262
294
330
371
中音:
音调
音符
1
2
3
4
5
6
7
A
441
495
556
589
661
742
833
B
495
556
624
661
742
833
935
C
262
294
330
350
393
441
495
D
294
330
350
393
441
495
556
E
330
350
393
441
495
556
624
F
350
393
441
495
556
624
661
G
393
441
495
556
624
661
742
高音:
音调
音符
1#
2#
3#
4#
5#
6#
7#
A
882
990
1112
1178
1322
1484
1665
B
990
1112
1178
1322
1484
1665
1869
C
525
589
661
700
786
882
990
D
589
661
700
786
882
990
1112
E
661
700
786
882
990
1112
1248
F
700
786
882
935
1049
1178
1322
G
786
882
990
1049
1178
1322
1484
我们知道了音调的频率后,下一步就是控制音符的演奏时间。每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来.音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0。5;1/4拍为0.25;1/8拍为0。125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。
根据上表,我们就可以制作出各种各样的歌曲了.
4.课堂总结
通过这节课的学习,我们初步认识和掌握了蜂鸣器的应用,掌握蜂鸣器的接线方法,并能够编写程序实现蜂鸣器发声。
5.布置作业
1)上网搜索蜂鸣器与Arduino控制器还能制作哪些作品,并尝试实现.
2)如何让有源蜂鸣器不要那么响?
展开阅读全文