Skip to Content

Juego de Girar la Ruleta con Arduino

Juego de Girar la Ruleta con Arduino

En este tutorial, aprenderás a construir un juego de «Gira la Ruleta» usando LEDs, un zumbador y un Arduino. El Spin the Wheel game es un juego divertido e interactivo que puede usarse para varios propósitos, como decidir quién empieza en un juego, seleccionar un ganador aleatorio para un premio o simplemente para entretenimiento.

Tradicionalmente, presenta una gran rueda mecánica segmentada en porciones de colores. Cada porción está marcada con un número o un premio, y los segmentos pueden tener diferentes tamaños, indicando las probabilidades de caer en ellos. La rueda está montada verticalmente para que pueda girar libremente cuando un jugador la hace girar, ya sea a mano o tirando de una palanca adjunta.

Traditional, large Spin the Wheel game
Juego tradicional de Gira la Ruleta grande (Amazon)

Los jugadores suelen apostar dónde se detendrá la rueda. Después de colocar sus apuestas en un área numerada o de color en un tablero estático que corresponde a los segmentos de la rueda, el anfitrión o jugador hace girar la rueda. Cuando la rueda se detiene, un indicador en la parte superior señala el segmento ganador.

Aquí construiremos una versión pequeña y electrónica del juego que usa un anillo de LEDs para resaltar un segmento ganador en lugar de una rueda mecánica giratoria. También añadimos un zumbador para efectos de sonido como el clic de la rueda giratoria y la señalización de una victoria.

Animated spin the wheel demo
Demostración del proyecto Gira la Ruleta

Siguiendo este tutorial, aprenderás a leer un botón pulsador, controlar LEDs y un zumbador usando un Arduino. También aprenderás a crear un efecto de giro usando LEDs para simular el movimiento de una rueda.

¡Así que empecemos y crea tu propio juego de Gira la Ruleta con Arduino!

Partes necesarias

A continuación encontrarás las partes necesarias para este proyecto. Si ya tienes un set de resistencias y ocho LEDs, no necesitarás el kit sugerido. Puedes montar el proyecto primero en una protoboard, pero no será necesario si quieres construir una rueda real y conectar los LEDs directamente. Para eso, el set de cables con clips será muy útil.

Arduino Uno

Dupont wire set

Set de cables Dupont

Set de cables con clips

Half_breadboard56a

Protoboard

Zumbador pasivo

Set de botones pulsadores

Kit de resistencias y LEDs

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Gira la Ruleta

En esta sección, te mostraré cómo conectar las partes y cómo escribir el código para el juego Gira la Ruleta. Para mantener el cableado y el código simples, usaré solo cuatro LEDs, mientras que la rueda real mostrada arriba tiene ocho. Pero el cableado y el código son fáciles de extender a más LEDs.

Cableado

La siguiente imagen muestra el cableado del juego Gira la Ruleta para cuatro LEDs. Simplemente usa los pines restantes (6,7,8,9) para extender a ocho LEDs, si quieres.

Comencemos conectando los LEDs. Como solo se encenderá un LED a la vez, solo necesitamos una resistencia limitadora de corriente de 220 Ohm entre el pin GND del Arduino y todos los pines cátodo (pines cortos) de los cuatro LEDs. Puedes encender más de un LED (sin dañar tu Arduino) pero los LEDs se verán más tenues.

Wiring of the Spin the Wheel game
Cableado del juego Gira la Ruleta

Luego, conecta los pines largos de los LEDs a las salidas GPIO 2,3,4 y 5 del Arduino. Como mencioné, para ocho LEDs conecta los pines 6,7,8,9 de la misma manera.

Después, conectamos el zumbador. Ten en cuenta que es un zumbador pasivo con polaridad. El pin negativo debe conectarse a tierra (GND) y el pin positivo lo conectamos al GPIO 11. De lo contrario, no escucharás ningún sonido.

