Recomendación receptor RF y mando RF

Buenas tardes,

Alguien me puede recomendar un receptor RF para el arduino y su respectivo mando??? Lo necesito para lo siguiente:

Cuando en el mando se pulse un botón, el ardu mueva un relé.

Gracias de antemano,

PD: Quizás haya algo ya hecho que no necesite ni siquiera un arduino verdad???

Vamos que quieres implementarlo en la puerta de un garaje o similar no? jeje

Yo no te puedo ayudar porque no he usado aun RF, pero a ver si alguien dice algo que además también me interesa.

Saludos

Algo parecido, jejeje

Hola, para eso no te hace falta arduino, los chinos venden baratos un mando y con su receptor, como este http://www.ebay.es/itm/2-Channel-RF-Wireless-Transmitter-Remote-Control-315MHz-/330555859216?pt=UK_CarsParts_Vehicles_CarParts_SM&hash=item4cf6aa2110#ht_3074wt_932 Pero si te vas a meter con la puerta de un garaje, ten en cuenta los aspectos relacionados con la seguridad, que son MUY IMPORTANTES.

Gracias!!!

Pero en realidad quiero conectarlo al arduino porque quiero que active un buzzer también.

Leche que cosa más barata! Impresionante.

Me interesa, yo he comprado esto http://www.ebay.es/itm/ws/eBayISAPI.dll?ViewItem&item=280526086919&ssPageName=ADME:B:EOIBSA:ES:1123 pero lo tengo en la lista de tareas pendientes. Lo que me ha llegado fisicamente no se parece al de la foto. Salu2

Yo he usado esta tienda en un par de chapuzas:

http://stores.ebay.es/e-MadeinCHN?_trksid=p4340.l2563

curro92: Hola, para eso no te hace falta arduino, los chinos venden baratos un mando y con su receptor, como este http://www.ebay.es/itm/2-Channel-RF-Wireless-Transmitter-Remote-Control-315MHz-/330555859216?pt=UK_CarsParts_Vehicles_CarParts_SM&hash=item4cf6aa2110#ht_3074wt_932 Pero si te vas a meter con la puerta de un garaje, ten en cuenta los aspectos relacionados con la seguridad, que son MUY IMPORTANTES.

qué barato! Curioso que receptor, transmisor, 2 relés, carcasa de mando y demás esté a solo 7€ y pico. Sería interesante probar si se puede usar en arduino para proyectos más elaborados.

Quizá un día de estos me lo pida para probar qué tal va.

Me ha llegado un emisor (mando 4 botones) y el receptor (4 reles). Funciona perfectamente. He soltado el receptor de la placa de los reles y lo he conectado al arduino, pero… no he tenido narices a leer algo con el arduino. He probado con virtualwire pero nada. Soy incapaz de leer nada.

A alguien se le ocurre hacer alguna prueba???

Un saludo

El tema es que estos dispositivo no transmiten la información en formato UART, sino que transmiten la información codificada en un formato propietario (usando un registro de desplazamiento). En conclusión, la UART ni flores. Lo que tienes que hacer es leer el pin con la información serializada y ver los pulsos que entran. Si es bueno, debe mandar un código que cambia cíclicamente, si es malo, enviara un tren de pulsos fijo.

Voy a ver si puedo hacer un sketch rápido para ver si saco algo en claro. Gracias

Bueno, vamos avanzando.

He encontrado una libreria que va bien: RCswitch

Este es el código:

