RADIO_F YK04


RADIO FRECUENCIA CON YK04

ÍNDICE:
0.-TEORÍA
1.- CONTROL REMOTO CON EL YK04





0.- TEORÍA.

COMUNICACIÓN UNIDIRECCIONAL O BIDIRECCIONAL 

Para comunicarnos a disncia con nuestro arduino podemos enviar mensajes vía TCP_IP mediante módulos WIFI del tipo del ESP8266 en sus distintas variantes y también usar el Bluetooth de nuestros teléfonos para comunicarnos con nuestros proyectos.

A más bajo nivel, presentamos los módulos de radio NRF24L01 que tienen la enorme virtud de tener un muy largo alcance si usamos la antena adecuada, mucho más que el WIFI o el Bluetooth y suelen ser más baratos.

Pero todos estos sistemas adolecen de un problema común: Que tenemos que construirnos el mando a distancia.


En las comunicaciones a distancia siempre tenemos un problema parecido. Necesitamos un emisor y un receptor y tener claro si la comunicación es UNIDIRECCIONAL: Solo uno envía y el resto recibe, o si por el contrario la comunicación es BIDIRECCIONAL: Uno envía, pero el que recibe tiene que responder y por tanto ser también emisor.


Pero lo cierto es que hay muchas ocasiones en las que no se requiere la comunicación bidireccional. Imagínate el mando a distancia de la tele o de la puerta de un garaje. Basta con que el emisor envíe la orden y que el receptor demuestre que no estaba sordo haciendo la operación requerida.

No es necesario que la puerta del garaje nos informe de que nos ha oído. Basta con que inicie la apertura. Si trascurrido un par de segundos no vemos que nos haga caso, pulsamos de nuevo el mando y punto. La bi direccionalidad de la comunicación es superflua.

La ventaja de establecer comunicación unidireccional es que los circuitos de control son mucho más sencillos y baratos y nos solemos ahorrar cantidad de complicaciones. En este caso, disponemos en el mercado de dos tipos de chips UNIDIRECCIONALES, el 2262 (que hace de emisor) y el  2272 (que hace de receptor).

Estos son un par de chips de tecnología CMOS, tipo ENCODER /DECODER, pensados para establecer una comunicación sencilla entre dos puntos en modo UNIDIRECCIONAL y tienen la virtud de ser muy sencillos y baratos, y por eso hay cantidad de productos que se apoyan ellos.

Desde mandos a distancia de infrarrojos hasta pequeños módulos inalámbricos para puertas de garaje y similares. De hecho hay bastantes posibilidades de que tengáis alguno en casa o en la puerta del garaje, pero no os asustéis.



1.- CONTROL REMOTO CON EL  XD-YK04 A 315 MHz (y 15m máximo)



Son básicamente un emisor de 4 canales con formato llavero y con antena retráctil, y un sencillo receptor basado en nuestro chip 2272, que activa uno de 4 pines en función del botón que se pulse en el mando remoto. 


Las conexiones son triviales. Conectar tensión y Ground y después cuando se pulsa un botón el mando remoto, si la comunicación es correcta activa el pin VT para indicar que ha detectado una transmisión valida (Valid Trans) conectado al Arduino en el pin3.

Por otra parte, los pines D0, D1, D2, D3 se activan con un HIGH, cuando se pulsa el botón A, B, C, D respectivamente, por lo que vamos a conectarlos a los pines digitales de Arduino 4, 5, 6, y 7 .



VCC 5V
GND
VT = PIN3
D0 =  PIN7
D1 = PIN6
D2 = PIN5
D3 = PIN4


Fijaros que además el receptor requiere que le conectéis una antena sencilla si os vais a alejar unos cuantos metros. Para eso basta con que soldéis un cable enrollado en espiral a la conexión de antena que veis en la esquina superior izquierda (si envias la señal del emisor a menos de 15 metros, no necesitaremos antena).


NOTA: si dá problemas con la transmisión de RF, se puede quitar la comunicación serie para que sólo active los pines de salida de ledes o de relés..

CÓDIGO
/*  ----------------------------------------------------------------
    Control remoto sencillo por RF a 315 Mhz
--------------------------------------------------------------------  */
void setup() {
    Serial.begin (9600);
    pinMode(13,OUTPUT);
    pinMode(12,OUTPUT);
    pinMode(11,OUTPUT);
    pinMode(10,OUTPUT);
    for (int i = 3 ; i <= 7 ; i++)
          pinMode(i, INPUT) ;
          }
  void loop() {
  if (digitalRead(3) ) {                       // Si hay dato valido
        Serial.print("Transmision ok: ");
        if (digitalRead(4))  {
          Serial.print("Boton C, pulsado");
          digitalWrite (11, !digitalRead(11)) ;
          delay(500);
        }
        if (digitalRead(5)) {
          Serial.print("Boton A, pulsado");
          digitalWrite (13, !digitalRead(13)) ;
          delay(500);
        }
        if (digitalRead(6)) {
              Serial.print( "Boton D, pulsado");
              digitalWrite (10, !digitalRead(10)) ;
              delay (500) ;
              }
        if (digitalRead(7))  {
              Serial.print( "Boton B, pulsado");
              digitalWrite (12, !digitalRead(12));
              delay (500) ;
              }
        Serial.println("\t");
        }
}