lunes, 7 de septiembre de 2015

Robot Raton Version 1

Construcción Del Robot Ratón V1

Este tipo de robot es muy popular y fácil de construir, la presente es una guía de como hacer uno con componentes fáciles de conseguir.
El robot tipo ratón esta propuesta para que el constructor pueda hacer sus propias variantes e innovaciones y también para que explores con otros materiales, este robot es un reto al ingenio para aquellos que se inician en el mundo de la robótica.
Robot tipo ratón V1

Esta primera versión de este robot tendrá un sistema mecánico para detectar y eludir obstáculos.
En las siguientes versiones se le añadirá mas inteligencia al robot de manera que pueda ser programado con un microcontrolador.

Componentes robot ratón V1

Componentes:

  • Motores
  • Interruptores pulsadores
  • Cables
  • Batería preferiblemente recargable
  • Palo de plástico o madera
  • Clips o alambre

Montaje de los motores

Motores en los extremos del robot
Los motores se pegaran con silicona en los extremos laterales del robot, también se les soldaran dos cables
Vista frontal de los motores en el robot
En este caso se empleo una batería de teléfono para el cuerpo del robot, los motores están pegado con una inclinación de aproximadamente 45 grados.

Configuración de los interruptores

Pulsador de lengüeta de 3 terminales
El terminal C es común a los otros dos terminales NO y NC, ambos están conectados en este terminal.
Si el pulsador no es presionado el terminal NO esta como un interruptor abierto con respecto al punto común, es decir entre los terminales C y NO no hay continuidad a no ser que se presione el interruptor, por esto se dice que el interruptor esta normalmente abierto entre estos dos terminales.
Si el pulsador es presionado el terminal NC esta como un interruptor cerrado  con respecto al punto común, es decir entre los terminales C y NC hay continuidad a no ser que se presione el interruptor, por esto se dice que el interruptor esta normalmente cerrado entre estos dos terminales.
Las conexiones para el robot se harán entre el punto común C y el terminal normalmente cerrado NC.

 
Cables en el punto común y normalmente cerrado

Este tipo de conexión servirá para apagar el motor en caso de que el interruptor sea presionado y abra el circuito.

Referencias y material complementario

 Robot ratón del profe Garcia
Mouse robot

domingo, 6 de septiembre de 2015

Medir la rotación de los motores Lego en Bricx

Rotación De Los Motores Lego NXT

Manejo de los motores y el codificador óptico

Para la odómetria de la plataforma móvil es necesario que el conteo del codificador óptico de rotación pueda ser controlado. Cuando se emplea la función onFwd y OnRev el conteo de la rotacion del motor es reiniciado constantemente y no se puede hacer los calculos necesarios para determinar la posición de la plataforma.

Funciones onFwdex() y onRevex() 

Estas funciones son similares a onFwd() y OnRev() pero con la opción de seleccionar por medio de 5 constantes el modo de controlar el codificador optico (tacometro) de la plataforma móvil, estas opciones son:

Ejemplo 

onFwdex(OUT_AC,100,RESET_NONE);

Los motores del Lego Mindstorm NXT tienen un codificador óptico para determinar cuanto y en que dirección a girado el motor. 
Los sensores tienen una resolución de un grado, es decir esto es lo mínimo que se puede medir.


Función MotorRotationCount

 Vídeo de ejemplo

Retorna el valor en grados de la posición relativa del motor. Hay que indicar el puerto en que esta conectado el motor. El valor que se retorna no vuelve a ser cero después de completar 360 grados, después de un giro el valor siguiente seria 361 grados y así sucesivamente.
Los puertos de conexión para los motores son OUT_A OUT_B OUT_C
El tipo de valor que retorna es long por lo que el valor en grados almacenado puede ser bastante grande.


Ejemplo básico:

long ValorGrados; //variable tipo long donde se guardara el valor en grados
ValorGrados = MotorRotationCount(OUT_A);//Almacena el valor del motor A

Ejemplo de aplicación:

void GirarRobotI(long GRADOS, int POTENCIA){
 long GradosActual;
 long GradosGirados=0;//Inicializar en cero
 GradosActual= MotorRotationCount(OUT_A);
 while(GradosGirados<=GRADOS){
    OnRev(OUT_B, POTENCIA);
    OnFwd(OUT_A, POTENCIA);
    GradosGirados=MotorRotationCount(OUT_A)-GradosActual;
     NumOut(0,0,GradosGirados);
 }
   Off(OUT_AB);
   TextOut(0, LCD_LINE3,"TerminoI");
}
//Funcion para girar el robot a la derecha (en realidad los grados son del motor)
void GirarRobotD(long GRADOS, int POTENCIA){
 long GradosActual;
 long GradosGirados=0;//Inicializar en cero
 GradosActual= MotorRotationCount(OUT_B);
 while(GradosGirados<=GRADOS){
    OnFwd(OUT_B, POTENCIA);
    OnRev(OUT_A, POTENCIA);
    GradosGirados= MotorRotationCount(OUT_B)-GradosActual;
    NumOut(0,0,GradosGirados);
 }
   Off(OUT_AB);
   TextOut(0, LCD_LINE3,"TerminoD");
}

task main(){
     while (true){
     GirarRobotD(180,70);
     Wait(1000);
     GirarRobotI(180,70);
     Wait(1000);
     }
}