【雕爷学编程】Arduino动手做(49)---有源和无源蜂鸣器模块5
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验四十九:有源蜂鸣器模块 低电平触发蜂鸣器 控制板发声传感器智能小车
程序十一:三角波发生器的警报声
实验开源仿真编程(Linkboy V4.63)
程序十二:祝你生日快乐
实验开源仿真编程(Linkboy V4.63)
Arduino实验场景图
程序十三:循环播放中音
实验开源图形编程(Mind+、编玩边学)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验四十九:有源蜂鸣器模块 低电平触发蜂鸣器 控制板发声传感器智能小车
程序十四:控制無源蜂鳴器發出兩隻老虎音調的聲音
Arduino实验开源代码
/* 【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); }
tone()函數說明:
tone(pin, frequency, duration)
pin=訊號接口,frequency=頻率,duration=間距
实验使用到的音階有Do(523Hz), Re (587Hz), Mi(659Hz), Fa(698Hz), So(784Hz), La(880Hz), Si(988Hz) 到高音 Do (1047Hz)
要让蜂鸣器唱歌基本上就是让蜂鸣器可以产生不同频率的声音,频率的单位是赫兹(Hz),也就是每秒振动多少次。
1939年的一次国际会议把 A (La) = 440Hz 确定为国际标准音,又名演奏会音高。 1955年,这一标准被国际标准化组织认可,并于1975年确定下来。
换句话说~我们只要让一个东西能以每秒振动440下,听到的声音就是A。
音阶--频率对照表(单位:Hz)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验四十九:有源蜂鸣器模块 低电平触发蜂鸣器 控制板发声传感器智能小车
程序十五:播放do re mi fa sol la si
Arduino参考开源代码
/* 【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); }
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验四十九:有源蜂鸣器模块 低电平触发蜂鸣器 控制板发声传感器智能小车
程序十六:播放melody音乐
Arduino参考开源代码
/*
【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);
}
}
Arduino实验场景图
程序十七:利用蜂鸣器播放天空之城
Arduino参考开源代码
/* 【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秒后,循环重新开始 }
盲人避障器(有障碍时蜂鸣器鸣响)
实验开源仿真编程(Linkboy V4.63)
Arduino实验场景图