RASPBERRY PY.

En la mayoría de los proyectos que necesitas para conectar tu Raspberry PI a un circuito eléctrico, necesitarás una placa protoboard y una serie de cableados machos y hembras para conectar los puertos GPIOs al circuito de entrada o salida.

Conectar un LED.

En este primer circuito vamos a conectar un diodo LED a nuestros conectores GPIO. Y con una salida simple de 3.3V alimentaremos el circuito externo que alimentará la LED junto a una resistencia limitadora.

circuito para conectar LED a la Raspberry PI

El sistema eléctrico formado por una resistencia de 330Ω y un diodo de tipo LED, se conectarán al puerto GPIO 6 y 12 respectivamente, es decir a los puertos GPIOs de GMD y GPIO18. A continuación te muestro el montaje real:

circuito para conectar LED a la Raspberry PI real

Como puedes ver en la imagen anterior, el ánodo del LED se conecta al puerto GPIO18, mientras que el cátodo se conecta a la resistencia limitadora por un extremo (mientras que el otro extremo de la resistencia limitadora se conecta al puerto GND de la placa Raspberry PI).

Ahora arranca tu Raspberry PI y cuando se haya encendido el sistema operativo, abre una nueva Terminal y ejecuta Python como administrador (sudo python3); escribe el siguiente código:

from gpiozero import LED
from signal import pause
red = LED(17)
red.blink()

Esto hará que el LED parpadee a una secuencia de 1 segundo activo y otro segundo apagado.

Este circuito y su programa es muy básico. Aunque no tiene secretos te lo explicaré:

Empezamos importando la librería ya instalada por defecto en tu Raspbian, gpiozero, que se encargará de organizar la estructura interna, identificar y utilizar los pines GPIOs de tu placa Raspberry PI. De ella, solo utilizaremos el módulo LED, que es un módulo específico para conectar un LED a un puerto GPIO.

La librería signal, nos servirá para definir gestores personalizados que serán ejecutados cuando una señal es recibida.

A continuación creamos una variable en python que nos guardará el número de puerto GPIO de la Raspberry PI. Esto se lo pasamos por parámetro al módulo LED de gpiozero, que basicamente es un reorganizador de los sistemas GPIO y los identifica.

Y para terminar le pasamos un método blink() a la variable y eso hará parpadear el diodo LED del circuito eléctrico a 1 segundo activo y otro segundo inactivo.

Método alternativo.
Existe otra forma de hacer que el LED del circuito parpadee y es gracias a la librería RPi.GPIO.

$ sudo python3
import RPi.GPIO as gpio
gpio.setmode(gpio.BCM)
gpio.setup(18,gpio.OUT)
gpio.output(18, True)
gpio.output(18, False)

El anterior código encenderá o apagará el LED a voluntad. Ahora utilizamos la librería RPi.GPIO integrada en tu versión de Rapsbian. Esta librería funciona diferente a la gpiozero, por lo que necesitamos llamar al objeto BCM para establecer el origen y el destino de los puertos GPIOs.

La opción BCM significa que se está refiriendo a los pines por el número de canal "Broadcom SOC", estos son los números asignados a los GPIOs. Por ejemplo, aunque el PIN asígnado a la Raspberry PI modelo B es el 12, el GPIO es el 18. Y con esta librería haces referencia a dicho nombre y no a su PIN real (pasa lo mismo con gpiozero que convierte el nombre del GPIO a su número de PIN).

Después hacemos que el foco se ponga en el puerto de salida GPIO18, con el setup. A continuación ya solo nos queda encenderlo con el método output, cambiando el valor a True o False, e indicando siempre el número de GPIO.

Controlar al LED.

Si bien los anteriores códigos eran sencillos, el tiempo de encendido o apagado del mismo, o lo establecía el sistema mediante la función blink(), o lo establecía el usuario con el método output() a True o False.

