Entradas anal贸gicas Arduino

En la 煤ltima lecci贸n, analizamos la medici贸n y salida de una se帽al digital desde un microcontrolador, y en esta analizaremos una se帽al anal贸gica. Como hemos dicho m谩s de una vez antes, el microcontrolador tiene entradas anal贸gicas, es decir entradas conectadas a ADC – convertidor anal贸gico a digital (ADC). En las placas Arduino, estos son pines marcados con la letra A. Escrib铆 el nombre entre comillas por una raz贸n, porque no todos los pines son solo anal贸gicos: por ejemplo, en la placa Nano, los pines A0-A5 tambi茅n son digitales ordinarios, y tienen la capacidad de medir una se帽al anal贸gica. Los pines A6 y A7 son puramente anal贸gicos.

驴Por qu茅 leer una se帽al anal贸gica? El microcontrolador puede actuar como un volt铆metro, medir su propio voltaje de suministro, por ejemplo, de una bater铆a, puede medir la corriente a trav茅s de una derivaci贸n (si conoce la ley de Ohm), puede medir la resistencia y tambi茅n trabajar con potenci贸metros (torsional, lineal, joysticks), que son 贸rganos de gobierno muy vers谩tiles.


Leer una se帽al anal贸gica.

Los pines 鈥渁nal贸gicos鈥 pueden tomar un voltaje de 0 (GND) como un voltaje de referencia y convertirlo en un valor digital. Nuestro ADC tiene una capacidad de 10 bits, es decir obtenemos el voltaje medido como un n煤mero de 0 a 1023. La funci贸n que digitaliza el voltaje se llama analogRead ( pin ), esta funci贸n toma un n煤mero de pin anal贸gico como argumento y devuelve el valor resultante. El pin en s铆 debe configurarse como ENTRADA (input), perm铆tame recordarle que, por defecto, todos los pines est谩n configurados de esta manera. 

Por cierto, el pin se indica como 芦anal贸gico禄:

  • Solo un n煤mero de pin (por ejemplo, 0 )
  • N煤mero con la letra A (por ejemplo, A0 )
  • N煤mero de serie GPIO: A0 – pin 14 , A1 – 15 pines … A7 – 21

A continuaci贸n se muestra un ejemplo de pin de sondeo A0.

int value1 = analogRead ( 0 ) ;  // lee el voltaje del pin A0
int value2 = analogRead ( A0 ) ; // lee el voltaje del pin A0
int value3 = analogRead ( 14 ) ; // lee el voltaje del pin A0

Potenci贸metros.

Los pines anal贸gicos y los ADC en general se usan con mucha frecuencia cuando se trabaja con potenci贸metros (tambi茅n conocidos como resistencia variable o re贸stato). 10 bits del ADC le permiten establecer los valores del programa de 0 a 1023 (o m煤ltiplos de ellos), es decir, para influir en el curso del programa, cambiar algunas configuraciones y similares. Un potenci贸metro siempre tiene tres patas: dos extremas y una central. Juntos, este es un divisor de voltaje que le permite cambiar el voltaje en el rango de 0-VCC:

Los potenci贸metros en arduino
Los potenci贸metros en arduino

El potenci贸metro est谩 conectado al Arduino as铆, el pin central a cualquier pin A, los extremos a GND y alimentaci贸n. La direcci贸n del cambio de valor depende del orden de GND y la conexi贸n de alimentaci贸n. En t茅rminos de resistencia, lea la nota sobre los divisores de voltaje a continuaci贸n en este tutorial. La mayor铆a de las veces, se instalan potenci贸metros con una resistencia de 10 k惟 para microcontroladores, pero el rango es, en principio, muy amplio: de 1 k惟 a 100 k惟. Cuanto m谩s, m谩s ruidosa vendr谩 la se帽al, y si toma menos, las p茅rdidas de corriente ir谩n al calentamiento del potenci贸metro, y esto no es bueno para nadie.

