¡Hola! Hoy voy a explicaros cómo conectar dos placas Arduino de forma inalámbrica con un módulo de radiofrecuencia RF 433MHZ.
Estos módulos vienen en parejas: un receptor y un emisor que se comunican mediante ondas de radio. No son ninguna maravilla, pero permiten comunicar dos dispositivos… ¡por poco dinero! Cuestan entre 2 y 5 euros el par.
Cómo programar estos chismes desde cero es muy laborioso, podemos utilizar la librería VirtualWire. Esta librería se encarga de gestionar las funciones más básicas de estos módulos de radiofrecuencia low-cost: envío de información, comprobación de los paquetes de datos…
Os recomiendo que descarguéis la librería desde este enlace. Los que no sepáis cómo instalar librerías en Linux, seguid nuestro tutorial.
Para probar los módulos de radiofrecuencia, haremos que una de las placas Arduino dé la orden a la otra para que encienda el LED del pin 13.
Componentes
¿Qué necesitamos?
- 2x Placas Arduino: UNO, Duemilanove, Nano o Mega servirán
- Receptor y emisor de radiofrecuencia: recomiendo soldar una antena al emisor
- Batería/Pilas: alimentaremos una placa con el cable USB y la otra con pilas
- Breadboard y jumpers
- Cable USB de impresora
Y ya está. Hoy sale barato 🙂
Conexiones
Las conexiones de cada una de las placas Arduino con los módulos serán:
Emisor:
-Arduino 5V – Módulo VCC
-Arduino GND – Módulo GND
-Arduino Digital 12 – Módulo DATA
Receptor:
-Arduino 5V – Módulo VCC
-Arduino GND – Módulo GND
-Arduino Digital 11 – Módulo DATA (tiene dos pines DATA: cualquiera de los dos vale)
-Arduino VCC – Positivo de la batería
-Arduino GND – Negativo de la batería
Código del Receptor
Arduino recibirá un mensaje que se guardará en el array de carácteres message[]. Después, comprobará que este mensaje se corresponda a la instrucción “Encender” o “Apagar”, y si es así encenderá o apagará el LED 13.
/* RECEPTOR Apaga el LED 13 si recibe el mensaje "Apagar" Enciende el LED 13 si recibe el mensaje "Encender" Escrito por Nano en beneficio de los seres humanos www.robologs.net */ #include <VirtualWire.h> //Creamos un mensaje //La constante VW_MAX_MESSAGE_LEN viene definida en la libreria byte message[VW_MAX_MESSAGE_LEN]; byte messageLength = VW_MAX_MESSAGE_LEN; void setup() { pinMode(13, OUTPUT); //Configuramos el pin 13 Serial.begin(9600);//Iniciamos el Serial Serial.println("Iniciando..."); vw_setup(2000); vw_rx_start(); } void loop() { if (vw_get_message(message, &messageLength)) { if(comparar("Encender") == 0){ digitalWrite(13, HIGH); Serial.write("LED Encendido\n"); } else if(comparar("Apagar") == 0) { digitalWrite(13,LOW); Serial.write("LED Apagado\n"); } } } char comparar(char* cadena) { //Esta funcion compara el string cadena con el mensaje recibido. //Si son iguales, devuelve 1. Si no, devuelve 0. for(int i = 0; i<messageLength; i++) { if(message[i] != cadena[i]) { return 1; } } return 0; }
En el programa usamos funciones propias de VirtualWire.
vw_setup_(2000) sirve para iniciar la comunicación por radio, de forma similar al Serial.begin().
vw_rx_start() inicia el pin de recepción. Si no le decimos nada, el pin por defecto es el 11. Si quisiéramos cambiarlo al 9 (por ejemplo), deberíamos escribir vw_set_rx_pin(9) antes de iniciarlo.
vw_get_message() lee un mensaje de longitud messageLength y lo guarda en el array message. Además devuelve true si el mensaje está correcto o false si está corrupto. De ahí que en el código lo pongamos dentro de un condicional. Lo que estamos diciendo es: “Lee el mensaje. Si no está corrupto, continúa”
Código del Emisor
El emisor emite los mensajes “Encender” y “Apagar” en intervalos de un segundo.
/* EMISOR Envia los mensajes "Apagar" y "Encender" en intervalos de un segundo Escrito por Nano en beneficio de los seres humanos www.robologs.net */ #include <VirtualWire.h> void setup() { //Iniciamos el Serial y la comunicacion por radio Serial.begin(9600); Serial.write("Sistema encendido\n"); vw_setup(2000); } void loop() { send("Encender"); delay(1000); send("Apagar"); delay(1000); } //Funcion para enviar el mensaje void send (char *message) { vw_send((uint8_t *)message, strlen(message)); //Envia el mensaje vw_wait_tx(); //Espera hasta que se haya acabado de transmitir todo Serial.println(message); //Muestra el mensaje por Serial }
vw_send() sirve para enviar el mensaje. Recibe dos parámetros: el primero es la función en sí y el segundo cuántos bytes contiene el mensaje.
vw_wait_tx() espera hasta que se haya transmitido todo el mensaje antes de continuar con el programa.
Escribimos una función send() para que sea más cómodo enviar los mensajes. Así no tenemos que escribir cada vez vw_send() y vw_wait_tx().
Si quisiéramos cambiar el pin de recepción, deberíamos escribir vw_set_rx_pin(numero_pin) justo antes de vw_setup(2000). Si no decimos nada, por defecto será el 11. Si queremos cambiar el pin tx, podemos hacerlo con vw_set_tx_pin(numero_pin).
¡Y ya está! Bueno, ¿Qué tal ha salido? Si habéis seguido mis pasos, veréis cómo el LED 13 del receptor se enciende y se apaga. Si no es así… ¡volved a repasar todos los pasos!
Si tenéis alguna duda, comentario, etc, podéis escribirme en los comentarios de abajo. 🙂
Actualización 11 de Mayo de 2016:
Leyendo los comentarios, veo que una de las consultas que más gente me hace es cómo enviar la señal de “encender” pulsando un botón o con un sensor de distancia infrarrojo, en vez de hacerlo automáticamente.
Venga, gente, ¿no me digáis que no sabéis hacerlo? ¡Si es muy fácil! 😛
Sólo hay que añadir un condicional “if” que mire si se cumple la condición de encendido. En el caso del botón, el void loop quedaría:
void loop() { if(digitalRead(boton) == HIGH) { send("Encender"); } else { send("Apagar"); } delay(100); }
Con el botón es más de lo mismo. Si tenemos una función que devuelve la distancia del sensor (que llamaremos leer_sensor()), sólo hay que poner un condicional:
void loop() { if(leer_sensor() >= 100) //Sustutuimos 100 por cualquier distancia { send("Encender"); } else { send("Apagar"); } delay(100); }
La única “dificultad” será construirnos esta función leer_sensor(), aunque muchos fabricantes de sensores ofrecen ejemplos de cómo utilizar su sensor con Arduino.
no me funciona ,alguien sabe porque no corre .cleyutp@gmail.com
Hola! Puedes decirme qué es lo que te está fallando? Te aparece algún error al compilar, o no funcionan las antenas?
Hola mundo! Gracias por el post, por brindar tu apoyo a la comunidad de desarroladores en general. Mi consulta es la siguiente: Estoy utilizando dos arduinos (Emisor y receptor). Quiero implementarlo ahora con un arduino(emisor) y la raspeberry pi 3(receptor). Por ejemplo estoy enviando un entero (533) desde el emisor hacia el receptor. Como leeria ese valor en la Raspberry ? Ademas para eso tengo que saber la naturaleza de este modulo. Por eso quiero saber como recibe la informacion el receptor? He estado averiguando un poco, menciona que es una tranmision Simplex (unidireccional), pero de ahí nada más. Agradeceria… Leer más »
hola que tal, tengo una duda. estoy haciendo un coche de control remoto con pulsadores, pero tengo una duda con los botones debido a que no se como ponerlo en el receptor. no se si puedas ayudarme con el código por favor.
Hola mariano! Tienes que mover los motores según cuál sea el mensaje que recibes del emisor.
O algo así pero adaptado a tu controlador de motores.
[este comentario fue borrado por insultar al autor]
Hola tengo una pregunta, antes que nada muchas gracias por el ejemplo me funciono bien, resulta que ahora no se estan comunicando los rf tengo el codigo tal cual lo subiste aqui me da la impresion que no hay comunicacion entre los modulos. ya que la consola del emisor envia encender y apagar pero en la consola del receptor queda solo en iniciando. Te agradezco si me puedes dar una idea de cual pueda ser el problema saludos!
[este comentario fue borrado por insultar al autor]
corrijo pin 2 en la segunda instruccion aunque solo es un error en el comentario la instrucción es correcta
Hola, me podrías ayudar.
en base al mismo funcionamiento de esta programación me gustaría incorporar un modulo de tarjeta SD para crear un registro cada vez que se active el led.
Buenas! Tienes esta série de tutoriales en la página de Arduino que te explican cómo hacer funcionar una targeta SD: https://www.arduino.cc/en/Reference/SD
Concretamente hay uno que te enseña a crear un fichero y escribir en él: https://www.arduino.cc/en/Tutorial/ReadWrite
Primero deberías entender cómo funciona el módulo SD y empaparte un poco de estos tutoriales. Después, dentro del código del receptor de radio, será tan fácil como llamar la función que escribe un fichero dentro del condicional if(comparar(“Encender”) == 0).
Hola, tengo un Arduino Nano como emisor, y un Arduino Due como receptor.
El Nano no me da ningún problema a la hora de compilar y subir el programa, pero el Arduino Due me da un error al compilarlo.
“Error compilando para la tarjeta Arduino Due (Programming Port).”
Ese es el error que me da, otros programas sí los carga bien en el Due, por ejemplo el Blink, he llegado a la conclusión de que el problema está en la librería VirtualWire.h que quizá no sea compatible con el Arduino DUe. ¿Alguien podría ayudarme y darme algún cnsejo?
Gracias.
El error me lo da usando cualquiera de los dos puertos de Arduino DUe, en el “programing port” me da el error que he indicado arriba, y en el “native port” me da el mismo error pero sustituyendo “programing” por “native”.
Gracias
Probando, por es difícil llenar los requisitos para enviar comentarios, debe hacerlo mas fácil en el futuro.
Buenas tardes, tengo todo igual pero la orden vw_setup(2000); no se “enciende” en color naranja como Serial.begin(9600); por ejemplo. No cambia de color y parece no funcionar.
Tengo al librería incluída y todo está igual. ¿Cómo puede ser?
¿Has probado a compilar? Puede que el IDE de Arduino no detecte esta instrucción como una función.
Hola N4N0, se puede envíar datos de un sensor rs485 a traves de radiofrecuencia?
Puedes enviar cualquier tipo de mensaje por radiofrecuencia.
Hola N4No espero disculpes mis comentarios en tu Post, pero es con el afán de aportar a la comunidad, tengo varios proyectos y es grato toparse en las redes con personas que tienen el mismo interés que yo en colaborar y aprender en el proceso. Se agradece tu aporte y buscaré más cosas posteadas por ti, tienes algún link?
Buinas! Gracias por tus comentarios, se agradece tener un poco de ayuda contestando 😛
Si quieres ver más links publicados por mí, aquí tienes para leer durante rato 😉
https://robologs.net/tag/nano/
Hola, no he trabajado nunca con Arduino pero recientemente he visto las ventajas que ofrece y me e instruido algo pues veo en este una solucion a mi problema. Lo que pasa es que necesito primeramente adquirir señales que están en el rango de 10Khz a 21Khz y luego digitalizarlas. Mis preguntas son ¿Se le puede incorporar una antena que capture estas frecuencias?¿Se le pudiera implementar un algoritmo de filtrado implementado con Matlab en C, Verilog o HDL?
Espero me ayuden, Gracias.
Hola David! Perdona por no haber contestado antes, he tenido unos días un poco ajetreados y se me ha pasado tu comentario T.T
Respondiendo a tu pregunta: sí, se puede, con Arduino puedes implementar cualquier tipo de algoritmo (otra cosa es que la placa tenga suficiente potencia/memoria para procesarlo…). Si conoces el pseudocódigo del algoritmo, no te será difícil implementarlo en lenguaje de Arduino (es una especie de C++/Java).
Lo que no podrás hacer es implementarlo en Verilog u otro tipo de HDL (por lo menos que yo sepa, si encuentras alguna forma dímelo por favor 😀 ).
Hola N4No,
En primer lugar gracias por compartir tus conocimientos con nosotros. En segundo lugar una consulta, estamos intentando montar un sistema para controlar un módulo de 8 relés con un mando de rf de 8 botones (en principio nos da igual 315 q 433 mhz) y me gustaría saber si esta librería nos serviría para eso. estamos un poco atascados en cómo comunicar el mando con el receptor y ver que info le llegaría al arduino…
Gracias de antemano!
Hola Daniel! Si el mando emisor transmite a la misma frecuencia que el receptor entonces supongo que esta librería os serviría. Mi consejo es que lo probéis para salir de dudas.
Tendréis que hacer un poco de ingeniería inversa para ver que os llega desde el mando y escribirlo en la consola.
hola, soy nuevo en esto y cuando yo coloco: #include y cuando le doy en verificar me dice que hay un error de escritura y no me deja usar mi RF, no se si se le cambio el: #include por otra cosa, por favor ayuda
Hola! ¿Has descargado e instalado la librería VirtualWire en la IDE de Arduino?
hola según lo leido en este tutorial , me queda claro todo el funcionamiento de los modulos de rf para arduino
mi pregunta es??
los modulos mantienen una portadora constante y los datos van sobre ella o se modula la portadora de los mmodulos de rf.
las ppreguntas son ppor que quiero cambiar los modulos de rf por un par de radios walkie talkie para dar mas alcance
el alcance de los modulos de RF para arduino a 6 metros de altura recepto y transmisor fue de 2.5 km
los radios w t es sobre 10 km
cuenteme
saludoos
Hola paulo! No creo que entienda tu pregunta. ¿A qué te refieres con una portadora constante?
Hola “paulo cendegui lamig”, conseguiste hacer trabajar los Arduinos con los WalkieTalkies?, me interesa poder transmitir a larga distancia y en ninguna parte hay info de alguien que haya probado con algo así. A mí se me había ocurrido trabajar transmitiendo la instrucción o señal de los sensores en base a código Morse por medio de señal AM (hay varios tutoriales que te muestran como enviar señal por AM), pero no hay ninguna info de como recibir los datos por esta misma vía y decodificarlos para el receptor. La ventaja de trabajar por AM es que la señal viaja a… Leer más »
Hola buenas somos nuevos en Arduino, estamos haciendo lo que pasa es que al probar el código con una placa Arduino uno este compila pero al cargarlo me manda un “error” diciendo
>> Teensy did not respond to a USB-based request to automatically reboot.
>> Please press the PROGRAM MODE BUTTON on your Teensy to upload your sketch.
Mi pregunta es debo configurar el arduino de alguna forma o que debo de hacer .. lamento la molestia jeje
Hola, xBlzx. Lo que estáis programando es una placa Teensy, no una placa Arduino. Como no tengo ninguna placa de este tipo no sé por qué puede estar fallando, pero podéis probar a hacer lo que dice el mensaje de error y pulsar el botón del PROGRAM MODE cuándo carguéis el sketch.
Muchas gracias por el aporte. bastante informacion. tengo una consulta , puedo usar la libreria VirtualWire + la libreria SoftwareSerial ? ya que yo envez de que mande la señal por los pulsadores quiero mandarlo atravez de bluetooth , eh probado muchas veces , mire el circuito muchas veces y la programacion la revice pero no manda ninguna señal , me surgui la duda de que no puedo unir las librerias. Muchas gracias por su atencion y por el aporte en este blog. Gracias
Si no recuerdo mal creo que no, porque ambas utilizan el mismo timer.
Hola que tal ? Yo queria saber si en la libreria virtual wire hay algun medidor de distancia , osea me refiero a que si el Receptor se aleja y se va perdiendo la señal que el Tx mida la distancia del Rx y que pueda hacer que un led titile mas rapidamente segun se valla perdiendo la señal. No se si se entiende. Me ayudarias muchisimo Gracias.
Que yo sepa con estos módulos no puede hacerse.
Se me ocurre que podrías agregarle un módulo GPS al emisor y receptor para comparar la distancia por coordenadas entre ambos dispositivos.
hola una consulta mas , si no es mucha molestia , si yo quiero usar mas de un pulsador , por eje: 8 que es los que necesito en mi caso , como seria la prog ? ya que solo usa la función compara y solo compara 2 palabras “encender” y “apagar” del mismo pulsador , gracias por su atencion
cual seria el pin de transmision del arduino ? o mejor dicho donde conecto el pin de data del emisor al arduino ? y si quiero cambiarlo ? como hago ?
Hola Omar! En el tutorial lo pone, es el pin D12 de Arduino.
Si quieres cambiar el pin puedes hacerlo escribiendo vw_set_tx_pin(numero_de_pin) dentro del void setup.
cual seria el pin de trasmisión del arduino ? si lo quiero cambiar ?
hola me pueden ayudar,? quiero hacer un carrito con rf pero no se como hacer que me lea el joysick que quiero utilizar, alguien save que podria utilizar?
hola una duda, quiero hacer la comunicacion pero utilizando un modulo joystick para manejar un carrito a rf, pero no se como modificar el programa para que lea al joystick, ¿alguien me puede ayudar?
Hola que tal, al momento de compilar cualquiera de los dos programas, me aparece lo siguiente: …EmisorEmisor.ino: In function ‘void loop()’: …EmisorEmisor.ino:19:18: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] send(“Encender”); ^ …EmisorEmisor.ino:21:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] send(“Apagar”); Y tambien te quiero hacer otra consulta, estoy haciendo un proyecto de Li-Fi, enviar señal via LED, pensaba probar con estos codigos a ver si lograba enviar algo, no se si tu sepas algo sobre esto o alguna otra libreria que podria utilizar Gracias
Tengo instalada la version 1.8.1 de Arduino, no se si tambien tenga algo que ver
Hola! Es extraño, porque a mí no me aparece ningún warning. ¿Has instalado bien la librería?
En cuánto a la librería para enviar señales de luz, lo mejor será que hagas una búsqueda en Google.
Convierte el texto a un array de chars esto char[]
Quince decir uso leds en lugar de motores
Hola , necesito ayuda de nuevo por favor.
Estoy haciendo un carro rc y me base en tu programa pero los leds del receptor parpadean sin control solos y cuando presiono un botón se queda prendido (uso leds en lugar de botones para verlo mejor )
Si quieres te paso el programa que hice
Sí, será mejor que me pases el código.
AYUDA URGENTE
mis módulos son iguales a los del post pero hice todo lo que decía y solo tienes una distancia de 1.50m aprox.
y no sé por que a las dos módulos les puse antenas ,alambres y cables pero nada incluso el transmisor lo puse a 10V pero solo logre 2m de distancia
Ayuda porfa
Hola, Jhonny! Debes tener en cuenta que son módulos baratos y por tanto no llegan demasiado lejos. El que compre yo en teoría llega a 10 metros, pero nunca lo he hecho pasar de 5 metros. Además, según el fabricante estos módulos pueden ser un poco diferentes y tener diferentes alcances. Si has colocado la antena y aumentado el voltaje entonces es que tu módulo no llega a más de dos metros.
Muchas gracias por responder ,entonces solo me queda buscar unos mas potentes de alcance de 100m ó mas
Pd: gracias a tu post pude hacer todo esto gracias
Y porqué no transmites por WiFi mejor? Hay módulos emisores/receptores, según veo yo estos módulos RF son bastante limitados ya que es para cosas simples y cercanas con códigos no muy extensos, de otro modo tendrías que combinar las instrucciones de un equipo a otro en alguna especie de cadena de código. Yo he probado con WiFi y anda muy bien, ahora cuando requiero mayores distancias y cuento con señal de celular en ambos puntos, uso módulos de GSM y transmito por Mensajería de Texto. Para cosas intermedias he usado Módulos WiFi y andan bastante decentes exeptuendo si hay mucha… Leer más »
Hola, alguien me puede decir como hacer para que la variable transmitida sea una variable tipo int en vez de char? Quiero hacer que el Arduino lea el valor de una resistencia variable y la transmita por fm a otra tabla ese valor.
Genial… la informacion me funciono muy bn, pero tego una pregunta el modulos me funcionan a baja distancia como puedo hacer para alargar esa distancia… Me dijeron que ponga unas antenas, pero hay q hacer calculoas para dichas antenas o pueden heliocidades o dipolos.
La verdad es que en la doucmentación no pone nada. Yo he puesto un trozo de hilo de cobre, pero si te lo quieres currar un poco más: http://www.instructables.com/id/433-MHz-Coil-loaded-antenna/
Hola te saludo del Perú, consulto y solicito por favor me ayudes o facilites un código para controlar el encendido de 8 leds independientes…. de tal manera que al presionar un botón en el emisor el receptor prenda un led y así hasta 8 leds… y al soltar el botón el led se apague también…
Hola Héctor! Tienes que hacer un programa para el emisor que compruebe si el botón está pulsado o no, con la función digitalRead();
Si el botón está pulsado puedes enviar un mensaje con el nombre del LED y la acción que debe hacer (p.ej. “LED1_encender” o “LED2_apagar”).
El emisor debe tener un condicional para comprobar qué LED debe encenderse o apagarse:
Bueno, entiendes la idea, ¿no?
Estimado tengo una duda. al momento que el dispositivo se aleja del perímetro de comunicación y pierde la conectividad el led se queda pegado, si es cero (apagado) no me genera problema pero si es 1 (encendido) me gustaría que ese ultimo pulso se vuelva cero hasta que nuevamente se vuelva a repetir la comunicación. ¿que me aconseja ?
Hola, MauricioLC! Deberías añadir un contador de tiempo que se ponga a cero cada vez que se reciba un mensaje (“Apagar” o “Encencer”). Si este contador llega a un segundo (que es el intervalo de tiempo en que se envian los mensajes) tienes que hacer que se apague el LED.
Debería ser simple, pero si no sabes cómo implementarlo me lo dices y te daré un ejemplo 🙂
Amigo, gran aporte, pero tengo la misma duda que mauricioLC,
en mi caso necesito tener encendido un LED y que únicamente se apague cuando el TX y el RX se alejen del perímetro de comunicación, y si se vuelven a acercar que vuelva y encienda el LED. Podrías darme un código ejemplo? ya que no entendí como implementar el contador.
Hola gracias por dejar este tutorial por favor no se si sería posible encender un led y un vibrador en el receptor y también en el transmisor cuando no exista comunicación entre ellos, y se apaguen el led y el vibrador del transmisor y del receptor cuando exista comunicación entre ellos.
Gracias de antemano!!!
Si se puede, lo que podrías hacer es que el pulso o instrucción se envíe con un intervalo corto de tiempo (por ejemplo 500 a 1.000 milisegundos) y si no lo detecta que se activen el led y vibrador en ambos dispositivos. Ahora para que eso funcione deberías tener capacidad en ambos dispositivos de enviar y recibir, para que ambos comprueben si se comunican o no. De otro modo podrías usar un BlueTooth o WiFi en modo bidireccional de comunicación (es decir que conversen una instrucción continua entre ellos)
muy instructivo, gracias. Parece mentira cómo se simplifica algo que antaño debía ser un auténtico quebradero de cabeza! Ya no hay excusa para no CREAR.
Hola N4No, excelente tutorial, me funciona desde la primera, pero he observado que el valor de messageLength no siempre es correcto. Tras el primer “Encender” su valor es 8, luego con el primer “Apagar” vale 6 y se queda con este valor aunque se vuelva a enviar de nuevo un “Encender”. Es decir, se queda con el menor valor asignado para siempre??? ¿Te pasa a ti lo mismo?
Pues no, a mi me funciona bien y siempre me coincide el tamaño de los mensajes :/
hola como se en que pin recibe el dato?
Por defecto los datos del módulo receptor se reciben través del pin D11 de Arduino.
Final de línea.
hoye y si quiero cambiar el puerto de la señal del emisor como lo puedo hacerr
El puerto Serial no puede cambiarse.
Oswow N4No, esto me va a venir DPM para establecer conexion con las sondas que estoy construyendo!!!!, ahora, la pregunta es:
Antes mencionaste que se puede conectar antenas. Supongo que se podran conectat antenas tanto al emisor, como al receptor no? Por que voy a necesitar una docena de kilometros de alcance XD
Vaya, pues siento decirte que si quieres alargar varios kilometros vas a necesitar una antena más buena. Estos módulos baratos no te llegarán ni a 100 metros…
Saludos N4No, gracias por el aporte, me surge la siguiente duda, si deseo usar interrupciones, es decir que se interrumpa una función cuando reciba un dato,en el cto del receptor debo usar el pion 0 o 1 del Arduino y conectar al modulo DATA así como configurar si la interrupcion se activa en high, low, rise, down, etc?
Gracias por la atención
Sip, como el módulo funciona con 5V se podría hacer. Por si te interesa tengo este tutorial de interrupciones:
http://robologs.net/2015/01/02/tutorial-de-interrupciones-con-arduino/
Gracias por tu aporte de antemano N4n0, una duda… lo del sensor infrarrojo, su metodo puede considerarse tambien para un sensor ultrasonico?
Sip, el método es el mismo.
hola soy nuevo en esto ,me podrias postear los codigo para controlar 4 servos y un motor con potenciometros para arduino Sparfunk pro micro 5v y trasmitirlo por radiofrecuencia por ahora trasmitia con 555 y un pote pero podia mover un solo servo.Desde ya gracias, muy buena tu pagina.
Hola Hugo. No me importa ayudarte con algunos aspectos de tu proyecto, pero lo que no voy a hacer es trabajar por ti y hacerte todo el código. Intenta escribirlo tú y pregúntame si te sale alguna duda.
gracias N4n0 veo que sale
Muchas grcias por compartir semejante ayuda!
Queria saber si alguien puede confirmarme si puedo usar estos modulos para controlar 2 servos con un modulo de joystick analogico… la idea es hacer una torreta comandada con un arduino y que mediante radiofrecuencia le pase la informacion al otro donde tengo los servos…
Muchas graicas
Sí, mírate este tutorial para mover un motor con estos módulos: http://robologs.net/2015/02/21/como-controlar-un-motor-por-radio-con-arduino/
Es muy fácil adaptar este código para que controle un servo en vez de un motor.
Hola amigo, soy nuevo en esto y estoy haciendo un proyecto, en el que requiero como una pregunta anterior que te hicieron, de poner 4 botones y 4 leds, y que cada botón activa un led, mi pregunta es, en que parte de los 2 códigos debe cambiar, o si pudieras poner un ejemplo para hacerlo, te lo agradecería mucho.
Hola, Daniel! Primero tienes que conectar los pulsadores al emisor. Vigila de no utilizar ninguno de los pines de la antena. Después, debes añadir condicionales dentro del código emisor, uno para cada botón, que compruebe si se está pulsando. Te mando un ejemplo con dos botones y dos LEDS, te dejo para ti ampliarlo a cuatro: void loop() { if(digitalRead(boton1) == HIGH) { send("LED1_ENCENDER"); send("LED2_APAGAR"); } else if(digitalRead(boton2) == HIGH) { send("LED2_ENCENDER"); send("LED1_APAGAR); } Y dentro del void loop del receptor: void loop() { if (vw_get_message(message, &messageLength)) { if(comparar("LED1_ENCENDER") == 0){ digitalWrite(led1, HIGH); } else if(comparar("LED1_APAGAR") == 0) { digitalWrite(led1,LOW);… Leer más »
Hola, gracias por la ayuda y los magníficos tutoriales. Estoy probando el código que colocaste justo arriba y no consigo el resultado deseado, me explico: al pulsar el boton 1 se enciende el led1 el led 2 parpadea, al pulsar el botón 2 el led 2 queda fijo y el led 1 parpadea. En principio descarto un problema de rebote porque el comportamiento no cambia mientras mantengo el botón pulsado. Tengo los botones en pull-down, he probado a retirar físicamente uno de la placa y el comportamiento es el mismo. Estoy usando dos arduino uno y el mismo kit de… Leer más »
Perdón, confundí el código con otro que estaba probando. Funciona correctamente. Pulsando el botón 1 enciende el LED 1, que se mantiene encendido hasta que se pulsa el botón 2 y se enciende el LED 2.
Siento la confusión que hay podido ocasionar.
No pasa nada, Julio! Me alegro que te funcione!
hay alguna forma de anular ese delay, tal vez, se me ocurre que el emisor lea continuamente las entradas, y cuando una esté en high, que no salga mientras esté presionado con un bucle while… o sigue habiendo delay…?¿
El delay estará siempre: es el retardo de la transmisión de datos.
amigo buen trabajo, si quisiera poner 4 botones y 4 leds? un led por boton? el problema que tengo es que cuando presiono el boton 1 no enciende inmediatamente igual pasa con el 2 y el 3, 4
Siempre habrá un poco de delay. Pero si pasa de un par de segundos asegúrate de haber conectado cada botón a GND para que no haya interferencias al pulsar los botones.
Vale, muchas gracias! buen trabajo sigue así !! los que nos estamos introduciendoen el lenguage c + te agradecemos mucho tus soluciones!!:)
Amigo tengo todo como dices y no me enciende el led, yo escribo en el puerto serial encender y el led no hace nada.
Hola Cristo! Para encender y apagar el LED no hay que escribir nada en el puerto serial: el emisor envia automáticamente el mensaje de “Encender” y “Apagar”. Mi consejo es que vuelvas a leerte todo el tutorial paso a paso y compruebes que no te has dejado nada.
Claudio
Es posible manejar dos modulos rf, uno que transmite y el otro recibe en la misma tarjeta para hacer una comunicación entre dos o mas trarjetas nano.
Sip, si quieres puedes conectar un receptor y un emisor en la misma placa Arduino. Fíjate que cada módulo utiliza unos pines diferentes.
Tienes algun ejemplo, la idea es que un sensor de movimiento active mi tarjeta nano y envie la informacion a otras targetas dos o más para cada una de ellas encienda un farol como alarma y a la vez cada tarjeta cuando se active por su propio sensor haga lo mismo, sean nodos que tanto envien como recibas una señal de alarma, gracias.
Bueno, sólo tienes que añadir un condicional al emisor que lea el sensor de distancia y envíe el mensaje de alarma a los receptores:
Y programas los receptores para que cuándo reciban el mensaje “Encender”, en vez de encender un LED enciendan un farol. El código debería ser el mismo.
Con cuantos voltios tengo que alimentar el circuito transmisor y el circuito receptor con sus arduinos? Cuanto mAH requieren cada uno?
tengo entendido que en el transmisor entre menos energia se le de menor sera el alcance de la señal. cuantos voltios tengo que darle para que me de 10mts de alcance? lo hare con unos modulos rf de 315mhz
Una pregunta, quiero repartir 4 receptores para localizar la dirección en la que está un único emisor, pero de qué manera podría aislar los receptores para que sólo lo detecte el que está en la dirección al emisor?
O si hay alguna otra manera, agradecería la información, ya que es una pena que no se detecte la intensidad de la comunicación.
Un saludo
Que yo sepa la única forma que hay es codificar el mensaje de tal forma que el primer carácter indique cuál es el receptor al que va dirigido.
Es decir, que si quieres enviar el mensaje “encender” al receptor 1, podrías enviar el mensaje “1encender”, y que los otros receptores ignoren todos los mensajes que no empiecen por el carácter “1”.
http://robologs.net/2015/02/10/tutorial-de-arduino-y-de-radiofrecuencia-con-virtualwire/#comment-1672