Control de circuitos eléctricos con Raspberry Pi – I : Python

 

Vamos a ver ahora un ejemplo sencillo de  circuito eléctrico controlado por una Raspberry Pi, para ello necesitamos:

  • El circuito a controlar (En nuestro ejemplo un LED y una resistencia en serie), conectando al positivo del LED (conector largo)  el PIN 18 de GPIO y un extremo de la resistencia al PIN 6 de GPIO de la Raspberry Pi 3 (El modelo actual es el Raspberry Pi 4; 2022) el otro extremo de la resistencia al otro extremo del LED.
  • La Raspberry PI con su conector GPIO
  • Un programa, por ejemplo escrito en Python

Primero debemos comprobar que tenemos las librerías de RPi.GPIO de Python, para ellos desde el terminal debemos ejecutar:

pi@raspberrypi:~ $ pip show RPI.GPIO
Name: RPi.GPIO
Version: 0.6.3
Summary: A module to control Raspberry Pi GPIO channels
Home-page: http://sourceforge.net/projects/raspberry-gpio-python/
Author: Ben Croston
Author-email: ben@croston.org
License: MIT
Location: /usr/lib/python2.7/dist-packages
Requires:

En caso de que no esté la libreria RPi.GPIO en el Raspbian deb instalarlo de forma manual (descarga, descomprimir e instalr):

  • Descargar la ultima versión de https://sourceforge.net/projects/raspberry-gpio-python en nuestro caso la 0.6.3  RPi.GPIO-0.6.3.tar.gz 
  • Descomprimir el archivo comprimido con doble click
  • Comprobar que disponemos del paquete python-dev y en caso contrario instalarlo con: sudo apt-get install python-dev
  • Ejecutar la instalación desde el directorio descomprimido:   cd Downloads/Rpi.GPIO-0.6.3 sudo python setup.py install

o de forma automática usando los comandos de PyPI – the Python Package Index con el comando (la recomendable):

  • pip install RPi.GPIO

El programa en Python propuesto es el siguiente:

# led.py 
# Programa que enciende un LED 1s
#
# Importa librerias (completan los comandos Phyton)
# si no puede, da error (Es posible que no esté instalada)
# https://pypi.python.org/pypi/RPi.GPIO 
try:
 import RPi.GPIO as GPIO
 print("GPIO.RPI_INFO = " + str(GPIO.RPI_INFO))
 print("GPIO.VERSION = " + str(GPIO.VERSION))
except RuntimeError:
 print("Error importando RPi.GPIO")
 
try: 
 import time
except RuntimeError:
 print("Error importando RPi.GPIO")
 
# GPIO: Ajuste de los nombres de GPIO: BOARD ó BCM
GPIO.setmode(GPIO.BCM)
# GPIO: Ajuste mensajes de warning a OFF
# (avisos de otros programas trabajando con GPIO)
GPIO.setwarnings(False)
# GPIO:El PIN 18 se define como salida
GPIO.setup(18,GPIO.OUT)

# PYTHON: mensaje a consola
print ("LED on")
# GPIO: El PIN 18 se activa/enciende con 3.3V
GPIO.output(18,GPIO.HIGH)
# TIME: espera de 1s
time.sleep(2)
print ("LED off")
#GPIO: El PIN 18 se desactiva/apaga 
GPIO.output(18,GPIO.LOW)
# borrar todos los ajustes antes de terminar 
GPIO.cleanup()

Si quiere que el LED parpadee varias veces puede hacer algo como:

contador = 0
while contador < 5: 
 print ("LED on")
 # GPIO: El PIN 18 se activa/enciende con 3.3V
 GPIO.output(18,GPIO.HIGH)
 # TIME: espera encendido de 1s
 time.sleep(1)
 print ("LED off")
 #GPIO: El PIN 18 se desactiva/apaga 
 GPIO.output(18,GPIO.LOW)
 # TIME: espera apagado 1s
 time.sleep(1)
 contador += 1 
# borrar todos los ajustes antes de terminar 
GPIO.cleanup()

Si quiere hacer que dos LEDs parpadeen como las luces de una ambulancia puede modificar el código:

# GPIO:Los PIN 18 y 23 se definen como salidas en forma de lista
Lista_canales = [18,23] 
GPIO.setup(Lista_canales,GPIO.OUT)

#Bucle que se repite 5 veces
contador = 0
while contador < 5:
 print ("Ni")
 # GPIO: canales 18 / 23 se activa/desactiva 
 GPIO.output(Lista_canales,(GPIO.HIGH,GPIO.LOW))
 # TIME: espera encendido de 1s
 time.sleep(1)
 print ("No")
 #GPIO: canales 18 / 23 se desactiva/ activa 
 GPIO.output(Lista_canales,(GPIO.LOW,GPIO.HIGH))
 # TIME: espera apagado 1s
 time.sleep(1)
 contador += 1
# borrar todos los ajustes antes de terminar 
GPIO.cleanup()

Más información sobre la sintaxis de los comandos de la librería Python GPIO los puede encontrar aquí y un articulo más detallado sobre el proyecto de encender un led con Python en Raspberry aquí.

Comentarios

Entradas populares de este blog

SDR - Software Defined Radio - IIIb: Receptores RSP o MSI (MSI3001: MSI2500 + MSI001)

Ayudas a la navegación aerea: NDB, VOR, ILS y ATIS

Por una montaña más segura