En este post vamos a ver cómo usar Python, una Raspberry Pi y los puertos GPIO para trabajar con un visualizador de 7 segmentos.
Al final vamos a dibujar los números del 0 al 9 de una manera sencilla.
Es importante recordar que hay 2 tipos de displays, unos son de ánodo común y otros son de cátodo común.
Si es de ánodo común, entonces debes escribir un LOW sobre la entrada que quieres encender. Y en caso de que sea de cátodo común debes escribir un HIGH sobre la entrada.
Además, para ánodo común debes conectar el común a 5 volts, y para cátodo común debes conectar el común a tierra.
Para guiarme siempre me ha servido la siguiente imagen (que no es mía):
Me voy a referir a cada puerto por su número consecutivo, y no por su número GPIO. En la siguiente imagen puedes ver que el GPIO 25 es el puerto número 22; pues en el código de Python me referiré al consecutivo, que en este caso sería el 22.
Voy a reutilizar el circuito de mi anterior post sobre gpio y display 7 segmentos desde la terminal.
Mis displays son de cátodo común así que el común va conectado a GND. Si, en tu caso, son de ánodo común, entonces el común iría al 5 v.
No olvides que debes usar una resistencia (de 220 o 47 ohm) por cada letra del display.
Nota: te recomiendo ver mi post sobre GPIO y Python.
Como ves en el circuito de arriba cada letra está conectada a determinado pin. He definido un diccionario para facilitar las cosas:
De este modo, si la conexión cambia, las letras no se ven afectadas.
Para dibujar los números debemos encender o apagar determinada terminal del visualizador de 7 segmentos.
Yo los he definido como binarios, en donde un 1 es encender y un 0 es apagar. Todos siguen el orden de las letras, es decir, el primer bit es la A, el segundo la B, etcétera.
Este script de python va a aceptar el número que se desea dibujar como argumento de línea de comandos, para que se pueda invocar con:
python main.py NUMERO
Así que la lectura de argumentos se hace así:
Gracias a que tenemos un diccionario de números podemos usar el número leído desde la terminal para obtener la representación en binario con:
numero = numeros.get(argumentos.numero)
Una vez que tenemos la cadena binaria que vamos a dibujar sobre el display recorremos el diccionario de pines y leemos la cadena binaria; si es un 1 entonces encendemos el led (porque mi visualizador es de cátodo común) y si no, lo apagamos.
El código que los dibuja es:
De este modo nos ahorramos escribir código, pues mientras nuestro diccionario esté bien definido todo saldrá a la perfección.
Ahora veamos el código que hace que todo esto sea posible:
Para invocarlo pasa un número del 0 al 9 como primer argumento. Por ejemplo, para dibujar el 0 sería:
python siete_segmentos.py 0
Puedes indicar cualquier número y, mientras esté soportado, funcionará.
Podemos hacer que se dibujen los números de manera infinita, invocando al script de Python con bash. Esto es opcional, pues el script ya funciona bien, sin embargo, como demostración podemos usar lo siguiente:
Es un simple ciclo for que va del 0 al 9 e invoca al script de Python con ese número; para después dormir 1 segundo.
Al final del script se vuelve a invocar al mismo, así que estará siempre en ejecución hasta que se presione CTRL + C
. Yo lo he probado y se ve así:
Espero que el lector disculpe el movimiento de la cámara, pero no se me ocurrió tomarlas en opción burst shoot y al momento de escribir esto ya he desarmado el circuito.
Por cierto, la diferencia en el brillo es porque no he usado resistencias del mismo valor.
Si quieres puedes leer más sobre Raspberry o Python en mi blog.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.