ARD05 – Entradas analógicas

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

De la misma forma que se pueden obtener salidas analógicas, Arduino también puede detectar entradas analógicas. Una señal analógica de entrada es la proporcionada por un sensor o componente que puede presentar diversos valores de resistencia. Ya no es un pulsador (o interruptor o similar) que sólo admite dos estados (activado o desactivado). Ahora se trata de un elemento que puede ofrecer múltiples valores. El ejemplo más simple es un potenciómetro, o resistencia variable, que se controla a mano. También hay otras resistencias cuyo valor depende de la luz recibida (las llamadas LDR, que pueden actuar como sensores de luz), o de la temperatura (los termistores), etc.

En la figura 5.1 vemos algunos de estos elementos.

Figura 5.1. Resistencias variables en base a diferentes factores.

Figura 5.1. Resistencias variables en base a diferentes factores.

Figura 5.1. De izquierda a derecha un termistor (resistencia cuyo valor depende de la temperatura), un potenciómetro (resistencia cuyo valor se puede ajustar a mano) y una LDR o fotorresistencia (resistencia cuyo valor depende de la luz). En este capítulo vamos a usar un potenciómetro. Esto se debe a que, como su valor lo variamos a mano, girando un eje, tenemos un control directo, lo que nos permite familiarizarnos mejor con el concepto de “entrada analógica”. Más adelante emplearemos otros sensores. Para nuetro montaje vamos a usar un potenciómetro de 10 KΩ. Esto significa que entre los dos terminales de los extremos siempre hay una resistencia fija de 10KΩ, siendo variable la que hay entre el terminal central y cualquiera de los extremos. Si conectamos el terminal central a una entrada analógica (las que están marcadas de A0 a A5), Arduino será capaz de leer diferentes valores según la posición del eje del potenciómetro. Convenientemente programado, Arduino será capaz de responder a esa señal con una salida que también puede ser analógica, como vimos en el artículo anterior.

EL CIRCUITO

El esquema electrónico es muy simple, como ves en la figura 5.2.

Figura 5.2. El esquema teórico de este artículo.

Figura 5.2. El esquema teórico de este artículo.

En la figura 5.3 vemos el montaje físico (cableado) del circuito.

Figura 5.3. El montaje cableado de este artículo.

Figura 5.3. El montaje cableado de este artículo.

CONSIDERACIÓN IMPORTANTE. Como ya sabemos del capítulo anterior, una salida “analógica” de Arduino se establece en un valor que varía entre 0 y 255. Las entradas “analógicas” también son establecidas en un número discreto de valores pero, en el caso de las entradas, se consideran entre 0 y 1023. Esto supone un problema, porque una entrada media (pongamos 512, que correspondería, más o menos, a girar el eje del potenciómetro a la mitad de su recorrido) debe hacerse corresponde con una salida “media” (digamos 127). En general, debe hacerse la salida proporcional a la entrada, para que el sistema tenga lógica. En el sketch vamos a conocer una función del lenguaje Arduino que nos permite hacer esto muy fácilmente.

EL SKETCH

Este sketch está diseñado para comprender cómo podemos leer una entrada analógica y generar, en base a esta, una salida analógica. El listado completo del sketch es el siguiente:

Vamos a analizarlo por bloques, porque introducimos varios conceptos que debemos tener claros. El primer bloque declara, como ya es habitual, las constantes y variables que vamos a usar en el sketch. La constante POT se referirá al pin 0 analógico, que es, como vemos en la figura 29, donde va conectado el terminal central del potenciometro. Cuando conectamos un potenciómetro en Arduino para tomar una entrada analógica, usaremos uno de 10 KΩ o más. Esta resistencia es siempre fija entre los terminales extermos del potenciómetro, variando la resistencia entre el terminal central y cada uno de los extremos. Como los extremos van conectados al positivo de 5 V y a la masa, si usáramos un potenciómetro de menos de 10 KΩ podríamos llegar a causar un cortocircuito que dañase nuestra placa Arduino. Al girar el potenciómetro, el terminal central dará más o menos tensión (de un máximo de 5V) al pin de Arduino donde esté conectado (en nuestro caso, el A0).

La otra constante, llamada LED, se refiere al pin donde conectaremos la salida para el LED. Como vemos es una de las salidas que, en principio, son digitales pero, al ser de las marcadas como PWM se puede usar como salida analógica, como vimos en el capítulo anterior.

La variable entrada recogerá el valor del potenciómetro y la variable salida contendrá el valor enviado al LED. En el segundo bloque vemos sólo una línea de código, que establece el pin 9 como de salida (OUTPUT). Como sabemos, los pines digitales pueden configurarse como de salida o de entrada.

No hay definición para el pin A0, al que conectamos el potenciómentro, porque los pines analógicos son SIEMPRE de entrada.

USO DE PINES DE ARDUINO.

  • Los pines analógicos (de A0 a A5) son siempre entradas de señal analógica.
  • Los pines digitales (de 0 a 13) se pueden configurar como de entrada o de salida.
  • Los pines digitales que admiten PWM (3, 5, 6, 9, 10 y 11) se pueden configurar como de entrada o de salida. Si se configuran como de entrada, SIEMPRE se leen señales digitales; si se configuran como de salida, se pueden enviar señales digitales o analógicas.

Dentro del bloque de ejecución (el loop) vemos que lo primero que se hace es leer el valor del potenciómetro, mediante la función analogRead().

Dado que las entradas “analógicas” se representan internamente como un valor de 0 a 1023, y las salidas “analógicas” se interpretan como un valor de 0 a 255, es neceesario “mapear” el valor de entrada con el de salida. Esto significa asignarle a la salida un valor proporcional a la entrada. De esto se ocupa la función map(), que recibe cinco argumentos obligatorios:

  • El primero es la variable que contiene el valor de entrada.
  • El segundo y el tercero determinan el mínimo y el máximo para el valor de entrada. Es decir, el valor de entrada siempre estará entre estos límites. En el caso de las entradas analógicas estos siempre irán de 0 a 1023.
  • El cuarto y quinto parámetros marcan los límites de la señal de salida que, como sabemos, va de 0 a 255.

La función devuelve el valor de salida que corresponda a la entrada actual. Por ejemplo, supongamos que el potenciómetro está al 30 % de su recorrido. Eso significa que el valor de entrada será de 307. Por lo tanto, el valor de salida deberá ser 77. La función map() se encarga de calcular este valor de salida para nosotros.

Para acabar el cuerpo del bucle, el valor de salida calculado por map() es enviado al LED.

Como siempre, el código se puede optimizar, en este caso ahorrando bastantes líneas, como vemos a continuación:

La función map() es usada, comúnmente, para calcular una salida proporcional a una entrada, pero se puede emplear para calcular cualquier valor proporcional a otro, según veremos más adelante.

Como vemos, Arduino no maneja realmente valores analógicos, dado que un parámetro analógico, hablando con propiedad, tiene un número infinito de posibles valores. Las entradas “analógicas” de Arduino reconocen “solo” 1024 valores. Las salidas “analógicas”, 256 valores. Esto se debe a que los ordenadores, en última instancia, solo manejan datos binarios. La entradas se “miden” con diez bits (2 ^ 10 = 1024) y las salidas con ocho (2 ^ 8 = 256). Sin embargo, para los propósitos de Arduino, esto es suficiente.

     

2 comentarios:

  1. Pingback: ARD-SYN 02 – La sintaxis de Arduino (II) » eldesvandejose.com

  2. Pingback: ARD-SYN 03 – La sintaxis de Arduino (III) » eldesvandejose.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *