lunes, 28 de noviembre de 2016

Controlar encendido de un LED con Python (Parte 1)

En este post os voy a mostrar como usar los puertos GPIO y un pequeño programa en Python para controlar el encendido y apagado 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 el anterior post (Conector GPIO principos basicos) en el que detallo los diferentes componentes, como usarlos y evitar quemar nuestros dispositivos.


1. Organización del circuito

En primer lugar vamos a ver como nos debe quedar nuestro circuito para poder encender y apagar un led. Aquí os dejo una imagen para que veáis la distribución que he usado yo.



Tened en cuenta que yo uso una RaspberryPi B+, y la distribución de los conectores GPIO puede variar respecto a otros modelos. Si tenéis dudas consultad el post anterior (Conector GPIO principos basicos), y si vuestro modelo de RaspberryPi no está consultad la documentación oficial.


Vamos a ver las diferentes conexiones que he realizado:

1.1- En primer lugar de la RaspberryPi del pin número 6 (corresponde a una conexión etiquetada como GND o GROUND, o sea, tierra) sale un cable azul que va a la protoboard al pin número 1 de la columna junto a la línea azul (esto permite que tengamos GROUND o tierra en toda las conexiones de esta columna). 

1.2- En segundo lugar del pin número 12 (correspone a una conexión etiquetada como GPIO18, este es el positivo) sale un cable rojo que va a la protoboard al pin número 2 de la columna junto a la línea roja (esto permite tener el polo positivo en todas las conexiones de esta columna).

1.3- Luego en la protoboard tenemos un cable rojo que sale del pin 4 de la columna roja al pin A-6. 

1.4- A continuación hay una resistencia (de 1K Omnio 1%) que conecta el pin B-6 y el pin B-10. La resistencia nos sirve para proteger el led y/o la RaspberryPi. (Al final del post he añadido un punto para hablar exclusivamente de las resistencias)

1.5- Por otro lado tenemos un cable azul que sale del pin 9 de la columna azul al pin B-11.

1.6- Y finalmente tenemos un led amarillo que conecta en el pin C-10 (polo positivo) y en el pin C-11 (con el polo de tierra o ground). Tened en cuenta que los leds tienen una conexión positiva y una negativa, si lo ponéis al revés no funcionará, si tenéis dudas consultad el post que os he indicado antes.

Una vez tengáis este circuito ya podemos pasar a ver el código.


2. Código Python

Encender y apagar un led con Pyhton es bastante sencillo. En primer lugar abrid el IDLE de Python (en mi caso uso Python3). Si no sabéis nada de Python os recomiendo leer los posts sobre programación en Python que tenéis en el apartado de Programación/GPIO.

Una vez abierto el IDLE introduciremos las siguientes órdenes (haciendo Intro en el teclado después de cada línea)

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, True)

Si todo ha ido bien el led debería encenderse. Os comento una a una las líneas de código. La primera línea importa la libreria RPi.GPIO que es la que nos permite controlar los puertos GPIO desde Python.
La segunda línea indica que vamos a usar la identificación BCM de los puertos GPIO (si no sabéis de que os hablo leed el post Conector GPIO principos basicos).
La tercera línea indica que el puerto 18 es un puerto de salida de corriente.
La última línea da salida de corriente al puerto 18, esto hace que se encienda el led.

Ahora para apagar el led introducid la siguiente orden y presionad Intro en el teclado

GPIO.output(18, False)

Ahora el led debería estar apagado. Para encenderlo de nuevo usad la misma orden sustituyendo la palabra False por True.

Enhorabuena, ya sabéis usar los puertos GPIO de vuestra RaspberryPi!


3. Las resistencias


Ya habéis visto que para este pequeño circuito he incluido una resistencia de 1 K Omnio del 1%. Esto no lo he hecho al azar. Los diferentes tipos de led para funcionar pueden demandar diferentes intensidades eléctricas, según el color y modelo, hay leds que se iluminan con solo 1 mA, y otros neccesitan 2, 3 o más mA. Por ello es importante saber que tipo de led tenemos y qué intensidad necesita para iluminarse. Según la intensidad que necesite deberemos poner entre la salida de corriente y el led una resistencia mayor o menor.
Poner una resistencia mayor de lo necesario implicará que el led brille menos o no llegue a iluminarse, poner una resistencia menor de lo necesario puede quemar nuestros dispositivos. Así que ante la duda os recomiendo poner de más que de menos.

Fijaos en esta lista


Tipo de led Intensidad (mA) Resistencia (Omnios)
Rojo 3,5 470
Rojo 1,5 1K
Naranja, amarillo, verde 2 470
Naranja, amarillo, verde 1 1K
Azul, blanco 3 100
Azul, blanco 1 270

aquí os muestro diferentes tipos de led y la intensidad necesaria para que se iluminen, y en la última columna la resistencia que deberíamos usar en nuestra RaspberryPi. Podéis ver que los led azules y blancos son los que necesitan menos intensidad y requieren resistencias más pequeñas, de 100 y 270 Omnios, en cambio otros leds requieren resistencias mayores de hasta 1K Omnio. 
Si desconocéis el tipo de led que tenéis y la intensidad que necesita os recomiendo ir sobre seguro y usar siempre una resistencia de 1K Omnio (como la que yo he usado en el circuito). Si conocéis exactamente el led que estáis usando vosotros mismos podéis escoger la resistencia adecuada.