《Arduino实战》——3.2 压电换能器

3.2 压电换能器

Arduino实战
你是否收到过一种生日贺卡,在它打开时就会播放一段有点走调的Pointer Sisters的《I'm So Excited》旋律。压电换能器还应用于很多其他的设备,比如移动电话、门铃以及水下声呐。

图3-6展示了一个典型的可以用于发声的压电换能器,它与那些在音乐贺卡中使用的类似。

它们是如何工作的?术语压电的意思就是“由压力产生电流”。当一个压电设备受到挤压时,它就会产生一个电荷,如图3-7所示。换能器在与Arduino一起使用时的一个典型应用就是将其作为敲击传感器。

当换能器受到击打或碰撞时,Arduino就可以检测到,并触发相应的动作,比如点亮一个LED或者用扬声器发出一个声响。

相反地,当一个电荷施加到压电换能器上时,它就会发生形变,如图3-8所示。如果你对其施加一个以一定频率变化的电压,换能器的振动就会使其发出声音或者旋律。用在音乐贺卡或者蜂鸣器中的压电换能器正是在这种模式下工作。

正如你所看到的那样,一个压电换能器既可以作为输入设备,也可以作为输出设备。以压电换能器为核心的声呐设备,就以这样的方式发出一个声音信号并接收回声。这就是潜艇电影中最让人熟悉的经典探测音。通过测定探测音从发出到接收到回声的时间,就可以计算出距离目标有多远。我们将在第6章讲解另外一个示例,那时会将Devantech SRF05作为测距仪。

现在你已经对压电换能器有了一个大概的了解,并知道了它如何工作,下面就要将压电换能器作为一个敲击传感器了。当Arduino检测到敲击传感器受到击打或者碰撞时,它就会点亮一个LED。

3.2.1 电路图

对于这个项目,你需要下列元件:

1片Arduino
1块面包板和一些跳线
1个稳压二极管,0.5 W 5.1 V(我们使用的是BZX55C5V)
1个无外壳的压电换能器(我们使用了一个在eBay上购买的27 mm的型号)
1个1 MΩ电阻
你要使用一个不带外壳的压电换能器,这会比带外壳的效果更好。

受到敲击时,压电换能器会产生非常高的电压,足以对Arduino造成损坏。稳压二极管可以保护Arduino免受高电压的损坏,而电阻的作用是泄放来自换能器的高电压。

图3-9展示了完整的电路图。注意稳压二极管的的方向,还有如何将其与电阻和压电换能器并联。


图3-9 一个压电换能器连接到A0模拟输入引脚。当换能器受到敲击时,稳压二极管可以保护Arduino以免其受到换能器产生的高电压的损坏

现在你已经看过了电路图,可以在面包板上组装这个电路了。

3.2.2 连接硬件

电路除了Arduino以外还有3个主要元件:一个5.1 V的稳压二极管,一个1 MΩ的电阻和一个压电换能器。

如前文所述,稳压二极管和电阻都并联在压电换能器上。

下面就可以将器件安放到面包板上了,要特别注意压电换能器的极性,极性可以通过由低熔点焊料焊接在上面的一红一黑两条线来区分。黑线连接到电路中的GND部分,红色连接到Arduino的模拟输入引脚A0。

稳压二极管需要以正确的方式连接才能保护Arduino的模拟输入端电压不超过5 V。按照惯例,在二极管的阴极或者负极,一般会设计有一条黑色的条纹,这一极会被连接到GND,但在你的电路中,你要将二极管反向偏置,也就是将二极管的阴极连接到电路的正极。稳压二极管的工作原理是,只在超过反向击穿电压的时候导通,在本例中击穿电压是5.1 V。任何超过5.1 V的电压都会导致二极管反向导通并与GND短路,从而保护Arduino的输入端。

当这三个元件都连接到面包板上之后,你最终就可以连接Arduino的GND和模拟输入端A0了。图3-10展示了组装完成后的电路,包括到Arduino的连接。

当所有器件组装完毕并连接到Arduino之后,你就可以开始写程序来让Arduino与压电换能器协作了。

二极管

二极管是一种双端器件,电流沿一个方向流过时电阻很小,而沿另一个方向流过时电阻很大(理想情况下是无穷大)。稳压二极管是一种特殊的二极管,它被设计成在超过击穿电压(膝点电压)时允许电流反向通过。

3.2.3 用于测定压电换能器输出的程序

首先,你要使用如代码清单3-1所示的程序。如果你没有保存之前的程序,请创建一个新的程序文件并输入这些代码。

接着,你将Arduino连接到USB接口,烧写你的程序并启动串口监视器。最初,串口监视器应该只输出0值。现在,尝试着轻轻敲打或挤压换能器,然后观察传感器的数值如何改变。一个典型的输出如图3-11所示。

