Arduino电子制作基础⑦ 用模拟输入来读取电压

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节
第5篇:驱动电机并实现自动控制
第6篇:读取开关状态

 

*本文最初发表于2019年10月21日,对其重新编辑后再次发表。

在本系列连载的上一篇文章中,我们了解了如何利用数字输入来通过Arduino读取开关等电子器件的ON和OFF两种状态。

 

使用数字输入,可以将5V读取为“HIGH”,将0V读取为“LOW”。可以通过状态来判断开关是否已导通。但是,实际上电压不只是5V和0V,而是各种各样。例如,一节AA电池的电压为1.5V,日本家用插座的电压为100V。

Arduino支持模拟输入,以能够读取这些不同的电压。利用模拟输入功能,能够读取逐渐变化的电子元器件的状态。例如,使用“电位器”可以调节亮度或音量,也可以从温度传感器获取当前温度。

01

本文是本系列连载的最后一篇,将介绍使用“电位器”进行模拟输入的方法。

 

目次

  1. 将模拟值转换为数字值
  2. Arduino的模拟输入
  3. 可以调节电压的电位器
  4. 通过电位器实现模拟输入

 

将模拟值转换为数字值

实际的电压不是像1V或5V这样的精确值,而是像5.01342…V这样的无理数,其小数点后的数字是无限不循环的。这样的值是无法通过计算机直接处理的。因此,在电子电路中,会使用一种称为“AD转换器”的机制将模拟值转换为数字值,以便它们可以由计算机处理。Arduino作为标配搭载了AD转换器,可以读取模拟电压值并将其转换为数字值。

AD转换器会将对象电压等分。对于Arduino Uno而言,可以读取0-5V范围内的电压,并会将这些0-5V的电压值分成1023等份。AD转换器会将读取到的模拟电压值转换为最接近等分值的值。例如,如果电压为3V,则“614”是最接近的值。这个值将发送给Arduino使用。

11

读取到的多达1023个的整数值将会用于程序处理。但是,输入值不是电压值。如果想知道电压值,可以进行如下计算:

12

例如,如果来自AD转换器的值为“614”,则除以1023再乘以5即可得到约3V。

 

Arduino的模拟输入

要使用Arduino Uno的数字输入功能时,有从A0到A5的6个引脚可用。通过将电子元器件连接到这些引脚上,即可读取施加了多少电压。但是,引脚A4和A5也用于称为“I2”的数字通信。请注意,在连接传感器或显示器等使用I2数字通信的电子元器件时,这些引脚不能用于模拟输入。

21

 

可以调节电压的电位器

“电位器”是一个可以用来调节音量或照明亮度的电子部件。在电位器内部配有电阻元件,并有在电阻元件上移动的引脚。通过移动引脚可以改变电阻。

电位器通常会配有三个引脚。左右两侧的引脚安装在电阻器的两端。中间的引脚可以在电阻元件上移动。如果将中间引脚向右移动,则左侧和中间引脚之间的电阻会增加。反之,如果将中间引脚向左移动,则左侧和中间引脚之间的电阻会减小。

31

在上图中,电阻元件是线性的,但在旋转式的电位器中,内部电阻元件是圆形的。尽管形状不同,但它们的工作原理基本相同。

Arduino的模拟输入使用电压的变化进行输入。但是,由于电位器的电阻会发生变化,因此无法通过将其直接连接到Arduino来读取电位器的变化情况。因此,需要将电阻的变化转换为电压的变化。将电源和GND分别连接到电阻的左右引脚。这样,中间引脚的电压将根据引脚的位置发生变化。例如,假设将GND连接到左侧引脚,将电源(5V)连接到右侧引脚,当中间引脚向右移动,电压会升高,向左移动时,电压会降低。此外,由于左端为0V,右端为5V,因此可以使电压值在0V到5V的范围内变化。

只要将这个中间引脚与Arduino的模拟输入引脚相连接,就可以通过操作电位器来更改输入。

32

 

通过电位器实现模拟输入

现在,我们尝试使用电位器进行模拟输入。需要准备好以下电子部件:

电位器
41
电位器会记录可调范围内的电阻值。作为Arduino输入使用时,最好使用10kΩ的电位器。另外,如果电位器的旋转轴配有旋钮会更容易操作。

鳄鱼夹线
42
用于连接电位器,使用时用鳄鱼夹夹住电位器的引脚。点击链接可以看到我们使用的是2条红线和2条黑线配套销售的产品。
所需部件准备好以后,按如下方式连接。由于电位器无法插入面包板,因此需要使用鳄鱼夹线将其直接连接到Arduino。此时需要注意的是,要确保鳄鱼夹的金属部分不要接触相邻的夹子部分。

43

编写以下程序。


const int VOL_PIN = A0;

void setup(){
    Serial.begin( 9600 );
}

void loop(){
    int value;
    float volt;

    value = analogRead( VOL_PIN );

    volt = value * 5.0 / 1023.0;

    Serial.print( "Value: " );
    Serial.print( value );
    Serial.print( "  Volt: " );
    Serial.println( volt );


    delay( 500 );
}

要确认模拟输入引脚的连接状态时,请在第11行的“analogRead()”中指定对象引脚。这样,即可使用0到1023的值输入引脚电压值。如果想知道电压,请按第13行所示进行计算并将计算值转换为电压值。

将程序发送给Arduino并显示串行监视器。关于串行显示器的显示方法,请参考本系列连载的第6篇。

您可以看到,经AD转换器转换为数字的值显示在“Value:”之后,经计算并转换为电压的值显示在“Volt:”之后,当转动电位器时,值也随之变化。

44

* * *

总结

在本系列连载文章(共7篇)中,我们介绍了Arduino基础的用法。欢迎您根据这些内容来尝试制作各种电子作品或者让一些电子部件动起来。非常感谢您连续关注这个长达半年的连载系列,谢谢!

 

本系列连载的内容

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节
第5篇:驱动电机并实现自动控制
第6篇:读取开关状态
第7篇:用模拟输入来读取电压(本文)
总结:Arduino电子制作基础知识总结! 基于微控制器的电子制作基础之基础篇

福田和宏

作家,居住在日本札幌。喜欢撰写有关电子创作、电脑、Linux、智能手机等方面的文章。在为“Raspberry Pi Magazine”和“日经Linux”供稿。著有《这本书足够!Raspberry Pi超简单入门教程》(SOTECHSHA)、《学习各种电子元器件的控制!Arduino电子创作 实战教程》(SOTECHSHA)、《Arduino实用入门》(技术评论出版社)等书籍。 目前,创办了“札幌电子工艺部”(https://sapporo-elec.com/),这里汇集了众多电子创作发烧友,大家使用各自的电子技能创作各种作品。任何人都可以参加,也期待您的加入!

Arduino电子制作基础⑥ 读取开关状态

用Spresense扩大电子制作的广度!【第1篇】

相关文章

  1. Arduino电子制作基础⑥ 读取开关状态

  2. 12

    Arduino电子制作基础⑤ 驱动电机并实现自动控制

  3. 11_2

    Arduino电子制作基础④ 调节LED的亮度

  4. 01

    Arduino电子制作基础③ 用数字输出来控制LED点亮

  5. 01-1

    Arduino电子制作基础② Arduino的准备工作

  6. 01_new

    Arduino电子制作基础①让电子元器件动起来!

  7. 795316b92fc766b0181f6fef074f03fa

    从历史到使用方法的全面了解!人气微控制器开发板Arduino究竟是何方神圣?

基础知识

EMC


TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南
  • Raspberry Pi初学者指南
  • 技术动态
PAGE TOP