lunes, 1 de diciembre de 2008

Acer Aspire One + Arduino = Rover AA1

Esta idea ya la tenia pensada desde hace varios meses, ya que imaginé que sería una forma práctica de realizar un robot. Y sí lo fué. No lo habia hecho porque primero lo quería hacer con mi laptop normal (Vaio K-13) pero estaba un poco complicado porque la laptop pesa aproximadamente 3.5 kg. lo cuál representaba mucho peso para moverlo con los Tamiyas. Hasta que finalmente tengo la oportunidad de tener una Netbook Acer Aspire One, y por su tamaño y peso quedó perfecto para el proyecto.

¿Como lo construí?
Usé un cuadro de acrílico cortado a la medida de la AA1 (netbook) y con espacio suficiente para colocar en la parte de atrás el circuito necesario.
Perforé con el taladro lo hoyos necesarios para colocar los Tamiya Gearbox y poner las llantas.
En la parte de atrás, justo en medio, puse una "rueda loca" para que tenga libertad de movimiento.
También pegué sobre el acrílico una Protoboard Tiny y el Arduino Diecimila.
En el protoboard usé un puente H L293D para manejar los motores de DC con el Arduino.
Coloqué todo junto sobre el acrílico, y escribí un pequeño código en el Arduino que simplemente leyera el puerto serial por el USB y que dependiendo el valor en el puerto realizara cierta acción (girar a la izq, girar a la derecha, avanzar, detenerse).
Después escribí otro pequeño programa en Processing el cual abre un applet de java y al presionar las teclas de flecha en el teclado manda la información por el puerto serial y el Arduino las interpreta.
Finalmente hago una conexión desde otra computadora al escritorio remoto de la AA1, configuro un programa (webcamXP) para que transmita el video de la webcam de la AA1 por una dirección IP local y pueda verlo desde la otra laptop.
Y listo, eso fue suficiente para hacerlo funcionar.




Este es uno de mis mejores proyectos y pienso seguir desarrollandolo, se me ocurren varias ideas pero iré haciendo una a la vez.

Problemas conocidos:
  • No tiene reversa
  • La netbook no está firmemente sujetada a la base
  • Se usa dos aplicaciones por separado (webcamXP y Processing)
  • Los motores no se cordinan lo suficiente cuando avanzan al mismo tiempo
  • Complicado de conducir
Mejoras deseadas:
  • Reversa
  • Sensor de distancia
  • Hacer la velocidad variable
  • Conducir con un Wii Nunchuck
  • Una misma aplicación
  • Base más segura
  • Conducir con un iPhone
¿Tienes alguna otra sugerencia? Soy todo oidos.

update:

Código Arduino:

int powe = 2;
int act = 11;
int act2 = 10;

void setup(){
Serial.begin(9600);
pinMode(powe, OUTPUT);
}

void loop()
{
byte val;
digitalWrite(powe,HIGH);
if (Serial.available())
{
val= Serial.read();
if(val==10){
analogWrite(act, 0);
analogWrite(act2, 0);
}
if(val==20){
analogWrite(act, 170);
analogWrite(act2, 170);
}
if(val==30){
analogWrite(act,170);
analogWrite(act2, 0);
}
if(val==40){
analogWrite(act, 0);
analogWrite(act2, 170);
}
}
}

Código Processing:

import processing.serial.*;
Serial port;

void setup()
{
size(320,240);
println("Available serial ports:");
println(Serial.list());
port = new Serial(this, "COM3", 9600);
}

void draw()
{
keyPressed();
void keyPressed(){
if (key == CODED){
if (keyCode == DOWN){
port.write(10);
}
if (keyCode == UP){
port.write(20);
}
if (keyCode == RIGHT){
port.write(30);
}
if (keyCode == LEFT){
port.write(40);
}
}
}