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

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

第3章 简单项目:输入和输出

本章涵盖的内容

  • 着眼于模拟世界
  • 读取一个模拟输入
  • 使用扬声器发声
  • 搭建一架五声音阶电子琴

在前一章中,我们了解了Arduino数字化的一面,循序渐进地搭建了一系列项目,展示了Arduino的输入、输出和中断等特性。在本章,我们将着眼于Arduino的另一面,看看它如何与我们周围的世界交流。

基本上,我们周边的世界可以分成两部分——模拟和数字——在这一章我们将研究与模拟世界的交互。让我们再从一个简单的元件开始,电位器,它可以为Arduino提供模拟量的输入。接下来,我们要尝试添加一个传感器——压电换能器,它既可以提供模拟输入,也可以进行模拟输出。我们接下来会再添加4个压电换能器和一个小型扬声器来制作一架五声音阶电子琴。

以下是完成本章所需的元件:

  • 1片Arduino板卡
  • 1块面包板和一些跳线
  • 1个小型电位器(最好用微调型电位器,因为它很容易插进面包板)
  • 5个稳压二极管,0.5 W 5.1 V(我们使用的是BZX55C5V)
  • 5个带线的无外壳的压电换能器(敲击传感器)。
  • 5个1 MΩ(100万欧姆)电阻。
  • 1个1 kΩ电阻。
  • 1个8Ω的小型扬声器。

下面让我们开始学习模拟电路的基础知识吧。

3.1 认识模拟电路

在前一章中,已尝试使用了可以闭合和断开的按键,但如果你想测定一个模拟量的输入,比如一张照片或者一个力敏电阻,那又该怎么办呢?如果Arduino是一个纯数字的设备,那你将无法测定这些量,这也就限定了你所能制作的作品的范围。幸运的是,Arduino也已经具备了与模拟世界交互的能力。

Arduino可以调节一个LED的亮度,却不改变施加在LED上的电压,这是利用了一种专门的技术,称为脉冲宽度调制(PWM),或者简称脉宽调制(后面会详细讲解)。除了可以利用脉宽调制进行模拟输出以外,Arduino还可以接受0~5 V的模拟输入。

标准的Arduino有6个模拟输入引脚,标注为ANALOG IN A0、A1、A2、A3、A4、A5;另外,还有6个模拟输出引脚。

在本章,我们将集中精力讲解analogRead函数,而analogWrite函数我们留到以后的章节再讲解。

让我们来了解一下数字设备和模拟设备有什么区别吧。

3.1.1 模拟和数字有什么区别

那模拟世界与数字世界的区别是什么呢?在数字世界中,所有的事物都只有两个状态,开关只能是开或关,LED只能是亮或灭,你要么是醒着的,要么是睡着的。这些状态可以用多种方式表示,0或1,开或关,高或低。Arduino的数字引脚也以与之相同的方式工作,当设置为输出时,它们要么输出0 V,要么输出5 V,0 V就是逻辑零,5 V就是逻辑一。在模拟世界中,事物都有很多种取值。音乐中的音符涵盖了很多个频率,汽车加速的过程达到了很多个速度,一束正弦波在最大最小值之间平滑过渡,温度在最大最小值之间连续变化。

我们时常想要探索模拟的世界,Arduino有6个模拟输入引脚可以帮我们完成这个愿望。但Arduino仍然是一个数字设备,所以你需要一种方法,将输入的信号转换为数字表示。这项工作是由模数转换器(analog-to-digital convertor,ADC)完成的。表3-1列出了Arduino和Arduino Mega中模拟输入和模拟输出引脚的分辨率、电压范围和引脚编号。

在下一节中,要用电位器来提供一个手动可调的模拟输入,你可以通过串口监视器的显示,即时地观察到这些改变带来的效果。


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

3.1.2 读取电位器

为了观察Arduino的模拟输入功能是如何工作的,使用一个电位器是最简单的方法。电位器有各种不同的形状和尺寸,如图3-1所示,它们广泛应用于我们身边的各种设备中。如果你拥有一套带有音量旋钮的立体声音响,那它的音量调节很可能就是基于对一个电位器的旋转实现的。其他的例子包括使用电位器控制灯光的亮度,控制电炉或其他电热炊具的温度等。无论电位器的形状和尺寸如何,都可以通过某种方法改变它的电阻,无论是以线性方式还是以对数方式。


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

大多数电位器有3个引脚,中间的那个通常称为滑片,它通过移动接触器在一个固定电阻上的位置来改变电阻。对于本章,你需要一个电阻线性可调的电位器,而且要方便插接到面包板上,微调型电位器通常是一个理想的选择。

图3-2给出了电位器的电路符号。中部的箭头,也就是滑片,叠加在标准的电阻符号之上,用来表示这个电阻是可变的。


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

下面让我们动手将一个电位器连接到Arduino上。

3.1.3 连接硬件

现在你已经知道要用哪一种电位器了,让我们将它安装好吧。电路图如图3-3所示,电位器标记为R1,连接在5 V和地(GND)之间,滑片连接到模拟输入引脚A0。当你顺时针或逆时针旋转电位器的时候,就会将A0的电压在0~5 V之间调节。

将电位器插接到面包板上。中间的引脚通常是滑片,也就是你要连接到模拟输入端A0的引脚。组装完成后的电路如图3-4所示。


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

图3-4所示的电位器没有旋转柄,但可以插入一个微调工具来转动。如果没有电位器微调工具,你可以使用一个小型的一字型螺丝刀代替。

电位器连接好后,就可以开始写程序来读取它的数值了。

3.1.4 读取电位器的程序

下列代码清单给出了用于读取A0模拟引脚上0~5 V模拟数值的程序。

代码清单3-1 读取电位器


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

你并不需要在初始化函数中将sensotPin配置为输入,因为所有的模拟输入引脚已经默认配置成了输入。变量sensorValue存储了由analogRead函数读取到的数值,这个数值在0~1 023(含)之间,0表示0 V,1 023表示5 V。

两次读取之间10 ms的延时使得Arduino的模数转换器有时间来稳定并捕获到一个准确的数值。在Serial.println(sensorValue, DEC);这一行中的DEC指示println以十进制方式输出数据。其他的选项还包括HEX(十六进制)、BIN(二进制)和OCT(八进制)。

3.1.5 烧写和测试

将程序输入IDE之后,校验使之通过编译,然后将Arduino连接到你的计算机并将程序写入其中。打开IDE中的串口监视器,然后从头到尾地顺时针和逆时针旋转电位器。你应该可以看到串口监视器输出的数值随电位器的旋转而改变。示例输出如图3-5所示。

你现在知道了如何将一个值读入一个模拟输入引脚。下一节中,你要将Arduino连接到一个压电换能器。为此,你需要一些额外的元件,因为压电换能器可以产生非常高的电压,这可能会损坏Arduino。


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

上一篇:《用于物联网的Arduino项目开发:实用案例解析》—— 1.5 小结


下一篇:《用于物联网的Arduino项目开发:实用案例解析》—— 2.4 Arduino Yún的无线连接(WiFi)