Proyecto diversity de antenas con arduino

Estoy realizando un proyecto que consiste en introducir 3 señales rssi de dos receptores de video de 5,8Ghz (los usados para el pfv de aeromodelismo), y he conseguido leer las 3 señales y darles un valor de porcentaje hasta ahi perfecto, pero necesito que en función de la señal rssi más alta me conmute la señal de video adecuada. No se si eso lo puede realizar el arduino UNO directamente o se necesita un elemento externo. si en el caso de que se necesite un elemento externo alguien puede decirme que y como hacerlo??

Un saludo y gracias!

Claro que puedes…
Las 3 señales las tienes en una salida DC tal que una entrada analógica del Arduino las lea y tome la decisión por la mas alta entonces?

Supongamos que tenemos V1, V2, V3 como valores DC tales que sean 0-5V (lo pienso idealmente).
Solo lees las 3 asi, obviare definiciones de variables etc etc

  int V1 = map (analogRead(A0), 0, 1023, 0, 100);   // esta tiene la señal RSSI tal que 0V es 0% y 5V es 100%
  int V2 = map (analogRead(A1), 0, 1023, 0, 100);   // esta tiene la señal RSS2 tal que 0V es 0% y 5V es 100%
  int V3 = map (analogRead(A2), 0, 1023, 0, 100);   // esta tiene la señal RSS3 tal que 0V es 0% y 5V es 100%


  if (V1 > V2) {
     Max = V1;  // Max definido como entero también
     Switch = 1; // Switch será una variable tipo byte que luego decida cual salida usar
  } else {
    Max = V2;   // en el caso que V2 sea el máximo tenemos esta salida.
    Switch = 2;
  }
  If (Max < V3) {
     Max = V3;
     Switch = 3;   // En el caso que V3 sea el máximo tenemos esta salida
  }
  for (byte i=0; i<3; i++) {
        if (i == Switch)       
            digitalWrite(salida[Switch], HIGH); // Activo la salida de mayor RSSI
        else
            digitalWrite(salida[i], LOW);   // cierro rele de salidas de menor Rssi
}

Es algo rápido pero muestra la idea.

Muchas gracias surbyte, pero si lo he entendido bien con lo que me has enseñado simplemente le dices al arduino que me determine cual de las tres señales es la mejor y que me active la salida del arduino con mayor señal rssi, pero claro la señal de video tengo que pasarla con algun tipo de conmutador fuera del arduino es decir pasarla con algun integrado tipo el 4066 y que en funcion de la salida rssi del arduino el integrado me saque una de las 3 señales.

Por un lado tenemos las señales rssi y por otro lado las señales de video analogico, en función de lo que determine el arduino de que señal rssi es la mejor que me conmute dicho integrado.

Porque no he visto por nigun lado que puedas meter la señal de video analogico al arduino y que la saque tal cual por una de las salidas.

Corrigeme si me equivoco soy bastante novatillo con el tema arduino.

Un saludo y muchas gracias!!

Ahhh no entendiste mi suposición. Yo dije.. Supongo que tienes ALGO que conectado a cada salida de video o cada recepción de video, me dice el nivel RSSI en un valor de DC entre 0 y 5V

Vamos mas tecnicamente. Dime que receptor usas y que integrados o dispositivos estan involucrados para que busquemos los niveles de tensión presentes.

Si si tengo eso 3 salidas de rssi es un receptor que es ya diversity(son dos receptores en un encapsulado) y otro normal y me dan valores en dc que oscilan entre los 0.51v hasta los 1.11v que traducidos al arduino son de 108 a 236 claro ahi no tengo problema, el problema es que la señal de video tengo que poder conmutarla en función de la señar rssi, es decir, son señales diferentes y que estan separadas, pero la señal de video de salida depende de la señal rssi que el arduino me compara.

Claro que lo que necesito es que conmute entre una señal y otra de video tan rápido como para que no se note que en una pantalla o en unas gafas hace tal cambio. Pregunto por eso que si el propio arduino puede hacer de switch o conmutador con las señales de video.

