OpenTX  nos multiplicará las posibilidades de nuestra emisora de aeromodelismo.  Instalarlo en nuestra radio FrSky es, desde mi punto de vista, imprescindible para exprimir sus recursos. Tres de las funciones más versátiles que nos ofrece OpenTX son:

  • Las variables globales (Global variables, GVARS). Variables a las que se puede asignar un valor desde diferentes puntos del diagrama de flujo de OpenTX, por ejemplo desde las funciones especiales.
  • Los interruptores lógicos (logical switches). Son interruptores ficticios que funcionan igual que los de la emisora y que pueden estar sólo en dos posiciones: ON y OFF según criterios lógicos que analizan valores de telemetría, otros interruptores físicos o una variable global, por poner sólo algunos ejemplos.
  • Las funciones especiales (special functions). Probablemente todo lo anterior descansa en las funciones especiales, que son las acciones finales que tendrán lugar según un interruptor (real o lógico) tenga un determinado estado.

Vamos a analizar someramente estos tres puntales de OpenTX con un ejemplo práctico muy sencillo y creo que muy útil: encender las luces de nuestro multicóptero no sólo cuando nosotros decidamos, sino cuando el sistema entienda y decida autónomamente que deben estar encendidas, por ejemplo, en un GPS rescue.

Encender las luces en GPS rescue: un caso real

Hace unos días, en un caso real, mi racer perdió vídeo por FPV. Estaba cerca y a la vista pero decidí activar el modo «GPS rescue«. El multicóptero viajó hasta mi posición y comenzó el descenso. El problema es que al recuperar el control visual no sabía exactamente hacia dónde estaba apuntando.

Unos leds instalados y correctamente configurados habrían sido de mucha ayuda, pero en esos pocos segundos había que encenderlos (no conviene llevarlos siempre ON por el consumo del BEC de 5V, ya muy sobrecargado por GPS y cámara HD), localizar el morro, desactivar el GPS rescue y maniobrar para recolocar el multicóptero e iniciar la maniobra de aterrizaje.

Todo ello con el «FPV spoter» dándote instrucciones y sin saber exactamente si había logrado recuperar el control. Todo en unos pocos segundos y con el racer en rápido descenso.

Se me ocurrió que los leds podrían encenderse automáticamente nada más activar el GPS rescue, no resulta difícil programarlo. Lo verdaderamente complejo era hacer que una vez encendidos por este medio (y no por otros) no se apagaran al desactivar el GPS rescue y recuperar el control, quedando definitivamente encendidos hasta el aterrizaje y desarmado. Este sistema reduciría la carga de trabajo del piloto sobre los switches de una emisora que no puede ver porque lleva puestas las gafas FPV.

Al preparar el sistema me di cuenta que involucraba los tres pilares de la personalización de OpenTX, así que escribí estas breves notas que me son de enorme utilidad a la hora de recordar su funcionamiento.

Sources, Inputs, Mixes y Outputs en OpenTX

Diagrama de flujo de OpenTX

Antes de nada conviene un repaso del artículo sobre Sources, Inputs, Mixes y Outputs en OpenTX para conocer el entorno en el que nos movemos.

Asignar un switch principal a para encender/apagar los leds

Independientemente de todo, nosotros queremos que los leds se puedan encender y apagar con un interruptor. En Betaflight se configura de una manera muy sencilla, asignándoles un canal de la radio, en mi caso el 9. En Betaflight ese canal estará mapeado a una entrada auxiliar que deberá asignarse a LEDLOW en la pestaña MODES:

Source (switch SA↓) ⇒ Input (In) ⇒ Mixes ⇒ Channel 9

Crear una función especial

En la imagen vemos una función especial invocada cuando se baja el switch D, que es el que tengo configurado para arrancar el procedimiento de emergencia GPS rescue.

Dicha función lo que hace es cargar en el variable global GV1 el valor de 100. Es decir, establecemos una bandera para luego revisarla justo al entrar en el modo rescate.

Tenemos disponibles 9 GVARs, todas iniciadas a cero.

Creamos un interruptor lógico

Ahora creamos un interruptor lógico que se baje (que se active) automáticamente cuando la variable global GV1 sea exactamente 100. Mientras esa variable contenga ese valor, nuestro interruptor L01 permanecerá activo.

Creamos otra función especial

Creamos otra nueva función vigila al interruptor lógico que acabamos de crear ¿Y por qué no la primera función accedía al valor de la variable directamente? Porque las funciones especiales sólo toman decisiones simples sobre valores ON/OFF y no tienen acceso a valores complejos como las variables globales.

El interruptor lógico activa esta nueva función especial. La acción es transmitir por el canal 9 el valor máximo (debería estar entre -100 y 100 o  150 para valores trimeados especiales), independientemente de lo que se esté transmitiendo en ese momento por ese canal. Es decir, independientemente de que las luces ya estén encendidas.

Interruptor lógico adicional

Como la variable no vuelve a ser reestablecida a otro valor, el interruptor virtual estará siempre abajo y las luces siempre encendidas incluso una vez desactivado el GPS rescue. Esto lo podemos cambiar, por ejemplo, estableciendo una «Duration» pase lo que pase de hasta 25 segundos en el interruptor lógico. Pasado ese tiempo, el interruptor lógico se bajará y las luces se apagarán independientemente del valor de la variable global.

Otra opción es establecer otro interruptor, por ejemplo el de encender y apagar las luces que yo tengo en SA, para que una vez bajado y subido, resetee la variable y vuelva a la configuración inicial. Es decir, encendiendo y apagando las luces, eliminaremos el encendido in definido.