博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Arduino实战》——3.2 压电换能器
阅读量:6225 次
发布时间:2019-06-21

本文共 3512 字,大约阅读时间需要 11 分钟。

本节书摘来异步社区《Arduino实战》一书中的第3章,第3.2节,作者:【美】Martin Evans ,Joshua Noble ,Jordan Hochenbaum,更多章节内容可以访问云栖社区“异步社区”公众号查看

3.2 压电换能器

Arduino实战

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

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

3f97622d503b09257dadc7d2d155d245eb2c4725

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

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

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

screenshot

正如你所看到的那样,一个压电换能器既可以作为输入设备,也可以作为输出设备。以压电换能器为核心的声呐设备,就以这样的方式发出一个声音信号并接收回声。这就是潜艇电影中最让人熟悉的经典探测音。通过测定探测音从发出到接收到回声的时间,就可以计算出距离目标有多远。我们将在第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展示了完整的电路图。注意稳压二极管的的方向,还有如何将其与电阻和压电换能器并联。

767a8045554753317128f04b10b8d2497b72dcf6
图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的连接。

65bde22b24e268b6c585f5260b7eeec5bf77705a

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

二极管

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

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

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

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

232f7d1fb9fb62fdf4cff48886fcaa8a040ced34

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

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

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

9d18c1619844791b49a58d9a5b32124b8a87e0f8

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

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

3.2.4 烧写和测试

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

83cce8b9b9d75c389df2b7586d9239bab4ab58e2

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

3.2.5 添加一个扬声器的电路

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

1个8Ω的小型扬声器

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

a8628751eda9af0bbc1405adb463ea935c0a29f0

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

3.2.6 连接硬件

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

8f2416b811ecd9d4d751a96c7765ad60ca7140c1

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

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

3.2.7 产生一个音阶的程序

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

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

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

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

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

8920847c60c6891838a977e289f28187e99aa787

在这个程序中,使用的是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的值。这个值越小,就可以用越轻柔的力量敲击换能器,来让扬声器播放一个音阶。

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

转载地址:http://fofna.baihongyu.com/

你可能感兴趣的文章
【九度OJ1367】|【剑指offer24】二叉搜索树的后序遍历序列
查看>>
android4.4以上透明状态栏简单设置
查看>>
双十一流量洪峰 支撑阿里核心业务的云数据库揭秘
查看>>
oracle12C 重做日志
查看>>
数据结构与算法4
查看>>
Metasploit 之 modules 与plugins 区别
查看>>
mysql的常用函数
查看>>
完善的复数类(二十五)
查看>>
java书籍列表
查看>>
python初学-列表和字典的几个小例子
查看>>
我的友情链接
查看>>
数据分析入门及职业规划
查看>>
NTP时间服务器搭建
查看>>
计算某年各月的天数
查看>>
ModelForm理解简单运用(增删改查)
查看>>
看过但没写的题
查看>>
Html JavaScript网页制作与开发完全学习手册
查看>>
M2事后分析
查看>>
通过脚本进行双线路切换
查看>>
企业高级硬盘管理方案——RAID和LVM详解(图文)
查看>>