当换能器受到击打时,这个数值会快速攀升到最大值,然后跌落回0。不同的数值反映了换能器受到挤压或击打的强烈程度,值越大说明其受到的挤压越猛烈。如果什么都没观测到,请检查你的连接,尤其注意检查换能器和稳压二极管的方向。

下面你要修改程序,只把超过一个既定阈值的数据打印出来。可以在现有的电位器程序上修改,也可以创建一个新的程序。新版的程序见下列代码清单,将这个程序保存并命名为threshold。

代码清单3-2 压电换能器的阈值

在代码清单3-2中,将阈值设定为200。在程序的循环中,只会输出高于阈值的传感器数值。

接下来让我们来测试这个程序。

3.2.4 烧写和测试

在输入程序清单3-2中的代码后,校验使其通过编译,然后将它写入到Arduino中。打开串口监视器,然后以不同的力度敲击换能器。你会发现敲击的力度越大,返回的传感器数值越高。图3-12给出了一些示例输出。

现在你已经有一个程序检测模拟输入端A0的数值,并在其超过一个既定的阈值时输出这个数值。接下来,你要让它做一些更有意义的事情,而不仅仅是报告一个数值。如果你将一个扬声器添加到电路中,你就可以让Arduino在压电换能器受到敲击时播放一个音符或者音阶,这就是你接下来要做的事情。

3.2.5 添加一个扬声器的电路

在本节中,你需要添加以下两个器件:

1个8Ω的小型扬声器
1个1 kΩ的电阻
图3-13所示的电路在图3-9的基础上添加了扬声器和电阻。

现在就把电路组装到一块面包板上吧。

3.2.6 连接硬件

将扬声器通过一个1 kΩ电阻连接到8号数字引脚,这就完成了硬件连接。组装完成后的电路如图3-14所示。

我们需要在扬声器上焊接两根跳线,因为扬声器原来的线太软,以至于无法直接插入到面包板上。如果你没有焊接设备,可以用一些绝缘胶带将导线固定在跳线上,也可以使用鳄鱼夹。

当所有的元件都连接好后,就可以编写程序了。

3.2.7 产生一个音阶的程序

代码清单3-3给出了新程序的代码,其中定义了3个新变量。

toneDuration指定每个音阶持续的时间,单位是毫秒(ms)。

toneFrequency设定了所播放音阶的频率,单位是赫兹(Hz)(中央C的频率是262 Hz)。

speakerPin指定了扬声器所连接到的引脚。

代码清单3-3 用扬声器产生一个音阶

在这个程序中,使用的是Arduino内置的库函数,tone,它接受3个参数。

tone (pin, frequency, duration)

pin是输出音阶的引脚;frequency是输出音阶的频率;duration是一个音阶播放的时间的毫秒数。如果没有给定duration参数,这个音阶就会一直播放,直到发出noTone指令:

noTone(pin)

在这个程序中,只有当sensorValue大于阈值时才会播放一个音阶。现在让我们来试一下吧。

3.2.8 烧写和测试

当程序顺利通过编译之后,将Arduino连接到计算机并为它写入程序。尝试着敲击压电换能器,然后听扬声器是否发出了声响。如果没有发出声音,请检查所有的连接。

提示:如果检查了所有的连接,而扬声器始终没有发出任何声音,请尝试将toneDuration从40增大到1000,或者改变toneFrequency的值。

当一切都正常工作后,你可以修改变量toneFrequency的值来让扬声器演奏不同的音符。频率越高,音调越高;频率越低,音调越低。你还可以尝试修改变量threshold的值。这个值越小,就可以用越轻柔的力量敲击换能器,来让扬声器播放一个音阶。

在下一节中,将会给电路添加更多的压电换能器,这样就可以制作一架电子琴,而换能器则作为琴键。

时间: 2024-11-05 16:32:51

《Arduino实战》——3.2 压电换能器的相关文章

《Arduino实战》——第3章 简单项目:输入和输出

第3章 简单项目:输入和输出 Arduino实战本章涵盖的内容 着眼于模拟世界读取一个模拟输入使用扬声器发声搭建一架五声音阶电子琴在前一章中,我们了解了Arduino数字化的一面,循序渐进地搭建了一系列项目,展示了Arduino的输入.输出和中断等特性.在本章,我们将着眼于Arduino的另一面,看看它如何与我们周围的世界交流. 基本上,我们周边的世界可以分成两部分--模拟和数字--在这一章我们将研究与模拟世界的交互.让我们再从一个简单的元件开始,电位器,它可以为Arduino提供模拟量的输入.

《Arduino实战》——导读

