🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 制作一个简易电压表 > 这个例子将向你展示如何读取A0口的**模拟信号值**,将它转换成电压值然后将电压输出到Arduino IDE。  > 译者注:本篇译文和1-1教程有一定的相似度,但是它们有一定差别。 ### 所需硬件 * Arduino 或 Genuino 板 * 10kΩ电位器 * 一些面包板线/杜邦线 ### 电路 ![图片来自官网](http://img.blog.csdn.net/20160418191207016) 将电位器上三个引脚用线连接到板子上的方法如下。首先,将电位器两侧的任意一个引脚连接到板子的**GND**。然后,将电位器另外一侧的引脚连接到板子上的**5V**接口。接着,将电位器中间的引脚连接到板子上的模拟输入引脚**A0**上。 通过转动电位器的轴,你能改变电位器划片两侧的电阻(整个电位器是由其中间引脚分开的变阻器)。这样一来就能改变中间引脚上的电压。当旋转转轴使中间引脚和5V引脚间的电阻接近于0时(中间引脚和另一侧GND引脚的电阻此时接近于10kΩ),由此中间引脚的电压就接近于5V。若相反(转到靠近GND的一侧),中间引脚的电压就接近于0V。中间引脚的电压就是你读出模拟信号的**原始值**。 Arduino和Genuino板有一个叫作**数模转换**(ADC)的内电路来将这个原始值转换为0到1023间的数值,这里称它为**模拟信号值**。当转轴向GND方向转到底,这时中间引脚的电压就是0V,因而模拟信号值也是0。当转轴向**VCC**(5V)方向转到底,这时中间引脚的电压就是5V,因而模拟信号值就是1023。如果转轴在之间某位置,那么返回值就是0-1023的某个数值。**[analogRead()](https://www.arduino.cc/en/Reference/AnalogRead)**通过模拟输入引脚的电压来返回一个从0到1023的值。 ### 原理图 ![这里写图片描述](http://img.blog.csdn.net/20160418191244792) ### 代码 在下面的工程中,**setup**函数所做的唯一事情就是使用**Serial.begin(9600)**。这个命令的作用是打开Arduino板和计算机的串口连接(波特率指定为9600)。 然后,在代码的loop主循环中你要建立一个**变量**以存储从电位器读出的值(由于这个值是从0到1023,用[int](https://www.arduino.cc/en/Reference/Int)这种数据类型最妥当): ~~~ int sensorValue = analogRead(A0); ~~~ 为了将模拟信号值(一个0-1023的数值)与引脚的电压关联起来,你应该再创建一个**浮点型(float)**变量,并且进行数学计算:5.0除以1023.0然后乘上模拟信号值就是你想要的电压值了: float voltage= sensorValue * (5.0 / 1023.0); 最后,你将需要在串口监视器中输出这个值。你可以在代码最后一行添加 Serial.println()这句代码来做到: ~~~ Serial.println(sensorValue) ~~~ 现在,当你打开Arduino IDE上的串口监视器(点击窗口右上侧的**放大镜图标**,或者按快捷键**Ctrl+Shift+M**),你可以看到一列稳定的数字流(0.0到5.0之间的某个数字)。转动电位器,你可以看到随着电位器的转动这些数值也立马跟着变化,这个数字就是A0口的实际电压。 ~~~ /* 制作一个简易电压表 读取A0口的模拟信号值,并且将它转换为实际电压值,并且把它输出到串口监视器。 小贴士:串口消息已经可以通过串口绘图器来图形化显示了,点选“工具>串口绘图”即可开启这项功能。 (Tools> Serial Plotter menu) 将电位器中间的引脚接到A0引脚,两侧的引脚接到板子上的+5V和GND引脚。 示例代码是共享的。 */ // setup函数在复位或通电后: void setup() { // 初始化串口连接,波特率9600: Serial.begin(9600); } // loop函数永远循环运行: void loop() { // 从A0口读取模拟输入值: int sensorValue = analogRead(A0); // 将模拟值(0-1023)转换为电压值(0-5v): float voltage = sensorValue * (5.0 / 1023.0); // 输出读取的值: Serial.println(voltage); } ~~~ ## 相关资料 [setup()](https://www.arduino.cc/en/Reference/Setup)  [loop()](https://www.arduino.cc/en/Reference/Loop)  [analogRead()](https://www.arduino.cc/en/Reference/AnalogRead)  [int](https://www.arduino.cc/en/Reference/Int)  [serial](https://www.arduino.cc/en/Reference/Serial)  [float](https://www.arduino.cc/en/Reference/Float)  [BareMinimum  Blink  DigitalReadSerial  Fade]( )