Los receptores son:

FR632 diversuty. RC832.

Un saludo y una vez más muchas gracias por tu atención!

En el RC832 no veo nada en el manual que indique una salida que puedas usar para conocer el nivel de recepción. De veras la tienes? Todas las salidas son entre 0.51 y 1.1? Si el Arduino lo usarás solo para eso puede cambiar el AD analogReference(INTERNAL); y tener un máximo de 1.1V precisamente, asi que tendras 1023 en fondo de escala. 512 a 1023 aprox, es una gran mejora del rango dinámico frente a 186 a 236.

Creo que se de que está hablando el amigo vist1411. Yo tengo un receptor RC832 instalado en mis gafas Quanum y si, lo uso para recibir las señales que envía el transmisorcito que tengo en el avión y otro en el cuadricóptero de carrera (de 250mm). O sea, utilizo un sólo par de gafas FPV (First Person View) o vista en primera persona, del inglés. Pero nunca, jamás lo he usado con más de una señal al mismo tiempo.

Igualmente, entiendo que lo que tu quieres comparar son 3 salidas de video distintas y compararlas para así seleccionar la mejor o la más potente que no quiere decir que sea la mejor.

Eso, desde el punto de vista del hardware sería medianamente fácil de hacer, de la salida de video (intuyo que estás hablando de video compuesto, porque eso es lo que sale del receptor) tomas algo de la señal con un capacitor de un valor entre 4.7pF y 10pF y lo llevas al Arduino. El resto puede ir al circuito de conmutación que se te ocurra. Así con los 3 receptores, pero para que esto funcione realmente, o sea que funcione de manera similar para las 3 señales, estas tienen que venir de fuentes similares. Tener un receptor doble y uno simple no te ayudará a tener medidas reales de sus señales.

Saludos!

Surbyte, si todos los receptores de video tienen salidad rssi lo que pasa que no en todos viene identificada porque no se suele usar. Normalmente creo que en el 95% de receptores de este tipo la salida rssi esta en el pin num 6 contando desde izquierda a derecha. Los volatejes máximos por lo menos del receptor sencillo no he visto que superasen los 1.13v por lo que igual puedo hacer el poner la ref interna a 1.1 teniendo asi una mayor resolución en la escala.

Hector si basicamente es eso lo único es que en mi caso tendre 3 antenas de diferentes tipos que serán fijas, el arduino leerá las señales rssi de cada uno de los receptores y que determine cual es la de mejor calidad, en función de eso que active uno de los tres pines de salida en HIGH para que, y esto espero que sea así mediante un CD4066 me conmute entre una de las 3 señales de video compuesto. Tienes razón en lo de los receptores deberían ser iguales para poder hacer lecturas realmente buenas, pero no puedo hacerlo de otra forma son los receptores que he podido conseguir, me vale con que funciones más o menos bien pues de primeras lo necesito para presentar en proyecto, si que me gustaría ir mejorando el sistema sin duda y lo haré pues le veo una gran aplicación al tema de aviones en arlomodelismo y en los drones racer también puesto que cambias de posición infinidad de veces.

Como podría implementar un circuito conmutador de video compuesto que abra o cierre en función de la señal alta o baja de las salidas digitales del arduino?? habia pensado en el 4066 pero si hay alguna otra forma me gustaría saberla.

Muchisimas gracias por vuestras respuestas y por vuestro tiempo.

Un saludo!

Bueno el tema de leer el nivel de calidad de señal está mas o menos resuelto. Si las señales no son iguales ya que tienes salidas entre 0.51 y 1.13 pues pones un operacional con un nivel de 0.51 y una ganancia alrededor de 2 y podrias tener de 0 a 1.1V en los 3 perfectamente. Lo que sería un 0-100 muy bueno. Eso es fácil. Digamos.

