martes, 9 de octubre de 2012

Control de un robot móvil con Java y microcontrolador 18F4550

Siguiendo con nuestras publicaciones orientadas al uso de microcontroladores PIC, en esta oportunidad voy a mostrar la manera de como controlar la movilidad de un robot terrestre utilizando Java y la tarjeta de adquisición de datos mostrada en el artículo pasado. Para el ejemplo diseñaremos una interfaz gráfica que nos permita operar un robot móvil de una buena manera.
La interfaz que se va a usar se muestra en la figura 1. En esta se pueden apreciar 2 botones con los cuales se va a controlar un robot de 4 llantas, cada una con tracción independiente. Los movimientos que se implementaron son los dos más básicos que puede tener un robot: ir hacia adelante o hacia atrás.


El código fuente que se encarga de realizar este trabajo es el siguiente:
private void btnAdelanteMousePressed(java.awt.event.MouseEvent evt) {                                         
// TODO add your handling code here:
    byte LED = 0x55;
    if (send_command(cmd_TRACCION_P, LED)) {
        mostrarMensaje("Mover robot hacia adelante");
    }
}                                        

private void btnAdelanteMouseReleased(java.awt.event.MouseEvent evt) {                                          
// TODO add your handling code here:
    byte LED = 0x00;
    if (send_command(cmd_TRACCION_P, LED)) {
        mostrarMensaje("Detener robot");
    }
}                                         

private void btnAtrasMousePressed(java.awt.event.MouseEvent evt) {                                      
// TODO add your handling code here:
    byte LED = (byte) 0xAA;
    if (send_command(cmd_TRACCION_P, LED)) {
        mostrarMensaje("Mover robot hacia atras");
    }
}                                     

private void btnAtrasMouseReleased(java.awt.event.MouseEvent evt) {                                       
// TODO add your handling code here:
    byte LED = 0x00;
    if (send_command(cmd_TRACCION_P, LED)) {
        mostrarMensaje("Detener robot");
    }
}                                      

public boolean send_command(byte command, byte param1) {
    boolean value = false;
    try {
        byte[] out = {command, param1};
        iface.QWrite(out, 2, 1000);
        value = true;
    } catch (UnsatisfiedLinkError ex) {
        mostrarMensaje("NVerifique conexión de dispositivo.");
        value = false;
    } finally {
        return value;
    }
}
La tarjeta de adquisición de datos usada por este programa fué utilizada también en el robot Gero2. Aquí les dejo un video para que puedan apreciar su funcionamiento:


El código fuente lo encuentran disponible en el siguiente enlace:

 

Así mismo recomiendo leer este artículo para poder ejecutar el proyecto: http://rolandopalermo.blogspot.com/2012/10/java-usb-pic-conversor-analogico-digital.html

6 comentarios:

Anónimo dijo...

Rolando, has logrado simular un puerto USB desde Proteus, en una máquina de 64 bit. Sin recurrir a una máquina virtual ?.

Gracias

Rolando Palermo Rodríguez Cruz dijo...

No lo he probado pero creo que no habría ningún problema.

Anónimo dijo...

El driver para la simulación del usb en Proteus sobre un SO de 64 bit, hasta donde sé no existe.

Anónimo dijo...

hola Rolando alguna vez has conectado un dispositivo plc a una pagina web en html ?

William dijo...

Hola Rolando , como se podria hacer para recibir datos desde el PIC (por ejemplo: ver el estado en que se encuentra un pin digital y luego colocar un indicador en la interfaz de java que indique ese estado). Yo sé que se usa iface.QRead(), pero no sé en que parte del codigo ponerlo

William dijo...

Hola Rolando, como haria para recibir datos del PIC (por ejemplo: ver en que estado esta un pin y luego con un indicador en java mostrar ese estado). Yo sé que para leer los datos se usa ifaceQread(), pero no sé en que parte del codigo ponerlo

Publicar un comentario