Está en la página 1de 7

Ejemplos con salidas analógicas

Hasta ahora hemos conectado siempre los LEDs a salidas digitales. Por
tanto, estos solo podían estar en dos estados: o apagados o encendidos.
Pero los LEDs (como tantos otros) son dispositivos analógicos. Esto
implica que pueden tener muchos más estados (de hecho, pueden
tener estados continuos). Es decir, que pueden iluminarse con muchas
intensidades diferentes y de forma gradual.

Ejemplo 6.15: Para conseguir cambiar la intensidad lumínica de un LED,


primero deberemos montar el circuito. La conexión del LED no tiene
ningún misterio: su terminal positivo ha de ir enchufado a un pin PWM
de nuestra placa Arduino (por ejemplo el nº 9) y su terminal negativo a
tierra. Se recomienda también conectarle en serie un divisor de tensión
(de unos 220 ohmios está bien). A continuación, debemos escribir el
sketch, el cual modificará el voltaje PWM ofrecido por la salida
analógica donde esté conectado el LED (recordemos, de 0 –valor
mínimo– a 255 –valor máximo–).
Ejemplo 6.17: Otro código que persigue el mismo objetivo que el
anterior, pero de una forma algo más compacta, es el siguiente. En él
también enviamos a través del canal serie la cantidad de brillo que
deseamos que tenga cada LED, pero lo hacemos enviando siempre el
brillo de los tres LEDS en cada “comando”. La idea es enviar los tres
brillos separados por comas o cualquier otro carácter (o cadena,
incluso), de tal forma que Arduino recoja uno tras otro el primer brillo,
el segundo y el tercero, para seguidamente asignarlos a los LEDs
adecuados.

Podemos jugar a establecer los valores PWM de los tres LEDs anteriores
(rojo, verde y azul) de forma que se puedan obtener otros colores. Para
ello es necesario colocar los tres LEDs físicamente muy próximos y es
recomendable, para conseguir un mejor efecto, difuminar la luz a través
de algún material tal como pañuelos de papel, por ejemplo. Si variamos
entonces el brillo de uno de los LEDs (o de dos o de los tres a la vez)
alteraremos la combinación total y obtendremos, a partir de los tres
colores primarios, una mezcla que producirá un color totalmente
diferente (amarillo, lila, naranja...). Incluso se pueden generar
transiciones de un color a otro si vamos modificando el brillo de cada
LED (mediante bucles “for”, por ejemplo).

Para generar colores no primarios, también se puede utilizar un LED


RGB, que no es más que un LED con cuatro terminales. Cuidado porque
pueden ser de dos tipos: si es de tipo “cátodo común” (como el
producto nº 9264 de Sparkfun), el terminal más largo se conecta a tierra,
y los tres restantes se conectan (a través de sendos divisores de tensión)
a diferentes pines PWM de nuestra placa Arduino: uno servirá para
recibir (usando un divisor de 220 Ω por ejemplo) la intensidad deseada
de color rojo, otro para recibir (usando otro divisor de 100 Ω por
ejemplo) la intensidad de color verde y otro para recibir (usando otro
divisor de 100 Ω) la intensidad de color azul. Si es de tipo “ánodo
común” (como el producto nº 159 de Adafruit), el terminal más largo se
conecta a la alimentación (5V) y los tres restantes se conectan
(igualmente a través de un divisor de tensión en serie) a tierra y además
a diferentes pines PWM de nuestra placa Arduino. Hay que tener en
cuenta además que en los LEDs de ánodo común, el valor enviado
mediante analogWrite() está invertido: un valor 0 hace brillar al máximo
el color correspondiente y un valor 255 lo apaga.
Una propuesta práctica de lo que acabamos de descubrir es la siguiente:
cuando estudiemos los sensores de temperatura en el próximo capítulo,
en vez de mostrar la temperatura a través del “Serial monitor” o algún
otro método similar poco original, podríamos tener un sistema de LEDs
mostrando un color rojo más intenso a más calor o un color azul más
intenso a más frío.

Otra idea menos útil pero muy llamativa es la de enviar valores PWM
aleatorios a uno o varios LEDs independientes (usando random(); como
segundo parámetro de analogWrite(); ) y entre envío y envío esperar
también un tiempo aleatorio (usando random(); como parámetro de
delay();). Realmente el efecto es psicodélico.

Ejemplo 6.19: Para finalizar este apartado, presentamos un código


donde interviene, además de un LED conectado al pin PWM nº 9, un
pulsador en configuración “pulldown” cuya cable de control está
conectado al pin digital nº 8. La novedad está en el bucle while: lo que
conseguimos con él es que mientras tengamos presionado el pulsador
y no hayamos llegado al máximo de brillo, el LED se irá iluminando al
ritmo que marque delay() debido al incremento del brillo de 5 puntos
en cada vuelta. Una vez dejemos de pulsar el botón, de forma brusca
apagaremos el LED.

¿Qué pasaría si en el código anterior sustituimos la palabra “while” por


la palabra “if”? Que el LED nunca se encenderá, porque aunque la
condición se cumpla y se haga el primer analogWrite() del interior del
“if”, justo después de este se vuelve a resetear la variable “brillo” a cero,
y por si fuera poco, el último analogWrite() apaga lo poco que se había
podido iluminar, por lo que en cada repetición del “loop” volveremos a
estar en las mismas.

También podría gustarte