Airhockey-Arduino

Anteproyecto de práctica de arduino:Tablero de air-hockey automático

Iago Calvo Lista
Aitor Matilla Casanova
Introducción:
El objetivo de este proyecto será crear un
tablero de air hockey automatizado que permita simular a un segundo jugador de
este juego.
Implementación:
Para lograr hacer posible esta idea en primer
será necesario conseguir  que la máquina
pueda mover el pusher con el que golpear al disco, lo que se realizará creando
un sencillo brazo mecánico, usando dos trozos de madera unidos y movidos por
dos servomotores.
En segundo lugar será necesario localizar la
posición del disco en la mesa de air-hokey, esto se hará creando un grid de
LDR, iluminados cada uno por un puntero láser, debido a que se usará un divisor
de tensión con un resistencia fija permitirá que cuando el disco pase, el LDR
dejará de ser iluminado por el láser por lo que el valor de la resistencia ofrecida
será muy bajo permitiendo que Arduino lea un voltaje bajo o alto en función de
si el disco pasa o no por esa zona del grid.
Materiales:
Nombre
cantidad
precio
Resistencia LDR
11
1,30(x30)
Resistencia
11
Proporcionada
puntero laser
11
12,20 (x30)
Pilas (placa y lasers)
4
7,5 (x4)
Arduino UNO R3
1
Proporcionada
Servomotores
2
13,45(x4)
Trozos de madera (bordes)
4
10.5(x4)
Trozos de tubo PVC
varios
2.5(x2.2m)
Código arduino:

span {
font-family: ‘Courier New’;
font-size: 10pt;
color: #000000;
}
.sc0 {
}
.sc2 {
color: #008000;
}
.sc3 {
color: #008080;
}
.sc4 {
color: #FF8000;
}
.sc5 {
font-weight: bold;
color: #0000FF;
}
.sc6 {
color: #808080;
}
.sc9 {
color: #804000;
}
.sc10 {
font-weight: bold;
color: #000080;
}
.sc11 {
}
.sc16 {
color: #8000FF;
}

// Incluímos la librería para poder controlar el servo
#include <Servo.h>

//pines usados
int LDR[] = {A0,A1,A2,A3};//Derecha Sup, Derecha Inf, Izq Sup, Izq Inf
int numLDR = 4;
int servoPin1 = 9;
int servoPin2 = 10;

int limiteLDR = 300;

int esperaAntes = 100;
int esperaRotacion = 200;
int esperaDespues = 500;
int esperaReinicio = 600;

int anguloDer = 45;
int anguloCentro=90;
int anguloIzq = 135;
int angulo1Inicio = 10;
int angulo2Inicio = 170;

//———————
Servo servoMotorAbajo;
Servo servoMotorArriba;

int LDREstados[] = {0,0,0,0};
int lasersCruzados=0;
int sensor;

void setup() {
// Iniciamos el monitor serie para mostrar el resultado
//Serial.begin(9600);

for(int i = 0; i<numLDR;++i)
{
pinMode(LDR[i],INPUT);
}

// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotorAbajo.attach(servoPin1);
servoMotorArriba.attach(servoPin2);

// Desplazamos el brazo la posición recogida
servoMotorAbajo.write(angulo1Inicio);
servoMotorArriba.write(angulo2Inicio);
}

void loop(){}

void aux() {
if(lasersCruzados>3)
{
Serial.println(«Necesidad de movimiento detectada.»);
if(LDREstados[0] == 1 && LDREstados[1] == 2)
{
Serial.println(«Moviendo a la Izquierda.»);
/**
delay(esperaAntes);
servoMotorAbajo.write(anguloIzq);
servoMotorArriba.write(180);
delay(esperaRotacion);
servoMotorArriba.write(0);
delay(esperaDespues);/**/

}
else if(LDREstados[2] == 1 && LDREstados[3] == 2)
{
Serial.println(«Moviendo a la Derecha.»);
/**
delay(esperaAntes);
servoMotorAbajo.write(anguloCentro);
servoMotorArriba.write(0);
delay(esperaRotacion);
servoMotorArriba.write(180);
delay(esperaDespues);/**/

}
else
{
Serial.println(«Moviendo al centro.»);
/**
delay(esperaAntes);
servoMotorAbajo.write(anguloCentro);
servoMotorArriba.write(0);
delay(esperaRotacion);
servoMotorArriba.write(180);
delay(esperaDespues);/**/

}
Serial.println(«Fin del movimiento, reinicio del sistema.»);
lasersCruzados=0;
for(int i = 0; i<numLDR;++i)
{
LDREstados[i]=0;
}
//servoMotorAbajo.write(angulo1Inicio);
//servoMotorArriba.write(angulo2Inicio);
delay(esperaReinicio);
Serial.println(«Fin del reinicio, listo para la nueva ronda.»);
/**/
Serial.print(«LDREstados: «);
Serial.print(LDREstados[0]);
Serial.print(«, «);
Serial.print(LDREstados[1]);
Serial.print(«, «);
Serial.print(LDREstados[2]);
Serial.print(«, «);
Serial.print(LDREstados[3]);
Serial.print(» LasersCruzados: «);
Serial.print(lasersCruzados);
Serial.println(» «);
/**/
}
else
{
for(int i = 0; i<numLDR;++i)
{
if(LDREstados[i] != 0)
{
sensor=analogRead(LDR[i]);
if(sensor<limiteLDR )
{
LDREstados[i]=++lasersCruzados;
/**/
Serial.print(«laser «);
Serial.print(i);
Serial.print(«cruzado: LDREstados: «);
Serial.print(LDREstados[0]);
Serial.print(«, «);
Serial.print(LDREstados[1]);
Serial.print(«, «);
Serial.print(LDREstados[2]);
Serial.print(«, «);
Serial.print(LDREstados[3]);
Serial.print(» LasersCruzados: «);
Serial.print(lasersCruzados);
Serial.println(» «);
/**/
}
}
}
}

}

También te podría gustar...

Deja una respuesta

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