Conexon de potenciometros a Arduino
Conex贸n de potenci贸metros a Arduino

Voltaje de referencia.

La tensi贸n de referencia juega un papel importante en la medici贸n de una se帽al anal贸gica, porque de ella depende la tensi贸n m谩xima medida y, en general, la posibilidad y precisi贸n de convertir el valor obtenido de 0-1023 a Voltios. Examinemos la siguiente funci贸n: analogReference ( modo ) donde modo:

  • DEFAULT: la tensi贸n de referencia es igual a la tensi贸n de alimentaci贸n del Mc. Activo por defecto
  • INTERNAL: referencia incorporada de 1,1 V para ATmega168 o ATmega328P y 2,56 V para ATmega8
  • INTERNAL1V1: referencia incorporada de 1,1 V ( solo Arduino Mega )
  • INTERNAL2V56: referencia incorporada de 2,56 V ( solo Arduino Mega )
  • EXTERNAL: la referencia ser谩 el voltaje aplicado al pin AREF

Despu茅s de cambiar la fuente de referencia de voltaje (llamando analogReference() ) las primeras mediciones pueden ser inestables (muy ruidosas).

El valor de funci贸n 1023 analogRead () corresponder谩 a la tensi贸n de referencia seleccionada o una tensi贸n superior a ella, pero no superior a 5,5 V, que quemar谩 la placa. Es decir, bajo el modo DEFAULT podemos digitalizar el voltaje desde 0 hasta el voltaje VCC. Si la tensi贸n de alimentaci贸n es de 4,5 voltios y suministramos 4,5 voltios, obtendremos el valor digitalizado de 1023. Si suministramos 5 voltios, obtendremos nuevamente 1023, porque est谩 encima de la referencia. Esta regla funciona a煤n m谩s, lo principal es no superar los 5,5 voltios. C贸mo medir un voltaje m谩s alto (12 voltios por ejemplo) te lo dir茅 en una lecci贸n separada.

Con respecto a la precisi贸n: cuando funciona con 5V y modo DEFAULT obtenemos una precisi贸n de medici贸n de voltaje (5/1024) ~ 4.9 milivoltios. Mediante la colocaci贸n de INTERNAL podemos medir voltaje de 0 V a 1,1 V con una precisi贸n de (1,1 / 1024) ~ 0,98 milivoltios. Bastante bien, especialmente cuando se juega con un divisor de voltaje.

En cuanto a la referencia de tensi贸n externa. No utilice un voltaje inferior a 0 V o superior a 5,5 V como referencia externa al pin AREF. Tambi茅n cuando se usa el EXTERNAL necesita llamar analogReference ( EXTERNAL) antes de la llamada a la funci贸n analogRead () de lo contrario, el microcontrolador podr铆a resultar da帽ado. Puede conectar la referencia al pin AREF a trav茅s de una resistencia de ~ 5 k惟, pero como la entrada AREF tiene su propia resistencia de 32 k惟, la referencia real ser谩, por ejemplo, 2.5 * 32 / (32 + 5) = ~ 2.2 V.


Medici贸n de voltaje.

0-5 voltios

Un ejemplo simple de c贸mo medir el voltaje en un pin anal贸gico y convertirlo a Voltios. La placa est谩 alimentada por 5V.

float voltage = (float)(analogRead(0) * 5.0) / 1024;

Entonces la variable Voltaje obtiene un valor en voltios, de 0 a 5. Un poco m谩s adelante, hablaremos de medidas m谩s precisas usando algunos trucos.

驴Por qu茅 estamos dividiendo por 1024 , y no por 1023 , si el valor m谩ximo de medici贸n con el ADC es 1023? La respuesta la puede encontrar en la hoja de datos del Mc.

