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.
El display se debe conectar de la siguiente manera:
- 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»
muchas gracias