Nuestro primer prototipo con la Raspberry Pi

Esta semana vamos ya a meter las manos en la masa. Montaremos un prototipo básico que programaremos desde la Raspberry Pi, gracias al kit de inicio orientado a la electrónica que os enseñaba unas semanas atrás. Este kit incluye una placa de prototipado, en la que podemos montar circuitos electrónicos de una forma muy fácil y sin necesidad de soldadura ni herramientas especiales: con nuestras propias manos.

Lo que haremos será un programa en Python con el que poder encender y apagar un LED (Light-Emitting Diode, diodo emisor de luz) a nuestro antojo.

Conectar la placa de prototipado a la Raspberry Pi

Vamos a ir viendo los componentes que vamos a necesitar, y cómo se conectan, a través de un vídeo:

  • Una Raspberry Pi. En el vídeo usaré la Raspberry Pi 2, modelo B.
  • Una placa de prototipado.
  • Un cable de conexión y una placa de expansión para conectar la placa de prototipado a los puertos GPIO de la Raspberry Pi

Con esto, podremos conectar la placa de prototipado a la Raspberry Pi (siempre apagada y desenchufada) como explico en el siguiente vídeo:

Montar el prototipo

Para probarla y descubrir cómo será, en esencia, la tarea de programar circuitos físicos desde Python, se necesita:

  • Un LED.
  • Un cable de conexión; si es corto, mejor.
  • Una resistencia de 330 Ω.

Mención especial merece el LED. Si nos fijamos en la imagen siguiente, veremos que uno de los conectores del LED es más largo que el otro. Ese conector más largo es el ánodo, o el borne positivo: el que deberemos enchufar a valores positivos de tensión. El conector más corto es el cátodo, es decir, el borne negativo, y debe ir a valores de voltaje menores, o a tierra directamente. 

LED con los bornes sin cortar. El borne positivo es ligeramente más largo que el negativo
Un LED es un diodo emisor de luz. El borne positivo es ligeramente más largo que el negativo, y será el que debamos conectar a voltajes positivos si queremos que brille.

Usando nuestros dedos, doblaremos la pata más larga en algún punto intermedio, lejos del plástico que envuelve al diodo. Así, las dejaremos a nivel:

LED con el borne positivo doblado, para que sea más cómodo conectarlo a la placa de prototiposLED con el borne positivo doblado, para que sea más cómodo conectarlo a la placa de prototipos
LED con el borne positivo doblado, para que sea más cómodo conectarlo a la placa de prototipos

De nuevo, con la Raspberry Pi apagada y desenchufada, y con la placa de prototipos conectada como en el vídeo, haremos lo siguiente:

  • Conectamos a la fila 16, que está alineada con el pin GPIO nº 6 según la placa de expansión, un extremo del cable de conexión. El otro extremo, a la fila 23. Por ejemplo, podemos usar la columna “a” en este caso.
  • Conectamos la pata larga del LED a la fila 23, por ejemplo, a la columna “e”. Recordad que, para una misma fila, tenemos en todos sus conectores hembra la misma tensión.
  • Conectamos la pata corta del LED a la fila 25, por ejemplo, a la columna “e”.
  • Conectamos un extremo de una resistencia de 330 Ω a la fila 25, en una columna que resulte cómoda. Yo lo he hecho en la columna “b”.
  • El otro extremo de la resistencia irá conectado a la hilera azul de tensión, al negativo de la placa de prototipos del lado de 3,3V.

Así:

El primer prototipo con la Raspberry Pi se corresponde con este montaje, que ha sido descrito unas líneas más arriba de esta imagen.
El primer prototipo con la Raspberry Pi se corresponde con este montaje, que ha sido descrito unas líneas más arriba de esta imagen.

El prototipo del circuito que hemos montado se corresponde con este esquema que ahora explicaré para que podamos interpretarlo y usarlo asíduamente en el blog:

