You are on page 1of 23

MARCO TEORICO

Arduino
es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de
desarrollo, diseada para facilitar el uso de la electrnica en proyectos multidisciplinares.
2

3

El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos
de entrada/salida. Los microcontroladores ms usados son
el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez y bajo coste que permiten el
desarrollo de mltiples diseos. Por otro lado el software consiste en un entorno de desarrollo que
implementa el lenguaje de programacinProcessing/Wiring y el cargador de arranque que es
ejecutado en la placa.
Desde octubre de 2012, Arduino se usa tambin con microcontroladoras CortexM3 de ARM de 32
bits,
5
que coexistirn con las ms limitadas, pero tambin econmicas AVR de 8 bits. ARM y AVR no
son plataformas compatibles a nivel binario, pero se pueden programar con el mismo IDE de Arduino
y hacerse programas que compilen sin cambios en las dos plataformas. Eso s, las microcontroladoras
CortexM3 usan 3,3V, a diferencia de la mayora de las placas con AVR que generalmente usan 5V. Sin
embargo ya anteriormente se lanzaron placas Arduino con Atmel AVR a 3,3V como la Arduino Fio y
existen compatibles de Arduino Nano y Pro como Meduino en que se puede conmutar el voltaje.
Arduino se puede utilizar para desarrollar objetos interactivos autnomos o puede ser conectado a
software tal como Adobe Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a
mano o adquirirse. El entorno de desarrollo integradolibre se puede descargar gratuitamente.
Arduino puede tomar informacin del entorno a travs de sus entradas analgicas y digitales, y
controlar luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa
mediante el lenguaje de programacin Arduino (basado en Wiring) y el entorno de desarrollo Arduino
(basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de
conectar a un computador.
El proyecto Arduino recibi una mencin honorfica en la categora de Comunidades Digital en el Prix
Ars Electrnica de 2006

Caractersticas bsicas de Arduino

En este apartado vamos a describir los principales elementos que componen una placa
Arduino y el entorno de desarrollo en el que se programa el cdigo, es decir la parte hardware
y software que actan sobre Arduino.
Hardware
Al ser Arduino una plataforma de hardware libre tanto su diseo como su distribucin puede
utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido
ninguna licencia. Por eso existen varios tipos de placa oficiales, las creadas por la comunidad
Arduino o las no oficiales creadas por terceros pero con caractersticas similares. En la placa
Arduino es donde conectaremos los sensores, actuadores y otros elementos necesarios para
comunicarnos con el sistema.
En el proyecto se han utilizado las placas Arduino Uno y Seeeduino que describiremos a
continuacin.
Arduino Uno


Ilustracin 1: Frontal y reverso de la placa Arduino Uno

Es el ltimo modelo diseado y distribuido por la comunidad Arduino. La placa tiene un
tamao de 75x53mm. Su unidad de procesamiento consiste en un microcontrolador
ATmega328. Puede ser alimentada mediante USB o alimentacin externa y contiene pines
tanto analgicos como digitales. La tabla siguiente resume sus componentes:


ATmega328
5V
7-12V
6-20V
14 (de los cuales 6 proporcionan salida PWM)
6
40 mA
50 mA
32 KB (ATmega328) de los cuales 0.5 KB son para el
bootloader
2 KB (ATmega328)
1 KB (ATmega328)
16 MHz



Mi crocontrolador
Voltaj e operativo
Volta j e de entrada ( recomen dado )
Volta j e de entrada ( limit e s)
Pines d igital es E/S
Pines de entrada analgica
Corriente continua p a r a pines E / S
Corriente continua para p in es de
3.3 V
Memoria Flash
SRAM
EEPROM
Velocidad del reloj
A continuacin se muestra en la Ilustracin 2 donde estn ubicados los elementos ms
importantes que componen la placa Arduino Uno que son descritos de arriba abajo y de
izquierda a derecha:


Ilustracin 2: Elementos de la placa Arduino Uno

Referencia para pines analgicos (AREF)
Tensin de referencia para entradas analgicas. Se utiliza con la funcin analogReference().

Pines de tierra (GND)
Masa del circuito para pines, es decir es la tensin de referencia de 0V.

Pines digitales de entrada y salida
En estos pines conectaremos la patilla de dato del sensor/actuador. Desde ellos podremos leer
la informacin del sensor o activar el actuador.
Hay 14 pines digitales que pueden utilizarse como entrada o salida con las funciones
pinMode(), digitalWrite(), y digitalRead(). Operan a 5 voltios. Cada pin proporciona o
recibe como mximo 40mA y disponen de una resistencia pull-up (desconectada por
defecto) de 20-50 kOhmios. Ciertos pines son reservados para determinados usos:
Serie: 0(RX) y 1(TX). Utilizados para recibir (RX) y trasmitir (TX) datos serie.
Estn directamente conectados a los pines serie del microcontrolador.
Utilizando estos pines podremos conectarnos con otras placas.
Interrupciones externas: 2 y 3. Estos pines pueden ser configurados para activar
interrupciones.
PWM: 3, 5, 6, 9, 10 y 11. Proporcionan una salida de 8 bits en modo PWM.
SPI: 10-13. Estos pines soportan la librera de comunicacin de dispositivos SPI.
LED: 13. Este pin est conectado con un led de la placa. Cuando se le asigne un valor
HIGH se encender, en cambio si lo dejamos en LOW estar apagado.

Conector USB
Existen varios tipos de conectores USB, en concreto esta placa utiliza el tipo B hembra. Con lo
cual se necesitar un cable tipo B macho tipo A macho (aunque se pueden utilizar otros este
es el ms extendido) que deber conectarse a un conector tipo A hembra (por ejemplo a un
ordenador o al cargador de un mvil). La placa se puede alimentar con la tensin de 5V que le
proporciona el bus serie USB.
Cuando carguemos un programa a la placa desde el software de Arduino se inyectar el cdigo
del ordenador por este bus.

Botn Reset
Utilizando este botn podremos reiniciar la ejecucin del cdigo del microcontrolador.

ICSP (In Circuit Serial Programming)
Es un conector utilizado en los dispositivos PIC para programarlos sin necesidad de tener que
retirar el chip del circuito del que forma parte.

Microcontrolador ATmega328
El microcontrolador es el elemento ms importante de la placa. Es donde se instalar y
ejecutar el cdigo que se haya diseado. Ha sido creado por la compaa Atmel, tiene un
voltaje operativo de 5V, aunque se recomienda como entrada de 7-12V con un lmite de 20V.
Contiene 14 pines digitales de entrada y salida, 6 pines analgicos que estn conectados
directamente a los pines de la placa Arduino comentados anteriormente. Dispone de 32KB de
memoria flash (de los cuales 512 bytes son utilizados por el bootloader). En la memoria flash
se instalar el programa a ejecutar. El bootloader ser el encargado de preparar el
microcontrolador para que pueda ejecutar nuestro programa. Tambin tiene una memoria
EEPROM de 1KB que puede ser leda o escrita con la librera EEPROM.
En la parte de procesamiento dispone de un reloj de 16Mhz y 2KB de memoria RAM.

Fuente de alimentacin externa
La placa puede ser alimentada tambin mediante corriente continua suministrada por el
conector jack de 3.5mm que podr recibir entre 7 y 12V.

Pin de Reset
Podemos imitar el funcionamiento del botn reset suministrando un valor LOW(0V) para
reiniciar el microcontrolador.

Pin de 3.3V
Desde aqu podremos suministrar 3.3V a los dispositivos que lo necesiten con una corriente
mxima de 50mA. Es generada gracias al chip FTDI integrado en la placa.

Pin de 5V
Este pin saca una tensin de 5v del regulador de la placa. El regulador es necesario puesto que
puede ser alimentada con distintos voltajes.

Pin de Vin
Es el voltaje de entrada cuando se usa una fuente de alimentacin externa (no tiene en cuenta
la conexin USB). Se puede proporcionar voltaje a la placa a travs de este pin, o en caso de
que se est utilizando una fuente de alimentacin externa tomar el valor que est siendo
suministrado.

Pines analgicos
Esta placa contiene 6 pines de entrada analgicos. Los elementos que se conecten aqu suelen
tener mayor precisin que los digitales pero su uso requiere de una lgica levemente mayor.
Ms adelante se comentar el uso de un termistor analgico.

Seeeduino


Ilustracin 3: Frontal de la placa Seeeduino



La placa Seeeduino ha sido diseada por terceros, en concreto Seeed. Se basa en el
esquema de una Arduino Diecimilia donde los diseadores han cambiado/aadido ciertos
elementos para mejorarla. El fabricante afirma que todos los elementos que sean
compatibles en una, lo sern en la otra (a nivel de hardware/software). Tiene un tamao
de 71x53mm. Su unidad de procesamiento consiste en un microcontrolador ATmega168.
Puede ser alimentada mediante USB o alimentacin externa y contiene pines tanto
analgicos como digitales. De esta placa se van a comentar solo las caractersticas que la
diferencian de Arduino Uno.

La tabla siguiente resume sus componentes:

ATmega168
5V/3.3V
7-12V
6-20V
14 (de los cuales 6 proporcionan salida PWM)
8
40 mA
50 mA
16 KB (ATmega168) de los cuales 2 KB son para el
bootloader
1 KB (ATmega168)
512 bytes (ATmega168)
16 MHz


En la tabla anterior se puede apreciar que el microcontrolador utilizado es ms simple que el
ATmega328 que utiliza Arduino Uno.
Es posible hacer uso de dos pines analgicos ms.
Para alimentarse se puede conectar un USB mini o una fuente de alimentacin externa
mediante 2 pines Jack JST.
Adems aade 3 selectores para cambiar el reset manual/automtico, elegir la tensin de
funcionamiento de la placa entre 3.3V/5V y seleccionar el modo de alimentacin ya sea por
USB o externa.

Software
La plataforma Arduino tiene un lenguaje propio que est basado en C/C++ y por ello soporta
las funciones del estndar C y algunas de C++. Sin embargo, es posible utilizar otros lenguajes
de programacin y aplicaciones populares en Arduino como Java, Processing, Python,
Mathematica, Matlab, Perl, Visual Basic, etc. Esto es posible debido a que Arduino se comunica
mediante la transmisin de datos en formato serie que es algo que la mayora de los lenguajes
anteriormente citados soportan. Para los que no soportan el formato serie de forma nativa, es
posible utilizar software intermediario que traduzca los mensajes enviados por ambas partes
Mi crocontrolador
Volta j e operativo
Volta j e de entrada ( recomen dado )
Volta j e de entrada limit ( es )
Pines d igital es E/S
Pines de entrada analgica
Corriente continua p a r a pines E / S
Corriente continua para p in es de
3.3 V
Memoria Flash
SRAM
EEPROM
Velocidad del reloj
para permitir una comunicacin fluida. Es bastante interesante tener la posibilidad de
interactuar con Arduino
mediante esta gran variedad de sistemas y lenguajes puesto que dependiendo de cuales sean
las necesidades del problema que vamos a resolver podremos aprovecharnos de la gran
compatibilidad de comunicacin que ofrece.
El entorno de desarrollo de Arduino es sencillo e intuitivo adems puede descargarse
gratuitamente desde su pgina oficial para distintos sistemas operativos. Ha sido
implementado con Processing, un lenguaje similar a Java. Su ltima versin es la 1.0.2 aunque
en el proyecto se ha utilizado la 1.0.1. Es importante remarcar que la placa Arduino Uno solo la
podremos utilizar a partir de la versin beta 0021.
Est formado por una serie de mens, una barra de herramientas con botones para las
funciones comunes, un editor de texto donde escribiremos el cdigo, un rea de mensajes y
una consola de texto. En la ilustracin 4 se puede apreciar la composicin del software de
Arduino.


Ilustracin 4: Interfaz del software de Arduino
A continuacin comentaremos la utilidad de cada rea del programa centrndonos solo en lo
importante.

Men
La parte ms importante se encuentra en Herramientas. Desde aqu podremos configurar el
programa para que pueda comunicarse con la placa Arduino.
Pasando el ratn por Tarjeta aparecer una lista con los tipos de placa Arduino que el
programa comprende. Aqu seleccionaremos Arduino Uno o Diecimilia (para la Seeeduino)
dependiendo de con cual estemos trabajando.
En el campo Puerto Serial seleccionaremos el que corresponda a nuestra placa que
conectaremos mediante USB. Si utilizamos Windows el puerto tendr un nombre del estilo
COMx pero en Linux ser /dev/ttyUSBx donde x es un nmero. En caso de que aparezcan
varios puertos serie y no sepamos cual es el de nuestra placa procederemos a desconectarla,
anotamos los puertos que aparecen, reconectamos la placa y volvemos a mirar la lista de
puertos. El nuevo puerto que haya aparecido ser el de nuestra placa.
Botones comunes
Estos botones son accesos rpidos a ciertas acciones que tambin estn disponibles mediante
el men. Los botones son los siguientes:
Verificar: comprueba y compila el cdigo.
Cargar: adems de compilar el cdigo lo inyecta en la placa.
Nuevo: crea un nuevo sketch.
Abrir: abre un sketch previamente guardado.
Guardar: almacena en disco los cambios realizados en el sketch.
Monitor Serial: abre una nueva ventana desde la que podremos comunicarnos
bidireccionalmente va serie con la placa, es decir, podremos leer la informacin que
nos enva o proporcionarla nosotros. La ilustracin 5 muestra esta ventana.

Ilustracin 5: Ventana del monitor serie
Editor de texto
En este rea escribiremos la implementacin (denominada por el programa sketch) para poder
cargarla en la placa Arduino. El programa tiene 3 partes. La primera consiste en la inclusin de
libreras y la declaracin de constantes o variables globales que se podrn utilizar en cualquier
funcin del programa. La segunda es el mtodo setup() que es el encargado de inicializar los
dispositivos conectados a la placa y ser ejecutado solo al iniciar el sistema. La tercera parte
consiste en el mtodo loop() que ejecutar su cdigo continuamente, es decir, en modo bucle.
Aqu es donde se escribir la lgica de la placa Arduino. Como el lenguaje es muy similar a C es
posible crear otros mtodos para separar bloques funcionales y dejar ordenado el programa.

rea de mensajes
Muestra la situacin del programa al haber utilizado uno de los botones comunes.

Consola de texto
Aqu aparecern con mayor detalle los eventos del rea de mensajes.

Dispositivos acoplables a Arduino
Para conseguir las caractersticas de un sistema domtico es necesario que adems del rgano
central que controle el sistema tengamos a disposicin sensores que puedan recoger datos
sobre la situacin de cada habitacin de la vivienda. Dependiendo de estos datos el sistema
domtico debe ser capaz de comunicarse con los actuadores para mejorar la situacin de la
vivienda. Tambin deben existir elementos con los que el usuario pueda comunicarse con el
sistema y pueda hacer los cambios oportunos manualmente.
Los dispositivos estarn conectados mediante cables o directamente acoplados a la placa
Arduino. Algunos de ellos disponen de libreras que deberemos adjuntar al programa para
poder usar las utilidades que contengan. Para ello aadiremos la carpeta de la librera en la
carpeta libraries del entorno de desarrollo de Arduino.
Al principio del cdigo del sketch incluiremos la librera con la lnea: #include
<nombreLibreria.h>
Para utilizar los mtodos de sensores y actuadores digitales debemos tener en cuenta que solo
tenemos dos posibles valores, HIGH representa el nivel alto y LOW el nivel bajo.
En el caso de los analgicos su uso es levemente ms complejo pero tambin ms configurable
ya que tiene que leerse/escribir un voltaje de 0 a 5 voltios que se representa en 10 bits
(lectura) o en 8 bits (escritura), es decir la tensin puede tener 1024 (lectura) o 256 (escritura)
valores distintos. Ms adelante se har un ejemplo con un termistor.

Sensores
Un sensor es un dispositivo capaz de detectar magnitudes fsicas o qumicas, llamadas
variables de instrumentacin, y transformarlas en variables elctricas. Las variables de
instrumentacin pueden ser por ejemplo: temperatura, intensidad lumnica, distancia,
aceleracin, inclinacin, desplazamiento, presin, fuerza, torsin, humedad, movimiento, pH,
etc. Una magnitud elctrica puede ser una resistencia elctrica (como en un detector de
temperatura resistivo), una capacidad elctrica (como en un sensor de humedad), una
tensin elctrica (como en un termopar), una corriente elctrica (como en un fototransistor),
etc.

Los sensores siempre que estn activados estarn tomando continuamente la situacin actual
de una habitacin y es el servidor o la placa Arduino quien leer esta informacin y decidir
cmo actuar. Pueden ser digitales o analgicos.
Los digitales tienen que ser inicializados como pin de salida con el mtodo
pinMode(numeroDePin, OUTPUT). Para poder obtener una lectura de los datos usaremos el
mtodo digitalRead(numeroDePin). Los analgicos no requieren esta fase de inicio y para leer
lo haremos con analogRead(numeroDePin). Es recomendable asignar a una variable la lectura
recibida por los mtodos para evitar tener que llamar a la misma funcin en caso de
necesitarse de nuevo. Como los sensores analgicos son algo ms complejos que los digitales
se tratarn con un ejemplo.
Los sensores que sean responsables de la seguridad de la vivienda deberan avisar del evento
mediante un actuador (por ejemplo un timbre o LED) o algn elemento de comunicacin
(como un correo electrnico o un mensaje de texto al mvil). Tambin podra almacenarse el
suceso en un fichero del servidor.
A continuacin se describirn algunos sensores a tener en cuenta en un sistema
domtico.


Mdulo de gas
El detector de gas hace que la vivienda gane en seguridad
si cuando detecta un nivel alto de gas (lectura HIGH) el
sistema avisa a la persona. Sera importante que el
sistema pudiera desconectar la mayor parte de red
elctrica posible de la vivienda.

Mdulo PIR
Otro elemento que interviene en la seguridad cuando no
hay nadie en casa es un detector de movimiento. En caso
de detectar suficiente movimiento se leer un nivel alto.
Tambin se puede utilizar para el confort del ser humano.
En caso de detectar movimiento en la habitacin
encender por ejemplo las luces o la calefaccin,
dependiendo tambin de la lectura responsable de los
dos casos.





Ilustracin 6: Sensor de gas

Ilustracin 7: Sensor de movimiento
Mdulo de luz
Este dispositivo es capaz de detectar el nivel de intensidad de luz
que hay en la habitacin de forma analgica. El sistema leer el
voltaje y en caso de
detectar un nivel bajo de luz podra encender las luces

de la
habitacin siempre y cuando se detecte
Ilustracin 8: Sensor de luz
movimiento.
Mdulo de humedad (y temperatura)
Algunos dispositivos son capaces de obtener varias mediciones en el
mismo mdulo. El mdulo de la ilustracin corresponde a un DHT11
capaz de
representar digitalmente la humedad ambiental medida en %
adems de la temperatura en C.


Tiene una precisin decimal y dispone de su propia Ilustracin 8: Sensor de humedad y librera que
contiene los mtodos para recoger sus temperatura (DHT11) mediciones. Este mdulo es interesante
colocarlo en la zona externa de la casa, como el balcn, la galera o el jardn.

Programacin de sensores analgicos. El ejemplo del termistor
A continuacin vamos a mostrar cmo se debe programar el sensor analgico de la Ilustracin 9
ya que es ligeramente ms complejo que el digital.
En primer lugar debemos obtener la curva caracterstica de la resistencia del sensor, que
variar dependiendo de la temperatura. Con ella obtendremos una tabla con el valor de la
resistencia y la temperatura que fuerza ese valor, por ejemplo en pasos de 10C.

Ilustracin 10: Curva caracterstica de la resistencia del termistor analgico
Una vez tenemos la tabla en un programa como
Microsoft Excel (Ilustracin 11) procederemos a crear
un grfico de dispersin seleccionando los datos de
resistencia y temperatura oportunos. Seleccionamos
por ejemplo el rango de -20 a 80 C y aparecern los
puntos en la grfica. Ahora hacemos click sobre
cualquier punto, botn derecho y Agregar lnea de
tendencia. Podremos seleccionar el tipo de regresin
que deseemos. En nuestro caso ser la Polinmica y la
pondremos de orden 5 para conseguir una lnea de
tendencia que se acerque bastante a los puntos
(aunque no es exacta). Adems seleccionaremos la
opcin Presentar ecuacin en el grfico. Con todo esto
tendremos como resultado el grfico de la Ilustracin
12 cuya finalidad es conseguir la frmula para
poder conocer la temperatura en funcin del
valor de la resistencia en el termistor.




Ilustracin 11: Tabla con el valor de la
resistencia y la correspondiente temperatura del
termistor TTC3A502-39H

Ilustracin 12: Grfico de dispersin con lnea de tendencia y ecuacin de grado 5. Eje x ->
resistencia(KOhmios) Eje y -> C

Acto seguido necesitaremos conocer la intensidad que hace funcionar al termistor y
permanecer prcticamente constante para cualquier temperatura. Para conocer este dato
mediante Arduino deberemos recordar la ley de Ohm V = I*R.
Como se ha dicho anteriormente necesitamos hacer una lectura analgica que nos devolver un
valor entero comprendido entre 0 y 1023. Haciendo las pruebas en una habitacin a 30C
(obtenido desde un termmetro de mercurio) la lectura analogRead(nmeroPinAnalgico) nos
devolva 213. Este valor lo deberemos multiplicar por 5 y el resultado dividirlo entre 1023 para
obtener el valor representado en voltios que es 1.05083089 V. Para conocer el voltaje de cada
debemos restar el voltaje que suministra la placa (5V) al valor ledo desde el sensor con lo que
nos queda
3.94916911 V.
Ahora podremos obtener la intensidad mediante la ley de Ohm dividiendo el voltaje de cada
entre el valor de la resistencia a 30C.
3.94916911 / (4*1000) = 0.000493646138 A
Este valor ser prcticamente constante con lo que ya tendremos lo necesario para programar el
mtodo del termistor.
En el mtodo leeremos el valor analgico del sensor (valorTermistor), lo pasaremos a
voltios (voltaje) y calcularemos el voltaje de cada. valorTermistor =
analogRead(nmeroPinAnalgico);
voltaje = valorTermistor * 5.0;
voltaje /= 1023.0; voltaje = 5.0 -
voltaje;

Despus obtendremos el valor de la resistencia aplicando la ley de Ohm (dividimos entre mil
por ser KOhmios).
resistencia = (voltaje / 0.000493646138) / 1000;

Solo falta conocer la temperatura la cual conseguiremos aplicando la ecuacin de grado 5 que
obtuvimos anteriormente.
temperatura = 0.0016*pow(resistencia, 5) - 0.0388*pow(resistencia, 4) +
0.0714*pow(resistencia, 3) + 3.7534*pow(resistencia,2) 31.012*resistencia + 95.553;

Actuadores
Un actuador es un dispositivo capaz de transformar energa (en nuestro caso elctrica) en la
activacin de un proceso con la finalidad de generar un efecto sobre un proceso automatizado.
Su funcin en un sistema domtico va a ser la de cambiar la situacin de la vivienda tras un
evento ocasionado al hacer por ejemplo una lectura de un sensor que debe ser tratada.

Mdulo Rel
Funciona como un interruptor controlado por un circuito elctrico en el
que, por medio de una bobina y un electroimn, se acciona un juego de
uno o varios contactos que permiten abrir o cerrar otros circuitos
elctricos independientes. Este tipo de
mdulos permite activar actuadores como por ejemplo el de una persiana, la puerta del garaje o el de
una bombilla. Ilustracin 13: Rel


3.3 Interfaces
Su principal objetivo es ofrecer comunicacin entre el sistema y el ser humano. Consisten en
elementos visuales/auditivos que avisan de eventos o tctiles para poder causarlos.

Mdulo LED
La funcin de este dispositivo es avisar mediante un diodo emisor de
luz la ocurrencia de un evento que puede requerir su atencin.
Pueden utilizarse de forma digital
(encendido/apagado) o de forma analgica si se quiere variar
la intensidad de la luz. Ilustracin 14: LED

Mdulo timbre
Este elemento es capaz de producir sonidos. Mdulo interesante para avisar al ser humano
sobre un problema grave en la vivienda dado que la sensibilidad auditiva es mayor que la visual.

Ilustracin 15: Timbre
Mdulo pulsable
Para poder comunicarnos con el sistema y crear eventos
podemos utilizar teclados o botones. Por ejemplo la funcin de
un botn presionado al salir de casa podra
ser apagar luces, calefaccin y activar el sistema de
seguridad.
Ilustracin 16: Teclado y Botn

Mdulo visualizador
Con l podremos conocer la situacin de la vivienda y de la ocurrencia
de eventos que nos enve el sistema en forma de texto sobre una
pantalla.

Ilustracin 17: Pantalla LCD
Comunicadores
Este apartado abarca el conjunto de elementos que permiten la comunicacin entre distintas
placas Arduino y el servidor o incluso con electrodomsticos del hogar. El medio por el que
circula la informacin puede ser por aire (modulacin de ondas electromagnticas) o fsico (por
cable) teniendo sus ventajas e inconvenientes. Normalmente estos dispositivos tendrn a
nuestra disposicin libreras con funciones ya implementadas que nos facilitar su manejo.
Si el medio es el aire el sistema total va a ser ms barato puesto que evitamos tener que cablear
las habitaciones, adems de esto conseguimos que sean ms estticas. En cambio las
transmisiones son menos seguras y puede haber problemas por el ruido ocasionado de otros
elementos que utilizan el aire como forma de comunicacin. Adems los obstculos que haya
entre emisor y receptor van a reducir la distancia de transmisin.
Por parte de los sistemas que utilizan cables para enviar datos debemos tener en cuenta su
coste de instalacin adems de estudiar si nos gustara estticamente ese cableado en la
habitacin. Pero esto puede suplirse sabiendo que las transmisiones sern ms robustas y
seguras.
Mdulo Ethernet
Es una placa que se acopla encima de la Arduino y permite
establecer conexiones a internet mediante el estndar Ethernet
que utiliza el protocolo TCP/IP. Podemos conectarla a un router
utilizando un cable RJ45 y le asignar una direccin IP. Con esta
direccin podremos abrir conexiones entre el servidor y la placa o
de placa a
placa para enviar flujos de datos. Hay distintos chips y cada
uno utiliza sus propias libreras. En nuestro caso hemos Ilustracin 18: Ethernet Shield trabajado
con el chip 28J60 que gasta las libreras etherShield.h y ETHER_28J60.h
Es importante tener en cuenta que en el cdigo de la placa la configuracin de la Ethernet
Shield ha de ser correcta. Debemos asignarle la direccin IP que le proporcione el router en
caso de que utilice DHCP. Tambin hay que poner una direccin MAC nica para que el router
conozca los distintos dispositivos conectados. Adems podremos abrir un puerto mediante el
que escuchar peticiones. Esta configuracin se ha de realizar en la funcin setup(), es decir en
la fase de inicio de la placa.
La funcin principal de la Ethernet Shield va a ser leer peticiones, en nuestro caso
HTTP (puerto 80). Las peticiones en HTTP tienen el siguiente formato: GET /ruta_del_objeto
HTTP/1.1 Para tomar la peticin nos basaremos en la funcin serviceRequest() que nos
devolver una cadena con toda la parte del protocolo ya
tratada, es decir, obtendremos slo la ruta del objeto.
Mdulo Wi-Fi
Si deseamos utilizar el protocolo TCP/IP pero queremos evitar
tener que cablear la habitacin podemos utilizar este mdulo
tambin acoplable a la Arduino. Aunque utiliza otra librera los
mtodos son equivalentes al del mdulo Ethernet. La frecuencia de
la seal ronda los 2.4GHz.
Ilustracin 19: WiFi Shie
Modulo Xbee
Este elemento se comunica de forma inalmbrica utilizando ZigBee que
es un conjunto de protocolos de alto nivel de comunicacin inalmbrica
para su utilizacin con radiodifusin digital de bajo consumo. Su objetivo
son las aplicaciones que requieren comunicaciones seguras con
baja tasa de envo de datos y que necesiten un bajo Ilustracin 20: Mdulo XBee
consume. Utiliza unas frecuencias comprendidas entre 865MHz y 2.4GHz
Mdulo Bluetooth
Se denomina Bluetooth al protocolo de comunicaciones diseado
especialmente para dispositivos de bajo consumo, que requieren corto
alcance de emisin y basados en transceptores de bajo costo. Opera
mediante un enlace por radiofrecuencia en la banda ISM de los 2,4 GHz. Su uso es adecuado
cuando puede haber dos o ms dispositivos en un rea reducida sin grandes necesidades de
ancho de banda.


Ilustracin 21:
Mdulo Bluetooth tiene la ventaja de simplificar el descubrimiento y Bluetooth
configuracin de los dispositivos, ya que stos pueden indicar a otros los servicios
que ofrecen, lo que redunda en la accesibilidad de los mismos sin un control
explcito de direcciones de red, permisos y otros aspectos tpicos de redes
tradicionales. El WiFi utiliza el mismo espectro de frecuencia que Bluetooth con
una potencia de salida mayor que lleva a conexiones ms slidas.
Mdulo infrarrojos
Otra forma de comunicacin sin medio fsico es la utilizacin de
rayos infrarrojos. Este tipo de comunicacin consigue tener menos
interferencias debido a la mayor frecuencia del
espectro electromagntico en la que trabaja. Normalmente no
es un mtodo de comunicacin entre placas Arduino sino que Ilustracin 22: Emisor y es
utilizado para contactar con los electrodomsticos del Receptor Infrarrojos hogar.
Durante el proyecto se ha trabajado con los dispositivos de la ilustracin 22 a la vez de
con un mando que enva cdigos al pulsar un botn y mediante el cual podemos crear
eventos. Han sido utilizadas dos libreras, la NECIRrcv que consigue descodificar la
secuencia que enva el mdulo emisor utilizando el protocolo NEC y la IRremote que
consigue descodificar hasta cuatro tipos de protocolos distintos, NEC, Sony, RC5 y RC6
(estos dos ltimos de la marca Philips). Esto se consigue porque cada protocolo utiliza
una composicin del mensaje distinta. Por ejemplo el protocolo NEC utiliza 24 bits por
mensaje (o 6 nmeros en hexadecimal) mientras que el de Sony solo necesita 12bits (o
3 nmeros en hexadecimal) pero requiere una rfaga de 3 mensajes seguidos en un
corto espacio temporal para que el receptor acepte dicho mensaje (aunque luego esto
a veces no se cumpla).

Puerto Serie
Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales,
frecuentemente utilizado por computadores y perifricos, donde la informacin es
transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto paralelo
que enva varios bits simultneamente.

transmisin haciendo que el punto de recepcin de un dispositivo est
conectado con el de transmisin del otro dispositivo. Todas las placas
Arduino disponen de al menos un puerto serie compuesto por los pines
digitales 0(rx) y 1(tx). Al conectar un cable de USB de la placa al ordenador
estaremos aprovechando este puerto serie en el que debemos configurar la velocidad
de datos en bits por segundo (baudios) para la transmisin de datos.
Para iniciar el puerto serie y establecer los baudios utilizaremos la funcin
begin(speed) de la librera Serial. Se recomienda establecer el puerto serie a 9600
baudios. Esta fase se hace en la funcin de configuracin de la placa setup().
La placa Arduino tiene un buffer de recepcin de datos de 128 bytes. Con la funcin
available() podremos conocer cuntos caracteres (bytes) hay disponibles en el
Es otro mtodo de comunicacin cableada que podemos usar
para la comunicacin entre un PC y una placa, o entre placas.
El puerto serie consiste en un canal de recepcin y otro de
Ilustracin 23: Cables para
conectar un puerto serie
buffer. En caso de que haya datos en el buffer la funcin read() devolver el primer
carcter (byte) guardado en el puerto serie y lo retirar del buffer. En caso de que no
haya datos devolver un -1.
Es posible crear nuevos puertos serie con la librera SoftwareSerial.h en la que
tendremos que especificar los pines de recepcin y transmisin de datos.
Servidor
Es el rgano principal del sistema y va a ser el encargado de que el
usuario pueda controlar los distintos elementos del hogar
resolviendo sus peticiones. Apoyndonos en el servidor y en otros
dispositivos podramos controlar el sistema incluso fuera de casa, por
ejemplo desde el mvil utilizando una aplicacin, enviando un
mensaje de texto o simplemente desde un navegador de internet.
Como se ha comentado en la introduccin existen varias alternativas
para utilizar como servidor. Podemos utilizar un ordenador personal
muy simple, pero esto va a encarecer el sistema adems de
desaprovechar su capacidad, adems de que ocupara ms espacio
que otras opciones.
Ilustracin 24: Placa Raspberry
Pi
Una alternativa consiste en la placa computadora de bajo coste Raspberry Pi
desarrollada en Reino Unido por la Fundacin Raspberry Pi, con el objetivo de
estimular la enseanza de ciencias de la computacin en las escuelas. El diseo
incluye
un System-on-a-chip Broadcom BCM2835, que contiene un procesador central
(CPU) ARM1176JZF-S a 700 MHz (el firmware incluye unos modos Turbo para
que el usuario pueda hacerle overclock de hasta 1 GHz sin perder la garanta), un
procesador grfico (GPU) VideoCore IV, y 512 MB de memoria RAM. El diseo no
incluye un disco duro o una unidad de estado slido, ya que usa una tarjeta SD
para el almacenamiento permanente; tampoco incluye fuente de alimentacin o
carcasa. Soporta varios sistemas operativos Unix como Debian, Fedora o Arch
Linux. Su precio ronda los 30.
Otra opcin consiste en utilizar una placa Arduino que acte como servidor pero esto
va a limitar mucho las opciones de configuracin del sistema domtico.
Informacin del proyecto
En que consiste?
Bien, el proyecto consiste en un conjunto de microsistemas que se pudiesen implementar en
una casa inteligente, la idea surge desde el semestre pasado, ya que se venia trabajando con
eso, a traves de un simulador y una aplicacion android.
En este caso el proyecto muestra en una maqueta, como se podrian implementar las
siguientes funcionalidades:
Una cerradura electronica.

Una alarma a partir de un sensor de temperatura.

Una alarma para ventanas.

Cortinas electrnicas.

Sensores de luminosidad externa.
Cabe mencionar que como es una maqueta, lo mencionado arriba se elaboro con los
componentes mas simples, para hacer una implementacion real, se puede partir de estos
conceptos pero el material de elaboracin variara, ya que se tratara entonces de una
implementacion real.
Materiales
arduino uno.
pic16f628a
2 motores dc
8 transistores BC548B
8 diodos 1n4007
1 reed switch (relevador magnetico)
1 sensor de temperatura MT05
1 fotoresistencia
resistencias de 220, 1k, 2k y 4.7k.
push buttons y leds.
protoboard.
cable para conectar.

Esquema del proyecto.

Puentes H.
Los puentes H son un circuito para poder hacer que un motor de corriente directa funcione en
ambas direcciones, este se elaboro con los transistores, los diodos y resistencias de 1k. Existe
este circuito en microcontrolador, el L293B, pero al ver que se pueden construir facilmente se
hicieron a mano.
Se elaboraron dos puentes, uno por motor.
Esquema del diagrama:

Esquema desde Fritzing:
Se eliminaron los diodos porque no pasaba nada si no los pona.


Conexion del LM35.
El sensor LM35 te permite capturar la temperatura promedio que se presenta alrededor del
sensor, esta se calcula en base al voltaje de referencia con el que se trabaja en el circuito. mas
adelante en el codigo se explica.
la conexin del sensor es como se muestra a continuacin:

Conexin Fotocelda.

La fotocelda es una resistencia que trabaja con la incidencia de la luz y enva constantemente
un valor anlogo con la cantidad de luz que recibe en ese momento, ya con ese parmetro,
basta con mapear ese valor para generar una una salida pwm para que los leds compensen la
falta o exceso de luz, encendindose o apagndose.
La conexin de la fotocelda.


Reed Switch.

El Reed Switch es un relevador magnetico, este se activa con la presencia de un campo
magnetico, abriendo o cerrando un circuito. esto fue lo que se implemento para la alarma de
la ventana.
imagen de conexion.

Imgenes de todo armado:

La primera versin.



Final.



Cdigo arduino.

El codigo del programa es bastante sencillo, no es mas que un loop que verifica todas las
entradas y en base a eso hace salidas digitales o analogas. abajo todo el codigo comenzarizado.
view plainprint?
1. //variables de los puertos de arduino.
2. int abierto = 12;
3. int cerrado = 13;
4. int llave = 4;
5. int led1 = 7;
6. int led2 = 8;
7. //funcion setup, para la definicion del tipo de puerto.
8. void setup(){
9. Serial.begin(9600); //inicializacion de la comunicacion serial
10. pinMode(llave,INPUT); //declaro llave como entrada
11. pinMode(abierto,OUTPUT); //declaro abierto como salida
12. pinMode(cerrado, OUTPUT); //declaro cerrado como salida
13. pinMode(led1,OUTPUT); //declaro led1 como salida
14. pinMode(led2,OUTPUT); //declaro led2 como salida
15. }
16.
17. void loop(){ //Ciclo principal del sistema
18. //lee el valor recibido por el puerto analogo 0 y con la formula
19. // calcula el valor de temperatura con una referencia de 5V.
20. int temperatura = (5.0 * analogRead(0)*100.0)/1023.0;
21. Serial.println(temperatura); // escribe en el puerto serial la temperatura
22. if(temperatura >=26){ // si la temperatura >30, enciende alarma
23. digitalWrite(led1,HIGH); //prende led calor
24. for(int a=0; a<2; a++){ //ciclo para generar sonidos
25.
26. //genera tono, salida puerto9, pwm 400 y frecuencia de 250.
27. tone(9,400,250);
28. delay(100); // espera 100 ms
29. tone(9,600,250); // otro tono diferente.
30. delay(100); // espera 100 ms
31. }
32. }if(temperatura <=20){ //si la temperatura es menor que 21 grados.
33. digitalWrite(led2,HIGH); //enciende led frio
34. for(int a=0; a<2; a++){
35. //genera tono, salida puerto9, pwm 400 y frecuencia de 250.
36. tone(9,400,250);
37. delay(100); //espera 100 ms
38. tone(9,600,250);
39. delay(100);
40. }
41. }
42. digitalWrite(led1,LOW); //apaga el led1
43.
44. //la entrada 2 es la que escucha al Reed Switch.
45. //se activa cuando se abre la ventana
46. if(digitalRead(2)==HIGH){ //si la entrada 2 esta activada?
47. for(int a=0; a<2; a++){
48. tone(9,200,250); //genera sonido
49. digitalWrite(led1,LOW); //leds para simular sirena.
50. digitalWrite(led2,HIGH);
51. delay(200); //espera
52. tone(9,800,250); //otro tono diferente
53. digitalWrite(led2,LOW); //cambio de leds
54. digitalWrite(led1,HIGH);
55. delay(200); //espera
56. }
57.
58. }
59. //llave es el puerto que escucha al pic, se eleva cuando la pone el
60. //pasword correcto
61. if(digitalRead(llave)==HIGH){
62. tone(9,200,250); //sonido
63. digitalWrite(cerrado,LOW); //baja la salida de cerrado del puente H
64. digitalWrite(abierto,HIGH);//sube la salida de abierto del puente H
65. //cuando ya no es uno. la salida de alta del pic solo dura 3 segundos.
66. }else{
67. digitalWrite(cerrado,HIGH);//sube la salida de cerrado del puente H
68. digitalWrite(abierto,LOW); //baja la salida de abierto del puente H
69.
70. }
71.
72. int valorldr = analogRead(2); //lee el valor del sensor ldr
73. int vled = 1023 - valorldr; // restamos al total, lo recibido por la fotocelda.
74. int salida = map(vled,0,1023,0,255); //mapea los valores para obtener una salida
75. analogWrite(led3,salida);
76. }

You might also like