En este trabajo analizamos la comunicacin inalmbrica, especficamente Wi-Fi a travs de un
microcontrolador , la idea es desarrollar un proyecto de control inalmbrico haciendo uso de la red de Wlan. Evaluaremos alternativas en cuanto a materiales a usarse y el gasto econmico que tienen cada una de estas opciones . Usaremos en el trabajo el microcontralador Arduino Uno placa la cual es conocida en la actualidad por ser utilizada para realizar aplicaciones de ensayo especialmente para estudiantes la cual consta con entradas y salidas anlogas y digitales asi como tambin una amplia gama de mdulos compatibles para realizar un trabajo completo. En este proyecto implementaremos un programa de control a travs de la red utilizando como interface una simple pagina Web desde la cual podremos controlar el encendido y apagado de luces.
DESARROLLO
Al iniciar el trabajo nos encontramos con dos grandes disyuntivas las cuales eran utilizar el modulo Wi-Fi para Arduino el cual nos permite transmitir datos de manera inalmbrico o usar un modulo Ethernet el cual requerira de mas equipos para establecer una comunicacin inalmbrica . El factor fundamental para tomar la decisin fue el elevado precio que debamos contemplar si nos inclinbamos por los modulos Wi-Fi y la poca informacin que se manejaba de estos componentes .
Dejamos ac informacin econmica de precios los cuales fueron extrados desde la pgina Olimex Chile al dia de 23 de Junio de 2014 :
El Arduino Uno es una placa electrnica basada en el microprocesador Atmega328. Cuenta con 14 pines digitales de entrada / salida (de los cuales 6 pueden ser utilizados como salidas PWM), 6 entradas analgicas, un resonador cermico de un 16 MHz, una conexin USB, un conector de alimentacin, un header ICSP, y un botn de reinicio. Contiene todo lo necesario para apoyar el microcontrolador; basta con conectarlo a un ordenador con un cable USB, o alimentarla con un adaptador o la batera para empezar de CA a CC. El Uno se diferencia de todas las placas anteriores en que no utiliza el chip controlador de USB a serial FTDI. En lugar de ello, se cuenta con el Atmega16U2 como convertidor USB a serial.
Resumen Microcontroladores ATmega328 Tensin de funcionamiento 5V Voltaje de entrada (recomendado) 7-12V Voltaje de entrada (lmites) 6-20V Digital I / O Pins 14 (de los cuales 6 proporcionan PWM) Pines de entrada analgica 6 Corriente continua para las E / S Pin 40 mA Corriente de la CC para Pin 3.3V 50 mA Memoria Flash 32 KB ( ATmega328 ) de los cuales 0,5 KB utilizado por el gestor de arranque SRAM 2 KB ( ATmega328 ) EEPROM 1 KB ( ATmega328 ) Velocidad del reloj 16 MHz
Memoria El ATmega328 tiene 32 KB (con 0,5 KB utilizado por el gestor de arranque). Tambin dispone de 2 KB de SRAM y 1 KB de EEPROM (que puede ser ledo y escrito con la librera EEPROM ). Entradas y Salidas
Cada uno de los 14 pines digitales en el Uno se puede utilizar como una entrada o salida, utilizando las funciones pinMode () ,digitalWrite () , y () digitalRead . Operan a 5 voltios. Cada pin puede proporcionar o recibir un mximo de 40 mA y tiene una resistencia de pull-up (desconectado por defecto) de 20-50 kOhms. Adems, algunos pines han especializado funciones:
De serie: 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y de transmisin (TX) TTL datos en serie. Estos pines estn conectados a los pines correspondientes del ATmega8U2 USB-to-TTL de chips de serie. Interrupciones externas:. 2 y 3 Estos pines pueden ser configurados para activar una interrupcin en un valor bajo, un flanco ascendente o descendente, o un cambio en el valor. PWM: 3, 5, 6, 9, 10, y 11 proporcionan PWM de 8 bits con la funcin analogWrite () . SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Estos pines soportan comunicacin SPI utilizando la biblioteca de SPI . LED:. 13 Hay un built-in LED conectado al pin digital 13 Cuando el pin es de alto valor, el LED est encendido, cuando el pasador es bajo, es apagado.. El Uno tiene 6 entradas analgicas, etiquetados A0 a A5, cada uno de los cuales proporcionan 10 bits de resolucin (es decir, 1.024 valores diferentes). Por defecto se miden desde el suelo a 5 voltios, aunque es posible cambiar el extremo superior de su rango con el pin AREF y la funcin analogReference (). Adems, algunos pernos han especializado funcionalidad: TWI: A4 o A5 pin SDA y SCL o pin. Apoyar la comunicacin TWI utilizando la librera Wire . Hay un par de otras patas de la placa: AREF. Voltaje de referencia para las entradas analgicas. Se utiliza con analogReference (). Restablecer. Lleve esta lnea BAJO para reiniciar el microcontrolador. Normalmente se utiliza para agregar un botn de reinicio para escudos que bloquean el uno en el tablero.
Comunicacin El Arduino Uno tiene una serie de instalaciones para la comunicacin con un ordenador, otro Arduino, u otros microcontroladores. El ATmega328 ofrece UART TTL (5V) de comunicacin en serie, que est disponible en los pines digitales 0 (RX) y 1 (TX). Un ATmega16U2 en los canales de mesa esta comunicacin serie a travs de USB y aparece como un puerto Com virtual para el software en el ordenador. El firmware '16U2 utiliza los controladores COM USB estndar, y no se necesita ningn controlador externo. El software de Arduino incluye un monitor de serie que permite que los datos simples de texto que se envan desde y hacia la placa Arduino. Las RX y TX LED en el tablero parpadearn cuando se estn transmitiendo datos a travs del chip de USB a serie y conexin USB al ordenador (pero no para la comunicacin en serie en los pines 0 y 1).
Una biblioteca SoftwareSerial permite la comunicacin en serie en cualquiera de los pines digitales de la ONU. El ATmega328 tambin es compatible con I2C (TWI) y la comunicacin SPI. El software de Arduino incluye una biblioteca de alambre para simplificar el uso de la I2C bus; ver la documentacin para ms detalles. Para la comunicacin SPI, utilice la biblioteca de SPI .
Arduino Ethernet Shield
La Arduino Ethernet Shield permite a una placa Arduino conectarse a internet. Est basada en el chip ethernet Wiznet W5100 (datasheet). El Wiznet W5100 provee de una pila de red IP capaz de TCP y UDP. Soporta hasta cuatro conexiones de sockets simultneas. Usa la librera Ethernet para escribir programas que se conecten a internet usando la shield. La ethernet shield dispone de unos conectores que permiten conectar a su vez otras placas encima y apilarlas sobre la placa Arduino. Arduino usa los pines digitales 10, 11, 12, y 13 (SPI) para comunicarse con el W5100 en la ethernet shield. Estos pines no pueden ser usados para e/s genricas.
La shield provee un conectore ethernet estndar RJ45 El botn de reset en la shield resetea ambos, el W5100 y la placa Arduino. La shield contiene un nmero de LEDs para informacin: PWR: indica que la placa y la shield estn alimentadas LINK: indica la presencia de un enlace de red y parpadea cuando la shield enva o recibe datos FULLD: indica que la conexin de red es full duplex 100M: indica la presencia de una conexin de red de 100 Mb/s (de forma opuesta a una de 10Mb/s) RX: parpadea cuando la shield recibe datos TX: parpadea cuando la shield enva datos COLL: parpadea cuando se detectan colisiones en la red El jumper soldado marcado como "INT" puede ser conectado para permitir a la placa Arduino recibir notificaciones de eventos por interrupcin desde el W5100, pero esto no est soportado por la librera Ethernet. El jumper conecta el pin INT del W5100 al pin digital 2 de Arduino. El slot SD en la shield no est soportado por el software Arduino.
El dispositivo ruteador empleado para este proyecto pertenece a la empresa TP-LINK y a continuacin se muestran sus caractersticas y modelo
Prestaciones: Velocidad de transmisin inalmbrica de datos a 150 Mbps ideal para la transmisin de vdeo, juegos en lnea y llamadas por Internet Encriptacin inalmbrica de seguridad slo al presionar el botn QSS Control de ancho de banda basado en IP permite a los administradores determinar la cantidad de ancho de banda asignado a cada PC Puente WDS inalmbrico ofrece una interconexin de ampliar su red inalmbrica Caractersticas: Interface: 4 puertos LAN de 10/100Mbps 1 puerto WAN 10/100Mbps Botones: Botn de configuracin rpida de seguridad Botn de reinicio Alimentacin: 9VDC / 0.6A Estandar: IEEE 802.11n*, IEEE 802.11g, IEEE 802.11b Antena: Fija, omnidireccional de 5dBi Frecuencia: 2.4-2.4835GHz Seal: 11n: Hasta 150Mbps (dinmico) 11g: hasta 54Mbps (dinmico) 11b: hasta 11Mbps (dinmico) EIRP: <20dBm(EIRP) Sensibilidad de recepcin: 130M: -68dBm@10% PER 108M: -68dBm@10% PER 54M: -68dBm@10% PER 11M: -85dBm@8% PER 6M: -88dBm@10% PER 1M: -90dBm@8% PER Funciones Wireless: Activar / Desactivar radio inalmbrica, WDS Bridge, WMM, estadsticas inalmbricas Seguridad Wireless: 64/128/152-bit WEP / WPA / WPA2,WPA-PSK / WPA2-PSK WAN: IP dinmica / IP esttica / PPPoE / PPTP (Acceso dual) / L2TP (Acceso dual) / BigPond DHCP Servidor, cliente, lista de cliente DHCP, reserva de direccin Calidad de servicio: WMM, Control de Ancho de Banda Port Forwarding: servidor virtual, Port Triggering, UPnP, DMZ Dynamic DNS: DynDns, Comexe, NO-IP VPN Pass-Through: PPTP, L2TP, IPSec (ESP Head) Access Control: Control Parental, Control de Manejo Local, Lista de anfitriones, la Lista de acceso, manejo de reglas Firewall Security: DoS, SPI Firewall Direccin IP Filtro / Filtro de direccin MAC / filtro de dominio Conexiones de direcciones IP y MAC Administracion: Control de acceso Manejo Local Manejo remoto Certificationes CE, FCC, RoHS Requerimientos de sistema: Microsoft Windows 98SE, NT, 2000, XP, Vista o Windows 7, Mac OS, NetWare , UNIX o Linux. Dimensiones: 174 x 118 x 33 mm Peso: 200 gr. Incluye: Fuente de alimentacin CD de recursos Gua de instalacin rpida
TOPOLOGA DE CONECCIN EN 5 PASOS. El diseo empleado en esta red para uso en aplicaciones de Domtica se presenta a continuacin de forma detallada. 1-.Configuracin de Router: En este tpico se da una contrasea y nombre para la red inalmbrica, adems se chequean las direcciones y mrgenes de estas disponibles para el uso a futuro. 2-.Coneccin entre arduino uno a travs del mdulo ethernet: Al montar el ethernet shield en nuestra placa embebida nos queda conectarla mediante cable utp con el ruteador y confirmar presencia de luz intermitente entre ambos dispositivos. 3-.Cdigo en Software de Arduino: Al tener instalado nuestro software procedemos a conectar nuestra placa y obtener comunicacin y reconocimiento, una vez hecho esto se procede a crear el cdigo de control que en nuestro caso responde al encendido de lmpara en domicilio. Es importante en este cdigo otorgar una IP vlida a nuestro arduino ya que si no corresponde al rango revisado anteriormente en nuestro router la comunicacin y el ingreso al codigo mediante equipos como computadores y celulares no se llevara a cabo. 4-.Uso de salida en arduino para encendido de lmpara: Usaremos una salida anloga de nuestro arduino para apreciar el encendido de forma prctica para esto montaremos una pequea maqueta que incluye una lmpara de funcionamiento 220v usada comnmente en domicilios para lograr este encendido necesitamos un circuito que nos permita el encendido mediante Arduino ya que no produce los niveles de corriente adecuados para conectar de forma directa una bombilla elctrica, para lograr este acomple usamos en este caso rels que actuan con valores de 5v en primera etapa a los 220v en su etapa de accin, cabe mencionar que de igual forma se pueden usar otros circuitos de acople como scr y triac. 5-. Interfaz con el usuario: El usuario tendr el control de esta lmpara por medio del equipo que elija como un computador de escritorio, tablet, notebook, celular, etc ya que slo necesita de un navegador asi que es irrelevante el sistema operativo usado o marcas. Para ingresar a la interfaz de control abrimos un navegador y escribimos la direccin IP que anteriormente le dimos al Arduino en el cdigo y nos direccionar a una intuitiva y clara pgina para encender y apagar nuestra lmpara.
PROGRAMACION Y CABLEADO DEL PROYECTO EN DETALLE Para poder realizar nuestro proyecto primero tuvimos que interiorizarnos en la programacin de la tarjeta Arduino UNO y el programa que se necesita para poder cargar el cdigo del programa al microcontrolador. Tambien fue necesario conocer el procedimiento para poder asignarle una IP fija a la shield Ethernet y poder realizar la posterior comunicacin con esta. Como primer paso, comenzamos una comunicacin bsica con la tarjeta a partir de un ejemplo que trae el software de Arduino, que se basa en la comunicacin mediante ethernet de un servidor web, en donde a travs de la direccin IP que se configure se podr tener la lectura de entradas anlogas que est recibiendo, para esto seguimos los siguientes pasos: Archivo => Ejemplos => Ethernet => Webserver
Donde encontraremos lo siguiente:
Donde el comando "IPAddress" indica la direccin IP con la que cuenta el dispositivo, esta es la direccin que debemos modificar segn la configuracin de nuestro Router. En nuestro caso, la direccin a utilizar ser "192.168.0.17". Una vez que logramos la comunicacin con el controlador, procedemos a realizar las modificaciones necesarias al programa de ejemplo y as lograr el control inalmbrico de nuestras luminarias. Cuando nos comunicamos con la tarjeta Arduino mediante la direccin IP, muestra una pgina en formato HTML, es por esto que despus de una rpida bsqueda en foros de internet, encontramos una explicacin de cmo lograr mostrar botones en esta pgina y as poder tener el control de las salidas en la tarjeta y como integrarlas a nuestro cdigo del programa, basado en el formato, tipo, forma y ubicacin que se le quera dar al botn. Para nuestra aplicacin de control inalmbrica de luminarias, decidimos trabajar con 3 salidas (7, 8, 9) del microcontrolador, a las cuales conectamos unos leds y de esta manera poder realizar la simulacin del funcionamiento real de nuestro proyecto y junto estos, unas resistencias de 100 ohms, las cuales ayudan a limitar la corriente de consumo del led y como mtodo de proteccin para las salidas del controlador.
A continuacin mostraremos el cdigo del programa sobre el cual logramos realizar el proyecto de control inalmbrico de luminarias. Cabe destacar que Arduino tiene un lenguaje de programacin bastante avanzado y muy amigable para poder trabajar con el basado en C/C++, lo que nos facilito bastante la tarea de programacin, ya que contbamos con conocimientos previos sobre este lenguaje CDIGO DEL PROGRAMA //Sketch Arduino Ethernet ON/OFF
#include <SPI.h> #include <Ethernet.h> //Declaracin de la direcciones MAC e IP. Tambin del puerto 80 byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC IPAddress ip(192,168,0,17); //asignacion IP para la shield EthernetServer servidor(80); int PIN_LED7=7; //salidas con las que se trabajara int PIN_LED8=8; //salidas con las que se trabajara int PIN_LED9=9; //salidas con las que se trabajara String readString=String(30); String estado_L7=String(3); //lectura estado led 7 String estado_L8=String(3); //lectura estado led 9 String estado_L9=String(3); void setup() { Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas servidor.begin(); pinMode(PIN_LED7,OUTPUT); //asignacion de funcionamiento del puerto digitalWrite(PIN_LED7,LOW); // condicion inicial de la salida estado_L8="OFF"; //asigancion led 7 pinMode(PIN_LED8,OUTPUT); digitalWrite(PIN_LED8,LOW); estado_L7="OFF"; //asigancion led 9 pinMode(PIN_LED9,OUTPUT); digitalWrite(PIN_LED9,LOW); estado_L9="OFF"; //fin asignacion led 9
} void loop() { EthernetClient cliente= servidor.available(); if(cliente) { boolean lineaenblanco=true; while(cliente.connected()) { if(cliente.available()) { char c=cliente.read(); if(readString.length()<30) { readString.concat(c); //Cliente conectado //Leemos peticin HTTP caracter a caracter //Almacenar los caracteres en la variable readString // INICIO ASIGNACION PARA PRENDER LED 7 } if(c=='\n' && lineaenblanco) //Si la peticin HTTP ha finalizado { int LED = readString.indexOf("LED="); //asignamos un nombre de lo que vamos a controlar if(readString.substring(LED,LED+5)=="LED=T") { //condiciones para que trabaje el micro digitalWrite(PIN_LED7,HIGH); estado_L7="ON"; } else if (readString.substring(LED,LED+5)=="LED=F") { digitalWrite(PIN_LED7,LOW); estado_L7="OFF"; // FIN ASIGNACION PARA PRENDER LED 7 // INICIO ASIGNACION PARA PRENDER LED 8 } if(c=='\n' && lineaenblanco) //Si la peticin HTTP ha finalizado { int LED = readString.indexOf("LED="); if(readString.substring(LED,LED+5)=="LED=n") { digitalWrite(PIN_LED8,HIGH); estado_L8="ON"; } else if (readString.substring(LED,LED+5)=="LED=m") { digitalWrite(PIN_LED8,LOW); estado_L8="OFF"; // FIN ASIGNACION PARA PRENDER LED 8 // INICIO ASIGNACION PARA PRENDER LED 9 } if(c=='\n' && lineaenblanco) //Si la peticin HTTP ha finalizado { int LED = readString.indexOf("LED="); if(readString.substring(LED,LED+5)=="LED=j") { digitalWrite(PIN_LED9,HIGH); estado_L9="ON"; } else if (readString.substring(LED,LED+5)=="LED=k") { digitalWrite(PIN_LED9,LOW); estado_L9="OFF"; // FIN ASIGNACION PARA PRENDER LED 9 } //Cabecera HTTP estndar cliente.println("HTTP/1.1 200 OK"); cliente.println("Content-Type: text/html"); cliente.println(); //Pgina Web en HTML cliente.println("<html>"); // TITULO PRINCIPAL DE LA PAGINA cliente.println("<head>"); // TITULO PRINCIPAL DE LA PAGINA cliente.println("<title>CONTROL INALAMBRICO LUMINARIA</title>"); // TITULO PRINCIPAL DE LA PAGINA cliente.println("</head>"); // TITULO PRINCIPAL DE LA PAGINA cliente.println("<body width=100% height=100%>"); // TITULO PRINCIPAL DE LA PAGINA cliente.println("<center>"); // TITULO PRINCIPAL DE LA PAGINA cliente.println("<h1>CONTROL INALMBRICO LUMINARIA</h1>"); // TITULO PRINCIPAL DE LA PAGINA cliente.print("<br><br><br>"); // ESPACIO cliente.print("Estado de LED 7: "); // SUBTITULO cliente.print(estado_L7); // DATO DE SUBTITULO cliente.print("<br><br>"); // ESPACIO cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=T\'>"); //BOTON LED 7 Y ACTUADOR ON cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=F\'>"); // BOTON LED 7 Y ACTUADOR OFF // INICIO SEGUNDOS BOTONES PARA LED 7 cliente.print("<br><br><br><br>"); cliente.print("Estado LED 8: "); cliente.print(estado_L8); cliente.print("<br><br>"); cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=n\'>"); //BOTON LED 8 Y ACTUADOR ON cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=m\'>"); //BOTON LED 8 Y ACTUADOR OFF // FIN SEGUNDOS BOTONES // INICIO TERCEROS BOTONES PARA LED 9 cliente.print("<br><br><br><br>"); cliente.print("Estado LED 9: "); cliente.print(estado_L9); cliente.print("<br><br>"); cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=j\'>"); //BOTON LED 9 Y ACTUADOR ON cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=k\'>"); //BOTON LED 9 Y ACTUADOR OFF // FIN TERCEROS BOTONES cliente.println("</center>"); cliente.println("</body>"); cliente.println("</html>"); cliente.stop(); //Cierro conexin con el cliente readString=""; } } } } } }//activar solo para cuando se use el led 7 }//activar solo para cuando se use el led 9 // Fin de la conversacin Una vez que ya terminamos la programacin de nuestro cdigo vamos a verificar si nuestro programa est bien escrito o tiene problemas al compilar (botn indicado en rojo):
Luego, debemos verificar si el puerto serial de comunicacin est bien conectado y si la tarjeta en la que se quiere cargar el programa est bien seleccionada:
una vez comprobado el paso anterior, procedemos a cargar los datos:
Cuando el compilador nos indica "carga terminada", quiere decir que nuestro programa fue cargado al microcontrolador y est listo para realizar las pruebas. Ahora vamos al navegador que comnmente utilizamos y escribimos la direccin IP que anteriormente hemos asignado a nuestra tarjeta, en este caso ser 192.168.0.17 , se deber conectar y mostrar lo que fue configurado en el programa, en este caso mostrara los botones de accionamiento de las luces, el estado en que se encuentran(la condicin inicial al iniciar el programa es "OFF") y cada uno con sus respectivos nombres.
Condicin inicial de los leds al comenzar el programa y montaje en la protoboard:
Encendido del Led 7:
Encendido del Led 8:
Encendido del Led 9:
Led 7, 8 y 9 encendidos:
A continuacin pasaremos a la aplicacin directa sobre las luminarias domiciliarias.
SISTEMA DE ACOPLADO A LUMINARIAS DOMICILIARIAS
CONCLUSIN Durante el desarrollo de este proyecto tratamos de introducirnos al mundo de la domtica que da a da se hace ms presenta a nuestro alrededor desde sencillas aplicaciones de encendido de lmparas y reconocimiento de chapas electrnicas hasta la automatizacin completa de un domicilio. Particularmente en el presente informe se detalla una de las aplicaciones ms usadas al momento de aplicar domtica a nuestras casas, el control de luminaria. En este caso se llev a cabo de forma totalmente inalmbrica y se buscaron distintas opciones de hacerlo lo ms sencillo y conveniente para el usuario. Como hemos visto a lo largo de este proyecto las aplicaciones y opciones son variadas pero nuestra investigacin demostr que el empleo de una placa embebida de bajo costo, como es Arduino Uno, es suficiente para satisfacer las necesidades en aplicaciones sencillas de control inalmbrico domiciliario.