Detalle del prototipo donde se pueden ver las conexiones a cada uno de los terminales del LED

Programar un LED RGB con GPIO Zero

En este artículo veremos lo sencillo que es actuar sobre un prototipo formado únicamente por un LED RGB desde la Raspberry Pi. Necesitaremos lo siguiente:

  • Una Raspberry Pi con las librerías GPIO Zero para Python 3 instaladas.
  • Una placa de prototipado
  • Tres resistores de 220 Ω
  • Cuatro cables de interconexión
  • Un LED RGB de cátodo común
  • Opcional: placa de expansión.

Para programar este prototipo usaremos desde Python la librería GPIO Zero, de la que ya os hablé en su día en un artículo especialmente dedicado a ello. Veréis lo simple que queda el código.

LED GB de cátodo común

Un LED RGB de cátodo común es un dispositivo de 4 terminales: tres ánodos para los colores básicos (rojo, verde y azul) y un cátodo para tierra o masa. Cuando ponemos uno de los ánodos a nivel alto, “1” lógico o a 3,3 V en el caso de la Raspberry Pi, la parte del LED de ese color conduce la corriente y el LED brillará del color activado. Combinando valores altos en los ánodos de cada color, obtendremos un tono diferente.

Para distinguir cuál es el cátodo del LED buscaremos una pata más larga que las demás: ése es. A un lado tendremos una pata más corta (el ánodo rojo) y al otro lado del cátodo nos quedan otros dos ánodos: verde y azul, en ese orden.

LED RGB de cátodo común. La pata más larga es el cátodo; a su izquierda el rojo, y a la derecha el verde y el azul en ese orden, comenzando desde el cátodo.
LED RGB de cátodo común. La pata más larga es el cátodo; a su izquierda el ánodo rojo, y a la derecha los ánodos verde y azul en ese orden, comenzando desde el cátodo.

Lo que debemos tener en cuenta, como siempre, es que la corriente debe limitarse. Podemos limitarla de dos formas: con una resistor en cada ánodo, o bien uno sólo en el cátodo común. Yo he escogido la configuración recomendada por el fabricante de mi LED, que es usar 3 resistores de 220 Ω cada uno.

El prototipo

Si tenemos la placa de prototipado conectada a la Raspberry Pi a través de cualquier medio (como una placa de expansión, por ejemplo) la Raspberry Pi debe estar apagada.

Conectamos el LED a 4 filas consecutivas, vacías, de nuestra placa.

  • Conectaremos ahora a la fila del cátodo un cable negro que llevaremos a una de las hileras de masa, o tierra, de nuestra placa de prototipado.
  • A cada ánodo conectaremos un resistor de 220 Ω
  • En los otros extremos de los resistores, conectaremos cables rojo (al ánodo rojo), verde (al verde) y azul (al azul)

Por último conectaremos los cables a pines GPIO:

  • El cable rojo al pin GPIO 12, o a una fila conectada a dicho PIN si usamos una placa de expansión
  • El cable verde al pin GPIO 16, o a una fila conectada a dicho PIN si usamos una placa de expansión
  • El cable azul pin GPIO 20, o a una fila conectada a dicho PIN si usamos una placa de expansión
  • Si no estamos usando placa de expansión de las que alimentan las hileras de referencia (+, -) deberemos conectar el cable negro a uno de los pines etiquetados como GND.

El prototipo y el diagrama quedan como sigue:

Detalle del prototipo donde se pueden ver las conexiones a cada uno de los terminales del LED
Detalle del prototipo donde se pueden ver las conexiones a cada uno de los terminales del LED
Otra vista del prototipo. Sacad partido a las dos partes de la placa para trabajar con más comodidad.
Otra vista del prototipo. Sacad partido a las dos partes de la placa para trabajar con más comodidad.
Prototipo para experimentar con el LED RGB
Prototipo para experimentar con el LED RGB

Lo que haremos ahora será ponernos a experimentar con la librería GPIO Zero.

Jugando con el LED a través de GPIO Zero

Es el momento de conectar la Raspberry Pi a la red eléctrica y abrir una ventana de intérprete de Python 3.

En ella, importaremos el componente de la librería indicándole al objeto en qué pines GPIO está conectado, rojo primero, verde después y azul por último:

from gpiozero import RGBLED

led = RGBLED (12, 16, 20)

Ahora escribiremos las siguientes sentencias para ver cómo el LED se enciende en colores rojo, verde, azul, morado, amarillo, cyan…:

led.on ()
led.off ()
led.color = (1, 0, 0)
led.color = (0, 1, 0)
led.color = (0, 0, 1)
led.color = (1, 0, 1)
led.color = (1, 1, 0)
led.color = (0, 1, 1)

Como habéis visto hay funciones directas para encenderlos (en blanco, su terna de color sería (1, 1, 1)), y apagarlos completamente (equivaldría a fijar su color a la terna (0, 0, 0)).

Además, el objeto proporciona tres enteros llamados led.red, led.green y led.blue, con los que podemos consultar el estado de cada uno de los ánodos, y también fijar un valor para encenderlo y apagarlo. Ejecuta las siguientes líneas; observarás que además de encenderse de color azul los resultados que devuelve IDLE son los esperados:

led.blue = 1
led.blue
1
led.blue = 0
led.blue
0

Atención también a la sentencia led.blink, que hará parpadear el LED. Le podremos indicar el tiempo de encendido, el tiempo de apagado, el tiempo que tarda en encenderse, el tiempo que tarda en apagarse, el color en estado encendido, el color en estado apagado, el número de repeticiones (infinitas si se omite,…):

led.blink (1, 1, 0.5, 0.25, (0, 1, 0), (1, 0, 0))

El resultado es el de este Vine (¡tengo cuenta en Vine! → encontradme como PItando):

Referencias

Documentación del componente en GPIO Zero: http://gpiozero.readthedocs.org/en/v1.1.0/api_output.html#rgbled

Ejercicios

  1. Es posible que hayas visto que los colores no tienen la tonalidad esperada: el amarillo puede parecer un poco verdoso; el blanco un poco azulado, etc. Y, si te fijas en el Vine, verás que salen tonos de amarillo y cyan cuando realmente estoy intentando hacerlo parpadear entre verde y rojo. ¿Puedes dar una explicación a estas cosas?, ¿cómo se podría resolver? Os lo cuento el jueves que viene.
  2. Combina este montaje con el del sensor de proximidad para hacer un sensor de aparcamiento: si el objeto está más lejos de 15 cm, el LED se enciende verde; si está entre 15 y 5 cm, se enciende en amarillo; si está más cerca de 5 cm, que se encienda en rojo. El jueves que viene también.

¿Te animas con estos pequeños retos?


Espero que haya resultado interesante, además de por el propio dispositivo, como primer ejemplo de lo fácil que nos puede resultar programar un dispositivo con GPIO Zero. Puedes dejarme cualquier comentario en esta misma entrada, enviándome cualquier comentario a través delformulario de contacto, o bien a través de la dirección de correo que allí encontrarás.

 

Deja un comentario

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