/*
  Example for receiving
  
  http://code.google.com/p/rc-switch/
  
  If you want to visualize a telegram copy the raw data and 
  paste it into http://test.sui.li/oszi/
*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  mySwitch.enableReceive(0, output);

}

void loop() {

}

void output(unsigned long decimal, unsigned int length, unsigned int delay, unsigned int* raw) {

  if (decimal == 0) {
    Serial.print("Unknown encoding.");
  } else {
    char* b = dec2binWzerofill(decimal, length);
    Serial.print("Decimal: ");
    Serial.print(decimal);
    Serial.print(" (");
    Serial.print( length );
    Serial.print("Bit) Binary: ");
    Serial.print( b );
    Serial.print(" Tri-State: ");
    Serial.print( bin2tristate( b) );
    Serial.print(" PulseLength: ");
    Serial.print(delay);
    Serial.println(" microseconds");
  }
  
  Serial.print("Raw data: ");
  for (int i=0; i<= length*2; i++) {
    Serial.print(raw[i]);
    Serial.print(",");
  }
  Serial.println();
  Serial.println();
}


static char* bin2tristate(char* bin) {
  char returnValue[50];
  int pos = 0;
  int pos2 = 0;
  while (bin[pos]!='\0' && bin[pos+1]!='\0') {
    if (bin[pos]=='0' && bin[pos+1]=='0') {
      returnValue[pos2] = '0';
    } else if (bin[pos]=='1' && bin[pos+1]=='1') {
      returnValue[pos2] = '1';
    } else if (bin[pos]=='0' && bin[pos+1]=='1') {
      returnValue[pos2] = 'F';
    } else {
      return "not applicable";
    }
    pos = pos+2;
    pos2++;
  }
  returnValue[pos2] = '\0';
  return returnValue;
}



static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength){
  static char bin[64]; 
  unsigned int i=0;

  while (Dec > 0) {
    bin[32+i++] = (Dec & 1 > 0) ? '1' : '0';
    Dec = Dec >> 1;
  }

  for (unsigned int j = 0; j< bitLength; j++) {
    if (j >= bitLength - i) {
      bin[j] = bin[ 31 + i - (j - (bitLength - i)) ];
    }else {
      bin[j] = '0';
    }
  }
  bin[bitLength] = '\0';
  
  return bin;
}

De mi mando recibo estos 4 códigos:
Decimal: 7805964 (24Bit) Binary: 011101110001110000001100 Tri-State: F1F10F100010 PulseLength: 616 microseconds
Raw data: 19104,572,1892,1812,664,1824,660,1816,668,572,1900,1808,668,1824,664,1816,668,568,1908,568,1900,572,1904,1808,668,1804,668,1816,672,576,1908,560,1900,560,1908,564,1900,572,1900,560,1900,1796,672,1812,672,572,1908,560,1896,

Decimal: 7806144 (24Bit) Binary: 011101110001110011000000 Tri-State: F1F10F101000 PulseLength: 616 microseconds
Raw data: 19120,576,1892,1808,664,1824,656,1820,660,576,1900,1812,660,1828,660,1816,664,576,1904,568,1904,576,1896,1808,664,1808,668,1812,668,584,1904,568,1896,1804,664,1812,668,576,1908,564,1900,560,1904,564,1900,576,1900,564,1896,

Decimal: 7805955 (24Bit) Binary: 011101110001110000000011 Tri-State: F1F10F100001 PulseLength: 616 microseconds
Raw data: 19116,572,1896,1808,668,1824,660,1816,672,568,1904,1808,668,1824,668,1812,672,568,1908,564,1904,572,1904,1808,668,1804,672,1812,676,572,1912,560,1900,564,1912,560,1900,564,1908,560,1900,564,1908,560,1900,1804,668,1812,676,

Decimal: 7806000 (24Bit) Binary: 011101110001110000110000 Tri-State: F1F10F100100 PulseLength: 617 microseconds
Raw data: 19132,572,1896,1808,664,1824,660,1816,664,576,1904,1808,664,1824,668,1812,668,572,1908,568,1900,576,1904,1804,672,1804,672,1812,672,580,1908,560,1904,564,1908,560,1904,1804,668,1808,676,564,1912,564,1904,572,1908,560,1900,

Bien, el tema está en como puedo modificar para que cuando reciba el primer código me encienda un led… pero que se mantenga encendido hasta que no reciba nada. Vamos, mientras mantenga pulsado el boton, que el led se encienda, y si no lo pulso que se apague.

Este es el sketch que he utilizado

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  pinMode(13, OUTPUT);

  Serial.begin(9600);
  mySwitch.enableReceive(0, output);

}

void loop() {

}

void output(unsigned long decimal, unsigned int length, unsigned int lenght, unsigned int* raw) {
digitalWrite(13, LOW);
         Serial.print(decimal);
   while(decimal==7805964){
     Serial.print(decimal);
     decimal = 0;
         digitalWrite(13, HIGH);
         Serial.print(decimal);}
         
         
  }

Lo he intentado de 1000 formas, pero no veo donde estoy fallando.

A ver si alguien me echa una mano.

Un saludo

Yo me compre este kit: http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItem&item=150572711418

Si conecto solo el receptor, no paro de recibir lineas de este tipo, pero variando la numeración:

Unknown encoding.Raw data: 8436,88,96,112,56,340,56,404,108,112,144,

Si conecto también el emisor, pero el pin Data lo conecto a masa o lo toco con la mano, dejo de recibir esas lineas y en este momento es cuando al darle al botón del mando (uno que tenia por casa de 433Mhz) me aparecen lineas, solo aparecen al darle a un botón, si estoy 1 minuto sin darle, pues 1 minuto que no salen lineas, pero al darle al botón salen el mismo tipo de linea que antes, del tipo:

Unknown encoding.Raw data: 8436,88,96,112,56,340,56,404,108,112,144,

Y cambiando siempre la numeración

Que puede ser?

El error que te está dando es que no reconoce que el código que recibes tiene una codificación mánchester. Puedes copiar toda la ristra que te está devolviendo en el enlace de la página web que aparece en cabecera del fichero que ha publicado GabyCR con el ejemplo.

Esos números que has publicado son los tiempos entre transiciones HI/LOW. Es posible que tengas interferencias de algún tipo. En los 433MHz hay muchas cosas funcionando, por ejemplo los mandos de los coches. Otro equipo de baja potencia que esté transmitiendo información.

Eso me reurda a un vecino que le encantaba aparcarme en la puerta de mi casa (para que el señorito pudiese entrar cómodamente en la suya) y las veces que tuvo que acudir el servicio técnico de Mercedes para abrirle el coche. Al final, como un monito listo, aprendió que si no aparcaba en mi puerta, misteriosamente podía abrir el coche y la puerta del garaje!

Vale, no se me había ocurrido... si por ejemplo mi vecino tiene la típica estación meteorológica inalambrica que funciona a 433Mhz, me estará dando siempre esas "interferencias".

Me tendré que ir a mitad del campo... jejeje

Lo que no entiendo por que al tocar con la mano el pin de datos del emisor dejo de recibirlos, así solo recibo cuando le doy a un botón del mando.

Entonces si el mando hace uso de esa codificación no hay nada que hacer verdad? no lo puedo usar con el arduino.

Por cierto, también tengo estos mandos de Cebek de 433,92Mhz: http://www.electan.com/emisor-mando-distancia-canal-cebek-p-2458.html

Pero con estos mandos no detecto nada en el arduino

Bueno, si metemos en la ecuación que cuando pones el dedo en la linea de datos del transmisor, es posible que éste esté continuamente enviando información. Para estar seguros: 1. apaga el transmisor y mira a ver si te entra algo en el receptor. 2. si no te entra nada, entonces, enciende el transmisor (estoy suponiendo que el transmisor tiene su correspondiente antena sintonizada a 433MHz). Si ves algo en el receptor, entonces es que el transmisor está continuamente transmitiendo. 3. si ahora, le pones el dedo y deja de transmitir, seguramente la entrada del transmisor sea una entrada con el colector abierto.

Si al ponerle el dedo deja de transmitir y cuando pulsas el botón transmite, es muy posible que tengas que ponerle un bonito pulup de unos 10K a la entrada del transmisor.

Hasta aquí puedo leer si ver el esquemático o la hoja de datos del transmisor/receptor.

Que buena la libreria esta!!!! Por fin he podido leer el codigo de un mando que compre, cosa que daba por imposible. A mi de momento no me hace cosas raras solo recibe cuando doy al boton, ya he conseguido encender y apagar un led pero a cada pulsacion, no como quiere mjnavapo. Lee hasta el RAW del mando del coche , pero solo el raw, jaja.

Me alegro de que os funcione bien la librería. Aún así no he podido hacer un delay dentro de ella…

Prueba este codigo, lo unico que hace es sacar el valor decimal fuera de la funcion y como la funcion usa interrupciones tienes q declarar una variable global como volatile, una vez iguala los valores trabajas en el loop y haces lo que necesites con ese valor. A ver si es esto lo que buscabas.
Un saludo.

#include <RCSwitch.h>
volatile unsigned long tipo;
RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  mySwitch.enableReceive(0, output);

}

void loop() { //Serial.println( tipo);
  if(tipo==5592578){  //5592578 es el valor decimal de uno de los botones de mi mando.
      digitalWrite(13, HIGH);
      delay(500);
      tipo=0;
    }  
    else{digitalWrite(13, LOW);}

}

void output(unsigned long decimal, unsigned int length, unsigned int delay, unsigned int* raw) {

  if (decimal == 0) {
    Serial.print("Unknown encoding.");
  } else {
tipo=decimal;   
}

}