Virgilómetro, el contador de tiempo para juegos de mesa con Arduino

Después de mucho tiempo trasteando con Arduino por fin he terminado mi primer proyecto. Se trata de un contador de tiempo para juegos de mesa. El nombre de Virgilómetro es en honor a mi amigo Virgilo, que es el que inspiró la necesidad de medir el tiempo que empleamos cada jugador en una partida para confirmar o desmentir que el que más AP (Análisis-Parálisis) tiene es él. 😀

El código del proyecto lo tenéis en mi github (Proyecto BGCounter en GitHub). Consta de una librería que he hecho para controlar displays de 7 segmentos, específicamente en este caso para un modelo de 4 dígitos y 12 pines. Tengo hechas librerías para otros tipos de displays por si a alguien le interesan. El otro fichero es el fichero ino con el código del proyecto en sí. Para ahorrar pines en el arduino utilizo un registro de desplazamiento, en concreto el más conocido y extendido, el 74HC595.

El prototipo para Fritzing os lo podéis descargar de aquí o ver justo abajo.

BGCounter

La gestión de interrupciones del Rotary Encoder (función updateEncoder()) la copié de este artículo que habla sobre su manejo “Rotary Encoder + Arduino”. Me encanta la forma tan elegante que tiene de solucionar el problema. En concreto estoy hablando de la función updateEncoder() de mi código. Cuidado con la configuración de pines del Rotary, deben coincidir con los pines 2 y 3 ya que utiliza las interrupciones 0 y 1.

Siguiendo con el ahorro de pines, los cinco botones para los jugadores están dispuestos de forma que en función de la resistencia por la que se les hace pasar devuelve valores distintos al pin analógico al que están pinchados.  En la función readAnalogButtons() es donde se leen esos valores y probablemente tengáis que mirar en el monitor del puerto serie los valores que os devuelven a vosotros las resistencias que elijáis para configurarlos.

El funcionamiento del proto es el siguiente:

  1. Elegimos entre los tres modos disponibles con la perilla del rotary encoder:
    1. Modo incremental.
    2. Modo decremental.
    3. Modo decremental con bonus.
  2. Elegimos con los botones de jugador los colores que van a participar en la partida.
  3. En el modo 2 y 3 debemos configurar el tiempo total del que disponen los jugadores (cada uno de ellos).
  4. En el modo 3 debemos configurar el tiempo que se sumará al tiempo restante del jugador cuando el testigo pase a otro distinto.

Cuando el modo correspondiente es configurado el reloj queda parpadeando esperando a que el primer jugador pulse su botón para empezar a contabilizar el tiempo.

En cualquier momento se puede pulsar el botón del rotary encoder para pausar la partida. Por defecto mostrará el tiempo total de partida y rotando muestra el tiempo de cada jugador.

Cuando el tiempo deja de medirse en minutos y segundos y pasa a horas y minutos se ilumina el punto del cuarto dígito.

En los modos 2 y 3 decrementales hay alarmas cuando quedan 10 minutos, 5 minutos y durante todo el último minuto (para agobiar :D).

Aquí tenéis un vídeo donde muestro todo esto en el prototipo final que he hecho con componentes un poco más resultones. 😉

Pues eso es todo, por lo demás sólo espero que el proyecto le sea útil a alguien. Yo lo estoy usando y la conclusión es que suelo ser yo el que más AP tiene. 😀

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *