Las salidas analógicas introducen un elemento de control de gran interés para nuestros proyectos de robótica. Aunque es posible que si alguien aparece en este blog y lee salida analógica se va a quedar frío. En numerosas entradas hemos hablado de entradas y salidas digitales y de entradas analógicas. Nos faltaba una entrada relativa a las salidas analógicas.

Una salida analógica, siempre vista desde el microcontrolador o placa electrónica de control (como es cualquier placa compatible con arduino) es una salida provocada por una instrucción programada en la placa, que varía de forma continua. Normalmente la señal variable es un voltaje.

Sin embargo, las placas basadas en arduino no tienen salidas analógicas reales. Utilizan una simulación para generar una tensión variable entre 0 y 5 voltios. Una entrada digital puesta a nivel alto  en un determinado pin hace que en ese pin aparezcan 5V. Una salida analógica hace que aparezca una tensión variable, según decidamos. ¿Cómo hace esto arduino? Mediante una función denominada PWM.

Qué es PWM (Pulse Width Modulation)

Las placas de arduino sólo tienen salidas digitales, es decir, niveles altos o bajos de tensión. Pero algunos de los pines de la placa tienen una marca ~ que indica que se pueden usar como sucedáneos de salidas analógicas. ¿Cómo lo hace?. Utiliza ciclos de determinada frecuencia (500Hz) corta la tensión de salida del pin, que siempre es 5 V. En función del tiempo de ciclo en el que la tensión esté a 0V, se obtendrá una tensión resultante u otra. Esto se denomina modulación por ancho de pulso (PWM),

Las salidas analógicas

Representación gráfica de la función PWM

En el esquema se observa que estamos dejando 5V la cuarta parte del ciclo, el valor resultante de la tensión será de 5/4 = 1,25V.

¿Por qué decimos que en realidad no es una salida analógica?. Porque estamos empleando un truco. Para ver la diferencia, vamos a utilizar dos diodos LED, haremos que uno de ellos se encienda y se apague con una instrucción analogWrite (en lenguaje de bloques, escribir en el pin digital 11 el valor analógico 255) y para el otro vamos a usar un potenciómetro que alimente al diodo LED a través de su pin central, sin pasar por la placa. En este último caso tenemos una «salida» de tensión hacia el diodo que va a reducir y aumentar su luminosidad. Aquí el microcontrolador no hace nada. Ver más adelante el vídeo que hemos añadido.

¿ Cómo se programan las salidas analógicas?

Un programa que varía la tensión de alimentación del pin 11 para hacer variar la luminosidad de un LED se puede ver aquí:

Las salidas analógicas

Programa que hace variar la luminosidad de un LED

En este programa, después de alcanzar el LED su brillo máximo, se apaga y aumenta su brillo desde cero.

Y en el siguiente vídeo comparamos dos LED, uno de ellos alimentado por una placa compatible con arduino a través de un pin PWM, y a su lado un LED «alimentado» por la salida de tensión de un potenciómetro. Hay que notar que en este último caso, sólo utilizamos la placa para dar tensión, podríamos haber usado una pila.



Por otra parte, el programa que hace oscilar la iluminación del diodo LED de manera más suave requiere una ampliación del primero que hemos puesto. Si tienes una placa para probar, estudia cómo puedes modificarlo. Por ejemplo:

Las salidas analógicas

Segunda versión del programa de variación del brillo

Se puede observar que una vez alcanzado el brillo máximo, el LED no se apaga sino que se va apagando de forma paulatina.