Sistema cerebral

Recientemente, varios tipos de juegos intelectuales están ganando popularidad: “¿Qué? Donde ¿Cuándo? ”,“ Melotrek ”,“ Anillo cerebral ”. Pero para algunos tipos de juegos no puedes prescindir de un sistema especial que controlará el curso del juego. Aquí, como parte del proyecto del curso, decidieron intentar crear su propio sistema cerebral.

Antes de eso, nunca nos habíamos encontrado con Arduino o con algo de hardware, pero viendo cómo los amigos y conocidos en la universidad ensamblan fácilmente los dispositivos, queríamos intentar hacer lo nuestro. Como estábamos lo suficientemente lejos de este tema, la propuesta de ensamblar un sistema cerebral fue rechazada por nuestro líder, diciendo que este sería un buen comienzo para nosotros. Sorprendentemente, esto sucedió.

Para comenzar, determinamos el objetivo: el sistema cerebral debería emitir una señal de audio que indique el comienzo del tiempo de la ronda de preguntas y una señal que indique el final del tiempo de la ronda de preguntas, y también debería indicarle al anfitrión sobre la disposición del jugador para responder. Si un jugador presionó un botón, los botones restantes se bloquean. También debería existir la posibilidad de seleccionar un modo de juego.



Componentes requeridos


  • Arduino nano
  • Orador
  • LED 8 piezas
  • 4 . 2
  • DIP-
  • :
  • 8 . – 100 ( )
  • 6 . – 10 ( )
  • 6 . – 1
  • 4 . – 470 DIP ( )
  • 5 . – ( )
  • – 6 . 1
  • Ethernet- 4 .
  • RJ-45 — 4.


Vale la pena decir que el sistema se puede dividir en 3 bloques: el módulo principal, los botones del reproductor (4 piezas) y los cables de conexión. El sistema contiene 4 botones de jugador. Si el jugador logró presionar antes que los demás, entonces el LED de su botón se ilumina.

Host remoto. Si el jugador presionó un botón en su control remoto, entonces el diodo correspondiente al botón del jugador se ilumina en la unidad principal. Este módulo selecciona el modo de juego. El presentador tiene dos botones de inicio y reinicio. Dependiendo del juego, estos botones se encienden y reinician el temporizador.

Las señales de Arduino provienen de los botones. Si se presiona el botón, el diodo en el botón y en el control remoto del maestro se enciende y se enciende la señal de sonido. Este es el concepto principal.

Los botones y la consola maestra están conectados por un cable Ethernet. Un botón va al suelo, una unidad lógica y una señal que enciende y apaga el LED, y un botón viene del botón al módulo principal, presionando el botón.

Inicio del desarrollo


Comenzamos con lo más simple. Un circuito que incluye un diodo se ensambló en una placa de pruebas. ¡Todo funcionó! Seguimos adelante. Conectamos Arduino y botones, cuando se presionan, los diodos se iluminan. Y aquí nos enfrentamos con el problema de hacer sonar los botones.



En los botones, debe eliminar la vibración de la señal; de lo contrario, el sistema pensará que se presiona el botón muchas veces. Para los botones de los jugadores, esto no es muy aterrador, todavía atrapamos la primera pulsación, pero en el botón del inicio principal debes deshacerte del rebote, ya que en el anillo cerebral necesitas saber cuántas veces se presiona el inicio. Para hacer esto, el disparador Schmitt, el condensador y la resistencia se incluyen en el circuito del botón. Puedes leer sobre el rebote aquí .



Tanto los botones como el módulo principal usan LED. Pero 5V es demasiado voltaje para ellos. Por lo tanto, para evitar la combustión de diodos, las resistencias están conectadas a ellos en serie. Puede calcular la resistencia de las resistencias aquí . Debido al hecho de que todos los LED son iguales, necesitábamos 8 resistencias de 100 ohmios cada una.



El modo de juego se selecciona con DIP-SWITCH:

  1. Anillo cerebral
  2. Que? Donde Cuando
  3. Cuarteto de Scrabble, Troika, Juego propio (el sistema funciona igual en estos juegos)

Parte de software


La pereza es la clave del éxito.

En paralelo con el desarrollo del circuito, se escribió el código. Era obvio que las pulsaciones de los botones deberían manejarse mediante interrupciones. Restando aproximadamente 2 interrupciones externas INT0 e INT1, nos sentimos molestos, porque para hasta 6 botones, dos interrupciones no son suficientes y tendrá que aumentar la profundidad de bits a través del registro. Desde que nos topamos con hardware en vivo, para nosotros todo fue complicado e incomprensible. En general, no estábamos muy contentos con este hecho. Sin creer que nuestro problema no se puede resolver de otra manera, nos encontramos con solicitudes de interrupción de cambio de pin, que fueron perfectas para nuestro proyecto. No hay registros!

Puede familiarizarse con las interrupciones aquí .

En nuestro sistema cerebral, los botones SET y RESET corresponden a los pines D8 y D9, y los botones de usuario corresponden a A0-A3. Por lo tanto, definimos solo dos manejadores de interrupciones para cada uno de los grupos de interrupciones utilizados.

  • ISR (PCINT0_vect): para los botones maestros.
  • ISR (PCINT1_vect): para botones personalizados.

