Dado electrónico con Arduino y un Attiny45

Hola a todos. Aprovechando que empezó el año, voy a poner a mover el blog un poco.

Hace un tiempo me encontré en Maker Shed un dado electrónico. Al ver que usa un microcontrolador Pic, me pareció simpático hacerle un “hermano” en Arduino usando uno de mis queridos Attiny45.

Ya que nunca había utilizado antes la funcion random() de Arduino, me puse a investigar al respecto. Yo sabía de antemano que los números aleatorios generados por máquinas no son del todo aleatorios, pero no me esperaba encontrarme siempre con el mismo inicio (2, 2, 6, 3, etc…). Al ver un poco más al respecto, encontré un truco usando randomSeed() y los pines analógicos, pero, por algún motivo, no funcionó. Después de leer un par de tutoriales en los que hablaban de usar el ruido atmosférico o la decadencia radioactiva (cosa que, por supuesto no pienso usar, ya que es algo caro y aparatoso), me puse a pensar en una solución sencilla del problema. Después de pensar un poco, me acordé de los Mips, los millones de instrucciones por segundo que puede ejecutar un microcontrolador (Tanto el Atmega328P-PU que usa el Arduino UNO como el Attiny45 tienen 20 Mips con un cristal de 20 Mhz, así que supuse que con el cristal interno del Attiny de 1 Mhz tenemos 1 Mips 😉 ).

Cambiando el numero un millón de veces por segundo, el “numero elegido” depende de el microsegundo (0.000001 segundos, o una millonésima de segundo) exacto en el que se presione el botón, cosa que, en teoría, debería hacerlo aleatorio.

Aquí el dibujo de Fritzing:

Y el esquema:

El código, las imágenes y el archivo del esquema los pueden encontrar en el repositorio de Github.

Espero les sea útil. Saludos.