Manejo del TETRIX con LabVIEW (II)

Tetrix servoEn este artículo ampliaremos el artículo anterior, introduciendo las funciones específicas para los servomotores, y un pequeño programa de ejemplo. Los servomotores permiten un control mucho más preciso que los motores DC. Cuentan con una potencia inferior, lo que no los hace aptos para el desplazamiento, por lo que se usan normalmentepara manipuladores o manejadores. En el programa de prueba también veremos motores DC.

Manejo de Servomotores:

Para usar los servomotores tenéis que configurarlos antes, como se explica en Manejo del TETRIX con LabVIEW. Una vez configurado ya podréis manejarlos. Las funciones para su manejo las podéis encontrar haciendo click derecho en el Block Diagram, y buscando en NXT Robotics → TETRIX:

Tetrix Function

Existen dos funciones:

TETRIX Move Servos:

TETRIX Move Servos

Esta función tiene varios parámetros de entrada. En primer lugar está Servo State, o estado del servo, la cual puede tomar tres valores:

0 – Desactivado: Los servos están desactivados y no mantienen la posición actual.

1 – Activo con timeout: Mueve los servos a la posición que especifiques, y mantiene dicha posición hasta que el timeout se acabe, lo que desactivará los servos. El timeout es de 10 segundos.

2 – Activo sin timeout: Mueve los servos a la posición que especifiques, y mantiene dicha posición indefinidamente. Esta opción gastará mucha batería, por lo que hay que ser precavidos a la hora de usarla.

El segundo parámetro es el servo que deseamos usar, tenéis que usar los que hayáis configurado (en Motor Configurations en el menú de funciones de TETRIX, mirad elartículo anterior). El tercer parámetro es cuánto queremos que gire el servo, y el cuarto a qué velocidad (comprendida entre 0 y 15, siendo 0 la máxima velocidad de rotación y 15 la mínima).

TETRIX Check Servos:

TETRIX Check Servos

Esta función es muy simple. Por una parte recibe como parámetros de entrada el flujo del programa y un servomotor, y como salida devuelve el flujo del programa, y un booleano cuyo valor será true en caso de que el servo esté en la posición especificada por la función Move Servos anterior, y false en caso contrario.

Programa de prueba:

En este programa vamos a crear un robot que haga uso tanto de motores DC como de servos. Vamos a crear un robot capaz de disparar proyectiles. Este robot va a tener un motor de NXT montado sobre el brazo del servomotor, encargado de accionar un mecanismo que dispara unos pequeños proyectiles (necesita girar unos 30 grados en inversa aprox.). El robot se irá moviendo en línea recta gracias a los motores DC, y tendrá un sensor de ultrasonidos. Cuando detecte un objeto a menos de 50 cm. se detendrá, levantará el brazo controlado por el servo, y disparará haciendo uso del motor de NXT.

Los dos motores DC estarán conectados al controlador 1 de motores de TETRIX, siendo el motor 1 el derecho, y 2 el izquierdo. Este controlador estará conectado al puerto de sensores 1 del NXT. A su vez tendremos al servo conectado al canal 1 del controlador de servos. El sensor de ultrasonidos lo conectaremos al puerto 4 de sensores, el motor con disparador al puerto C de motores del NXT.

En el programa crearemos un bucle que se encarge de mover los motores y vaya controlando que no haya ningún obstáculo a una distancia inferior a 50 cm. Por tanto la condición de salida del bucle será detectar un objeto a menos de 50 cm. Según salimos del bucle ponemos la potencia de los motores DC a 0, elevamos el brazo del robot con el servo, y finalmente disparamos. El Block Diagram del programa es el siguiente:

TETRIX Block Diagram

Y aquí tenéis un vídeo demostrativo del programa:

Este programa es lineal, no tiene funciones que se ejecuten en paralelo a otras. LabVIEW ofrece un mejor manejo del TETRIX que otros entornos compatibles como RobotC, por lo que es factible hacer programas más complejos, o que requieran de un manejo más preciso de motores. Si tenéis alguna duda respecto a este tema podéis consultarnos en el foro.

Comments are closed.