基于Arduino使用低电平触发有源蜂鸣器模块
蜂鸣器模块
我们可以使用Arduino进行很多互动作品,其中最常用的是声光显示器。之前的所有实验都与LED有关。但是,这个实验中的电路可以产生声音。通常,实验是通过蜂鸣器或扬声器完成的,而蜂鸣器更简单且更易于使用。
有源蜂鸣器与无源蜂鸣器
有源蜂鸣器与无源蜂鸣器有什么区别。这里的“源”不是指电源。而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用 2K~5K 的方波去驱动它。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。
(低电平触发有源蜂鸣器模块)
我们在这里介绍的蜂鸣器是一种被动式蜂鸣器。它不能由其自身驱动,而是由外部脉冲频率驱动。不同的频率产生不同的声音 我们可以使用Arduino来编码歌曲的旋律,这实际上非常有趣和简单。
产品参数
- 小板PCB尺寸:32mm*14mm
- 采用S8550三级管驱动
- 工作电压:3.3V-5V
- 设有固定螺栓孔,方面安装
- 当I/O口输入低电平时,蜂鸣器发声
(低电平触发有源蜂鸣器模块 正面)
接线方式
蜂鸣器 <------> Arduino Nano
GND <------> GND I/O <------> 9
VCC <------> 3.3V
程序测试——蜂鸣器发出声音
蜂鸣器处于低电平时,会发出声音,而处于高电平,停止声音发出,即不发出声音。编写蜂鸣器声音响一秒再停一秒,以此来检测蜂鸣器是否能正常发出声音
Mixly图形化编程程序 (蜂鸣器发出声音程序)
程序实现代码
蜂鸣器发出声音
- void setup(){
- pinMode(9, OUTPUT);
- }
- void loop(){
- digitalWrite(9,LOW);
- delay(1000);
- digitalWrite(9,HIGH);
- delay(1000);
- }
复制代码蜂鸣器制作音乐小案例——两只老虎
七声音阶音乐盒应用编写了音乐中的七个基准音(do、re、mi、fa、sol、la、si),这七个基准音对应的频率数组为:1046.5,1174.7,1318.5,1396.9,1568,1760,1975.5。 使用步长模块与数组模块,让蜂鸣器首先能发出七个基准音,七个基准音声音发出之后,停顿5秒,再次循环播放七个基准音。
(蜂鸣器发出七个基准音程序)
程序实现代码
- float tonelist[]={1046.5,1174.7,1318.5,1396.9,1568,1760,1975.5};
- void setup(){
- pinMode(9, OUTPUT);
- }
- void loop(){
- for (int i = 1; i <= 7; i = i + (1)) {
- tone(9,tonelist[(int)(i - 1)]);
- delay(1000);
- }
- noTone(9);
- digitalWrite(9,HIGH);
- delay(5000);
- }
复制代码(两只老虎简谱)
根据简谱,也可对两只老虎的音符、节拍、高音与低音音调设置数值,然后再编程程序。
(两只老虎总程序)
- volatile float speed;
- volatile long updown;
- float tonelist[]={1046.5,1174.7,1318.5,1396.9,1568,1760,1975.5};
- long musiclist[]={1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,2,5,1,2,5,1};
- long highlist[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0};
- long updownlist[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- float rhythmlist[]={1,1,1,1,1,1,1,1,1,1,2,1,1,2,0.5,0.5,0.5,0.5,1,1,0.5,0.5,0.5,0.5,1,1,1,1,2,1,1,2};
- void setup(){
- speed = 120.0;
- updown = 0;
- pinMode(9, OUTPUT);
- }
- void loop(){
- for (int i = 1; i <= 32; i = i + (1)) {
- tone(9,(tonelist[(int)(musiclist[(int)(i - 1)] - 1)] * pow(2, highlist[(int)(i - 1)])) * pow(2, (updownlist[(int)(i - 1)] + updown) / 12.0));
- delay(((1000 * (60 / speed)) * rhythmlist[(int)(i - 1)]));
- noTone(9);
- digitalWrite(9,HIGH);
- delay(10);
- }
- }
复制代码 |