Ahora yo probaría lo que estas dejando de lado y es la conmutación de video. Prueba ya eso. No importa el nivel, arma un conmutador de video con 3 entradas y una salida. Facil. Luego ves como trabaja. Si lo hace bien, esta todo resuelto. No se como harás para conmutar sin fallas o desincronización.

Surbyte si que oscilan si algo lo voltajes pero bueno si me queda tiempo investigo como mejorar la resolución. Te queria preguntar si me podrias explicar la parte del código que me has puesto más arriba en relación al comando SWITCH y la variable byte y como lo resuelves, te lo agradeceria jejej.

Un saludo y gracias!!

Switch no es un comando sino una variable del tipo byte. (valores de 0 a 255 pero en este caso de 1 a 3).
Acá esta mas completo
He definido V1, V2 y V3 entonces no hace falta definirlas en el loop.
tambien defino a Switch.
los pines de salida los defino como const byte porque son invariables.

int V1, V2, V3;
byte Switch;

const byte salida[3] = {2,3,4};  // cambia estos valores a tu gusto.

void setup() {
	Serial.begin(9600);   // Solo para monitorear sino no tiene sentido
	for (byte i=0; i<3; i++)
	    pinMode(salida[i], OUTPUT);  // Defino los 3 pines como salida
}

void loop() {
  char buf[40];  // buffer de caracteres para imprimir en el Serial.
  
  // map hace una conversión del valor entre 0 y 1023 a 0-100%
  V1 = map (analogRead(A0), 0, 1023, 0, 100);   // esta tiene la señal RSS1 tal que 0V es 0% y 5V es 100%
  V2 = map (analogRead(A1), 0, 1023, 0, 100);   // esta tiene la señal RSS2 tal que 0V es 0% y 5V es 100%
  V3 = map (analogRead(A2), 0, 1023, 0, 100);   // esta tiene la señal RSS3 tal que 0V es 0% y 5V es 100%


  if (V1 > V2) {
     Max = V1;  		// Max definido como entero también
     Switch = 1; // Switch será una variable tipo byte que luego decida cual salida usar
  } else {
    Max = V2;   // en el caso que V2 sea el máximo tenemos esta salida.
    Switch = 2;
  }
  If (Max < V3) {
     Max = V3;
     Switch = 3;   // En el caso que V3 sea el máximo tenemos esta salida
  }
  
  sprintf(buf, "La tensión mayor es V%d y su valor %3d", Switch, Max);
  Serial.println(buf);

  for (byte i=0; i<3; i++) {
        if (i == Switch)       
            digitalWrite(salida[Switch], HIGH); // Activo la salida de mayor RSSI
        else
            digitalWrite(salida[i], LOW);   // cierro rele de salidas de menor Rssi
  }
}

Definitivamente el circuito de conmutación no se como se puede hacer, si los cambios de una señal a otra los hace más rápidos de que en un segundo a la pobre pantalla no le da tiempo a hacer la sincornización tan rápido, conmutar conmuta pero si los cambios los hace rapidos se cae.

Por lo que he optado por lo sieguiente, coger solo la señal de video del receptor central y meter un servo de 180º y que en función de la señal rssi que le llegue al arduino girar el servo hacia la dereacha o hacia la izquierda.

El receptor diversity digamos que la antena 1 estaria en la izquierda, en el receptor normal la antena seria la central y en el diversity la antena 2 seria la de la derecha.

Ahora viene el problema como hago para que el servo gire a la derecha o a la izquierda en funcion de las señales rssi. Habia pensado en que por ejemplo:

-float porcentaje0; //antena 1 -float porcentaje1; //antena 2 -float porcentaje2; //antena 3

-if (antena3 > antena2); - ´giramos a la derecha el servo hasta que antena2 sea mayor que antena3 y entonces parar y mantener posición.

y viceversa si es hacia la izquierda.

Tengo la idea pero no se como implementarla con la programación de arduino a ver si me podeis ayudar.

Un saludo y gracias!!