jump to navigation

Control de un servo con LabVIEW 27 de noviembre de 2014

Posted by Jorge in Arduino, LabView, Tutorial.
Tags: , , , , , ,
trackback

cabecera

Hoy vamos a ver como controlar un servo de aeromodelismo desde LabVIEW a través del Arduino.

El post lo intentaré separar en 2 partes, la Programación G y el Panel de Control,  para una comprensión más clara. Lo que no implica que en algún momento tengamos que entrar en la otra parte.

Programación G:

  1. Creamos nuestro bucle de ejecución While. (Programming – Functions – While Loop)bucleWhile
  2. Colocamos la orden para romper el bucle. Para ello vamos un momento al panel de control y colocamos un botón Stop. Y luego lo cableamos a la señal de salida. botonStopcableadoStop
  3. Creamos la inicialización de Arduino. (Arduino – Init) initArduino
  4. Los siguientes puntos se realizarán en la librería específica de servos que incluye LabVIEW. (Arduino – Sensors – Servo). Lo primero es configurar mediante el bloque Set Number of Servos el número de servos que vamos a emplear. En este caso 1.
    servoLibrarynumberOfServos
  5. La enumeración de los Servos empieza con el número 0, por lo tanto nuestro Servo está configurado ahora como Servo#0. Ahora debemos indicar el número de pin al que lo conectaremos, el 3. Esto lo realizamos con el bloque Configure Servo, en el conector superior indicamos el número del servo y en el inferior el pin al que se conecta.configureServoconfigureServoRealizado
  6. Ahora volvemos un momento al Panel de Control e instalamos un Knob para poder dar la consigna de posición. (Numeric – Knob). pot
  7. El siguiente paso es colocar un bloque de escritura del Servo con el valor de la consigna. (Arduino – Sensors – Servo – Servo Write Angle). En el conector superior indicamos el número del Servo y en el inferior el ángulo que queremos que alcance.servoWriteAngleconsignaServo
  8. Para confirmar que la consigna se ha alcanzado, deberemos mostrar el valor de posición del Servo. Para ello colocaremos el bloque de Lectura del Ángulo del Servo y mostraremos su valor mediante un indicador. (Arduino – Sensors – Servo – Servo Read Angle). servoReadAngleservoRead
  9. Cuando salimos del bucle es necesario insertar un bloque para dejar de alimentar al servo y que no se quede permanente intentando alcanzar la última consigna que le hemos enviado. Eso se consigue con el bloque Detach Servo. (Arduino – Sensors – Servo – Detach Servo). detachServodetach
  10. Por último, solo tendremos que colocar el bloque de Finalización de Arduino y realizar las conexiones. (Arduino – Close). closeprogramacionG

Panel de Control:

Al pasar al panel de control nos encontramos con que algunos elementos se nos han situado automáticamente.panelControlInicial

  1. Cambiamos el indicador del valor del Pin por un Gauge. (Replace – Modern – Gauge). Y modificamos su valor máximo cambiando el 10 por 180.gauge180
  2. Realizamos la misma modificación con la consigna. consigna180
  3. Para la creación del panel colocamos un Raised Box. (Decorations – Raised Box)raisedBoxraisedColocado
  4. Con el nuevo elemento seleccionado lo enviamos al fondo con la acción Move to BackmoveBack
  5. Ahora colocamos todos los elementos dentro del panel y colocamos 3 Raised Frame para dar una pequeña organización. (Decorations – Raised Frame). raisedFramepanelControl

 

 

Y con esto ya hemos realizado el programa para controlar un servo y ver su posición.


 

Conexionado con el Arduino:

 

fritzingesquema

 


 

El VI de la entrada lo pueden descargar de aquí.

Comentarios»

1. mario montaño - 25 de enero de 2016

lo configuro para mega y al iniciar se reconfigura solo a uno.

Me gusta

paletosdelaelectronica - 27 de enero de 2016

podrías poner una captura del VI que tienes o enviármelo?

Me gusta

2. Pablo - 10 de abril de 2016

Buenas.
Me salta el error 5003. He estado buscando información al respecto y no he encontrado una solución clara.
He añadido un control VISA y un control de tipo de tarjeta al bloque init de arduino, además de aumentar los baudios a 115200.
¿A alguien más le ha pasado esto?
Gracias.

Me gusta

paletosdelaelectronica - 12 de abril de 2016

Buenas, has cargado correctamente el programa de LIFA en el arduino?

Me gusta

3. Alberto Ballesteros - 9 de enero de 2019

¿Cómo controlarías la velocidad del servomotor? He visto que utilizan el número de iteración del ciclo while para luego multiplicarlo con el valor del control de velocidad y después lo dividen con otro valor para ese resultado enviarlo como escritura de ángulo.
¿Por qué hacen eso? no logro entender.
Hay otra manera de controlar la velocidad con un Controlador desde el panel frontal?

Me gusta

4. Jörg - 16 de enero de 2019

Hola podría decirme como hago para vincular dos servos con un mismo dial ? tengo 2 servos iguales y los dos deben hacer fuerza hacia el mismo lado.Si uno se mueve a 45º el otro debería moverse a -45 º o 315º. Desde ya muchas gracias.

Me gusta

Jorge - 19 de febrero de 2019

Buenos días Jörg,
tienes que crear una rama en paralelo para la escritura en el otro servo.

Para mí, lo más simple, sería crear un bloque de código, en el cual pones las combinaciones que se pueden dar. Por ejemplo:

servo_1 = dial_consigna;
servo_2 = -dial_consigna;
o servo_2 = 360 – dial_consigna;

También, si es solo invertir el signo, puedes poner el bloque negativo (-1). Entonces a un servo le pones de entrada el dial, y al otro servo le pones el dial, seguido del bloque negativo y luego lo conectas al servo 2.

Espero que te ayude.

Un saludo,
Jorge

Me gusta


Deja un comentario