viernes, 7 de diciembre de 2012

Reto PacMan Bot

Tablero del PacManBot
El reto trata sobre programar la inteligencia del PacManBot, para que este sea autónomo y encuentre la galleta. El ejemplo que dejo tiene las opciones de manipulación por teclado con las flechas.
También espero que algunas partes del código sean de utilidad para quienes estén programando algún juego similar.
  • Enlace de descarga del codigo fuente en processing PacManBot
  • Enlace de descarga del mapa de juego Mapa
No olvidar colocar el mapa dentro de la misma carpeta de programa, no es necesario crear la carpeta data.
El reto para los estudiantes de la UNIAJC es el siguiente:
  • 3 Puntos por mover el PacManBot en pantalla, siempre se debe estar moviendo.
  • 1 Punto por llegar a la galleta en un laberinto sencillo en donde no hay callejones sin salida. Máximo 3 minutos.
  • 1 Punto por llegar a la galleta en un laberinto complejo.

Algoritmos que se pueden consultar sobre resolver laberintos:

Estos son algunos de los enlaces que consulte sobre Pacman:




lunes, 12 de noviembre de 2012

Ejemplo ciclos en PSEINT



Hacer un programa que muestre y cuente múltiplos de 3 hay entre 1 y 100.
  • Para la variable contadora tenemos que:  valor inicial  3, valor final 99, incremento 3
  • Para la variable acumuladora tenemos que:  valor inicial 0, ecuación s<-s+1
Proceso ExFi004
definir i,s Como Entero
i<-3;
s<-0;
Mientras i<=99 Hacer
Escribir "i= ",i;
s<-s+1;
i<-i+3;
FinMientras
Escribir "El numero de multiplos de 3 entre 1 y 100 es ",s;
FinProceso

Hacer un programa que calcule la suma de los numero impares comprendidos entre el 0 y el 100
  • Para la variable contadora tenemos que:  valor inicial  1, valor final 99, incremento 2
  • Para la variable acumuladora tenemos que:  valor inicial 0, ecuación s<-s+i
Proceso ExFi005
definir i,s Como Entero
i<-1;
s<-0;
Mientras i<=99 Hacer
s<-s+i;
i<-i+2;
FinMientras
Escribir "La suma de los impares entre 0 y 100 es ",s;
FinProceso

Hacer un programa que muestre y cuente los múltiplos de 5 que hay entre 1 y 500;
  • Para la variable contadora tenemos que:  valor inicial  5, valor final 500, incremento 5
  • Para la variable acumuladora tenemos que:  valor inicial 0, ecuación s<-s+1
Proceso ExFi006
definir i,s Como Entero
i<-5;
s<-0;
Mientras i<=500 Hacer
s<-s+1;
i<-i+5;
FinMientras
Escribir "La cantidad de multiplos entre 1 y 500 es ",s;
FinProceso

Hacer un programa que muestre, cuente y sume los múltiplos de 2 hasta un numero que se introduce por teclado.
  • Para la variable contadora tenemos que:  valor inicial  2, valor final el numero que se introduce por teclado, incremento 2
  • Para la variable acumuladora 1 tenemos que:  valor inicial 0, ecuación c<-c+1
  • Para la variable acumuladora 2 tenemos que:  valor inicial 0, ecuación s<-s+i
Proceso ExFi007
definir i,s,c,n Como Entero
i<-2;
s<-0;
c<-0;
Escribir "¿Hasta que valor desea hacer la sumatoria?";
Leer n;
Mientras i<=n Hacer
Escribir "Multiplo de 2 = ",i;
c<-c+1;
s<-s+i;
i<-i+2;
FinMientras
Escribir "La cantidad de multiplos entre 2 y ",n," es ",c;
Escribir "La sumatoria de multiplos entre 2 y ",n," es ",s;
FinProceso

Hacer un programa que muestre, cuente y sume los números que están separados por 8 posiciones desde un valor introducido por teclado hasta 500.
  • Para la variable contadora tenemos que:  valor inicial  el valor que se introduce por teclado, valor final 500, incremento 8
  • Para la variable acumuladora 1 tenemos que:  valor inicial 0, ecuación c<-c+1
  • Para la variable acumuladora 2 tenemos que:  valor inicial 0, ecuación s<-s+i
Proceso ExFi008
definir i,s,c,n Como Entero
s<-0;
c<-0;
Escribir "¿Desde que valor incia la sumatoria?";
Leer n;
i<-n;
Mientras i<=500 Hacer
Escribir "numero = ",i;
c<-c+1;
s<-s+i;
i<-i+8;
FinMientras
Escribir "La cantidad de numeros desde ",n,"hasta 500 es ",c;
Escribir "La sumatoria de numeros desde ",n,"hasta 500 es ",s;
FinProceso