前言 Arduino实战我的Arduino之旅起始于2009年夏天在Rails Underground大会上听取Elise Huard的讲演-"物联网"之后.那次会议之后,我立即购买了一本Massimo Banzi所著的<Getting Started with Arduino>1(O'Reilly, 2008).在返程的火车上,我就把它从头到尾读了一遍. 不久以后,我购买了我的第一片Arduino,开始玩.做实验并搭建小项目.我的第一个大项目是一个避障机器人,我在2010

《Arduino实战》——3.4 小结

3.4 小结 Arduino实战在这一章中,通过使用analogRead函数了解了Arduino的模拟输入功能,还尝试从电位器和压电换能器两种分立模拟器件中读取模拟量.本章还讲解了模拟信号是如何通过模数转换器(ADC)转换为可以被Arduino处理的数字信号的.这种方法使你能够可靠地从许多其他模拟设备中读取数据. 本章最后的项目中大量使用了analogRead函数,利用5个压电换能器制作了一架五声音阶电子琴,敲击不同的压电换能器就能演奏出不同的音符.尽管声音有点走调,但愿你依然能找到愿意聆听的人

《Arduino实战》——第3章 简单项目:输入和输出 3.1 认识模拟电路

第3章 简单项目:输入和输出 本章涵盖的内容 着眼于模拟世界 读取一个模拟输入 使用扬声器发声 搭建一架五声音阶电子琴 在前一章中,我们了解了Arduino数字化的一面,循序渐进地搭建了一系列项目,展示了Arduino的输入.输出和中断等特性.在本章,我们将着眼于Arduino的另一面,看看它如何与我们周围的世界交流. 基本上,我们周边的世界可以分成两部分--模拟和数字--在这一章我们将研究与模拟世界的交互.让我们再从一个简单的元件开始,电位器,它可以为Arduino提供模拟量的输入.接下来,我

《Arduino实战》——1.5 熟悉IDE

1.5 熟悉IDE Arduino实战1.5 熟悉IDE如前文所述,IDE是基于Processing构建的,其设计目标就是易于学习和易于使用.IDE提供了供你编写和上传程序到Arduino所需的所有东西. 1.5.1 主编辑器 IDE软件打开后,会自动创建一个空的程序,这个程序会临时以当前日期来命名.在你保存这个程序的时候,还可以给它改一个更合适的名字. 图1-8展示的是打开了一个程序的IDE界面,图中还对各种按钮和窗口做了标注.主编辑器顶部的工具栏包含了以下功能. Verify--检查程序是否

《Arduino实战》——1.8 小结

1.8 小结 Arduino实战这是十分忙碌的一章,我们讲解了大量的背景知识.我们从学习一点Arduino的历史开始,介绍它在意大利互动设计学院的起源.我们了解了Arduino Uno和Mega这两种板卡的引脚和主要元件布局.我们还简要介绍了其他几种版本的Arduino,包括LilyPad和Seeeduino Film,并介绍了它们能提供什么特性.你搭建了开发环境并写了第一个Arduino程序,让Arduino走进你的生活. 我们详细讲解了Arduino的IDE软件并知道了一个Arduino程序

《Arduino实战》——2.1 准备开始

2.1 准备开始 Arduino实战为了完成你的反应速度计,你需要一些元件: 1块面包板,用来组装你的项目一些跳线,用来将原件连接到一起6个红色LED,你也可以用其他你喜欢的颜色1个绿色LED1个按钮式瞬时接触开关7个电阻,每只阻值约180Ω,或者比180Ω稍大一些1个10 kΩ的电阻元件如图2-1所示. 接下来,你要在面包板上搭电路了. 2.1.1 面包板的使用 在项目的开发阶段,面包板是组装电路的极佳选择,因为它使你可以很容易地移动和增加元件. 一块面包板的典型布局如图2-2所示.面包板由许

《Arduino实战》——第1章 你好Arduino

第1章 你好Arduino Arduino实战本章涵盖的内容 Arduino的历史*Arduino硬件*硬件和软件安装*第一个闪烁的LED*Arduino能用来干嘛?这个问题的答案是丰富多彩的.Arduino已经被广泛应用于各种项目中. 制作诸如Pong和Space Invaders1这类各位儿时甚至父辈年轻时玩的游戏.这些游戏的画面都是单色的,音效也比较简单.制作循迹机器人,并学习机器人的基本原理.循迹机器人也可以用于工厂和仓库,它们可以按照既定的轨迹搬运货物.制作光电竖琴,通过手的挥舞来演奏

《Arduino实战》——2.5 小结

2.5 小结 Arduino实战在本章,你了解了如何开发一个典型的项目,从一个简单的程序开始,然后逐步增加其复杂性.在开发一个项目的过程中,每次只做出较少的修改,可以使其更容易调试和发现错误.如果程序不能正确地通过编译或者显示的结果与预期不符,你只需要着眼于最近修改和增添的代码就可以了. 这个项目将你带入了数字电路的世界,这里的输入输出只有两个状态:高电平和低电平.你已经探索了一些Arduino的功能,包括可用的函数,以及强大的中断功能.在之后的章节中,你会更加深入地研究几个数字引脚及其具有的更