Gestor de la emisora

Tras haber probado que puedo comunicarme con el Netduino a través de la emisora RF toca implementar completamente el software que la gestionará.

Para ello he creado una clase llamada «RCManager» que es la que se encargará de toda la lógica de gestión de la emisora, así como de sus parámetros de calibración.

Tras «cacharrear» un poco más con la emisora he visto que me encuentro con los siguientes problemas:

  • Al mover los mandos a sus extremos no llego a recibir siempre un 0 o un 1. De echo normalmente se queda en 0.04 como mínimo y 0.96 como máximo, pero tampoco es una regla que se cumpla siempre y depende del canal en el que me fije.
  • Dejando los mandos de la emisora en su posición neutral no obtengo un 0.5 clavado sino que este valor varía, sobretodo teniendo en cuenta que la emisora está provista de «trims» así que digamos que no existe un valor neutral absoluto.
  • Hay canales que digamos que los recibo invertidos. Por ejemplo en una palanca vertical de la emisora, si la llevo arriba del todo recibo un «0» y si la llevo abajo recibo un «1». Parecería más lógico que fuese al revés.

Además de esto el módulo «RCManager» abstraerá de todo esto al resto del programa y únicamente publicará las siguientes propiedades:

  • XAxisChannel: De tipo «uint» y que indica en una escala de 0% a 100% en que estado está el canal que gestiona el eje X (Roll).
  • YAxisChannel: De tipo «uint» y que indica en una escala de 0% a 100% en que estado está el canal que gestiona el eje Y (Pitch).
  • ZAxisChannel: De tipo «uint» y que indica en una escala de 0% a 100% en que estado está el canal que gestiona el eje Z (Yaw).
  • EngineChannel: De tipo «uint» y que indica en una escala de 0% a 100% la potencia de los motores. Un 50% indicaría que la potencia tendría que ser la justa para que el aparato ni suba ni baje.
  • PowerChannel: De tipo «bool» y que nos indicará si el aparato está encendido.
  • OtherChannel: De tipo «uint». De momento no lo uso pero como la emisora tiene 6 canales pues lo meto también. Ya veremos para que puede valer.

El módulo «RCManager» también tiene dos métodos públicos:

  • SetNeutralValues: Lo que hace es que toma la posición actual de todos los canales como nuevos valores neutros. Digamos que «re-calibra» la emisora.
  • GetDebug: Usado para la depuración del módulo. Nos devuelve una traza con información actual sobre un canal en concreto (pasado como parámetro).

Finalmente el gestor de la emisora admite dos parámetros en su constructor que indicarán si ha de auto-calibrarse o coger unos valores por defecto, y si ha de normalizar los canales a una escala logarítmica. Esto último se explica en el siguiente punto Simulación de Motores con LEDS

Configurando el gestor de la emisora

Para su uso primeramente he arrancado el programa en modo auto-calibración. Esto hace que a cada canal le establece como valor neutral el primer valor válido recibido y establece los valores mínimos y máximos con un cierto margen. Para que esto funcione bien al arrancar el programa los canales de la emisora deberán estar en sus posiciones neutral, sin tocar las palancas. De esta manera si por ejemplo el primer pulso recibe una señal de un 55% de potencia, marca el 55% como valor neutral y establece el margen mínimo y máximo en 10% y 100%. Esto lo hace para cada canal.

A partir de ahí habrá que llevar cada uno de los canales a sus extremos mediante la emisora para que el gestor de la emisora reajuste los márgenes en el caso de ser más amplios de los pre-calculados. Siguiendo con el ejemplo anterior si al mover la palanca del canal hasta su posición mínima resulta que obtenemos un valor del 8%, el gestor de la emisora actualizará este margen mínimo.

Tras mover bien a sus extremos todos los canales de la emisora podremos parar el programa en modo depuración apuntar los valores de mínimo, máximo y valor neutral de cada uno de los canales.

Ahora solo quedaría editar el código en el constructor de la clase en la parte de «Calibración manual» estableciendo cada uno de los valores, y modificando la instanciación del gestor de la emisora para que NO arranque en modo auto-calibración.