《Arduino实战》——3.1 认识模拟电路

简介:

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

3.1 认识模拟电路

Arduino实战
在前一章中,已尝试使用了可以闭合和断开的按键,但如果你想测定一个模拟量的输入,比如一张照片或者一个力敏电阻,那又该怎么办呢?如果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中模拟输入和模拟输出引脚的分辨率、电压范围和引脚编号。

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

fa6ebb905ae6172b27a8d57c94ef942ed84aeab5

3.1.2 读取电位器

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

222c64e71edeb0ea4fa91df0f5fc854ab807d41e

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

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

975aa9c089315f80456d38369b40d8a2edd10710

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

3.1.3 连接硬件

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

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

70e94a05bb62dcb049515059221d1b19b8c404a3

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

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

3.1.4 读取电位器的程序

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

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

c20f78d9d7185d5e026ff4fe97b423b4c56e4a58

你并不需要在初始化函数中将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。

d54afb3152aab37055d267f072dc49ded5fa0612
相关文章
|
9月前
|
传感器
【单片机】单片机课程设计(测温打铃)附完整代码和电路图
【单片机】单片机课程设计(测温打铃)附完整代码和电路图
143 0
|
9月前
|
传感器
Arduino实现超声波测距
Arduino实现超声波测距
|
10月前
|
传感器 机器人
LabVIEW控制Arduino实现超声波测距(进阶篇—5)
超声波测距是一种传统而实用的非接触测量方法,与激光、涡流和无线电测距方法相比,具有不受外界光及电磁场等因素影响的优点,在比较恶劣的环境中也具有一定的适应能力,且结构简单、成本低,因此在工业控制、建筑测量、机器人定位方面有广泛的应用。
|
10月前
|
传感器 数据采集 机器人
LabVIEW控制Arduino实现红外测距(进阶篇—6)
红外测距是一种非直接接触的测量方式,由于其结构简单、抗干扰性强、成本低等优点,在测量测绘上得到广泛的运用。
|
11月前
|
Python
使用proteus实现51单片机的串口通讯仿真
使用proteus实现51单片机的串口通讯仿真
433 0
|
芯片
基于单片机的抢答器设计 proteus仿真资料
基于单片机的抢答器设计 proteus仿真资料
基于单片机的抢答器设计 proteus仿真资料
单片机原理及其应用——单片机控制单个发光二极管实验(附超详细的C51单片机实验教程)
单片机原理及其应用——单片机控制单个发光二极管实验(附超详细的C51单片机实验教程)
单片机原理及其应用——单片机控制单个发光二极管实验(附超详细的C51单片机实验教程)
电赛校赛-三相逆变电源设计(单片机部分--C52仿真测频+串口发送机与串口接收机)
电赛校赛-三相逆变电源设计(单片机部分--C52仿真测频+串口发送机与串口接收机)
184 0
电赛校赛-三相逆变电源设计(单片机部分--C52仿真测频+串口发送机与串口接收机)
基于单片机的红绿黄灯设计(单片机实验交通灯设计)
基于单片机的红绿黄灯设计(单片机实验交通灯设计)
基于单片机的红绿黄灯设计(单片机实验交通灯设计)