Y nos tuvimos que poner algo técnicos...
Para la comunicación serie en java estoy utilizando la librería gnu.io.* que tiene la clase RXTXPort. Esta clase nos da todas las herramientas necesarias para hacer dicha conexión. Un detalle que hay que tener en cuenta es que es necesario que le digamos a dicha librería que el puerto /dev/ttyUSB0 es un puerto serie.
Primero importamos la libreria.
import gnu.io.*;
Como variables globales de la clase definimos:
InputStream entrada = null;
OutputStream salida;
RXTXPort puertoSerie = null;
int timeout = 10;
Este fragmento de código muestra la conexión con el puerto USB que usa el programa.
private void inicializaPuerto(){
// Nuestro Puerto
String dispositivo2 = "/dev/ttyUSB0";
try{
puertoSerie = new RXTXPort( dispositivo2 );
puertoSerie.setSerialPortParams( 19200,RXTXPort.DATABITS_8, RXTXPort.STOPBITS_1,RXTXPort.PARITY_NONE );
puertoSerie.setFlowControlMode( RXTXPort.FLOWCONTROL_NONE );
puertoSerie.enableReceiveThreshold( 1 );
puertoSerie.enableReceiveTimeout( timeout );
//System.out.println( "Dispositivo Serie abierto" );
salida = puertoSerie.getOutputStream();
entrada = puertoSerie.getInputStream();
}catch(Exception e){
this.textArea1.setText("No puedo abrir el puerto.");
}
}
Para iniciar los servos y enviar los comandos uso estas sencillas funciones. Tened en cuenta que el formato del comando a enviar es el del controlador de servos que uso (SUPER CONTROLADOR DE SERVOS S310175, www.superrobotica.com - voy a tener que pedir comisión por tanta publicidad :P). Como podeis ver, en la inicialización de los servos recorre un bucle del 1 al 8, ya que este controlador permite hasta 8 servos (en realidad se pueden usar hasta 8 controladores de este tipo como si fueran uno solo, lo que nos darias hasta un maximo de 64 servos - pero mejor nos conformamos con 8... que ya esta bien). Estas son las funciones:
public void iniciaServos(){
int i=0;
for(i=1;i<9;i++){>1"+i+"w",(byte)1);
enviaComando(">1"+i+"a",(byte)128);
}
}
public void enviaComando(String myCommand, byte data){
char[] arr = myCommand.toCharArray();
try{
salida.write(arr[0]);
salida.write(arr[1]);
salida.write(arr[2]);
salida.write(arr[3]);
salida.write((byte)data);
//Thread.sleep(1000);
}catch(Exception e){
//...
}
}
Añadiendo un control de tipo Slide para cada servo podemos hacer lo siguiente:
private void slideServo(int modulo, int servo, int posicion){
int miValor = (posicion*254)/100 +1;//.getValue();
//String cadena = new Character((char)miValor).toString();
String miComando = ">"+modulo+""+servo+"a";
this.textArea1.setText(miComando + " - " + miValor);
enviaComando(miComando,(byte)miValor);
}
//Este es el evento de arrastrar el raton en el Slide1
//por lo que necesitamos una de estas por cada servo.
private void jSlider1MouseDragged(java.awt.event.MouseEvent evt) {
// Cambio de valor en Servo 1
slideServo(1,1,jSlider1.getValue());
}
Los slide ofrecen valores de 1 a 100, y los servos de 1 a 255, por eso se hace la pequeña operación para obtener el valor (no os asusteis que solo es una regla de tres simple).
Bueno, después si tengo un rato os pongo más cosillas, a ver si esta semana lo puedo tener armado al completo para subiros un video de como va funcionando el elemento.
Ya sabeis, se agradecen los comentarios.
Buscar en Google
Buscador Google
Si quieres encontrar lo que buscas, usa el mejor buscador de la historia: Google (cual si no?)
lunes, 10 de noviembre de 2008
WILLY-1: Haciendo las paces con la segueta
Bueno, pues este finde me he puesto manos a la obra a sacar las piezas que necesito para ensamblar las distintas partes de Willy-1. Primero recorté una para que sirviera de apoyo al tilt/pan de la camara y para el controlador de servos. Después saqué otras para adaptar la cámara al soporte y varias más para las orugas (aún me faltan justo las piezas que soportarán los ejes de las ruedas).
De momento os pongo ya algunas fotillos que, aunque desenfocadas, dan una ideilla de por donde va la cosa (es decir, muuuuy poco avanzada). Tambien tenéis una captura del programita para el control de los servos que he hecho en Java (con el fantastico NetBeans de fondo :P).
El juego de orugas de goma (de www.superrobotica.com)
De momento os pongo ya algunas fotillos que, aunque desenfocadas, dan una ideilla de por donde va la cosa (es decir, muuuuy poco avanzada). Tambien tenéis una captura del programita para el control de los servos que he hecho en Java (con el fantastico NetBeans de fondo :P).
El juego de orugas de goma (de www.superrobotica.com)
Etiquetas:
java,
robotica,
robots caseros,
servomotor
jueves, 6 de noviembre de 2008
WILLY-1: Comenzamos nuestro primer minirobot
Robots caseros
Llevaba tiempo queriendo iniciarme en esto de la robotica y por fin he comenzado mi primer robot casero. El proyecto se llama Willy-1 y es bastante simplecito, la verdad.
En principio se tratará de un modulo de tracción por orugas (cada oruga será controlada por un servo independiente, con lo que mato dos pájaros de un tiro, el desplazamiento adelante y atrás (ambos servos girando hacia el mismo sentido), y los giros (un servo con sentido opuesto al otro). Sobre éste se montará un segundo bloque que incluye un circuito de control de servos (abajo os pongo mas detalles de los materiales que se van a usar), un montaje tilt/pan de cámara con dos servomotores (lleva el circuito de una quickcam de logitech que he desarmado). Como tengo además dos microservos, los montaré en la parte delantera para colocarle en un futuro un sensor (no tengo muy claro aún si usaré uno térmico, por infrarrojos o por ultrasonidos). También llevará un hub usb donde conectaremos el controlador de servos (con un cable conversor DB9-USB) y la webcam.
Hasta aquí la parte hardware de esta "vergüencilla de los robots caseros", que se complementa con el uso de un PC como controlador principal del sistema (la idea es, una vez programado, colocarle un nanoPC, un microPC, o un EEPC lo mas pequeñito posible). El SO elegido por múltiples razones es Linux, concretamente la distribución Debian.
La parte software la he empezado a programar en Java. La verdad es que hace dos dias que he descubierto el Net Beans y estoy encantao (aunque a veces se le vaya la pinza cuando mueves algún componente en la vista grafica del programa). He instalado las librerias comm y rxtx para java. El primer programita ya lo tengo medio listo y sirve tan solo para calibrar los servos. En cuanto lo termine (espero que sea antes del fin de semana) lo subiré para que podáis echarle un ojillo.
En fin, que me lio a escribir y esto al final es un tostón. En cuanto tenga las piezas del primer modulo recortadas os subiré fotos y los esquemas usados (aunque parezca medieval estoy usando un poco de chapón para estas piezas y la verdad es que siempre fui lentillo con la segueta).
Un abrazo a tod@s!!!
Henry
Suscribirse a:
Entradas (Atom)