LabVIEW para usuarios del NXT (III)

LabVIEW CaseEn esta tercera entrega de los artículos tutoriales sobre LabVIEW para usuarios del NXT (III) vamos a ver nuevos sensores, como el de ultrasonido, nuevas estructuras, y otros métodos para usar los motores. Esto nos servirá para ampliar los conocimientos que ya tenemos y así poder crear programas más complejos.

Manejo de Motores:

Hemos visto como poner los motores en funcionamiento o pararlos, pero sin embargo a veces queremos que recorran cierta distancia (que giren un número de grados determinados). Para ello existe esta función:

Drive distance

LabVIEW - Girar grados
Gira el motor x grados, donde x es el valor que especifiquemos en distancia. En Output Port debemos indicar a que puerto esta conectado el motor/motores que queremos girar.

Esta función la podemos encontrar haciendo click derecho en el Block Diagram y metiéndonos en NXT I/O → Complete → Motor → Drive Distance.

Manejo de Sensores:

En el artículo anterior vimos como poner un sensor, seleccionar su tipo, y vimos el funcionamiento del sensor de contacto y de luz. En este artículo introduciré el sensor de ultrasonido y el sensor de rotación:

Sensor de ultrasonido

LabVIEW - Ultrasonido
El sensor de ultrasonido devuelve la distancia al obstáculo más próximo que tenga enfrente medida en cm. Hay que indicar a que puerto de sensores está conectado (preferiblemente el 4 ya que es el puerto rápido). La posibilidad de medir distancias abre muchas posibilidades, nos permite que el robot navegue por un entorno sin chocar con obstáculos por ejemplo, o también nos sirve para saber como de cerca estamos de nuestro objetivo.

Sensor de rotación

LabVIEW - Rotación
El sensor de rotación mide la cantidad de grados que hemos recorrido desde que iniciamos el programa. Esto sirve básicamente para saber la distancia recorrida, y compararla por ejemplo con la que nosotros queriamos que recorriera. No hay que especificar puerto de sensores, sino de motores, ya que el sensor de rotación se encuentra dentro de los motores.

Estructura Case:

La estructura case es una estructura condicional que nos permite ejecutar una parte u otra del código según que valor tome determinada variable o elemento de nuestro programa. La estructura case la podéis encontrar en Structures → Case Structure:

LabVIEW - Case 1
En este caso vamos a utilizar su variante más simple, que usarla como una estructura if. Lo que le metemos es una valor booleano, en caso de que valga True ejecutará una parte del programa, y en caso de que sea False otra. Para escribir en una parte u otra tenemos que clickear en la pestaña superior para que se nos abra el menú desplegable:

LabVIEW - Case 2
Hay muchas cosas que devuelven valores booleanos, como el sensor de contacto, o todas las comparaciones que podéis encontrar en Comparison (igual, menor que. mayor que…).

Programa de prueba:

En el programa de hoy vamos a utilizar todo lo que hemos visto hoy más lo que vimos en el anterior tutorial. El programa va a consistir en un robot móvil que se desplaza gracias a dos motores (A y C). El robot cuenta con un sensor de ultrasonidos, y cuando este detecte un obstáculo a menos de 40 cm. el robot se parará instantáneamente y girará para esquivar el supuesto obstáculo. Una vez termine esta maniobra seguirá adelante hasta que detecte otro obstáculo. El robot se detendrá cuando su motor A haya recorrido más de 6000º.

Por tanto para este programa necesitamos un bucle while, un case que ejecute cosas diferentes dependiendo del valor del sensor de ultrasonidos, un sensor de ultrasonidos, un sensor de rotación, y manejo de motores, tanto para moverlos y frenarlos, como para decirles que recorran una distancia determinada. El Block Diagram es el siguiente:

En caso de que haya un obstáculo a menos de 40cm.:

LabVIEW - Programa 1
En caso de que no haya nada a menos de 40cm.:

LabVIEW - Programa 2
Espero que os animéis a intentar programar cosas con LabVIEW ya que es sencillo de manejar y tiene muchas más posibilidades que NXT-G. Ante cualquier duda podéis preguntar en el foro.

Comments are closed.