lunes, 12 de diciembre de 2016

Controlar intensidad de un LED con Python (Parte 3)

En este post os voy a mostrar como usar los puertos GPIO y un pequeño programa en Python para controlar la intensidad de brillo de un led.

Para ello voy a usar una placa protoboard, cables de conexión, un led , una resistencia y mi RaspberryPi. Si sois nuevos en esto os aconsejo leer los anteriores posts (del uso de los GPIO en el apartado Programación/GPIO).


1. Organización del circuito

En primer lugar vamos a ver como nos debe quedar nuestro circuito para poder controlar la intensidad de brillo de un led (si habéis hecho los dos ejercicios anteriores es el mismo circuito). Aquí os dejo una imagen para que veáis la distribución que he usado



si no habéis leído el primer post sobre leds os recomiendo hacerlo, ya que en el detallo las conexiones y hay un apartado al final sobre el uso de las resistencias, aquí está el link.


2. Código Python

Hoy vamos a crear un pequeño programa en python que al ejecutarlo haga variar la intensiadad del brillo de un led. Si no sabéis como crear un archivo con un programa en python os recomiendo leer los post sobre programación python del apartado Programación/GPIO del blog.

Para modificar la intensidad del brillo del led usaremos el Pulse-Witdh Modulation (PWM), esto nos permite variar la longitud de los pulsos electricos manteniendo el número de pulsos por segundo.

En primer lugar abrimos el IDLE de Python en nuestra RaspberryPi (yo uso Python3), una vez abierto creamos un nuevo fichero (en el menú File-New File) y introducimos el siguiente código

# importamos la libreria GPIO
import RPi.GPIO as GPIO
# importamos la libreria time
import time
# desactivamos mensajes de error
GPIO.setwarnings(False)
# indicamos el uso de la identificacion BCM para los GPIO
GPIO.setmode(GPIO.BCM)
# indicamos que el GPIO18 es de salida de corriente
GPIO.setup(18,GPIO.OUT)
# en una variable guardamos el valor de PWM para el GPIO18
pwm_led=GPIO.PWM(18,500)
# iniciamos el led con longitud de pulso 100
pwm_led.start(100)
# bucle que se repetira hasta finalizar el programa
while(True):
    # disminuimos longitud del pulso
    pwm_led.ChangeDutyCycle(25)
    # esperamos medio segundo
    time.sleep(0.5)
    # aumentamos longitud del pulso
    pwm_led.ChangeDutyCycle(100)
    # esperamos medio segundo
    time.sleep(0.5)

guardamos el archivo en una ubicación conocida (en el menú File-Save As), si es necesario apuntad la ruta por si la necesitáis más tarde. 

Podemos ejecutar directamente este pequeño programa presionando la tecla F5 (también se puede ejecutar des de el menú Run-Run Module)

Si todo es correcto se abre una nueva ventana de IDLE de python y empieza la ejecución, el led parpadeará a intervalos de medio segundo variando la intensidad del  brillo. Una vez comprobado el funcionamiento cerrad la pantalla de ejecución (es posible que el led quede encendido o apagado pero ya no parpadeará). También podéis realizar pruebas modificando el valor de PWM modificando el valor 500 de la línea (cuanto más elevado es el valor de PWM más inestabilidad se aprecia en el parpadeo).

pwm_led=GPIO.PWM(18,500)

Hasta pronto!