Hacer un programa que calcule la suma del los cuadrados de los numeros pares entre el 0 y el 100 (en este ejemplo se considera el 0 como par)
  • Para la variable contadora tenemos que:  valor inicial  0, valor final 100, incremento 2
  • Para la variable acumuladora tenemos que:  valor inicial 0, ecuación s<-s+i^2
Proceso ExFi009
definir i,s Como Entero
s<-0;
i<-0;
Mientras i<=100 Hacer
s<-s+i^2;
i<-i+2;
FinMientras
Escribir "La suma de cuadrados de pares desde ",0," a 100 es ",s;
FinProceso


Hacer un programa que calcule la suma de los cuadrados de números que estén separados 4 posiciones, desde un valor introducido por teclado hasta 100 .
  • Para la variable contadora tenemos que:  valor inicial  valor que se introduce por teclado, valor final 100, incremento 4
  • Para la variable acumuladora tenemos que:  valor inicial 0, ecuación s<-s+i^2
Proceso ExFi010
definir i,s,n Como Entero
s<-0;
Escribir "¿Desde que valor incia la sumatoria?";
Leer n;
i<-n;
Mientras i<=100 Hacer
s<-s+i^2;
i<-i+4;
FinMientras
Escribir "La suma de cuadrados separados 4 desde ",n," a 100 es ",s;
FinProceso

lunes, 5 de noviembre de 2012

Ejemplos de procontroll parte 3


Como utilizar el mando análogo
Como hacer vibrar los motores
Este es el código empleado en los ejemplos que se muestran en los vídeos.

//librerias para el manejo del game pad
import procontroll.*;
import net.java.games.input.*;
//instanciar objetos
ControllIO controllIO;
ControllDevice ControlJuego;
ControllStick ControlAnalogo;
float transX;
float transY;
//funcion de configuracion
void setup(){
  size(400,400);
  transX=200;
  transY=200;
  controllIO = ControllIO.getInstance(this);//Instacia del control de juego
  controllIO.printDevices();//muestra los dispositivos soportados por ControllIO
  ControlJuego = controllIO.getDevice(0);
  println(ControlJuego.getName()+" tiene:");//nombre del game pad
  println(" " + ControlJuego.getNumberOfButtons() + " botones");
  ControlJuego.printButtons();//muestra los botones del game pad
  println(" " + ControlJuego.getNumberOfSticks() + " analogos");
  ControlJuego.printSticks(); 
  ControlAnalogo = ControlJuego.getStick(0);
  ControlAnalogo.setMultiplier(1.00f);
  ControlAnalogo.setTolerance(0.06f);  
  ControlJuego.plug(this, "PresBoton0", ControllIO.ON_PRESS, 0);  
}
void draw(){
  ellipse(transX,transY,50,50);
  transX=transX+ControlAnalogo.getX();
  transY=transY+ControlAnalogo.getY();
}
void PresBoton0(){
  ControlJuego.rumble(1);
}

viernes, 2 de noviembre de 2012

Ejemplos de Procontroll parte 2


En este ejemplo se indica como acceder a los botones del control de juego y como generar una función asociada al evento de presión de un botón.



Ejemplo de como mover una circunferencia presionando los botones


En este vídeo se indica como colocar otros tipos de eventos asociados a los botones como son soltar botón y presionar permanentemente botón.
Codigo base empleado en los ejemplos
//librerias para el manejo del game pad
import procontroll.*;
import net.java.games.input.*;
//instanciar objetos
ControllIO controllIO;
ControllDevice ControlJuego;
//funcion de configuracion
void setup(){
  size(400,400);
  controllIO = ControllIO.getInstance(this);//Instacia del control de juego
  controllIO.printDevices();//muestra los dispositivos soportados por ControllIO
  ControlJuego = controllIO.getDevice(0);//asigna el dispositivo 0 que es el control
  println(ControlJuego.getName()+" tiene:");//nombre del game pad
  println(" " + ControlJuego.getNumberOfButtons() + " botones");//numero de botones
  ControlJuego.printButtons();//muestra los botones del game pad
  //manejo de enventos del control de juego
  //                      nombre   evento            #boton
  ControlJuego.plug(this, "PresBoton0", ControllIO.ON_PRESS, 0);
  ControlJuego.plug(this, "PresBoton1", ControllIO.ON_PRESS, 1);
  ControlJuego.plug(this, "PresBoton2", ControllIO.ON_PRESS, 2);
  ControlJuego.plug(this, "PresBoton3", ControllIO.ON_PRESS, 3);
  ControlJuego.plug(this, "PresBoton4", ControllIO.ON_PRESS, 4);
  ControlJuego.plug(this, "PresBoton5", ControllIO.ON_PRESS, 5);
  ControlJuego.plug(this, "PresBoton6", ControllIO.ON_PRESS, 6);
  ControlJuego.plug(this, "PresBoton7", ControllIO.ON_PRESS, 7);
  ControlJuego.plug(this, "PresBoton8", ControllIO.ON_PRESS, 8);
  ControlJuego.plug(this, "PresBoton9", ControllIO.ON_PRESS, 9);
}
void draw(){
  ellipse(200,200,50,50);
}
void PresBoton0(){
  fill(255,0,0);
}
void PresBoton1(){
  fill(0,255,0);
}
void PresBoton2(){
  fill(0,0,255);
}
void PresBoton3(){
  fill(255,255,0);
}
void PresBoton4(){
  fill(255,0,255);
}
void PresBoton5(){
  fill(0,255,255);
}
void PresBoton6(){
  fill(255,0,128);
}
void PresBoton7(){
  fill(128,128,0);
}
void PresBoton8(){
  fill(128,0,128);
}
void PresBoton9(){
  fill(0,128,128);
}

