82929| 40
|
[入门教程] Arduino教程 07 报警器「DFR0100」 |
【本篇课程内容于 2024年9月20日更新】 >课程配套Arduino器材:Arduino入门套件 DFR0100 这里我们要接触一个新的电子元件——蜂鸣器,从字面意思就可以知道,这是一个会发声的元件。这次做一个报警器,通过连接蜂鸣器到Arduino数字输出引脚,并配合相应的程序就可以产生报警器的声音。其原理是利用正弦波产生不同频率的声音。如果再结合一个LED,配合同样的正弦波产生灯光的话,就是一个完整的声光报警器了。 元件清单硬件连接按下图连接图连接,注意本项目蜂鸣器为无源蜂鸣器无正负之分。蜂鸣器的两个引脚分别接到GND和数字口8。 示例代码输入下面的样例代码,这段代码引自《beginning-arduino》一书。 样例代码6-1:
下载程序完成后,你会听到平滑的一高一低的报警声,如同汽车报警器。 代码回顾首先,定义两个变量: float sinVal; int toneVal; 浮点型变量sinVal用来存储正弦值,正弦波呈现一个波浪形的变化,变化比较均匀,所以我们选用正弦波的变化来作为我们声音频率的变换,toneVal从sinVal变量中获得数值,并把它转换为所需要的频率。 这里用的是sin()函数,一个数学函数,可以算出一个角度的正弦值,这个函数采用弧度单位。如图2,当弧度位于区间0~π,也就是角度位于区间0~180度时,sin()值为正。因为我们不想让函数值出现负数,所以设置for循环在0~179之间,也就是0≤x<180。
函数sin()用的弧度单位,不是角度单位。要通过公式(3.1412/180)将角度转为弧度:
这样sinVal的值将会根据角度的变化产生像波浪一样的起伏,之后,将这个值转变成相应的报警声音的频率:
这里有个知识点——浮点型值转换为整型。
把sinVal乘以1000,转换为整型后再加上2000赋值给变量toneVal,现在toneVal就是一个适合声音频率了。
下面我们来介绍一下tone相关的三个函数
硬件回顾蜂鸣器蜂鸣器其实就是一种会发声的电子元件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 压电式蜂鸣器和电磁式蜂鸣器区别压电式蜂鸣器是以压电陶瓷的压电效应,来带动金属片的振动而发声。当受到外力导致压电材料发生形变时压电材料会产生电荷。电磁式的蜂鸣器,则是利用通电导体会产生磁场的特性,通电时将金属振动膜吸下,不通电时依振动膜的弹力弹回。不太明白也没太大关系,不影响我们使用。压电式蜂鸣器需要比较高的电压才能有足够的音压,一般建议为9V以上。电磁式蜂鸣器用1.5V就可以发出85dB以上的音压了,但消耗电流会大大的高于压电式蜂鸣器。所以还是建议初学者使用电磁式蜂鸣器。 有源蜂鸣器和无源蜂鸣器区别无论是压电式蜂鸣器还是电磁式蜂鸣器,都有有源蜂鸣器和无源蜂鸣器两种区分。 在套件中,我们为初学者选用的蜂鸣器类型是无源蜂鸣器,可以演奏出不同的音乐效果。 课后练习
示例代码.rar |
第二个小作业: 结合项目4我做出来了按一下按键后报警同时亮灯,但是我有两个小问题想请教一下 1. 报警完之后我想要buzzer静音,所以设置了tone(8,0),可是蜂鸣器还是会响。 2.代码要怎么改才能实现灯还有buzzer触发n轮? 具体点就是从报警器从最小声到最大到最小声响三遍。 附我改写的代码:
|
|
课后第一题 红灯和蜂鸣器
|
步骤6第一个我已经完成,代码如下:
但是联线的时候发现一个问题, LED的ground必须接在arduino uno上方的GND,如果使用prototyping shield也必须接在那里。如果接在prototyping 右边红色部分的GND,灯是不会亮的。 请问一下这是怎么回事啊? 谢谢 ! |
本帖最后由 木龙小驴 于 2016-2-23 21:31 编辑 警报真的好难听,弄个小曲儿
|