Dado digital con MicroPython

Contenido:

Dado digital con MicroPython

Construir un dado digital con MicroPython puede ser de gran utilidad para momentos de diversión ya sea con juegos de mesa o de azar.

Este proyecto ha sido realizado con una Placa Raspberry Pi Pico en la cual previamente se instalo el firmware de micropython, para la visualización de los números generados se emplea un display de siete segmentos de ánodo común, el mismo que es capaz de mostrar los números del 1 al 6 como lo hace un dado.

Materiales

  • 1x Placa Raspberry Pi Pico, Esp32 o cualquier placa con micropython.
  • 1x Display de 7 segmentos de ánodo común.
  • 8x Resistor de 330 Ohm.
  • 1x Pulsador normalmente abierto.
  • 1x Protoboard.
  • Cables de conexión.

Circuito

Para el montaje de este circuito se utilizó una placa Raspberry Pi Pico, si utilizas otra placa debes verificar la disponibilidad o modificar los pines utilizados en este diseño.

dado digital con micropython
Figura 1: Circuito con la Placa Raspberry Pi Pico.

El display se debe conectar de la siguiente manera:

contador de 0 a 9 micropython
Figura 2: Display 7 segmentos.
  • El Pin a va conectado al Pin GP7 de la placa.
  • El Pin b va conectado al Pin GP6 de la placa.
  • El Pin c va conectado al Pin GP9 de la placa.
  • El Pin d va conectado al Pin GP10 de la placa.
  • El Pin e va conectado al Pin GP11 de la placa.
  • El Pin f va conectado al Pin GP12 de la placa.
  • El Pin g va conectado al Pin GP13 de la placa.
  • El Pin DP va conectado al Pin GP8 de la placa.

El pin de salida del pulsador va conectado al Pin GP5 de la Placa. El Pin de ingreso va conectado a GND.

Sketch en MicroPython

Para la programación de este sketch se utilizó una placa Raspberry Pi Pico, si utilizas otra placa debes verificar la disponibilidad o modificar los pines utilizados.

from machine import Pin
from time import sleep
from random import randint

#Setup Pin de Entrada (Pulsador)
pin_btn = Pin(5, Pin.IN, Pin.PULL_UP)

#Setup Pines de Salida (Display Anado Comun)
pin_a = Pin(7, Pin.OUT)
pin_b = Pin(6, Pin.OUT)
pin_c = Pin(9, Pin.OUT)
pin_d = Pin(10, Pin.OUT)
pin_e = Pin(11, Pin.OUT)
pin_f = Pin(12, Pin.OUT)
pin_g = Pin(13, Pin.OUT)
pin_dp = Pin(8, Pin.OUT)

#Estados logicos de ON/OFF para display de Anodo Comun
H = 0
L = 1

#Funcion para activar cada segmentos del display
def driver(a,b,c,d,e,f,g,dp):
    pin_a.value(a)
    pin_b.value(b)
    pin_c.value(c)
    pin_d.value(d)
    pin_e.value(e)
    pin_f.value(f)
    pin_g.value(g)
    pin_dp.value(dp)

#Funcion para pruebas de conexion y funcionamiento
def funcionamiento():
    driver(L, H, H, L, L, L, L, L)
    sleep(0.5)
    driver(H, H, L, H, H, L, H, L)
    sleep(0.5)
    driver(H, H, H, H, L, L, H, L)
    sleep(0.5)
    driver(L, H, H, L, L, H, H, L)
    sleep(0.5)
    driver(H, L, H, H, L, H, H, L)
    sleep(0.5)
    driver(H, L, H, H, H, H, H, H)
    sleep(0.5)
    driver(L, L, L, L, L, L, L, L)

#Funcion de animacion
def animacion():
    for i in range(3):
        driver(L, H, L, L, L, L, L, L)
        sleep(0.1)
        driver(L, L, H, L, L, L, L, L)
        sleep(0.1)
        driver(L, L, L, H, L, L, L, L)
        sleep(0.1)
        driver(L, L, L, L, H, L, L, L)
        sleep(0.1)
        driver(L, L, L, L, L, H, L, L)
        sleep(0.1)
        driver(H, L, L, L, L, L, L, L)
        sleep(0.1)
        driver(L, L, L, L, L, L, L, L)

#Prueba de conexion y funcionamiento
funcionamiento()
animacion()

#Bucle de repeticion infinita
while 1:
    #Si el estado del Pin de entrada es LOW
    if (pin_btn.value() == 0):
        #Retardo Antirrebote
        sleep(0.005)
        #Genera un numero aleatorio
        numero = randint(1, 6)
        #Mientras el estado del Pin sea LOW ingresa al bucle
        while(pin_btn.value()==0):
            pass
        #Muestra la animacion
        animacion()
        #Compara el numero generado y envia a la funcion
        #Numero 1
        if numero == 1:
            driver(L, H, H, L, L, L, L, L)
        #Numero 2
        if numero == 2:
            driver(H, H, L, H, H, L, H, L)
        #Numero 3
        if numero == 3:
            driver(H, H, H, H, L, L, H, L)
        #Numero 4
        if numero == 4:
            driver(L, H, H, L, L, H, H, L)
        #Numero 5
        if numero == 5:
            driver(H, L, H, H, L, H, H, L)
        #Numero 6
        if numero == 6:
            driver(H, L, H, H, H, H, H, H)
        #Retardo 3 segundos
        sleep(3)
        #Coloca las salidas en L
        driver(L, L, L, L, L, L, L, L)
    #Retardo 100ms
    sleep(0.1)

¿Cómo funciona el Sketch?

El Sketch funciona de la siguiente manera:

  • Al energizar la placa, el display mostrará una cuenta ascendente del 1 al 6, para así comprobar que tanto el display como su conexión se encuentren de manera correcta.
  • Posterior a esto el display mostrara una animación secuencial de tres ciclos, y estará lista para cumplir su funcion de dado digital.
  • Al presionar el pulsador, el display mostrará una animación secuencial de tres ciclos, se generará un numero aleatorio del 1 hasta el 6 y será visualizado en el display.

1 comentario en «Dado digital con MicroPython»

Deja un comentario