martes, 30 de octubre de 2012

Ejemplos de procontroll
















Este ejemplo es el mas básico y es el punto de partida para la utilización del procontrol. Aquí aseguramos que se ha detectado el dispositivo de control de juego y que lo hemos asignado a un ControllDevice para así utilizarlo en nuestro programa.
//librerias para el manejo del game pad
import procontroll.*;
import net.java.games.input.*;
//instanciar objetos
ControllIO controllIO;
ControllDevice ControlJuego;
//funcion de configuracion
void setup(){
  controllIO = ControllIO.getInstance(this);//Instacia del control de juego
  controllIO.printDevices();//muestra los dispositivos soportados por ControllIO
  ControlJuego = controllIO.getDevice(0);//asigna el game pad
  println(ControlJuego.getName()+" tiene:");//nombre del game pad
  println(" " + ControlJuego.getNumberOfButtons() + " botones");//numero botones
  ControlJuego.printButtons();//muestra los botones del game pad
}
void draw(){

}


En este segundo ejemplo se muestra como colocar un segundo dispositivo de entradaPocontroll
 
import procontroll.*;
import net.java.games.input.*;
ControllIO controllIO;
ControllDevice ControlJuego;
ControllDevice Raton;
void setup(){
  controllIO = ControllIO.getInstance(this);
  controllIO.printDevices();
  ControlJuego = controllIO.getDevice(0);
  Raton = controllIO.getDevice(3);
  
  println(ControlJuego.getName()+" tiene:");
  println(" " + ControlJuego.getNumberOfButtons() + " botones");
  ControlJuego.printButtons();
  
  println(Raton.getName()+" tiene:");
  println(" " + Raton.getNumberOfButtons() + " botones");
  Raton.printButtons();
  
}
void draw(){
  
}

lunes, 22 de octubre de 2012

Modificación control de juego

En este vídeo muestro como se modifica un control de juegos para adaptarlo como entradas digitales en processing utilizando la librería procontroll.

Ciclos en processing

Ejemplo de como utilizar una variable contadora para hacer una animación sencilla en processing.


Código:

int i;
void setup(){
  size(400,400);
  frameRate(30);
  i=0;
}
void draw(){
  background(255);
  println(i);
  fill(255,255,0);
  ellipse(i,i,i,i);
  i=i+1;
  if(i>=400){
   i=0;
  }
}



domingo, 21 de octubre de 2012

Como programar una GAL

En este video muestro como se realiza un programa muy sencillo en una GAL22V10 empleando WinCUPL
El entorno de programación de GAL que empleo se llama WinCUPL de Atmel, el software es gratuito previo registro.
  • Enlace de descarga WinCUPL
  • Descarga alternativa WinCUPL
  • Serial de activación dado por el soporte tecnico de Atmel 60008009
Guías y manuales

miércoles, 17 de octubre de 2012

Como Instalar procontroll en processing


Para poder usar joystick o gamepad desde processing podemos instalar la librería Procontroll.
En este caso interesa para hacer el suckerbot.
El procedimiento que se muestra en el vídeo se puede emplear para instalar cualquier otra librería en processing.
  • Para descargar la librería este es el enlace Procontroll
  • Para información de procontroll en este enlace Procontroll

Este vídeo muestra como se instala Procontroll en processing



lunes, 8 de octubre de 2012

Proyecto de curso S242


El segundo proyecto de curso sera la construcción de un robot con interface en processing. El robot a construir sera similar a el SuckerBot. Los estudiantes son libres de hacer modificaciones o otras propuestas similares al robot propuesto.

 Estos son los enlaces de algunas librerias que se instala en processing para comunicarse con el game pad
