(一)简介
在实际的电路中,电压值往往不是精确的整数值,而是带有无限不循环小数的模拟值。然而,计算机无法直接处理这样的模拟值,因此需要将它们转换为数字值。Arduino Uno通过内置的ADC来实现这一转换。
Arduino UNO有5个模拟引脚,A0-A5ADC的工作原理
- 电压范围:Arduino Uno的ADC可以读取0到5V范围内的电压。
- 分辨率:Arduino Uno的ADC具有10位的分辨率,这意味着它可以将0到5V的电压范围分成1024(2^10)个等份。因此,每个等份代表的电压值为5V/1024。
- 转换过程:当模拟电压施加到Arduino Uno的模拟引脚上时,ADC会读取该电压值,并将其转换为最接近的等分值。例如,如果电压为3V,则ADC会将其转换为最接近的整数值,即614(3V/5V×1024≈614.4,取整为614)。
- Arduino Uno的模拟输入引脚具有固定的参考电压(通常为5V或3.3V,取决于开发板的供电电压),并且其ADC(模数转换器)具有固定的分辨率(通常为10位,即能够区分0到1023之间的值)。
- 如果待测电压超过了Arduino模拟输入的参考电压,或者待测电压范围过大,直接使用可能会导致测量不准确或损坏开发板。此时,通过串联一个或多个电阻来分压,可以将待测电压降低到适合Arduino测量的范围内。
(二) 程序
①Arduino Uno的模拟输入范围(5V)被ADC(模数转换器)分成1023个单位后,每个单位对应的电压值
5/1024=0.0048875855327468
- #define BV 0.0048875855327468
②定义变量
- int v; //定义analog所测得的数字(1~1023)
- double lv; //定义所测电阻的电压
- int RR = 2; //电阻数量
③初始化函数
启用串口,波特率为9600
将A0端口设置为输入模式
- void setup() {
- Serial.begin(9600);
- pinMode(A0,INPUT);
- }
④循环函数
读取A0端口的模拟量,保存到变量v内
变量v再乘上每份ADC的电压BV,将结果保存到lv内
串口打印变量lv的值
- voidloop() {
- v = analogRead(A0);
- lv = v * BV*2;
- Serial.println(lv);
- }
⑤程序
- #defineBV0.0048875855327468 //analog将5V分成了1023个单位——5/1023
- int v; //定义analog所测得的数字(1~1023)
- double lv; //定义所测电阻的电压
- int RR = 2; //电阻数量
- voidsetup() {
- Serial.begin(9600);
- pinMode(A0,INPUT);
- }
- voidloop() {
- v = analogRead(A0);
- lv = v * BV*2;
- Serial.println(lv);
- }
⑥实验现象