conectar-emisora-radio-control-con-arduino

Conectar una emisora radio control con Arduino

¿Qué es una emisora RC?

Una emisora de radio control (RC) es un tipo de mando inalámbrico que, por supuesto, también podemos conectar a un procesador como Arduino para emplearlo como controlador.

Las emisoras de radio control son uno de los controles más habituales que podemos encontrar en el mundo de la electrónica, y son ampliamente empleadas para controlar vehículos por control remoto.

Existe una gran variedad de emisores RC, que varían en el número de canales, resolución y el alcance. Otros factores a tener en cuenta son la calidad de fabricación y los materiales, si incorporan pantalla y su tipo, si disponen de varias configuraciones por software, o incluso si son reprogramables.

La variable principal es el número de canales, que representa el número de variables analógicas que podemos controlar en el receptor. Por ejemplo,

  • En vehículos terrestres y barcos, que se mueven en un plano horizontal, necesitaremos mínimo 2 canales (aceleración y giro).
  • En un tanque necesitaremos 4 canales (aceleración, giro y dos para la torreta)
  • En un vehículo aéreo como un avión, helicóptero o cuadricóptero, necesitaremos mínimo 4 canales (aceleración, y tres ángulos).

Los canales adicionales se emplean para transmitir variables como, por ejemplo, el control de una cámara, del GPS, el cambio de modo de vuelo, desplegar el tren de aterrizaje, o activar alguna luz o dispositivo.

En general, los transmisores normales tienen 6 canales y, ya que es una inversión importante que no haremos frecuentemente, lo recomendable es que no adquiramos un transmisor con un número inferior de canales.

Por el contrario, los transmisores de 9 y 10 canales pueden considerarse casi profesionales y, en general, tienen precios muy superiores y están destinados a vehículos complejos y usuarios experimentados.

Actualmente la mayoría de emisoras operan en una banda de 2.4 Ghz, una frecuencia libre. El alcance puede llegar desde unos cientos de metros hasta algunos kilómetros. La resolución suele variar entre 10bits (1024 niveles) a 12bits (4096 niveles).

Junto con la emisora necesitaremos, lógicamente, un receptor que deberá ser compatible con nuestro mando. En general, el receptor suele adquirirse de forma simultánea con el mando, aunque es posible adquirir más receptores para integrarlos en varios proyectos, reaprovechando el transmisor.

Las emisoras RC son uno de los controles más avanzados que podemos emplear para nuestros proyectos de electrónica, y uno de los de mayor alcance. En general, será uno de los mandos preferidos para vehículos y robots complejos.

Precio

En general, podemos decir que las emisoras RC son controladores avanzados y, por tanto, caros. Existe una gran variedad de rangos de precio que van desde los 20€ a los 1000€.

Un controlador muy habitual es el FlySky FS-i6, que tiene 6 canales de 10bits. Podemos encontrarlo por unos 40€, incluido su receptor FS-iA6, buscando en vendedores internacionales de eBay o AliExpress.

arduino-emisora-rc-componente

En caso de querer comprar el receptor suelto, podemos encontrar el FlySky FS-iA6 o el FS-iA6B por 10€.

arduino-emisora-rc-componente-receptor

A modo de comparación, un podemos encontrar mandos 3 canales por 25€, mientras que los de 10 canales cuestan a partir de 110€. Como hemos dicho, una emisora de 40€, es un buen punto de inicio.

Esquema de conexión

La conexión de un receptor RC con Arduino es realmente sencilla. En la emisora por supuesto, no tenemos que realizar ninguna acción. Únicamente asegurarnos de que tiene pilas, está encendida, y sincronizarla con el receptor con normalidad.

El receptor dispone de de salidas de tipo servo (S = Señal, V = Vcc, G = Gnd), y de una primera fila con los pines de alimentación.

arduino-emisora-rc-funcionamiento

Simplemente alimentamos el módulo Vcc y Gnd del receptor, respectivamente, a 5V y Gnd de Arduino. Por otro lado, conectamos el pin de señal de cada uno de los canales que queramos leer con cualquier entrada digital de Arduino.

arduino-emisora-rc-esquema

La conexión, vista desde Arduino, sería la siguiente.

arduino-emisora-rc-conexion

Ejemplos de código

La señal de salida del receptor es similar a la de un servo. De hecho, esto es así para que en un vehículo el receptor actué directamente sobre servos, sin necesidades de un procesador adicional.

Para leer la señal del receptor desde Arduino, únicamente tenemos que medir el ancho del pulso de cada uno de los canales.

El siguiente ejemplo muestra la lectura de los 6 canales mediante la función PulseIn(), y muestra el valor de cada canal en Arduino.

int rcPins[6] = {5,6,7,8,9,10};
float chValue[6];

const int pulseInDelay = 20000;

void setup() 
{ 
  Serial.begin(9600);
}

float fmap(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

void readChannel(int channel)
{
  int rawValue = pulseIn(rcPins[channel], HIGH, pulseInDelay);
  chValue[channel] = fmap( (float)rawValue, 1000.0, 2000.0, 0.0, 1.0);
  chValue[channel] = chValue[channel] < 0.0 ? 0.0 : chValue[channel]; 
  chValue[channel] = chValue[channel] > 1.0 ? 1.0 : chValue[channel];
}

void printChannel()
{
  for(int iChannel = 0; iChannel < 6; iChannel++)
  {
    Serial.print("Ch #");
    Serial.print(iChannel);
    Serial.print(": ");
    Serial.println(chValue[iChannel]);
  };
  Serial.println("------------");
}

void loop()
{
  for(int iChannel = 0; iChannel < 6; iChannel++)
  {
    readChannel(iChannel);
  }
  printChannel();
  delay(2500);
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full