También podemos establecer el tiempo que queramos que esté encendido o apagado si importamos en nuestro proyecto el módulo time. Abre una nueva Terminal y entra en python en modo administrador:

$ sudo python
import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)
gpio.setup(18,gpio.OUT)
while True:
    gpio.output(18, True)
    time.sleep(1.5)
    gpio.output(18, False)
    time.sleep(0.5)

Este código hará que el diodo LED se mantenga encendido un segundo y medio y que se apague durante otro medio segundo. Y al estar en un bucle while, se repetirá el código mientras en la Terminal no pulsemos CRTL + C para interrumpir el programa.

Bloqueándo los puertos GPIOs.
Por seguridad los desarrolladores de aplicaciones y circuitos para makers, solemos cuando terminamos los programas, dejar los puertos GPIOs de la Raspberry PI en modo de entrada, así evitaremos un falso contacto al retirar el cableado de los pines de la Raspberry PI. Ten en cuenta que un cortocircuito temporal en cualquiera de los pines GPIO en modo de salida (tensión 3,3V) puede dañar tu placa Raspberry PI, por lo que usar éste método ayuda a evitar dichos fallos:

Partiendo del código anterior, si cerramos la aplicación, queremos que el sistema pase todos los puertos como entradas. Para ello vamos a usar una estructura Try y finally para el caso de cerrar el programa se ejecute la acción de poner los puertos como entradas.

$ sudo python
import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)
gpio.setup(18,gpio.OUT)
Try:
    while True:
        gpio.output(18, True)
        time.sleep(1.5)
        gpio.output(18, False)
        time.sleep(0.5)
finally:
    print("Puertos GPIOs como entrada!")
    gpio.cleanup()

Pedir al usuario un valor de intensidad.
Si bien ya controlamos a voluntad el apagado y el encendido del led, todavía podemos hacer mucho más. Por ejemplo podemos pedir al usuario un valor para que nos de intensidad que debe de devolver el LED.

Dentro de la librería RPi.GPIO tiene una modulación de ancho de pulsos (PWM), que te permite controlar la potencia del LED y por tanto su brillo. Así que, partiendo del mismo circuito anterior establecemos:

$sudo python ## abre una nueva terminal de Python
import RPi.GPIO as gpio
gpio.setmode(gpio.BCM)
gpio.setup(18, gpio.OUT)
potencia = gpio.PWM(18, 500)
potencia.start(100)
while True:
    escoge = int(input("Escoge un valor entre 0 y 100: "))
potencia.ChangeDutyCycle(escoge)

Cuando ejecutas el programa, este te va pidiendo que vayas introduciendo valores de entre 0 y 100 siendo 0 el menos valor de potencia y 100 el valor máximo. El LEd se iluminará de acuerdo a los valores introducidos.

Para salir del programa, al haber utilizado un bucle while, utiliza el atajo de teclado CRTL + C.

Como ves este programa utiliza los pulsos PWM al igual que los puertos digitales del Arduino UNO. PWM hace varíar la longitud de onda de los pulsos, manteniendo constante el número de pulsos por segundos (hercios por segundo = frecuencia).

Modulación por ancho de pulsos

El funcionamiento se basa en que, si variamos la frecuencia de PWM, modificaremos la potencia de salida del propio pin ya que, si disminuimos la frecuencia, aumentaremos el tiempo en que la tensión está a cero; mientras que si aumentamos la frecuencia es mayor el tiempo con tensión en el puerto.

Para cambiar la frecuencia la instrucción potencia = gpio.PWM(18, 500), siendo 18 el puerto GPIO, y el 500 es la frecuencia máxima del pulso, es decir 500Hz.

También gracias al PWM, se puede controlar la velocidad de los motores eléctricos.


Existen muchos más circuitos, configuraciones y mucho más que hacer con la placa Raspberry PI, pero no entran en este curso. Quizá en un futuro haga otro curso avanzado, según el balance de beneficios y los gastos ocasionados por mirpas.com.