En la entrega pasada hicimos un ejercicio usando entradas digitales, con un pulsador y un led, es decir, que aprendimos a utilizar las entradas y salidas digitales.

 

Pero el ejercicio era muy sencillo… ¿Cómo que he aprendido a usar entradas y salidas digitales? Pues sí, es el mismo principio para lo que quieras, puedes tanto encender un led como activar cualquier sistema que se controle con pulsos digitales.

Hoy hablaremos de las entradas analógicas, pero antes de eso, veamos en que consiste teóricamente.

¿Qué es una señal analógica?

Es aquella señal que mantiene valores continuos durante un intervalo de tiempo con una amplitud determinada.

Ya que sabemos esto ¿Cómo lee estas señales un Arduino?

El Arduino posee un conversor analógico-digital interno para poder interpretarlo adecuadamente, así que es importante tener en cuenta como el Arduino realiza este procedimiento para poder manejar los datos de la mejor manera (esto no solo sucede con los Arduinos, sino con cualquier microcontrolador que permita entradas analógicas).

El Arduino digitaliza la señal, y la traduce en N bits, los valores digitales se evalúa 2^N (N en este caso es el número de bits) por lo que si la resolución del Arduino es de 10bits la forma en que recibe los datos seria 2^10 =1024.

En el caso de Arduino UNO y Mega utilizan una resolución de 10Bits y el Arduino DUE usa una resolución de 12Bits, esto significa que si usamos un Arduino UNO por ejemplo y el voltaje de entrada es de 0 – 5V, el Arduino leerá 0V = 0 y 5V = 1023 o si usamos un DUE el Arduino leerá 0V = 0 y 5V = 4095, en función a eso es que realizamos los cálculos para lo que necesitemos hacer.

Esto para el caso de que la fuente de alimentación sea de 5V. Cuando el voltaje es menor, Arduino cuenta con un pin externo llamado AREF (referencia analógica), que permite conectar una tensión de referencia externa, esta tensión es la que será comparada en los pines analógicos como máximo (es importante considerar que ese valor AREF tiene que estar comprendido entre 0 – 5V), también a nivel de software tenemos una función llamada analogReference(tipo), si queremos tomar el valor de AREF, colocamos en tipo EXTERNAL del siguiente modo: analogReference(EXTERNAL).

¡Pero cuidado! esta función tienes que llamarla antes de leer los valores de voltaje, si no lo haces, puedes dañar tu Arduino, ¿No quieres eso verdad? También tienes que considerar algunas cosas más, usa preferiblemente 1V como menor valor a conectar en el AREF para tener una mejor respuesta, de igual manera, evita usar un sensor que use entradas negativas de voltaje y también, evita que la entrada de voltaje sea mayor de 5V, con estos detalles tienes mayor probabilidad que todo salga bien ¿ves que es muy fácil?

Ahora que tenemos este valor, si queremos mostrar el valor del voltaje que está enviando el sensor es necesario convertirlo nuevamente por medio de la siguiente formula:

Voltaje= (valorADC*5)/1023

En el caso de que el sensor envíe 5V al pin analógico (1023) la formula quedaría de la siguiente manera:

Voltaje=(1023*5)/1023 = 5

Si envía 2.5V (512) sería algo asi:

Voltaje = (512*5)/1023 = 2.502

Y así irá variando en función al voltaje de entrada.

Para demostrar esto de forma práctica, haremos un ejemplo de un potenciómetro en una entrada analógica. Es el mismo principio si quisiéramos conectar un sensor que transmita señales analógicas.

¿Qué es un potenciómetro?

 

De manera resumida, no es más que una resistencia variable, los podemos ver en dos grandes presentaciones: El potenciómetro rotatorio clásico y el de precisión (también llamados trimmers), para ambas presentaciones su funcionamiento es el mismo “variar el valor de la resistencia”. Su salida es leída por el Arduino e interpretada como explicamos previamente, empecemos…

 

Nota: Es importante que sepas que para poder ver las variaciones de un potenciómetro el pin a utilizar es el del medio, los pines de los extremos se usan para alimentación y tierra.

 

Imaginemos que en una empresa es necesario monitorear en tiempo real el valor arrojado por un sensor analógico, por lo que te contratan a ti para que con Arduino hagas una propuesta de funcionamiento, decides hacerlo con un potenciómetro, el cliente acepta tu propuesta y la pones en marcha.

Hardware

A nivel de hardware es muy sencillo, usaremos un Arduino UNO que tiene 10 bits de resolución, y el potenciómetro que simulara tu sensor analógico, podemos ver el diagrama de conexiones en la imagen.

 

 

No es necesario agregarle más nada, pero ¿qué pasa si es un sensor? Tienes que buscar la hoja de fabricante del sensor y verificar el circuito que te recomiendan, puede que tengas que añadir resistencias o condensadores, o simplemente conectarlo directamente, todo depende del sensor que vayas a utilizar. Teniendo en cuenta esto, vamos a ver el código,

 

Software

 

En cuanto al código, es bastante sencillo y aplica para cualquier sensor analógico que quieras conectar, hay sensores que tienen una relación (voltaje/temperatura por ejemplo) y se tiene que ver la hoja del fabricante, para saca un cálculo de relación adicional, pero ya desglosaremos ese tema en otro post. El código es el siguiente asumiendo que no necesitas cálculo de relación adicional:

//-----------------------------------------------------------------------------------------------------------
float valor; //Variable que lee los valores del potenciómetro
float voltaje; //Variable que muestra el valor transformado a voltaje
float variable; //Variable final del sensor en el 3 paso
void setup()
     {
     Serial.begin(9600);
     }
void loop()
     {
     // leemos el valor del potenciometro recibimos de 0 a 1023
     valor = analogRead(A0);
     //con el valor obtenido lo convertimos a voltaje por medio de la formulita que aprendimos hoy
     voltaje = valor * 5 / 1023;
     //Mostramos el valor del voltaje en el puerto serial
     Serial.println(voltaje);
     delay(1000); //tiempo para mostrar variaciones.
     }
//-------------------------------------------------------------------------------------------------------------

Con esto veremos constantemente en el puerto serial los valores de voltaje arrojados por el potenciómetro cada segundo, en este código, tenemos unas nuevos comandos:

  • analogRead: se utiliza para para leer el valor que arroja el potenciómetro.
  • serial.begin: inicia el puerto serial a una velocidad establecida por el programador (normalmente se usa 9600)
  • serial.println: muestra los datos que recibe en el puerto serie, considerando acarreo y salto de línea.

Nota: También existe un serial.print() pero este no posee salto de línea, para este caso en particular, es mejor ver la salida con su salto de línea.

A medida que avancemos iremos viendo nuevas palabras y nuevos comandos de programación, así lograremos incrementar nuestras posibilidades en todo lo que queremos hacer.

¿Te gustó? ¿Quieres más?

Espera nuestra próxima entrega en la que hablaremos de las salidas analógicas, Gracias por leernos, cualquier duda o sugerencia escríbelo en la caja de comentarios, con gusto te atenderemos.