Comunicación por RF 433 Mhz
abril 25, 2014

- Arduino: He usado el UNO, iba a usar el NANO pero no tenía un adaptador para pilas de 9V que encajara en él.
- Raspberry
- Unos cuantos jumpers de varios tipos, macho-macho y hembra-hembra
- Un breadboard
- Una pila de 9V y un adaptador de Jack.
- Módulos de RF, los puedes encontrar en cualquier web de chinos mandarinos.
- Un led con una resistencia (220 ohm)







#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int led=4; //ponemos en el pin 4 el LED void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receptor en el inerrupt => que es el pin #2 pinMode(led, OUTPUT); } void loop() { if (mySwitch.available()) { // si tenemos datos disponibles que recibir int value = mySwitch.getReceivedValue(); if (value == 0) { Serial.print("No se que es esto"); //Por si se recibe algo raro } else { Serial.print("Recibido el valor "); Serial.println(value); if (value == 5) { Serial.println("Encendemos LED"); digitalWrite(led, HIGH); } else { Serial.println("Apagamos LED"); digitalWrite(led, LOW); } mySwitch.resetAvailable(); } } }Ya tenemos preparado el ardu! Ahora a por la Raspi: RASPBERRY: Ahora nos tenemos que pegar con Linux, lo primero, tener descargada la librería WIRINGPI (la versión de C, no la de python), es una librería que controla los GPIO de la raspberry, ya conté esto en otra entrada. POR SI ACASO :
pi@raspberrypi ~ $ sudo apt-get install git-core pi@raspberrypi ~ $ sudo apt-get update pi@raspberrypi ~ $ sudo apt-get upgrade pi@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi pi@raspberrypi ~ $ cd wiringPi pi@raspberrypi ~ $ git pull origin pi@raspberrypi ~ $ cd wiringPi pi@raspberrypi ~ $ ./buildAhora bajamos 433UTILS (por cierto, se basa también en RCSWITCH):
pi@raspberrypi ~ $ git clone git://github.com/ninjablocks/433Utils.gitAqui la chicha está escrita en C++, en un fichero que se llama codeSend.cpp, lo abrimos y cambiamos si tenemos que cambiarlo, el PIN de conexión en la raspberry, ojo que hay que introducir el pin de acuerdo a la nomenclatura de WiringPI!!!!!! El código es este:
#include "RCSwitch.h" #include <stdlib.h> #include <stdio.h> int main(int argc, char *argv[]) { int PIN = 0; int code = atoi(argv[1]); if (wiringPiSetup () == -1) return 1; printf("sending code[%i]\n", code); RCSwitch mySwitch = RCSwitch(); mySwitch.enableTransmit(PIN); mySwitch.send(code, 24); return 0; }Si lo hemos modificado hay que volver a hacer ./build para compilarlo. Entonces, para hacerlo más bonito lo vamos a ejecutar en Python con el siguiente código:
import os while True: while True: try: digito = int(input("Que hago?? ")) break except: print "Solo digitos enteros" if digito==5: os.system( 'sudo ./codesend 5' ); print 'Encendido' print ' ' else: os.system( 'sudo ./codesend 7' ); print 'Apagado' print ' '



Jose!! Qué grande!! De qué longitud es la antena?? Le has puesto tanto al emisor como al receptor??
Gracias Lean!!!, son 3 centímetros de antena, le he puesto a los dos la misma, si. A ver si saco un rato y le hago una enroscada como la que le pusiste tu, aunque no mejoró mucho no?? :S :S
Hola Jose.
Te felicito por tu proyecto,tu inquietud y tu generosidad al publicarlo.Me admiro viendo tantas cosas mostradas y explicadas en la red pero en inglés, ni siquiera nos atrevemos a preguntar en español en esos foros, así que cuando buscando cosas de arduino me he tropezado con tu proyecto me ha encantado por encima de todo ver que hay quien difunde en español y con categoría.Te animo a que los vídeos los comentes toda la comunidad hispana te lo agradecerá.
Un saludo
Muchas gracias Pedromi, es muy gratificante ver que la gente te lee y que además lo encuentran útil y aclarador, es una motivación para seguir adelante muy grande (a pesar de que lleve un tiempo inactivo por temas de trabajo…)
Muchísimas gracias por tu valoración!! 😉 me animaré a comentar los videos entonces jeje
Hola José, muy bueno su proyecto, gracias por compartir.
Yo tb hizo algunos proyectos con eso sensor pero solo con Arduino.
Me felicito muy en mirar el conteudo en español sobre el Assunto.
Quiero alertar a ti que su diseño do esquema en arduino tiene uno pequeño error no pin data de Receiver que estas conectado al VCC. Pero para quien coñeces la library no hay de teñer problema.
Tu sabes como podria hacer lo proceso contrario? Arduino enviar datos para Raspberry pi?
Muchas gracias, por compatir! «disculpe mi español»
Felicidades por tu logro y por compartir. Te cuento que yo tambien tenia limitantes con la distancia del RF, revise la documentaciòn oficial y encontre que una longitud adecuada para la antena serian unos 17,3cm. Con respecto al voltaje, con 5V andarà muy bien pero acumularas mas ruido, por esa razon recomiendan los 3V. Yo he hecho las pruebas y te comento que tengo toda mi casa conectada con 7 arduinos y un raspberry, cubriendo unos 100mts cuadrados, sin inconveniente alguno.
Abrazos y Exito !!!
Muchas gracias Triplo, la verdad que tengo un poco abandonado el tema por cuestiones laborales pero ahora lo voy a reactivar otra vez y tendré en cuenta tus recomendaciones 😀
Vaya pasada, tienes montada toda una red de sensores en casa, te felicito por ello!!
Gracias de nuevo, un abrazo!!
Tengo unos conocimientos muy escasos de todo esto, pero en el diagrama que has puesto conectas el GND del rf a un pin del arduino, el cátodo del led lo conectas con un pin del arduino y el ánodo pasa por el gnd del arduino, ¿estas seguro que eso esta bien?
el 0V de arduino debería ir conectado al – (cátodo) del LED, tienes razón que está mal el esquema, con el RF pasa lo mismo, se me han descolocado todos los PINES, lo correcto es:
– 0V arduino a cátodo de LED
– 5V arduino a resistencia
– Resistencia a ánodo de LED
– RF + a 5V de arduino
– RF – a 0V arduino
– RF Señal a un pin digital de arduino
Disculpa el malentendido!! Un saludo!
Esta genial, te felicito, pero tengo un problema y es que no se me enciende el led. He comprobado que los pins y gpio son los correctos, pero aun así no enciende nada, sabes que puede ser??
Te recomiendo que aísles tu circuito y tu programa en partes más pequeñas, primero comprueba que enciendes el LED sin RF, luego comprueba por separado el RF, solo a mandar caracteres. Y luego conectas esos caracteres en tu programa con el LED, así no debería haber ningún problema y te aseguras que el hardware está bien montado