Pantalla de 7 segmentos y Raspberry PI Pico: cableado y configuración con MicroPython

La pantalla de 7 segmentos se puede controlar con unas pocas líneas Micropython desde Raspberry PI Pico. Es uno de los proyectos más simples y una forma divertida de comenzar a codificar y cablear.

En este tutorial, le mostraré cómo conectar y configurar una pantalla de 7 segmentos con una Raspberry PI Pico. Si está interesado en cómo hacer que funcione con placas de computadora Raspberry PI (como RPI Zero, RPI 4 modelo B, RPI 3 modelo A/B, etc.), consulte mi Control de una pantalla de 7 segmentos de Raspberry PI con Pitón.

La pantalla de 7 segmentos se utiliza en una gran cantidad de aplicaciones, generalmente para mostrar un solo número. Estos dispositivos tienen diagramas de cableado internos simples, que asignan uno por uno los LED a sus pines:

Tenga en cuenta que este tutorial utiliza una pantalla de 7 segmentos de cátodo común. Esto significa que los pines comunes (3 y 8) van a tierra y cada segmento del led se enciende cuando llega un valor positivo de RPI Pico. Con ánodo común, el pin común va a 3,3V y cada segmento de led se enciende cuando un valor negativo proviene de RPI Pico. En el segundo caso, en comparación con mi tutorial, tendrá que cambiar los pines 3 y 8 conectándolos al pin físico 36 de Raspberry PI Pico (3v3 OUT) e invertir la lógica de mi código.

Lo que necesitamos

Como de costumbre, sugiero agregar desde ahora a su carrito de compras de comercio electrónico favorito todo el hardware necesario, para que al final pueda evaluar los costos generales y decidir si continúa con el proyecto o los elimina del carrito de compras. Entonces, el hardware será solo:

Muchos de los hardware enumerados (excepto Raspberry PI Pico) se pueden comprar solos o también se pueden encontrar en el útil kit de inicio de Elegoo.

Consulta precios de hardware en los siguientes enlaces:

Procedimiento paso a paso

Diagrama de cableado

Prepare el cableado de acuerdo con el siguiente diagrama de cableado. Con respecto al pinout de Raspberry PI Pico, puede consultar mi guía que lo muestra: Pinout de Raspberry PI Pico

Este cableado produce el siguiente mapeo entre Display y Raspberry PI:

Segmento de visualización Pin de pantalla Pasador Raspberry PI Pico GP
UN 7 17
B 6 dieciséis
C 4 14
D 2 13
mi 1 12
F 9 18
GRAMO 10 19
DP 5 15
GRD 3 TIERRA
GRD 8 TIERRA

Entonces, cada pin Raspberry PI Pico alimenta un segmento Led específico. Al conectar una secuencia definida de segmentos, se mostrará el número que queremos mostrar.

A continuación encontrará algunas fotos de mi laboratorio casero:

Prepare el cableado de acuerdo con el párrafo anterior.

Obtener y comprender mi código rpiPicoSegDisplay.py

Conecte RPI Pico a Thonny (puede consultar mi tutorial sobre Primeros pasos con Raspberry PI Pico).

Ahora descarga el siguiente archivo para usar tu zumbador pasivo:

Puede cargarlo en su almacenamiento Raspberry PI Pico o ejecutarlo desde su computadora.

Explicaré todas las líneas de código en los siguientes párrafos.

En primer lugar, importamos las bibliotecas necesarias:

from machine import Pin

Luego definimos 2 variables con números de pin. Esta es una forma conveniente ya que, si necesita cambiar los cableados, puede establecer nuevos números de GP aquí en lugar de distribuirlos en nuestro código. display_list recopila todos los pines de los segmentos, ordenados para que coincidan con los segmentos LED A, B, C, D, E, F y G:

display_list = [17,16,14,13,12,18,19] dotPin=15

Usaremos arreglos para hacer nuestro código lo más corto posible. Una de estas matrices recopilará los objetos PIN. Esta matriz se declara primero y luego se llena con un bucle for que también establece los pines en modo de salida:

display_obj = []  for seg in display_list:     display_obj.append(Pin(seg, Pin.OUT))

Misma configuración de PIN también para el conectado al punto LED:

dot_obj=Pin(dotPin, Pin.OUT)

Otra variable de matriz mantiene un mapeo de números con su configuración de LED. Por ejemplo, el número 0 (cero) tiene todos los LED encendidos, excepto el segmento central (G). Esto estará representado por el arrSeg[0] que asigna el «1,1,1,1,1,1,0» como A=1,B=1,C=1,D=1,E=1,F=1,G=0. La misma lógica para todos los demás números:

arrSeg = [[1,1,1,1,1,1,0], # -> arrSeq[0] displays 0           [0,1,1,0,0,0,0], # -> arrSeq[1] displays 1           [1,1,0,1,1,0,1], # -> arrSeq[2] displays 2           [1,1,1,1,0,0,1], # -> arrSeq[3] displays 3           [0,1,1,0,0,1,1], # -> arrSeq[4] displays 4           [1,0,1,1,0,1,1], # -> arrSeq[5] displays 5           [1,0,1,1,1,1,1], # -> arrSeq[6] displays 6           [1,1,1,0,0,0,0], # -> arrSeq[7] displays 7           [1,1,1,1,1,1,1], # -> arrSeq[8] displays 8           [1,1,1,1,0,1,1]]  # -> arrSeq[9] displays 9

Aquí uso una función para controlar la pantalla de 7 segmentos, de modo que llame a esta función con una cadena que represente qué número queremos mostrar (con o sin el punto). Esta función comienza a convertir lo que se recibe en un número (función int()) y elimina el punto final («.»), si está presente. De esta forma, la variable numDisplay es un número entero y se puede usar en el siguiente bucle for para configurar la salida de los pines:

def SegDisplay(toDisplay):     numDisplay = int(toDisplay.replace(".", ""))     for a in range(7):         display_obj[a].value(arrSeg[numDisplay][a])

Todavía dentro de la función SegDisplay(), también gestionamos la activación del LED de puntos comprobando si el «.» está presente en el valor de entrada:

    if toDisplay.count(".") == 1:         dot_obj.value(1)     else:         dot_obj.value(0)

Finalmente, usamos nuestra función llamándola con la salida deseada. Por ejemplo, el número cinco con el punto LED encendido se llamará con lo siguiente:

SegDisplay("5.")

Si no queremos el punto, simplemente llame de esta manera:

SegDisplay("5")

El número puede variar de 0 a 9 y el parámetro debe ser una cadena. Si tiene números enteros, puede usar la función str() para convertirlos. Un ejemplo:

SegDisplay(str(5))