El hardware
Además de la RPi correctamente configurada y funcional, requeriremos los siguientes componentes:- Un protoboard.
- Un LED (diodo emisor de luz).
- Una resistencia de 330Ω (bandas naranja, naranja, café).
- Dos cables conectores.
Vista de protoboard Fritzing de un LED conectado a la RPi. |
La resistencia se necesita con el fin de evitar que el LED reciba demasiada corriente y se dañe. Para no complicar demasiado las cosas, se recomienda utilizar una resistencia entre 270Ω y 330Ω (si se requiere ser más precisos al respecto, se debe aplicar la Ley de Ohm y conocer la tensión del LED así como la corriente que pasa por éste).
La siguiente foto muestra físicamente la forma en que se ven las conexiones de nuestros componentes electrónicos:
Vista física de un LED conectado a la RPi. |
Hay que notar que en la foto se aprecia un GPIO breakout (la tarjeta de interfaz negra) que facilita conectar la RPi al protoboard a través de un cable plano. En este caso, los cables conectores a utilizar deben ser macho-macho. Si no se cuenta con el breakout, se pueden usar cables conectores macho-hembra para conectar directamente los pines GPIO de la RPi al protoboard.
El software
Ahora veremos la manera de escribir nuestro programa en Python. Primeramente necesitamos importar el módulo RPi.GPIO:import RPi.GPIO as GPIODe esta forma podemos referirnos al módulo simplemente usando el identificador
GPIO
. Las distribuciones recientes de Raspian traen pre-instalado este módulo para Python 2.7.Como segundo paso, necesitamos indicar la manera en que estaremos haciendo referencia a los números de pin de la RPi. El módulo
RPi.GPIO
permite hacerlo de dos formas:- BOARD: Los pines se numeran usando la distribución física de la cabecera de expansión P1 de 26 pines.
- BCM: Los pines se numeran según la designación de canales de Broadcom SoC (System-on-a-chip). En otras palabras, se usan los números GPIO.
Numeración de pines BOARD (blanco) y BCM (naranja), para la RPi modelo B, revisión 2. |
Por ejemplo, el pin GPIO 24 corresponde al pin físico 18, mientras que el pin GPIO 17 corresponde al pin físico 11.
La función
GPIO.setmode()
recibe como argumento GPIO.BOARD
o GPIO.BCM
para indicar el esquema de numeración a utilizar:
GPIO.setmode(GPIO.BCM)En nuestro proyecto usaremos la numeración BCM. Hay que notar que se debe tener algo de cuidado con este esquema, ya que hay algunas diferencias sutiles entre las revisiones 1 y 2 del modelo B de la RPi. Sin embargo, el proyecto que estamos construyendo debe funcionar sin problemas con cualquiera de las dos revisiones. En nuestro programa de Python podemos utilizar el valor de la constante simbólica
GPIO.RPI_REVISION
para averiguar el número de revisión.El tercer paso consiste en indicar la dirección (entrada o salida, usando
GPIO.IN
o GPIO.OUT
, respectivamente) que usaremos con el pin 24:
GPIO.setup(24, GPIO.OUT)
La documentación le llama a lo anterior “establecer un canal”.Ahora, para controlar nuestro LED solo tenemos que usar la función
GPIO.output()
, indicando como argumentos el número de pin y GPIO.HIGH
si queremos prender el LED o GPIO.LOW
si lo queremos apagar. Por ejemplo:
GPIO.output(24, GPIO.HIGH)
Para producir un efecto de parpadeo necesitamos prender el LED, pausar por un tiempo, apagar el LED, volver a pausar, y repetir lo anterior cuantas veces queramos. Para pausar un momento nuestro programa en Python podemos usar la función sleep()
del módulo time
, la cual recibe como argumento la cantidad de segundos que se debe detener.Finalmente, se recomienda invocar a la función
GPIO.cleanup()
para reiniciar todos los canales de GPIO y con esto asegurarnos que el LED quede apagado y también evitar algunos mensajes de advertencia que pudieran aparecer la siguiente vez que se corra nuestro programa. Dado que deseamos que siempre ocurra esto al final del programa (sin importar si éste terminó de forma normal o a raíz de una excepción), lo más conveniente es colocar la instrucción GPIO.cleanup()
como parte de la cláusula finally
de una instrucción try
.El siguiente programa completo integra lo que se discutió anteriormente:
# Archivo: parpadea.py import RPi.GPIO as GPIO import time # Constantes TIEMPO_PAUSA = 0.5 # Las pausas duran medio segundo. PIN_LED = 24 # Pin donde esta conectado # el anodo del LED. GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_LED, GPIO.OUT) try: # Ciclo infinito. # Para terminar el programa de debe presionar Ctrl-C. while True: GPIO.output(PIN_LED, GPIO.HIGH) time.sleep(TIEMPO_PAUSA) GPIO.output(PIN_LED, GPIO.LOW) time.sleep(TIEMPO_PAUSA) finally: GPIO.cleanup()Para correr el programa, requerimos ejecutar el siguiente comando desde una terminal en el mismo directorio donde radica el archivo
parpadea.py
:
sudo python parpadea.pyEl comando debe empezar con
sudo
debido a que el programa de Python necesita privilegios de administrador para poder manipular los puertos de GPIO.Cuando corremos el programa, el LED se prende por medio segundo, y luego se apaga durante otro medio segundo. Esto se repite indefinidamente hasta que presionemos Ctrl-C para terminar el programa. Podemos cambiar el valor de la constante simbólica
TIEMPO_PAUSA
para hacer que el LED parpadee más lento o más rápido.Usamos la constante simbólica
PIN_LED
para indicar el número de pin GPIO al que conectamos el ánodo del LED. Si después queremos usar otro número de pin, solo tenemos que cambiar este dato en un solo lugar de nuestro programa y no en múltiples sitios.Si por fin logramos hacer funcionar este proyecto, entonces estamos listos para hacer proyectos más complicados e interesantes. ¡Yupi!
No hay comentarios.:
Publicar un comentario