Por último, el botón pulsador que activa el juego. Necesitamos una pull-up resistor de 1 Kilo Ohm que está conectada a 5V y al botón. El mismo pin del botón también está conectado al GPIO 12. Y finalmente, el otro pin del botón debe conectarse a tierra.

Y con eso se completa el cableado. Si tienes dudas, echa un vistazo a la tabla de cableado detallada a continuación.

Tabla de cableado

Desde Pin Color del cable Hacia Pin
Arduino GND Azul Resistencia 220Ω 1
Resistencia 220Ω 2 Azul LED1 Cátodo
Resistencia 220Ω 2 Azul LED2 Cátodo
Resistencia 220Ω 2 Azul LED3 Cátodo
Resistencia 220Ω 2 Azul LED4 Cátodo
Arduino 2 Blanco LED1 Ánodo
Arduino 3 Amarillo LED2 Ánodo
Arduino 4 Verde LED3 Ánodo
Arduino 5 Naranja LED4 Ánodo
Arduino GND Azul Zumbador Pin negativo
Arduino 11 Morado Zumbador Pin positivo
Arduino 5V Resistencia 1KΩ 1
Resistencia 1KΩ 1 Botón 1
Botón 1 Cian Arduino 12
Botón 2 Azul Arduino GND

Código

En esta sección implementaremos el código que controla el juego. Queremos que los LEDs se enciendan en una secuencia circular que se ralentice con el tiempo hasta detenerse completamente. Al mismo tiempo, queremos hacer un sonido de clic, similar al sonido que hace la rueda giratoria, y reproducir un sonido de victoria cuando la rueda se detenga. Finalmente, queremos iniciar el juego cuando se presione el botón.

El código a continuación hace todo eso. Échale un vistazo rápido para obtener una visión general. Después entraremos en detalles.

const int btnPin = 12;
const int buzzerPin = 11;
const int nLeds = 4;
const byte ledPins[] = { 2, 3, 4, 5 };

int curLed = 0;

void setLed(int state, int pause) {
  digitalWrite(ledPins[curLed], state);
  delay(pause);
}

void spin(int pause) {
  curLed = (curLed + 1) % nLeds;
  tone(buzzerPin, 100, 5);
  setLed(HIGH, pause);
  setLed(LOW, 0);
}

void win() {
  for (int i = 0; i < 10; i++) {
    tone(buzzerPin, 1000, 100);
    setLed(LOW, 100);
    tone(buzzerPin, 1500, 100);
    setLed(HIGH, 100);
  }
  noTone(buzzerPin);
}

