Señal no deseada en transmisión de 433 MHz

Hola!

Estoy intentando transmitir con un Arduino Uno R3 y un emisor de 433,92 MHz, un paquete de código que contiene 64 grupos de silencio y señal de tal forma que cada pareja de silencio y señal contiguas tienen la misma longitud (30 milisegundos) y cada elemento puede ser de 10 ó 20 milisegundos. Es decir, cada pareja es de uno de los dos siguientes tipos:

silencio de 10 mlsg. y señal de 20 mlsg.

o silencio de 20 mlsg. Y señal de 10 mlsg.

como puede verse en la primera imagen.

He marcado cada pareja con colores alternativos (rojo y verde).
El grupo de 64 parejas (quizá esto sea una perogrullada para muchos de vosotros, pero es la primera vez que intento transmitir una señal elaborada en Arduino por mí a través de un transmisor de 433 MHz). Este paquete de ondas corresponde a un mando a distancia de RF.

Aparentemente el envío parece correcto, pero al estudiar la línea de tiempos, veo que es de mayor duración a lo que correspondería ser.

Entonces me he dado cuenta de que recibo una señal que contiene algo no previsto, como se puede ver en la segunda imagen .

En efecto, podemos ver que además de los silencios (franja correspondiente al color magenta)y señales (franja correspondiente al color verde) hay una especie de zona de tránsito (franja correspondiente al color rojo) de unos 24 milisegundos de duración que no consigo saber como se produce. Esas franjas indeseadas, están flanqueando las franjas de señal.

Dejo el código de Arduino que he utilizado por si alguien puede ayudarme.

El módulo transmisor de 433 Mhz es el típico de los chinos. Dejo una imagen del modelo (lógicamente..el de la izquierda).

Muchas gracias

#include <VirtualWire.h>
char *controller;
byte tren129 [] = {1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1};

void setup()
{

pinMode(12,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4000);// speed of data transfer Kbps

byte t;
byte vuelta;
byte eslabon;
int duracion;
int silencio;

for (vuelta=1; vuelta<7; vuelta++)
{  for (eslabon=0; eslabon<64; eslabon++)
    {
      t = tren129[eslabon];
         if (t == 1) {
            duracion=10;
            silencio=20;
          }
         if (t == 2) {
            duracion=20;
            silencio=10;
          }
              controller="0" ;
              vw_send((uint8_t *)controller, strlen(controller));
              vw_wait_tx(); // Wait until the whole message is gone
              digitalWrite(12,0);
              delay(silencio);
                    
              controller="1" ;
              vw_send((uint8_t *)controller, strlen(controller));
              vw_wait_tx(); // Wait until the whole message is gone
              digitalWrite(12,1);
              delay(duracion);
    }
    digitalWrite(12,0);
    delay(2000);
  }
 eslabon=0;
}
void loop(){
}

Olvidé incluir una foto del montaje, aunque es la típica que puede encontrarse en internet.

Además de la placa de Arduino UNO R3, tiene el módulo transmisor de 433 MHz que queda unido a la placa a través de tres cables, +5V, Gnd y Data; el último lo he conectado a la salida digital 12 de la placa.

La alimentación de la placa la hago con +9V a través del jack de alimentación.

Solucionado!

El código corregido:

#include <VirtualWire.h>
char *controller;
byte tren129 [] = {1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1};

void setup()
{

pinMode(12,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4000);// speed of data transfer Kbps

byte t;
byte vuelta;
byte eslabon;
int duracion;
int silencio;

for (vuelta=1; vuelta<7; vuelta++)
{  
  controller="1" ;
  vw_send((uint8_t *)controller, strlen(controller));
  vw_wait_tx(); // Wait until the whole message is gone
  
  for (eslabon=0; eslabon<64; eslabon++)
    {
      t = tren129[eslabon];
         if (t == 1) {
            duracion=1;
            silencio=2;
          }
         if (t == 2) {
            duracion=2;
            silencio=1;
          }
              
              digitalWrite(12,0);
              delay(silencio);
                    

              digitalWrite(12,1);
              delay(duracion);
    }
    controller="0" ;
    vw_send((uint8_t *)controller, strlen(controller));
    vw_wait_tx(); // Wait until the whole message is gone
    digitalWrite(12,0);
    delay(2000);
  }
 eslabon=0;
}
void loop(){
}

Me he dado cuenta de que enviaba señal de conexión y señal de desconexión antes y después del envío de cada pareja de silencio y señal.

Con este nuevo código lo hace únicamente una vez al principio y al final de cada "paquete de ondas".

De todas formas, muchas gracias!

Un saludo

Las fotos no se ven.
Lee las normas, debes editar tu post inicial y usar la etiqueta (pantalla al centro) que permite verlas.
Copia el enlace usando boton derecho del mouse. La segunda imagen será el número final de la primera mas 2. Ya lo entenderás cuando captures la primera
Repites en la segunda y le sumas 2.