Juego de Ping Pong con Arduino y Processing Versión 1

Arduino y Processing
Arduino y Processing

Hola a todos el día de hoy realizaremos un nuevo proyecto con arduino, este será un proyecto básico pero a la vez entretenido, el cual nos permitirá sumergirnos un poco más en la comunicación entre arduino y otros plataformas como en este caso Processing, además de ello también podremos comprobar cómo se comporta la comunicación analógica de arduino.

Materiales
1 Arduino (se recomienda Arduino Uno R3)
1 Potenciometro de 5 K ohms
3 Jumpers o cables de aproximadamente 10 Centímetros
1 Protoboard

Software requeridos (Ambos son gratuitos):
Arduino
Processing

Conceptos
Processing: es un lenguaje de programación creado en 2001, el cual es capaz de representar o emular en 2 o 3D una serie de instrucciones para así mostrar un resultado gráfico.

Aclaraciones: En este post no explicaremos como se a realizado la programación en processing ya que si no hemos explicado los fundamentos, no creemos que se pueda entender un lenguaje nuevo y solo causaría confusión con el lenguaje de arduino ya que son muy parecidos pero no iguales, por tal solo explicaremos la parte de arduino (en un post que dejaremos abajo de la programación y las conexiones físicas necesarias para realizar el proyecto.

Archivos del proyecto: pinpong

Contraseña para descomprimir:ingenieriaelectronica.org

 

Empezamos

Primero que nada debemos tener instalado el software processing y Arduino, una vez que ya los tengan instalados los abrimos y se verán así:

Ping Pong con Arduino y Processing 1
Ping Pong con Arduino y Processing 1

Ahora copiamos y pegamos la programación de processing en su software:

Anuncio
/**
* Programa PinPong.
*
* 5 Junio 2013 Douglass Mejia
*/
import processing.serial.*;
String portname = "COM8"; // aquí colocamos el puerto por el que recibimos el dato
Serial port; // Creamos un objeto llamado port de la clase Serial
// Variables para definir la pelota
float ball_x;
float ball_y;
float ball_dir = 1;
float ball_size = 5; // Radio
float dy = 0; // Dirección
// variables para definir la pala
int paddle_width = 5;
int paddle_height = 20;
int paddle_pos; // nueva posición
int paddle_ppos; // última posición
int dist_wall = 15;
void setup()
{
size(255, 255);
rectMode(CENTER);
ellipseMode(CENTER);
noStroke();
smooth();
ball_y = height/2;
ball_x = 1;
// Abre el puerto al que esta conectada la tarjeta con una velocidad de (19200 bps)
port = new Serial(this, portname, 19200);
}
void draw()
{
background(51);
ball_x += ball_dir * 2.0;
ball_y += dy;
if(ball_x > width+ball_size) {
ball_x = -width/2 - ball_size;
ball_y = random(0, height);
dy = 0;
}
if (port.available() > 0) { // Si el dato está disponible,
paddle_ppos = paddle_pos; // guarda la ultima posición
paddle_pos = port.read(); // lee y almacena la nueva posición
}
// Desplaza la pala verticalmente en la pantalla
float paddle_y = constrain(paddle_pos, paddle_height, height-paddle_height);
// Testea si la pelota toca la pala
float py = width-dist_wall-paddle_width-ball_size;
if(ball_x == py
&& ball_y > paddle_y - paddle_height - ball_size
&& ball_y < paddle_y + paddle_height + ball_size) {
ball_dir *= -1;
if(paddle_pos != paddle_ppos) {
dy = (paddle_pos - paddle_ppos)/2.0;
if(dy > 5) { dy = 5; }
if(dy < -5) { dy = -5; }
}
}
// Si la pelota toca la pala o la pared, cambia de dirección
if(ball_x < ball_size && ball_dir == -1) {
ball_dir *= -1;
}
// Si la pelota toca la parte superior o inferior del borde, cambia dirección
if(ball_y > height-ball_size) {
dy = dy * -1;
}
if(ball_y < ball_size) {
dy = dy * -1;
}
// Dibuja la pelota
fill(255);
ellipse(ball_x, ball_y, ball_size, ball_size);
stroke(255,255,255);
// Dibuja la paleta
fill(153);
rect(width-dist_wall, paddle_y, paddle_width, paddle_height);
rect(2, paddle_y, paddle_width, paddle_height);
}

Ahora colocamos la de Arduino:
Para saber que significa cada instrucción de esta programación visita este tema:

int potPin=0;
void setup(){
Serial.begin(19200);
}
void loop(){
int val=analogRead(potPin);
val=val/4;
Serial.write(val); //
delay(100);
}

Asi quedara

Ping Pong con Arduino y Processing 2
Ping Pong con Arduino y Processing 2

Una vez hecho esto, conectaremos el arduino y potenciómetro como se ejemplifica en esta imagen

Conexiones de arduino
Conexiones de arduino

El cable rojo que va al potenciómetro es positivo y debe ir a los 5 Volts de arduino
El cable negro es negativo y debe ir al GND de arduino
El cable amarillo es el que enviara las variaciones analógicas dependiendo del movimiento del potenciómetro, estas variaciones serán interpretadas por processing y la paleta para el juego de pingpong se moverá y va conectado a la entrada analógica 0 (si se quiere poner en otro puerto deben cambiar una de las líneas de programación de arduino la cual es esta: int potPin=0;  y cambiar ese 0 por el número de puerto en el que lo conectaran.

Cosas que podrían salir mal

El software arduino no me deja compilar el programa: Ve a tu software y en los menús superiores dirígete al que dice Herramientas, una vez hay ve a la opción de dice Placa y fíjate que este seleccionada la placa que estés usando, si no lo está, simplemente selecciónala, si esto no resuelve el problema, repite los pasos anteriores pero ahora ve a la opción Puerto y si no hay un puerto seleccionado, selecciona en el que esté conectado tu arduino.

El software processing me marca error cuando lo quiero ejecutar: Bueno hemos tenido este mismo error y tardamos una media hora revisando todo el programa para darnos cuenta de que el problema estaba en el puerto de arduino, lo que paso es que conectamos un nuevo arduino uno r3 a la computadora donde se realizaba la práctica, al escoger el puerto en el software arduino nos dimos cuenta de que ya no era el puerto 8 si no el 6 por tal también debemos cambiar el puerto en processing editado esta linea de código: String portname = «COM8»;  en nuestro caso cambiamos el 8 por 6 y funciono correctamente, en su caso verifiquen en que puerto esta su arduino y cambien el puerto en la linea de processing especificada.

Resultado

El resultado deberá ser parecido a este:

Ping Pong con Arduino y Processing Resultado
Ping Pong con Arduino y Processing Resultado

Recuerden que esta solo es la versión 1 de este proyecto, en futuras versiones agregaremos más elementos como un segundo jugador, marcadores, leyendas y más.

Artículos Relacionados

Deja una respuesta

3 Comments

  1. Buenas estimados de IngenieriaElectronica.org, y al momento de implementar el juego pero para dos jugadores, como cambiaria la lectura de los puertos analogicos?

    1. no sirve para una mierda estafador me cago en tu prima que tiene un cipote mas grande que tu cabeza. que llevo 5 años suspendiendo tecnologia por tu culppa perro

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies