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

    xiaoxiao2024-04-17  7

    本节书摘来自异步社区《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中模拟输入和模拟输出引脚的分辨率、电压范围和引脚编号。

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

    3.1.2 读取电位器

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

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

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

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

    3.1.3 连接硬件

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

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

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

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

    3.1.4 读取电位器的程序

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

    代码清单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。

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)