void setup() {
  pinMode(buzzerPin, OUTPUT);
  for (int i = 0; i < nLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  int button = digitalRead(btnPin);
  if (button == LOW) {
    setLed(LOW, 0);
    int start = random(1, 50);
    for (int pause = start; pause < 300; pause += 10) {
      spin(pause);
    }
    win();
  }
  delay(100);
}

Constantes y variables

Comenzamos definiendo las constantes y variables usadas en el código. La btnPin constante especifica el pin al que está conectado el botón. La buzzerPin constante especifica el pin al que está conectado el zumbador.

La nLeds variable especifica el número de LEDs usados en el juego. El ledPins array contiene los pines a los que están conectados los LEDs. Si quieres añadir más LEDs, simplemente extiende el ledPins array y ajusta la constante nLEDs en consecuencia.

const int btnPin = 12;
const int buzzerPin = 11;
const int nLeds = 4;
const byte ledPins[] = { 2, 3, 4, 5 };

La variable curLed controla qué LED está activo actualmente. Es un índice dentro del array ledPins. Todos los demás LEDs estarán inactivos.

int curLed = 0;

Función setLed

La función setLed() es responsable de establecer el estado del LED actual y pausar por una duración especificada. Toma dos parámetros: state (HIGH o LOW) y pause (la duración en milisegundos para pausar después de establecer el estado del LED).

Si tienes dificultades con esto, echa un vistazo a nuestro tutorial sobre How To Blink An LED Using Arduino.

void setLed(int state, int pause) {
  digitalWrite(ledPins[curLed], state);
  delay(pause);
}

Función spin

La función spin() se llama cuando se presiona el botón para iniciar el giro de la rueda. Incrementa la variable curLed para seleccionar el siguiente LED en la secuencia. También reproduce un tono muy corto (5 ms), bajo (100 Hz) en el zumbador. Esto sonará como si el indicador golpeara los pines de la rueda giratoria. Luego, llama a la función setLed() para encender el LED actual por una duración de pausa especificada y luego apagarlo.

La expresión curLed = (curLed + 1) % nLeds asegura que curLed se reinicie a 0 cuando llegue al número de LEDs (nLeds).

Si quieres aprender más sobre cómo controlar un zumbador, puedes leer How To Interface A Piezo Buzzer With Arduino.

void spin(int pause) {
  curLed = (curLed + 1) % nLeds;
  tone(buzzerPin, 100, 5);
  setLed(HIGH, pause);
  setLed(LOW, 0);
}

Función win

La función win() se llama cuando la rueda deja de girar. Reproduce una secuencia de tonos en el zumbador y alterna encender y apagar los LEDs para un efecto visual atractivo. Después de que la melodía termina, el zumbador se apaga.

void win() {
  for (int i = 0; i < 10; i++) {
    tone(buzzerPin, 1000, 100);
    setLed(LOW, 100);
    tone(buzzerPin, 1500, 100);
    setLed(HIGH, 100);
  }
  noTone(buzzerPin);
}

Función setup

En la función setup(), configuramos el pinMode del pin del zumbador a OUTPUT, ya que escribiremos en él. También configuramos el pinMode de cada pin de LED en el array ledPins a OUTPUT. Y el pin del botón btnPin se configura como INPUT, ya que vamos a leer su estado.

void setup() {
  pinMode(btnPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  for (int i = 0; i < nLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

Función loop

La función loop() es la parte principal del código que se ejecuta continuamente. Primero lee el estado del botón usando digitalRead(). Si el botón está presionado (LOW), apaga el LED actual, genera un valor de inicio aleatorio para la duración de la pausa y luego llama a la función spin() repetidamente con duraciones de pausa crecientes hasta alcanzar un valor máximo (500 ms). Finalmente, llama a la función win() para reproducir la secuencia de victoria.

Para más información sobre cómo leer un botón, echa un vistazo a nuestro tutorial sobre How To Use A Push Button With Arduino.

void loop() {
  int button = digitalRead(btnPin);
  if (button == LOW) {
    setLed(LOW, 0);
    int start = random(1, 50);
    for (int pause = start; pause < 500; pause += 10) {
      spin(pause);
    }
    win();
  }
  delay(100);
}

¡Y eso es todo! Con este código obtienes un bonito efecto de rueda giratoria. Una vez que se presiona el botón, los LEDs se encienden en orden circular y, dado que el tiempo de pausa aumenta constantemente, la secuencia se vuelve cada vez más lenta hasta alcanzar el estado ganador. Después de eso, puedes presionar el botón de nuevo. Y como el inicio es aleatorio, el tiempo de giro varía en cada pulsación.

Rueda impresa en 3D

Puedes colocar fácilmente cuatro LEDs en una protoboard, pero con ocho LEDs se complica. Quería tener una rueda bonita y usé mi impresora 3D para imprimir un soporte para LEDs con la forma:

Front and back of the 3D design for the wheel
Frontal y trasera del diseño 3D para la rueda

Puedes descargar el STL file for the Wheel here. Observa los dos soportes en la parte trasera, donde puedes insertar dos palillos de madera. Esto te permite posicionar la rueda en un ángulo, si quieres. La imagen abajo muestra cómo se ve la rueda impresa en 3D cuando los LEDs están colocados.

Rueda impresa en 3D con LEDs

Siéntete libre de usar esto como punto de partida para un diseño más bonito. Me gustaría imprimir una carcasa completa con un Arduino Nano integrado y el botón de inicio en el centro. Pero eso será para otro tutorial.

Conclusión

En este tutorial, hemos aprendido a construir un juego Gira la Ruleta. Siguiendo las instrucciones paso a paso, ahora deberías tener un juego completamente funcional.

Comenzamos reuniendo todas las partes necesarias, que incluyen una placa Arduino, LEDs, un botón, un zumbador y un pulsador. Luego, pasamos por el proceso de cablear los componentes a la placa Arduino. Es importante prestar atención a las conexiones, de lo contrario los LEDs no se encenderán en el orden correcto. Una vez completado el cableado, pasamos a la parte de programación.

En conclusión, construir un juego Gira la Ruleta es un proyecto divertido y atractivo que muestra la versatilidad de las placas Arduino. Te permite combinar hardware y software para crear un juego interactivo que puede ser disfrutado por personas de todas las edades.

Entonces, ¿por qué no reunir las partes necesarias, seguir las instrucciones de este tutorial y crear tu propio juego Gira la Ruleta? Es una excelente manera de aprender más sobre Arduino, mejorar tus habilidades de programación y divertirte con tus amigos y familia.

Si tienes alguna pregunta o encuentras dificultades durante el proceso, no dudes en consultar la sección de Preguntas Frecuentes o contactar con la comunidad Arduino para obtener ayuda. ¡Feliz construcción!

Preguntas Frecuentes

Aquí tienes algunas preguntas frecuentes sobre cómo construir un juego Gira la Ruleta.

¿Qué es un juego Gira la Ruleta?

Un juego Gira la Ruleta es un juego popular donde los jugadores giran una rueda para determinar su premio o resultado. Se usa a menudo en concursos, ferias y eventos para añadir un elemento de emoción y azar.

¿Cómo funciona el juego Gira la Ruleta?

El juego Gira la Ruleta funciona usando el Arduino para controlar los LEDs y el zumbador según la entrada del botón pulsador o interruptor. Cuando se presiona el botón, el Arduino enciende los LEDs en secuencia mientras reproduce un efecto de sonido a través del zumbador. La secuencia se ralentiza hasta que se enciende un LED final, señalando el fin del juego.

¿Puedo personalizar los resultados del juego Gira la Ruleta?

Sí, puedes personalizar los resultados del juego Gira la Ruleta según tus preferencias. Puedes asignar diferentes premios, acciones o mensajes a cada LED y modificar el código Arduino en consecuencia.

¿Hay características adicionales que pueda añadir al juego Gira la Ruleta?

¡Por supuesto! Puedes mejorar el juego Gira la Ruleta añadiendo características adicionales como una pantalla para mostrar el resultado seleccionado, un motor para girar físicamente la rueda o incluso conectividad inalámbrica para controlar el juego remotamente.

¿Puedo tener más de ocho LEDs en la rueda?

El número de puertos GPIO en un Arduino Uno es limitado. Si quieres añadir más LEDs, digamos 16, necesitarás una placa más grande con más pines GPIO o usar un expansor GPIO. Consulta nuestro tutorial Using GPIO Expander MCP23017 With Arduino, que te permitirá controlar hasta 128 LEDs.

¿Puedo encender más de un LED a la vez?

Sí, puedes. Pero dado que todos los LEDs están conectados a través de una sola resistencia limitadora de corriente, cuantos más LEDs estén activos, más tenues se verán. Puedes conectarlos individualmente para evitar esto, pero entonces podrías necesitar una fuente de alimentación adicional.

Si tienes alguna pregunta o necesitas ayuda, no dudes en dejar un comentario.

¡Feliz bricolaje ; )