Esquema manuscrito del prototipo que vamos a probar
Esquema manuscrito del prototipo que vamos a probar. ¿A que tengo buena letra?

De arriba a abajo:

  • El puerto GPIO 6 ofrece 3,3 V cuando el microprocesador programa en éste el valor alto; como veremos, en Python se programa fijando el valor GPIO.HIGH. Así pues, GPIO.HIGH  ⇒ 3,3 V. En otro caso, este puerto tiene como valor de tensión 0 V.
  • El diodo es el triángulo invertido con una línea en su vértice. La base del triángulo, que en este caso está arriba, es el borne positivo, y la línea en el vértice que en este caso está abajo, el negativo. Los LED se distinguen de otros diodos porque se dibujan con dos flechas a un lado que simbolizan la emisión de luz.
  • La línea en forma de dientes de sierra es la resistencia, de 330 Ω en este caso.
  • Las dos líneas paralelas inferiores significan “tierra” o “masa” y se dibujan si el valor de tensión es 0. Si fuese negativo, o menor que el de 3,3 V, se dibujaría una flecha hacia abajo.

Estamos usando el conector GPIO número 6 para alimentar el circuito a 3,3 V, tensión que alimentará el borne positivo del diodo cuando el microprocesador ponga el GPIO 6 en valor “alto”. Cuando eso ocurra, el diodo conducirá la corriente través de la resistencia, emitiendo luz. 

La resistencia de 330 Ω está ahí para limitar la corriente a unos parámetros que la Raspberry Pi aguante, dado que el diodo por sí mismo supondría muy poca resistencia, lo que proporcionaría una corriente muy alta al conjunto y dañaría el microprocesador. Con esa resistencia, la corriente queda limitada a unos 3,6  mA (miliamperios), que está dentro del rango de “salud” del microprocesador. En próximos artículos trataré estos temas con más profundidad de forma que tengamos la máxima información posible.

La relación entre corriente y voltaje y las reglas necesarias para diseñar estos circuitos serán el objetivo de otro artículo; de momento, montad este circuito así y aseguraos de que todas las patitas de los elementos (cable, resistencia y diodo) quedan enchufadas hasta el fondo.

Probando el prototipo con Python

Una vez hecho esto, conectad a la Raspberry Pi su teclado y su ratón, ésta a la TV y a la corriente, y… no ocurre nada con el LED. Pues claro, el GPIO no está inicializado y hace falta programarlo. Actualmente el GPIO nº 6 tiene 0 V a su salida, y necesitamos ponerlo a 3,3 V para que el diodo emita luz. Eso lo haremos con Python.

Abrid un nuevo programa en Python 3 con el IDLE (está en la sección de Programación en el Menú de la Raspberry Pi, etiquetado como “Python 3”), y escribid el siguiente código:

#!/usr/bin/python3

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(6, GPIO.OUT)

print ("LED encendido")
GPIO.output(6,GPIO.HIGH)
time.sleep(5)
print ("LED apagado")
GPIO.output(6, GPIO.LOW)
GPIO.cleanup()

print ("Hasta luego")

Como ya sabéis, estamos importando dos librerías:

  • RPi.GPIO es la librería encargada de proporcionarnos un modo de programar los puertos GPIO de la Raspberry Pi en Python. Le estamos asignando un alias, GPIO, para podernos referir a ella con un nombre corto.
  • time  es una librería que nos permitirá hacer que el programa se quede suspendido un tiempo en segundos, entre otras cosas.

Las siguientes tres líneas configuran el experimento: estamos diciendo a la librería que use una numeración de conectores llamada BCM (numeración de Broadcom, que es el fabricante del microprocesador), y que se corresponde con la leyenda que tiene nuestra placa de expansión, y que en la Raspberry Pi se refleja de este modo teniendo en cuenta que el pin número 1 es el de arriba a la izquierda si sujetamos la Raspberry Pi orientando los puertos USB y Ethernet hacia abajo:

