En esta publicación comparto este proyecto orientado a domotica. Se trata del control de salidas eléctricas inalámbricas vía 433mhz con Arduino, «Realizado con Arduino y Visual Studio 2013».
Se basa en el control de receptores eléctricos, esenciales en los sistemas de domotica, mediante el computador con Arduino. Sustituimos el control remoto , utilizando un microcontrolador para el envío de señales RF.
Para este Proyecto se requirieron los siguientes materiales
- 1 Arduino.
- 3 Pack Wireless Remote Control Power Outlet Light Switches Plug with 2 remotes
- 1 Sets 433Mhz RF Transmitter Module and Receiver Link Kit for Arduino ARM MCU WL
- Descargar la libreria RC- Switch
Etapas del Proyecto.
- Recepción de Códigos.
- Conexión de módulo MX-FS-05V
- Captura de tramas.
- Transmisión de Códigos.
- Conexión de Modulo Transmisor FS1000A
- Interface Grafica para control.
1- Recepción de Códigos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 } void loop() { if (mySwitch.available()) { int value = mySwitch.getReceivedValue(); if (value == 0) { Serial.print("Unknown encoding"); } else { Serial.print("Received "); Serial.print( mySwitch.getReceivedValue() ); Serial.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("bit "); Serial.print("Protocol: "); Serial.println( mySwitch.getReceivedProtocol() ); } mySwitch.resetAvailable(); } } |
2- Conexión de módulo MX-FS-05V.Para la recepción de datos del Control Remoto:
- Modulo “receiver”(5v) Conectado al Pin (5v) positivo de arduino.
- Modulo “DATA” conectado al Pin (2) de Arduino.
- Modulo “negativo” conectado al Pin (GND) de ardino.
3-Captura de tramas:
La captura de tramas se realiza con el Monitor serie del IDE de Arduino. Dentro del IDE del Arduino Abrimos en Herramientas –> Monitor Serie.
Ahora estamos listos para iniciar la Captura, procedemos a capturar los códigos que envía el control remoto. Presionando cada botón se obtiene los códigos que trasmite el control Remoto que viene con el equipo, de esta manera se realiza el control de las salidas eléctricas.
Estos códigos los copiamos a un archivo de texto, ya que los utilizaremos para el control desde nuestro arduino en la etapa de transmisión de códigos.
4-Transmisión de Códigos:
Para la Transmisión de códigos se realizaron modificaciones a la librería RcSendDemo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#include RCSwitch mySwitch = RCSwitch(); byte inByte = 0; int incomingByte; int estado; void setup() { Serial.begin(9600); mySwitch.enableTransmit(3); mySwitch.setProtocol(1); mySwitch.setPulseLength(190); mySwitch.setRepeatTransmit(6); } void loop(){ /* Switch using decimal code */ if(Serial.available() > 0) { // A byte is ready to receive and read the oldest byte in the serial buffer: inByte = Serial.read(); if(inByte == '1') { // byte is '1' mySwitch.send(1135923, 24); Serial.println("1 ON"); } else if(inByte == '2') { // byte is '2' mySwitch.send(1135932, 24); Serial.println("1 OFF"); } else if(inByte == '3') { // byte is '3' mySwitch.send(1136067, 24); Serial.println("2 ON"); } else if(inByte == '4') { // byte is '4' mySwitch.send(1136076, 24); Serial.println("2 OFF"); } else if(inByte == '5') { // byte is '5' mySwitch.send(1136387, 24); Serial.println("3 ON"); } else if(inByte == '6') { // byte is '6' mySwitch.send(1136396, 24); Serial.println("3 OFF"); } // aqui se tiene que desactivar todas enviando los comandos(encendido para el 9 y apagado para el 0) al puerto serial. else if(inByte == '9') { // byte is '9' mySwitch.send(1135923, 24); mySwitch.send(1136067, 24); mySwitch.send(1136387, 24); Serial.println("All ON"); } else if(inByte == '0') { // byte is '9' mySwitch.send(1135932, 24); mySwitch.send(1136076, 24); mySwitch.send(1136396, 24); Serial.println("All Off"); } else { // byte isn't known Serial.println("Unknown"); } //esta parte devolvera el estado del puerto serial para verificar que dispositivos están activos char c = Serial.read(); //Guardamos la lectura en una variable char if (c == 'H') { //Si es una 'H', enciendo el LED Serial.println("'H' pulsada"); } else if (c == 'L') { //Si es una 'L', apago el LED Serial.println("'L' pressed"); } else { Serial.println("carácter no reconocido"); } } } |
5-Conexion del Modulo Transmisor FS1000A:
Ecendido | Apagado |
1 | 2 |
3 | 4 |
5 | 6 |
7 | 8 |
9 | 0 |
Arduino al recibir el comandó devuelve el estado , imprimiéndolo por puerto serial
- 1 = encendido (on)
- 2= apagado (off)
- 9=ALL ON
- 0= ALL OFF
6-Interfaz Gráfica del Proyecto:
La interfaz gráfica, se realizo en Visual estudio 2013.(esta en versión beta aun se encuentra en desarrollo), esta interfaz cuenta como inicio con un botón conectar, el botón busca de manera automática los puertos disponibles en el computador y lo lista para que seleccionemos del puerto donde esta conectado el Arduino.
Al presionar el botón conectar se abrirá una ventana de conexión en ella estableceremos la conexión del programa con el Arduino, es muy sencillo solo debemos saber en que puerto esta conectado el Arduino , ya que el programa realiza un scan de puertos y los despliega en el select box.
Luego de darle conectar podemos observar que el botón de conexión cambia de estado e icono indicando que se realizó la conexión, se puede observar que se habilitan los botones de apagado o Encendido, pudiendo seleccionar solo uno
La imagen sale como debe estar el led del equipo físico. Link de descarga del programa.
Descarga el Programa, descomprime y ejecuta el Wireless Remote Control Outlet Switch.exe
Video
[youtube http://www.youtube.com/watch?v=XvydFRphfjc?feature=player_embedded&w=640&h=360]
Saludos
Javier Brathwaite Vergara – Autor Invitado del Proyecto PanamaHitek.