英语原文共 17 页,剩余内容已隐藏,支付完成后下载完整资料
第四章
简单的蜂鸣器和传感器
我们现在要让我们的Arduino使用压电式蜂鸣器做一些简单的声音。 使用Arduino能够产生声音是向我们正在创建的设备添加警报,警告哔声和警报通知的好方法。 自从Arduino IDE的0018版本以来,添加了一个新的命令,可以轻松创建音色。 我们还将了解如何使用压电作为传感器,并学习如何从其读取数据。 最后,我们将看一个光传感器。 您将学习如何制作简单的声音,并提供阅读模拟传感器的基本知识。
我们将通过简单的报警来学习如何在第十一个项目中使用tone()命令,类似于汽车报警。
第十一个项目 – 压电式蜂鸣器
通过将压电式蜂鸣器连接到数字输出引脚,我们将创建一个报警声。我们将使用与项目7中使用的相同的原理,通过创建正弦波来制造脉动灯。但这一次,我们用压电发声器或压电光盘代替LED。所需零件的完整列表可以在表4-1中找到。当您选择压电式发声器时,请确保您没有购买有源蜂鸣器,也就是说,内置振荡器。您需要一个使用交流电压而不是直流电的无源压电式测深仪。
所需部件
表4-1 项目11所需的零件
压电式发声器(或压电光盘) |
|
双向螺丝端子 |
|
实物连接
首先,请确保您的Arduino已从USB电缆拔出电源。现在用压电式蜂鸣器将其电线拧入螺丝端子。将螺丝端子连接到面包板,并将其连接到Arduino,如图4-1所示。接下来,将Arduino连接到USB电缆并将其加电。
图4-1 项目11 - 压电式发声器报警电路
输入代码
打开你的Arduino IDE并输入列表4-1中的代码:
程序清单4-1:项目11的程序代码
//项目11 - 压电式蜂鸣器
float sinVal;
int toneVal;
void setup() {
pinMode(8, OUTPUT);
}
void loop() {
for (int x=0; xlt;180; x ) {
// 将度数转换为弧度,然后获得sin值
sinVal = (sin(x*(3.1412/180)));
// 从sin值产生频率
toneVal = 2000 (int(sinVal*1000));
tone(8, toneVal);
delay(2);
}
}
上传代码后,会有一点延迟,然后压电将开始发出声音。如果一切都按计划运行,您将听到上升和下降的警号报警,类似于汽车报警。项目11的代码与项目7的代码几乎相同,因此我们来看看它是如何工作的。
项目11 - 压电发声器报警 - 代码概述
首先我们设置两个变量
float sinVal;
int toneVal;
sinVal浮点变量将保持正弦值,这将导致音调上升和下降的方式与项目7中的指示灯脉动相同。 toneVal变量将用于取值为sinVal,并将其转换为我们需要的频率。
在设置功能中,我们将数字引脚8设置为输出。
void setup() {
pinMode(8, OUTPUT);
}
然后我们移动到主循环。 如在项目7中,我们设置一个for循环从0到179,以确保正弦值不会消失。
for (int x=0; xlt;180; x ) {
我们将x的值转换为弧度,如项目7所示:
sinVal = (sin(x*(3.1412/180)));
然后将该值转换为适合报警声的频率。
toneVal = 2000 (int(sinVal*1000));
我们取2,000,并加上sinVal乘以1,000。这给了我们一个很好的频率范围,上升和下降的音调在正弦波上升和下降之间。
接下来,我们使用IDE 0018中引入的tone()命令来在压电测深仪中生成频率。
tone(8, toneVal)
tone()命令需要两个或三个参数,因此:
tone(pin, frequency)
tone(pin, frequency, duration)
引脚是用于输出到压电的数字引脚,频率是赫兹的频率。对于音调的长度,还有可选的持续时间参数(以毫秒为单位)。如果没有指定持续时间,音色将保持播放,直到播放不同的音色,或者使用noTone(pin)命令停止指定针脚上的音色生成。
最后,我们在频率变化之间延迟2毫秒,以确保正弦波以我们所需的速度上升和下降。
delay(2);
你可能想知道为什么我们没有将2毫秒放在tone()命令的duration参数中,像这样:
tone(8, toneVal, 2);
这是因为我们的for循环很短,无论如何,它会在不到2毫秒内改变频率,从而使持续时间参数无效。因此,在产生音调之后放置2毫秒的延迟,以确保它在至少2毫秒之前播放,然后再次执行for循环,并且音调再次发生变化。
稍后,当您了解如何将传感器连接到Arduino时,可以使用此报警生成原理。然后,当达到传感器阈值时,例如,如果有人太靠近超声波探测器或温度太高,您可以激活报警。
如果在toneVal计算和延迟时间长度上更改2,000和1,000的值,则可以生成不同的报警声。试一下,看看你能做些什么。
项目11 - 压电发声器报警 - 硬件概述
我们在这个项目中使用了两个新的组件,一个是螺丝端子和一个压电测深仪。 我们已经使用螺丝端子作为压电式发声器的导线,否则光盘将太薄而较软,无法插入面包板。 螺丝端子上将有针脚,以便将其推入面包板。
另一个新的组件是压电发声器或压电光盘(见图4-2)。这种简单的装置由结合到金属盘的陶瓷薄层组成。
图4-2 压电盘和Arduino(图片由Patrick H. Lauke / splintered.co.uk提供)
当施加机械应力时,压电材料,特别是晶体和某些陶瓷具有发电的能力。该效果在声音的生成和检测,高电压的产生,电子频率发生,微量平衡和光学组件的超细聚焦中发现有用。
该效果也是可逆的,因为如果在压电材料上施加电场,则会导致材料变形(在某些情况下高达0.1%)。
为了产生来自压电盘的声音,电场被非常快速地打开和关闭,使得材料变形,因此,当光盘再次弹出并再次回到(如微小的鼓)时,引起“点击”。 通过改变脉冲的频率,光盘每秒会变形数百次或数千次,引起嗡嗡声。通过改变点击的频率和它们之间的时间,可以产生特定的注释。
您还可以使用压电产生电场来测量运动或振动的能力。事实上,压电盘用作吉他或鼓套件的接触式麦克风。当我们制作爆震传感器时,我们将在项目 13中利用压电光盘的这一特征。在我们达成之前,我们将再做一个压电作为输出的项目。
第十二个项目 - 压电式声旋律播放器
如果不是使用压电式蜂鸣器制作烦人的闹钟声,而是使用它来播放旋律呢? 我们要让我们的Arduino玩“哦,我的亲爱的克莱门汀”。离开电路与项目11完全一样。我们只是要更改代码。
输入打码
打开你的Arduino IDE并输入列表中的代码4-2:
程序清单4-2:项目12的程序代码
// 项目12 - 压电发声器旋律播放器
#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 WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625
int tune[] = {
NOTE_F3, NOTE_F3, NOTE_F3, NOTE_C3,
NOTE_A3, NOTE_A3, NOTE_A3, NOTE_F3,
NOTE_F3, NOTE_A3, NOTE_C4, NOTE_C4,NOTE_AS3, NOTE_A3, NOTE_G3,
NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_AS3,
NOTE_A3, NOTE_G3, NOTE_A3, NOTE_F3,
NOTE_F3, NOTE_A3, NOTE_G3, NOTE_C3,NOTE_E3, NOTE_G3, NOTE_F3
};
float duration[] = {
EIGHTH SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
EIGHTH SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
EIGHTH SIXTEENTH, SIXTEENTH, QUARTER EIGHTH, EIGHTH, EIGHTH, EIGHTH, HALF,
EIGHTH, SIXTEENTH, QUARTER, QUARTER,
EIGHTH SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
EIGHTH SIXTEENTH, SIXTEENTH, QUARTER EIGHTH, EIGHTH, EIGHTH, SIXTEENTH, HALF
};
int length;
void setup() {
pinMode(8, OUTPUT);
length = sizeof(tune) / sizeof(tune[0]);
}
void loop() {
for (int x=0; xlt;length; x ) {
tone(8, tune[x]);
delay(1500 * duration[x]);
noTone(8);
}
delay(5000);
}
一旦你上传了代码,会有一点点延迟,然后你的压电将开始播放。 你可能认为它是“哦,我的亲爱的克莱门汀”。这个项目涉及到一些新的概念,让我们来看看。
项目12 - 压电式旋律播放器 - 代码概述
在查看项目12代码时,首先看到的是define指令的长列表。define指令对我们来说是新的东西,但也非常简单,非常有用。#define简单地定义了一个token(name)及其值。例如,考虑以下几点:
#define PI 3.141592653589793238462643383279
全文共12728字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[143977],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。