Las interrupciones se pueden definir para cada grupo y cada pin individualmente. Esto se realiza mediante los registros de control y las máscaras, en las cuales es necesario establecer los valores correspondientes. Para obtener más información sobre cómo configurar y resolver interrupciones, consulte aquí .

Los manipuladores de interrupciones interrogan los pines uno por uno para determinar qué botón se presionó. Esta situación es una de las limitaciones de estas interrupciones. El sistema cerebral debe responder a las pulsaciones de los botones, por lo que el valor del pin se compara con el nivel ALTO (es decir, se ha presionado el botón) en el controlador de interrupciones.

Configurar interrupciones
ISR(PCINT0_vect) {
	noInterrupts();
	isPushed = false;
	if (digitalRead(ADMIN_BUTTON_SET) == HIGH ) {	
		gameMode->Set();
		Timer1.attachInterrupt(TimerInterrupt);
		gameMode->SetFalseStart(false);
	}
	if (digitalRead(ADMIN_BUTTON_RESET) == HIGH) {
		Timer1.stop();
		gameMode->Reset();
		gameMode->SetFalseStart(true);
	}
	interrupts();
}

ISR(PCINT1_vect){
	noInterrupts();	
	if (isPushed == false){
		for (int i = 0; i < ARRAY_SIZE(ARRAY_USER_BUTTON); i++){
			if (digitalRead(ARRAY_USER_BUTTON[i]) == HIGH){
				isPushed = gameMode->UserButtonPushed(ARRAY_LED[i]);
			}
		}		
	}	
	interrupts();
}


Todo el código está aquí .

Instalación


Vimos el soldador por primera vez, así que comenzamos con un diodo tradicional. Soldamos - ¡el diodo se incendió! Luego se soldaron los botones. Comprobar si todo se hizo correctamente fue bastante difícil, porque el módulo principal todavía estaba en el tablero.



Los botones maestros, diodos, interruptor de modo de juego fueron soldados. En el proceso, nos dimos cuenta de que era posible salir adelante con un disparador de Schmitt. Luego, debe transferirse al módulo principal, llevar las salidas de los botones a través de un cable de red y las señales de su salida deben enviarse al Arduino.





En general, la unidad principal estaba lista. Pero aún así no estaba conectado con los botones de los jugadores. Tomamos la placa nativa del enrutador como base para la unidad principal, en la que era ventajoso usar conectores RJ-45. Aunque lo lamentamos un poco, porque cortar una tabla y soldar contactos en la segunda ronda no es una experiencia agradable. Pero todo salió con bastante éxito.

Usamos conductor blanco-naranja para la transmisión lógica 1, naranja para el 0 lógico, señal blanco-verde a diodo y señal de botón verde. Aunque puede usar cualquiera, lo principal es verificar qué cable se usa, porque hay varias opciones de engarzado.

Ahora el módulo principal y los botones estaban conectados y el sistema estaba casi listo, pero había un error que no estaba en el tablero. Si el botón no estaba conectado al módulo principal, entonces el sistema pensó que este botón estaba presionado. En Internet, encontramos una solución: una resistencia pull-up.

Para que las señales "no" lleguen a Arduino (cuando el botón no está conectado en absoluto) en el módulo principal, debe colocar una resistencia desplegable (de 10 kOhm) en cada salida de botón. Con un circuito abierto, una corriente no deseada pasará a través de la resistencia a tierra, y cuando se cierre debido a la alta resistencia de la resistencia, la señal irá al contacto de entrada.

Después de resolver este problema, funcionó.



Características del modo de juego


Características del anillo cerebral. Si no se ha presionado el inicio, el sistema define la presión del botón como un inicio falso. Si se presiona el inicio por primera vez, el sistema esperará 20 segundos para que se presionen los botones, después de un período de tiempo, el sistema hará sonar una alarma. Si durante este tiempo el equipo aún sabe la respuesta correcta y presiona el botón, suena la señal correspondiente y, a su vez, el temporizador se detiene. De acuerdo con las reglas, en caso de una respuesta incorrecta, otros equipos deberían poder responder. Para hacer esto, después de una segunda pulsación en el inicio, el temporizador comienza durante 10 segundos. El botón Restablecer restablece el sistema, se presiona antes de leer la siguiente pregunta.

Características ¿Qué? Donde Cuando


Después de presionar Inicio, suena una señal de sonido. Suena una señal acústica después de 50 y 60 segundos. En otros juegos, solo se capturan los botones del jugador. Gracias a la conveniencia de trabajar con Arduino, puedes implementar otros juegos: cambiar el temporizador, habilitar el inicio falso, etc. Esto se puede implementar agregando el código apropiado.




Conclusión


Funciona y gracias a Dios. Como esta fue nuestra primera experiencia de hardware, estamos satisfechos con los resultados. Y no solo porque todo funcionaba conectado en una placa de pruebas, sino también como un dispositivo completamente ensamblado. Se ha lanzado un sistema cerebral completo con modos, jugadores y un presentador. Como mejora del sistema, puede agregar una salida para altavoces para poder jugar en grandes torneos.
En cuanto a la placa Arduino, fue fácil y agradable trabajar. En Internet, hay suficiente información y tutoriales simples sobre el ensamblaje de piezas útiles e interesantes que no son las más fáciles para una persona que no se da cuenta. Esto bien puede convertirse en un hobby.

Oksana Kozlova y Marina Bardiyan participaron en el proyecto.

Source: https://habr.com/ru/post/es394359/


All Articles