Explicaciones y ejemplos de uso de las librerias

jueves, 27 de septiembre de 2012

Robot con el 16F628A


Este es un robot construido utilizando el pic 16F628, este fue realizado por el estudiante Carlos Valverde empleando el lenguaje Great Cow Basic.
Robot Carlos
Los siguientes enlaces son de ayuda para quien desee construir un robot similar.

domingo, 23 de septiembre de 2012

Guía Pinguino Processing



En este enlace se puede descargar la guía de manejo de la tarjeta pinguino desde processing Guia Processing Pinguino.
Estos son enlaces donde se puede obtener mas información:
ejemplo de interfaz gráfica
ejemplo de vídeo juego
Pedal de guitarra


jueves, 20 de septiembre de 2012

Trabajos de grado UNIAJC 2012


Este es el resumen de los trabajos de grado que sustentaron estudiantes que dirigí. Una de las cosas a destacar es la utilización de la tarjeta pinguino como parte de los proyectos y por supuesto Linux Uniajc como sistema operativo para hacer la interfaz de comunicación.
Puente Grúa
Realizado por: 
DUVAN ACOSTA
MARIO MANBUSCAY
CARLOS LOPEZ
Electromiografo

Realizado por: 
 Arnold.Carabali
 Liseth Mina
Maquina fresadora (CNC)


Trabajo realizado por:
JHONATAN SOTO CAMPUZANO
JOSE LEANDRO GARCIA MURRILO

domingo, 16 de septiembre de 2012

MT8870 con processing y pinguino




El MT8870 es un codificador de tonos, con este circuito sencillo podemos hacer muchas cosas desde processing incluso enviar comandos a la tarjeta pinguino. El MT8870 puede ser de interface para cualquier teléfono y pinguino como propongo en la guía.
Guia Decodificador de Tonos MT8870

Scilab y Pinguino en Linux


Gracias a la una publicación de Jeyson ya instale el toolbox de puerto serial para pinguino, el archivo lo renonmbre por consola dejo por si alguien lo quiere hacer de esta manera
primero accedí a la carpeta donde esta el archivo a modificar
chome/usuario/.Scilab/scilab-5.3.3/atoms/serial/0.4-1/etc
tener cuidado en mi caso con los nombres de las carpetas, en mi caso por tener una versión anterior de Scilab y por estar en la carpeta de usuario, la ruta es

cd .Scilab/scilab-5.2.1/atoms/serial/0.4/etc
El problema tal como muestra  Jeyson es en el nombre del archivo start que hay que cambiarlo, así que utilizamos el comando mv
mv serial.start Serial.start
Ya con esto solucionamos el problema de que no se encuentra el archivo Serial.start
Viene la parte de pinguino, pinguino se coloca en modo CDC para que el sistema lo reconozca como un dispositivo serial en este caso ttyACM1
Para guiarse en el modo CDC se puede descargar del siguiente enlace. Pinguino CDC






Guia Pinguino CDC


En este enlace se puede descargar una guía de comunicación con pinguino en modo cdc
Guia Pinguino CDC

mesa multitouch

Este es el demo de una mesa multitouch, se realizo con una cámara común y materiales  fáciles de conseguir en este caso en la ciudad de Cali.
El programa se desarrollo con gcc y Open Framework bajo GNU/Linux.
 Open Framework se parece mucho a processing, pero el lenguaje empleado es C++, también tiene dos hilos de ejecución, para el programa tomamos el ejemplo de blobs en OpenCv.
Algunos bocetos de código los hicimos en processing, pero por la velocidad y rendimiento que requeríamos todo se llevo a Open Framework 
Primeras pruebas
Partículas
conexión con puntos
fractal

La elaboración del programa se realizo en compañia de la Ing: Marly Patricia Ching Gain.
En la mesa agradecemos la colaboración de Jose Julian Quintero M.quien aparece en el vídeo de fractal.

Maquina CNC


Este es otro de los trabajos de grado se han realizado en la UNIAJC por parte de estudiantes bajo mi dirección.
En este caso es una maquina CNC controlado con LINUX CNC que es una distribución basada en Ubuntu pero con kernel para ejecución de procesos en tiempo real.





Este trabajo fue realizado por los estudiantes:
OSCAR ANDRES BEDOYA HERNANDEZ
YERZON ANDRÉS DÍAZ GUTIERREZ
EDUAR ALIRIO GIL PADILLA

Robot omnidireccional


Este es un robot construido y diseñado por estudiantes de tecnología de la UNIAJC



Realizado por Estudiantes:
Ricardo Mayorga Guevara
Nixon Omar Lopez Chilama
Dirigido por el profesor
Ing. Fabian Andres Gonzalez Maldonado