Mostrando entradas con la etiqueta control. Mostrar todas las entradas
Mostrando entradas con la etiqueta control. Mostrar todas las entradas

lunes, 21 de abril de 2014

Conectar dos Arduinos mediante RadioFrecuencia

Ups. Bueno, ayer nos despistamos un poco y no subimos nada (no nos crucifiqueis porfaplis :p). Hoy os traigo algo bastante curioso. Cómo encender un led en un arduino desde otro usando RadioFrecuencia.
Aquí podeis descargaros los archivos .ino directos para abrir en arduino: Emisor y Receptor. Además os dejo la librería VirtualWire la cual solo teneis que descomprimirla donde estén todas las demás (en mi caso en libraries).

Aquí un video de proyecto final:
Aquí os doy la lista de materiales necesarios:

   Para el emisor:
      - Led de 10.000 Ohmios      - Pulsador
      - Jumpers (cablecitos de conexión)
      - Protoboard
      - Arduino (está claro. Yo uso el Uno R3)
      - Un emisor de RadioFrecuencia.(He usado uno de 433MHz)
Aquí teneis el esquemático del circuito emisor:

Y aquí las conexiones (por si no han quedado claras):



Ahora el Receptor.
      - Arduino cables y protoboard (como en el anterior)
      - Receptor de RadioFrecuencia
      - Led
      - Resistencia de 220 Ohmios 
Este es el esquemático:
Y estas algunas fotos de las conexiones:


Aquí os dejo el código del emisor:
#include <VirtualWire.h>  //incluimos la libreria de virtualwire
int boton = 2;            //Asignamos el numero dos al boton
char *msg = "";           //Asignamos el mensaje en blanco
int eb = 0;               //Asignamos el estado del boton en 0

void setup(){
  vw_setup(7000);            //Configuramos la velocidad de transimsion de datos
  pinMode(boton, INPUT);    //Configuramos el pin boton como entrada
}

void loop () {
  eb = digitalRead(boton);    //Leemos el estado del boton y lo guardamos en la variable
  if ( eb == HIGH) {          //Condicion para ver si esta activado el boton
    msg = "E";                //Si lo esta, asignamos la letra E al mensaje
    vw_send((uint8_t *)msg, strlen(msg));  //y enviamos este mensaje
  }
  else {                      //Si no lo esta
    msg = "A";                //Asignamos A al mensaje
    vw_send((uint8_t *)msg, strlen(msg));    // y lo enviamos

  }
}

Y aquí el del receptor:
#include <VirtualWire.h>  //incluimos la libreria de virtualwire

int led = 12; //Asignamos el 12 a la variable led

void setup() {
  vw_setup(7000);        //Seleccionamos la velocidad de transmision de datos
  vw_rx_start();         //Iniciamos la comunicación
  pinMode(led, OUTPUT);  //Asignamos la variable led como salida
}

void loop(){
  uint8_t msg[VW_MAX_MESSAGE_LEN];
  uint8_t len = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(msg, &len)){  //Condicion para ver si hay mensaje
    if ( msg[0] == ‘E’) {            //Si el mensaje es una E
      digitalWrite(led, HIGH);         //Encendemos el LED
    }
    else if (msg[0] == ‘A’){         // Si es una A
      digitalWrite(led, LOW);        //Apagamos el led
    }
  }
}

Bueno gente, espero que hayais estado un rato entretenidos trasteando. Este proyecto también se puede hacer con un solo Arduino pero ni la impresión es la misma (que tener dos Arduinos conectados) ni es necesario, pues se haría directamente, ¿no creeis?

Saludos a todos, perdón por no subir nada ayer y, hasta la próxima! ;)