Conexiones GPIO de la Raspberry Pi 2, modelo B, con esquema BCM. La imagen es de www.raspberrypi-spy.co.uk
Conexiones GPIO de la Raspberry Pi 2 modelo B, con esquema BCM. La imagen es de www.raspberrypi-spy.co.uk. “Ground” es tierra, o 0V y los pines con otros voltajes (3,3V y 5V) no los usaremos en nuestros prototipos; usaremos todos los demás, y  a su debido tiempo.

Las dos siguientes lo que hacen es eliminar información de aviso de la salida estándar, que para este ejemplo no hace falta, y declarar el uso del puerto GPIO 6 como salida (GPIO.OUT ), es decir, que el microprocesador fija la tensión en ese puerto enviando información así.

El resto del programa realiza lo siguiente:

  • Escribe un mensaje por pantalla, “Led encendido”.
  • Enciende el LED enviando el valor “alto”, GPIO.HIGH , por el puerto 6. Esto aplica una tensión de 3,3 V en el borne negativo del diodo, haciendo que emita luz.
  • Suspende el programa durante 5 segundos.
  • Escribe un mensaje por pantalla, “Led apagado”.
  • Apaga el LED enviando el valor “bajo”, GPIO.LOW , por el puerto 6. Esto hace que el valor entre ambos bornes del diodo sea de 0 V, como al encender la placa.
  • Limpiamos la configuración de los puertos GPIO con GPIO.cleanup() 
  • Escribe un mensaje por pantalla, “Hasta luego”.

Para ejecutar este programa hay que grabarlo con un nombre (por ejemplo, ledtest.py) y darle permisos de ejecución en la Raspberry Pi a través del terminal, y ejecutarlo con privilegios de superusuario. Eso se hace con la orden sudo, así:

chmod +x ledtest.py
sudo ./ledtest.py

Esto hará que el LED se encienda durante 5 segundos, para luego apagarse, dando una luz roja bastante brillante aunque no lo suficiente para hacernos daño. En cualquier caso no conviene mirarlo fijamente demasiado rato.

LED encendido por nuestro programa en Python
LED encendido por nuestro programa en Python

En la pantalla del terminal veremos estos mensajes:

Ejecución del programa en Python
Ejecución del programa en Python

He preparado un segundo vídeo donde podéis ver el montaje del prototipo y las precauciones explicadas de primera mano, y además podéis ver cómo el código Python anterior produce una iluminación del LED de una duración de 5 segundos:

Y esto es todo por hoy. Os animo a que lo probéis y que probéis cuantas variaciones se os ocurran en el programa. En sucesivos artículos del blog iré probando más cosas y complicando un poco más los montajes.

No olvidéis dejar en los comentarios cualquier duda que tengáis, así como en el formulario de contacto o en la dirección de correo que está publicada en esa misma página.

6 comentarios en “Nuestro primer prototipo con la Raspberry Pi

  1. Hola, me encanta como lo has explicado todo y me ha ayudado muchisimo, pero hay una cosa que no entiendo, cuando montas el tablero, en todas las páginas que he mirado la linea de la resistencia luego lo conectan a tierra, y me gustaría saber si es necesario o cuando lo es, no se si me he explicado bien

    1. ¡Hola! Gracias por tus comentarios 🙂

      La resistencia va conectada a tierra, la línea azul marcada con un “-“, tanto en el lado en el que está marcado con 3V3 como en el de 5V, es 0V o tierra. La conexión a tierra siempre la vas a hacer cuando conectes algo a los dos bornes de una fuente de tensión, en este caso sería la formada por el pin GPIO y esa línea azul marcada con un “-“. Si quieres saber más, te recomiendo este otro post, en el que os intento explicar las leyes que nos permitirán analizar y diseñar circuitos: http://pitando.net/2016/02/11/analisis-basico-de-circuitos-electricos/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *