Para la realización de este proyecto el primer problema fue el nombre, no
era un Pinball, un Flipper o un Tacataca, así que le puse Taca-Gol, lo que
en realidad no tiene importancia alguna para este proyecto.
Es un juego para dos jugadores que presionando unos micro
switchs mueven dos paletas que impulsan a una bola de cristal por la cancha,
tratando de meter un gol. Lo ideal hubiera sido utilizar 4 servos, pero solo
tenía dos, así que en el diagrama pueden ver como lo solucioné colocando una
paleta más larga que gira en su centro y lleva un engranaje que disminuye la
velocidad del servo, pero aumenta la potencia del golpe.
Este video que viene más abajo, contiene todos los detalles
necesarios para comprender y realizar este proyecto, además al final
encontrarán, cada una de las partes del video por separado, para no tener
que verlo completo, estas partes son:
#include <Servo.h>
// incluimos librería de servos
Servo Servo_1;
// creamos un primer objeto servo que se llama Servo_1
Servo Servo_2;
// creamos un segundo objeto servo que se llama Servo_2
int led_1 = 6;
// a la variable led_1 le asignamos valor '6'
int led_2 = 7;
// a la variable led_2 le asignamos valor '7'
int led_3 = 8;
// a la variable led_3 le asignamos valor '8'
int led_4 = 9;
// a la variable led_4 le asignamos valor '9'
int boton1 = 0;
// a la variable boton1 le asignamos valor '0'
int boton2 = 0;
// a la variable boton2 le asignamos valor '0'
int boton3 = 0;
// a la variable boton3 le asignamos valor '0'
int boton4 = 0;
// a la variable boton4 le asignamos valor '0'
void setup() {
Serial.begin(9600);
// iniciamos puerto serial a 9600 baudios
Serial.print("A prepararse... comienza el juego");
// imprimimos en pantalla
pinMode(2, INPUT);
// pin 2 como 'INPUT'
pinMode(3, INPUT);
// pin 3 como 'INPUT'
pinMode(4, INPUT);
// pin 4 como 'INPUT'
pinMode(5, INPUT);
// pin 5 como 'INPUT'
pinMode(6, OUTPUT);
// pin 6 como 'OUTPUT'
pinMode(7, OUTPUT);
// pin 7 como 'OUTPUT'
pinMode(8, OUTPUT);
// pin 8 como 'OUTPUT'
pinMode(9, OUTPUT);
// pin 9 como 'OUTPUT'
Servo_1.attach(12);
// enviamos señal ancho de pulso a Servo_1 por pata 12
Servo_2.attach(11);
// enviamos señal ancho de pulso a Servo_2 por pata 11
}
void loop() {
boton1 = digitalRead(2);
// almacenamos en boton1 variables de puerto digital 2
boton2 = digitalRead(3);
// almacenamos en boton2 variables de puerto digital 3
boton3 = digitalRead(4);
// almacenamos en boton3 variables de puerto digital 4
boton4 = digitalRead(5);
// almacenamos en boton4 variables de puerto digital 5
Serial.print("boton1: "); Serial.print(boton1);
// imprimimos texto y valores de boton1
Serial.print(" boton2: "); Serial.print(boton2);
// imprimimos texto y valores de boton2
Serial.print(" boton3: "); Serial.print(boton3);
// imprimimos texto y valores de boton3
Serial.print(" boton4: "); Serial.println(boton4);
// imprimimos texto y valores de boton4
Servo_1.write(93);
// ponemos Servo_1 en posición intermedia
Servo_2.write(98);
// ponemos Servo_2 en posición intermedia
digitalWrite(led_1, HIGH);
// ponemos 5 voltios en salida pin 2
digitalWrite(led_2, HIGH);
// ponemos 5 voltios en salida pin 3
digitalWrite(led_3, HIGH);
// ponemos 5 voltios en salida pin 4
digitalWrite(led_4, HIGH);
// ponemos 5 voltios en salida pin 5
//........................... movimientos servo 1
if (boton1 == LOW) {
// si el boton1 = 'LOW'
digitalWrite(led_1, LOW);
// al pin 6 que se llama led_1 lo ponemos en 0 voltio
Servo_1.write(180);
// al Servo_1 lo giramos hasta 180°
}
if (boton2 == LOW) {
// si el boton2 = 'LOW'
digitalWrite(led_2, LOW);
// al pin 7 que se llama led_2 lo ponemos en 0 voltio
Servo_1.write(0);
// al Servo_1 lo giramos hasta 0°
}
//........................... movimientos servo 2
if (boton3 == LOW) {
// si el boton3 = 'LOW'
digitalWrite(led_3, LOW);
// al pin 8 que se llama led_3 lo ponemos en 0 voltio
Servo_2.write(180);
// al Servo_1 lo giramos hasta 180°
}
if (boton4 == LOW) {
// si el boton4 = 'LOW'
digitalWrite(led_4, LOW);
// al pin 9 que se llama led_4 lo ponemos en 0 voltio
Servo_2.write(0);
// al Servo_1 lo giramos hasta 0°
}
}
Fotografías del Proyecto
Podemos ver claramente las paletas, los micro swtichs, los
engranajes y la tarjeta Arduino Nano soportada en una placa junto a
otros componentes.
La cancha lleva 4 leds que se encienden cuando se presionan los
Micro Switchs.
Todo el cableado va por debajo.
Dos vistas de la placa con el Arduino Nano.
Un engranaje va conectado al eje del Servo y el otro forma parte de
la paleta
Detalles del Servo.
Detalle del micro Switch y uno de los Leds, que está montado en un
soporte de plástico, hecho con una printer 3D.
Paleta y engranajes en tamaño original
Este dibujo se puede imprimir y recortar en madera
para hacer las paletas y engranajes. Como detalle de estos
últimos, para los que lo qieran hacer en FreeCad, son engranajes
de Módulo 3 con 10 y 20 dientes respectivamente.
Vistas de soporte de los Leds, de los Micro Switch y de la tarjeta
impresa
Estos dibujos no están en tamaño
original, solo es para tener una idea al respecto, si alguien lo
necesita, me puede solicitar los archivos .STL para imprimir en una
Printer 3D
Circuito Impreso
Demo del Juego
Ahora veremos un demo del juego,
donde mi hija y mi nieta se enfrentan. Lo ideal sería pintar la
cancha y poner diferentes logos como en los flippers, lo dejé todo
al natural para que se viera más clara la construcción y sus
diferentes piezas.
El circuito es bastante sencillo comparado con otros
proyectos, lleva un Arduino nano, 2 Servos, 4 PushButton, 8
resistencias de 220 Ohms, 4 Leds y un conector para la
batería.