【Arduino】168种传感器模块系列实验(49)---蜂鸣器模块
2022-05-052.9万
精华项目
AI 快速预览详细
本文介绍了Arduino项目中的蜂鸣器模块实验。蜂鸣器模块是一种用于产生声音信号的电子元件,适合初学者和学生进行电子技术的学习和实践。文章提供了具体的实验步骤和代码示例,帮助读者轻松掌握蜂鸣器模块的应用。
|
蜂鸣器模块的实物图片 ![]() |
|
蜂鸣器模块的实物图片 ![]() |
创作许可协议
本项目采用 None(不开放任何权利,保留所有权利) 进行许可。
创作许可协议
本项目采用 None(不开放任何权利,保留所有权利) 进行许可。
https://v.youku.com/v_show/id_XNTg2Nzk3Njk1Mg==.html?spm=a2hbt.13141534.1_2.d_0&scm=20140719.manual.114461.video_XNTg2Nzk3Njk1Mg==
[media=x,500,375]https://v.youku.com/v_show/id_XNTg2Nzk3Njk1Mg==.html?spm=a2hbt.13141534.1_2.d_0&scm=20140719.manual.114461.video_XNTg2Nzk3Njk1Mg==[/media]
[/font][/align][align=left][font=宋体]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十七:利用蜂鸣器播放天空之城
*/
#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556
#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 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 112
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看
int tune[] =
{
NOTE_D0, NOTE_D0, NOTE_D0, NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3,
NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D3, NOTE_D4, NOTE_D3, NOTE_D4, NOTE_DH1,
NOTE_D3, NOTE_D3, NOTE_D0, NOTE_DH1, NOTE_DH1, NOTE_DH1, NOTE_D7, NOTE_D4, NOTE_D4, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D0, NOTE_D6, NOTE_D7,
NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1,
NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D2, NOTE_D3, NOTE_D4, NOTE_DH1, NOTE_D7, NOTE_D7, NOTE_DH1, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH3, NOTE_DH1, NOTE_DH1, NOTE_DH1,
NOTE_DH1, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D7, NOTE_D5, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_DH1, NOTE_DH2, NOTE_DH3, NOTE_DH2, NOTE_DH3, NOTE_DH5,
NOTE_DH2, NOTE_DH2, NOTE_DH2, NOTE_D5, NOTE_D5, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3,
NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH2, NOTE_DH2, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_DH4, NOTE_DH3, NOTE_DH2, NOTE_DH1,
NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5, NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1,
NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH5, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5,
NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1, NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D7
};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
float duration[] =
{
1, 1, 1, 0.5, 0.5, 1 + 0.5, 0.5, 1, 1, 1, 1, 1, 0.5, 0.5,
1 + 0.5, 0.5, 1, 1, 1, 1, 1, 1, 1 + 0.5, 0.5, 1, 1,
1, 1, 0.5, 0.5, 0.5, 0.5, 1 + 0.5, 0.5, 1, 1, 1, 1, 1, 0.5, 0.5,
1 + 0.5, 0.5, 1, 1, 1, 1, 1, 0.5, 0.5, 1 + 0.5, 0.5, 1, 1,
1, 1, 1, 0.5, 0.5, 1, 0.5, 0.25, 0.25, 0.25, 0.5, 0.5, 0.5, 0.5, 0.25, 0.5, 1,
0.5, 0.5, 0.5, 0.5, 1, 1, 1, 1, 1, 0.5, 0.5, 1 + 0.5, 0.5, 1, 1,
1, 1, 1, 0.5, 0.5, 1.5, 0.5, 1, 1, 1, 1, 1, 1,
0.5, 0.5, 1, 1, 0.5, 0.5, 1.5, 0.25, 0.5, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5, 1, 1, 0.5, 0.5,
1, 0.5, 0.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0.5, 0.5, 1, 1, 0.5, 0.5, 1, 0.5, 0.25, 0.5, 1, 1, 1, 1, 0.5, 0.5
};//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin = 3; //蜂鸣器的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,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握
noTone(tonePin);//停止当前音符,进入下一音符
}
delay(5000);//等待5秒后,循环重新开始
}[/code]
[/font][/align][align=left]
[/align]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十六:播放melody音乐
*/
#define NOTE_C4 262//诠释旋律
#define NOTE_G3 196
#define NOTE_A3 220
#define NOTE_B3 247
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
// 音符时长:4 = 四分音符,8 = 八分音符,等等
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
void setup() {
// 遍历旋律的音符
}
void loop() {
for (int thisNote = 0; thisNote < 8; thisNote++) {
// 计算音符持续时间,用一秒除以音符类型。
//例如。 四分音符 = 1000 / 4,八分音符 = 1000/8 等等。
int noteDuration = 1000 / noteDurations[thisNote];
tone(3, melody[thisNote], noteDuration);
// 为了区分音符,设置它们之间的最小时间。
// 音符的持续时间 + 30% 似乎效果很好
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// 停止播放音调
noTone(3);
}
}[/code]
[/font][/font]
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十五:播放do re mi fa sol la si
*/
const int buzzPin = 3;//无源蜂鸣器接D3
int delayTime = 200;
void setup() {
// 把你的设置代码放在这里,运行一次
pinMode(buzzPin, OUTPUT);//设置为输出
}
void loop() {
// 把你的主要代码放在这里,重复运行
tone(buzzPin, 262, 150);
delay(delayTime);
noTone(buzzPin);
tone(buzzPin, 294, 150);
delay(delayTime);
noTone(buzzPin);
tone(buzzPin, 330, 150);
delay(delayTime);
noTone(buzzPin);
tone(buzzPin, 349, 150);
delay(delayTime);
noTone(buzzPin);
tone(buzzPin, 292, 150);
delay(delayTime);
noTone(buzzPin);
tone(buzzPin, 440, 150);
delay(delayTime);
noTone(buzzPin);
tone(buzzPin, 494, 150);
delay(delayTime);
noTone(buzzPin);
}[/code]
[/font][/size][/font][/align][align=left][font="][font=宋体][size=12pt]
[/font][/size][/font][/align]
[align=left][font="][font=宋体]([/font][font=Calibri]3[/font][font=宋体])要让蜂鸣器唱歌基本上就是让蜂鸣器可以产生不同频率的声音,频率的单位是赫兹[/font][font=Calibri](Hz)[/font][font=宋体],也就是每秒振动多少次。[/font][/font][/align][align=left][font="][font=宋体]
[/font][/font][/align][align=left][font="][font=宋体]
[/font][/font][/align]
[align=left][font="][font=Calibri]1939[/font][font=宋体]年的一次国际会议把 [/font][font=Calibri]A (La) = 440Hz [/font][font=宋体]确定为国际标准音,又名演奏会音高。 [/font][font=Calibri]1955[/font][font=宋体]年,这一标准被国际标准化组织认可,并于[/font][font=Calibri]1975[/font][font=宋体]年确定下来。[/font][/font][/align][align=left][font="][font=宋体]换句话说[/font][font=Calibri]~[/font][font=宋体]我们只要让一个东西能以每秒振动[/font][font=Calibri]440[/font][font=宋体]下,听到的声音就是[/font][font=Calibri]A[/font][font=宋体]。[/font][/font][/align]
[align=left][font="][font=宋体]音阶[/font][font=Calibri]--[/font][font=宋体]频率对照表[/font][font=Calibri]([/font][font=宋体]单位:[/font][font=Calibri]Hz)[/font][/font][/align][align=left][font="][font=Calibri]
[/font][/font][/align][align=left][font="]
[/font][/align]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十四:播放二只老虎乐曲
*/
int buzzer=3; //設定蜂鳴器接腳為D3
int duration = 500;
int aSo = 392; //定义音符频率
int bDo = 523;
int bRe = 587;
int bMi = 659;
int bFa = 698;
int bSo = 784;
int bLa = 880;
int bSi = 988;
int bDDo = 1047;
void setup(){
pinMode(buzzer,OUTPUT); //設定蜂鳴器為輸出
}
void loop(){
tone(3,bDo,duration);
delay(600);
tone(3,bRe,duration);
delay(600);
tone(3,bMi,duration);
delay(600);
tone(3,bDo,duration);
delay(800);
tone(3,bDo,duration);
delay(600);
tone(3,bRe,duration);
delay(600);
tone(3,bMi,duration);
delay(600);
tone(3,bDo,duration);
delay(800);
tone(3,bMi,duration);
delay(600);
tone(3,bFa,duration);
delay(600);
tone(3,bSo,duration);
delay(800);
tone(3,bMi,duration);
delay(600);
tone(3,bFa,duration);
delay(600);
tone(3,bSo,duration);
delay(800);
tone(3,bSo,duration);
delay(600);
tone(3,bLa,duration);
delay(600);
tone(3,bSo,duration);
delay(600);
tone(3,bFa,duration);
delay(600);
tone(3,bMi,duration);
delay(700);
tone(3,bDo,duration);
delay(800);
tone(3,bSo,duration);
delay(600);
tone(3,bLa,duration);
delay(600);
tone(3,bSo,duration);
delay(600);
tone(3,bFa,duration);
delay(600);
tone(3,bMi,duration);
delay(700);
tone(3,bDo,duration);
delay(800);
tone(3,bDo,duration);
delay(700);
tone(3,aSo,duration);
delay(700);
tone(3,bDo,duration);
delay(800);
tone(3,bDo,duration);
delay(700);
tone(3,aSo,duration);
delay(700);
tone(3,bDo,duration);
delay(800);
delay(2000);
}[/code]
[/font][/align][align=left][font="]
[/font][/align][align=left][font="]
[/font][/align]
[/font][/align][align=left]
[/align]
[/font][/align][align=left]
[/align]
[/font][/align][align=left][font="]
[/font][/align][align=left][font="]
[/font][/align]
[/font][/align][align=left]
[/align]
[/font][/align][align=left][font=宋体]
[/font][/align][align=left]
[/align]
[/font][/align][align=left][font=宋体]
[/font][/align][align=left]
[/align]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序九:播放根据不断变化的模拟输入而变化的音高(光敏电阻模块)
接脚:蜂鸣器接D9,光敏电阻接A0
*/
void setup() {
// 初始化串行通信(仅用于调试):
Serial.begin(9600);
}
void loop() {
int sensorReading = analogRead(A0);// 读取传感器
// 打印传感器读数,这样你就知道它的范围
Serial.println(sensorReading);
// 映射模拟输入范围(在这种情况下,来自光敏电阻的 400 - 1000)
//到输出音高范围(120 - 1500Hz)
int thisPitch = map(sensorReading, 400, 1000, 120, 1500);
tone(9, thisPitch, 10);// 播放音高
delay(1); // 读取之间的延迟以确保稳定性
}[/code]
[/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序八:播放一段以前可能听过的小旋律
接脚:蜂鸣器接D8
*/
#include "pitches.h"
// 旋律中的音符
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
// 每個音的的拍子,4:4分音符,8:8分音符
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
void setup() {
// 遍历旋律的音符
for (int thisNote = 0; thisNote < 8; thisNote++) {
//計算每個音的長度,4分音符: 1000 / 4,8分音符:1000/8
int noteDuration = 1000 / noteDurations[thisNote];
tone(8, melody[thisNote], noteDuration);
// 每個音之間要停一小段時間,範例是建議拍子的長度加30%
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// 停止播放音调
noTone(8);
}
}
void loop() {
// 无需重复旋律
}[/code]
[/font][/font][/align][code]/*************************************************
* Public Constants
*************************************************/
#define
NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978[/code][align=left][/align][align=left][font=宋体][font=宋体]并将其保存为[/font] [font=宋体]pitches.h[/font][/font][font=宋体]。[/font][/align][align=left][font=宋体]
[/font][/align]
[/font][/align][align=left]
[/align]
[/font][/font][/align][code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序七:升降调的警报声
*/
#define BUZZER_PIN A0//无源蜂鸣器接A0
void setup() {
pinMode(BUZZER_PIN, OUTPUT);//设置A0为输出
}
void loop() {
for (int i = 200; i <= 800; i++) // 200HZ ~ 800HZ
{
tone(BUZZER_PIN, i);
}
delay(1000); //最大频率保持1s
for (int i = 800; i >= 200; i--) // 800HZ ~ 200HZ
{
tone(BUZZER_PIN, i);
delay(10);
}
}[/code]