El ADC toma un bit durante la conversi贸n, es decir, en principio, puede medir 5.0 Voltios solo como 4.995V, que se obtendr谩 usando la f贸rmula anterior:1023 * 5/1024 == 4.995 ….. Por lo tanto, debe dividir por 1024, si alguien le pregunta por qu茅, debe ir a leer la hoja de datos (datasheet) del Mc.

Mucho m谩s de 5 voltios

Para medir un voltaje de CC superior a 5 voltios, debe usar un divisor de voltaje con resistencias. Diagrama de conexi贸n, en el que la placa se alimenta de 12V al pin Vin y puede medir el voltaje de una fuente (por ejemplo, una bater铆a):

Divisor de tensi贸n en Arduino
Divisor de tensi贸n en Arduino

C贸digo para convertir el valor de lectura anal贸gica a voltios teniendo en cuenta el divisor de voltaje:

// GND -- [ R2 ] -- A0 -- [ R1 ] -- VIN
#define VREF 5.1      // el voltaje exacto en el pin de 5V (en este caso depende del estabilizador en la placa Arduino)
#define DIV_R1 10000  // valor exacto de la resistencia de 10k ohmios
#define DIV_R2 4700   // valor exacto de la resistencia de 4.7k ohmios
void setup() {
  float voltage = (float)analogRead(0) * VREF * ((DIV_R1 + DIV_R2) / DIV_R2) / 1024;
}
void loop() {}

驴C贸mo elegir / calcular un divisor de voltaje?

  • Seg煤n la hoja de datos de ATmega, la suma de R1 + R2 no se recomienda de m谩s de 10 kOhmios para lograr la m谩xima precisi贸n de medici贸n. Al mismo tiempo, una corriente notable fluir谩 a trav茅s del divisor de 10 k惟, que es fundamental para los dispositivos aut贸nomos (lea a continuaci贸n). Si el dispositivo est谩 alimentado por la red o por una bater铆a, pero el Mc no se usa en modo de suspensi贸n, ajuste el divisor a 10 kOhm y no lo dude. Tambi茅n se recomienda colocar un condensador entre GND y el pin anal贸gico para reducir el ruido.
  • Si el dispositivo es alimentado por una bater铆a y el microcontrolador est谩 芦dormido禄: deje que la bater铆a sea de 12V, entonces una corriente de 1.2 mA fluir谩 a trav茅s del divisor de 10 k惟, de acuerdo con la ley de Ohm. El microcontrolador en s铆 mismo en modo de suspensi贸n consume ~ 1 渭A, 隆que es mil veces menos! De hecho, puede tomar un divisor con una resistencia total mucho mayor (pero no m谩s de 20 M惟, la resistencia interna del propio ADC), pero aseg煤rese de colocar un capacitor de ~ 0.1 渭F entre el pin anal贸gico y GND. As铆, por ejemplo, cuando R1 + R2 = 10 M惟 (no se olvide del condensador), la corriente a trav茅s del divisor ser谩 de 1,2 渭A, 隆que es mucho mejor!
  • El factor divisor es ( R1 + R2 ) / R2. El coeficiente debe ser tal que al dividir el voltaje medido por 茅l, se obtenga no m谩s de 5 voltios. En mi ejemplo( 10 + 4,7 ) / 4,7 ~ 3,13. Quiero medir una bater铆a de litio con un voltaje m谩ximo de 12,8 voltios. 12,8 / 3,13 ~ 4 voltios – excelente. Por ejemplo, para medir 36 voltios, tomar铆a un divisor con valores de 100k y 10k.

Mucho menos de 5 voltios

Para obtener mediciones de bajo voltaje m谩s precisas, puede conectar el pin AREF a una referencia de bajo voltaje (discutido anteriormente) para 芦estrechar禄 el rango de ADC. La fuente puede ser tanto externa como interna, por ejemplo, cambiando la referencia a 1.1V internos (analogReference ( INTERNAL ) ) puede medir voltaje de 0 a 1,1 voltios con una precisi贸n de 1,1 / 1024 ~ 1,01 mV.


Deja un comentario