so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó...

23
SISTEMAS EMBEBIDOS-IOT Sistemas Operativos Avanzados Integrantes: Fernandez Juan Pablo 28808093 Ferreyra Biron Martín 33180671 Martínez Cristian 36398246 Curso: Lunes Noche

Transcript of so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó...

Page 1: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

SISTEMAS EMBEBIDOS-IOT

Sistemas Operativos Avanzados

Integrantes:

Fernandez Juan Pablo 28808093

Ferreyra Biron Martín 33180671

Martínez Cristian 36398246

Curso: Lunes Noche

UNLAM-2016

Prefacio

Page 2: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

Elección del proyecto

Primer Propuesta

En un principio nuestro grupo quería realizar un monitor de ritmo cardiaco y oxigenación en sangre, enviar estos datos al celular, graficarlos y comprenderlos.

El problema con este proyecto fue que el sensor de ritmo cardiaco que se podía conseguir en la Argentina (relación calidad-precio), no era lo suficientemente exacto, y el sensor que queríamos utilizar, había que importarlo a China, lo cual demoraba un plazo no menor a un mes.

Por lo tanto, el proyecto como lo habíamos planteado no cumplía con todos los requerimientos del trabajo práctico, y es por ello, que dimos un giro respecto al proyecto original.

Segunda Propuesta

Como segunda opción queríamos realizar un dispositivo que detecte dióxido de carbono humedad y/o temperatura, y que pueda tomar una acción en el caso de encontrarse el lugar censado en niveles peligrosos de dióxido de carbono (por ejemplo: abrir una puerta activar un ventilador etc.).

El dispositivo debía enviar una señal a uno o a un grupo de celulares, guardar un log de los distintos valores de dióxido de carbono y de temperatura medidos (que pueda ser consultado por el celular) y que los datos de CO2/temperatura/humedad además sean visualizados en una pantalla de cristal líquido. Para cubrir los requerimientos del práctico.

Para ello adquirimos un sensor que presumimos de CO2, una pantalla de cristal líquido y un sensor de temperatura.

El inconveniente con este proyecto la pésima elección del sensor de dióxido de carbono que después de haberlo adquirido, no media CO2 sino CO, sumado a su extremadamente dificultosa calibración (se necesitaban condiciones muy específicas para medir CO).

El modelo de sensor era MQ7.Después de haber estado algunas semanas tratando de calibrar el sensor y de intentar obtener una lectura útil del mismo cambiamos nuevamente el proyecto por el que se detallará a continuación.

Page 3: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

I.C.I.Iluminador Cromático Inteligente

Introducción y MotivaciónExisten muchas maneras de comunicar eventos, y hoy en día además existen muchos “gadgets” que permiten decorar un ambiente configurando los mismos a partir del uso de un celular. Esa fue justamente nuestra motivación al realizar el proyecto I.C.I. , queríamos saber cómo se comunican los dispositivos , cómo funcionan los sistemas embebidos, y como es el ecosistema Arduino que para todos los integrantes del grupo , en mayor o menor medida era desconocido.

Para satisfacer nuestra motivación nos propusimos como meta realizar una lámpara inteligente, que cambie de color a partir de los niveles de temperatura y humedad, a partir de la hora o de la distancia en la que se encuentra un celular a con los datos de GPS y que además pueda cambiar de color a partir de sensor de proximidad del celular.

En un principio nuestras metas fueron otras más complejas pero dicha complejidad y eventos desafortunados que estuvieron muchas veces fuera de nuestro alcance hicieron que nos decantemos por este proyecto .

Componentes:Hardware:

1 Placa NodeMCU ‘Amica’ , con soporte para el IDE Arduino

1 Pantalla de LCD de 4 lineas por 20 caracteres

2 Anillos Neopixel de Adafruit de 16 leds

1 Detector DHT22

1 Sensor de temperatur LM35

1 Fuente externa de 2.4 A 5V

1 Capacitor de 2200 uf y 25 V

1 Protoboard grande

2 Resistencias de 470 Ohms

1 Caja con medidas necesarias para cubrir la protoboard y sostener el display LCD

1 Base para lámpara, en este caso utilizamos una base lámpara exterior

Page 4: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

Entre otros: Cables para protoboard , spaghetti termocontraible, estaño , soldador , notebooks, cable usb clase C

Software

Arduino Software IDE Visual Studio con Xamarin Sistema Operativo Windows & Linux Emulador de Android GTKTerm

El software de I.C.I. fue programado en C/C++ (Arduino/NodeMCU Amica )y en C# (Android). El código del proyecto se puede encontrar en https://github.com/Shiigu/SOA_ICI

Descripción detalladaDescripción de la lámpara

El dispositivo que desarrollamos consiste en una lámpara multicolor inteligente que brinda información de horario, distancia a un celular, proximidad del celular, temperatura y humedad en forma de colores representativos. Estos colores varían de manera armónica y gradual, brindando al usuario una representación visual y diferente a lo cotidiano, en concordancia con los valores medidos. Los colores extremos entre los que pueden variar los parámetros censados, son configurables por el usuario, desde un celular Android, a través de una aplicación. El dispositivo también cuenta con un display LCD, el cual informa los valores de horario, temperatura, y humedad, entre otros. Si se activa el modo GPS desde aplicación Android, se visualizará en el display LCD la distancia entre el celular y la lámpara. Desde la aplicación se puede consultar la temperatura y humedad, configurar los colores, activar los modos.

Descripción de los componentes, inconvenientes y soluciones

*Pantalla Cristal Liquido

Como pantalla de cristal líquido, nos decidimos por utilizar el modelo 2004A. Se trata de un LCD monocromático azul, que posee 20 caracteres alfanuméricos por 4 líneas, el mismo permite mostrar 80 caracteres por instancia de tiempo. Para no utilizar tantos puertos de la placa Amica como lo demanda un LCD, empleamos un módulo I²C, que utiliza solo 2 puertos de la placa (SCL y SDA).La placas Arduino utilizan los pines SCL y SDA en las entradas analógicas 4 y 5. La placa Amica utiliza para ello los pines D3 y D4 que se corresponden con el GPIO 0 y GPIO 2. Se requirió agregar una biblioteca que se llama LiquidCrystal_I2C, la misma nos permitió de manera más simplificada interactuar con el modulo LCD con I²C.Se nos presentó un inconveniente a tener en cuenta cuando realizamos las primeras pruebas. Ejecutando un simple programa de tipo “Hola Mundo”, la pantalla no imprimía. Realizamos varios cambios en el código, versiones de bibliotecas y revisiones físicas en el conexionado de los módulos. Revisando el datasheet del módulo 2004A, descubrimos que existían diferentes direcciones para comunicarse con el modulo

Page 5: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

LCD, entre ellas se nombraba la 0x27, 0x30 y la nuestra que es la 0x3F. A partir de esa modificación logramos imprimir en el LCD sin inconvenientes.

*Sensor de Temperatura Ambiente

Para medir la temperatura ambiente, adquirimos el sensor LM35, el mismo informa valores equivalentes a la temperatura con una precisión en centígrados. El integrado cuenta con 3 pines de conexión, 2 pines para alimentarlo con 5 volt y uno que entrega el valor censado, es decir una tensión linealmente proporcional a la temperatura. La escala es de +-10mV por °C y el integrado trabaja en un rango de -55 a 150 °C. Dicho rango supera por demás nuestras necesidades.

Para la lectura del valor, conectamos la salida del LM35 a la entrada analógica A0 de la placa Amica. Según la tensión entregada por el sensor, el ADC lo convierte a un valor, que hay que corregirlo dividiendo por 1024 y multiplicando por 330, para obtener un número que va a resultar ser la temperatura ambiente.

Como la placa Amica trabaja con 3.3Volt, se multiplica por 330, caso contrario, en el caso de la placa Arduino, se multiplicaba por 500, ya que trabaja con 5V.

Como problema inicial, detectamos que el valor de temperatura medido oscilaba, y de momentos parecía estabilizarse. Hicimos pruebas de conexión, revisamos los datasheet del componente, realizamos tomas en distintas frecuencias, desde 10ms, 100ms, 1 seg, y 10 segundos, pero las muestras continuaban oscilando.

Aparentemente el componente se había averiado, por ello oscilaba tanto en las mediciones de temperatura.

Luego de adquirir un LM35 nuevo obtuvimos un valor más estable y real. Con este nuevo LM35 las mediciones si bien tienen oscilaciones son atribuibles a la sensibilidad del sensor y para evitar dichas oscilaciones se realiza un promedio de muestras tomadas.

*Aros de leds RGB

Para llevar a cabo este proyecto además debíamos obtener una tira de leds RGB parte fundamental de la lampara. Compramos de dos tiras circulares de 16 leds RGB de la empresa Adafruit que se comunican por PWM. Dichas tiras fueron adquiridas por Mercado Libre y tuvimos la desventura de que la empresa OCA unos días después de haber realizado el pedido, se declaró en paro, retrasándose así la entrega.

Ya con los Rings de 16 leds RGB en mano, conectamos los mismos a una Placa Intel galileo gen 2 (ya que no todos los integrantes del grupo poseía una placa Arduino) para encontrarnos con la desagradable sorpresa de que sencillamente, no funcionaban. Después de la suposición de que se había quemado algún componente al soldar los cables a los led, (ya que estas tiras poseen componentes SMD soldados), probamos la segunda tira de leds, y siguiendo las buenas prácticas de la empresa Adafruit para conectar los mismos, obtuvimos el mismo resultado.

Estas buenas prácticas, entre otras, proponían colocar una resistencia de entre 300 y 500 ohm entre la salida del pin out PWM y la entrada de los leds para evitar los picos bruscos de tensión y un capacitor de 1000 uF o mayor para filtrar, en apariencia, posible ruido externo y nivelar la salida de la fuente. Probamos estos leds, esta vez con una placa Arduino y felizmente funcionaron (el que creíamos quemado y el que no)

Al dia de hoy descubrimos que la biblioteca que ofrece la empresa Adafruit funciona, en la placa Arduino Uno y Amica 8266, al abrir la implementación de la biblioteca nos encontramos con mucho más de una línea escrita en assembler. Esto nos

Page 6: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

obliga a utilizar una placa Arduino o alguna placa compatible con Arduino que pueda comunicarse con los leds.

(Buenas prácticas de los leds https://learn.adafruit.com/adafruit-neopixel-uberguide/best-practices).

*Sensor de Humedad

Para medir la humedad se utilizó el medidor de humedad relativa DHT22, que luego de conseguir una biblioteca que manipulaba dicho sensor lo pudimos utilizar sin mayores inconvenientes. Este sensor se eligío teniendo en cuenta la compatibilidad con la placa Arduino/Amica después de lo sucedido con los leds de Adafruit.

*Placa NodeMCU ‘Amica’

La placa Arduino Uno no posee per se un módulo WiFi, por lo tanto necesita un dispositivo aparte o un shield. Al obtener lo que se compró como un shield de Arduino nos topamos con la sorpresa de que no era shield sino más bien una placa con el pin out de Arduino. Dicha placa es la Wemos D1 que posee el micro ESP8266 (https://en.wikipedia.org/wiki/ESP8266). Comenzamos a trabajar con esta placa y realizamos el desarrollo hasta que la quemamos por una mala conexión. Afortunadamente uno de los integrantes del grupo compró con anterioridad lo que en apariencia era un módulo WIFI para Arduino aunque en realidad era otra placa de desarrollo con el micro ESP8266. Dicha placa es la NodeMCU ‘Amica’, cuyo tamaño es más chico que la Wemos D1 otorgando las mismas prestaciones. El micro ESP8266 posee más memoria que un Atmega 328 y puede trabajar a 80 ó 160 Mhz además de tener la posibilidad de conectarse a una red Wifi.

Descripción del funcionamiento

*Descripción funcional

Al iniciar ICI , la lámpara primero se conectará a la red y luego a través de una dirección ofrecida por Dweet (que más adelante se detallará) buscará la opción que debe ser mostrada en la lámpara (es decir que se desea que los colores de la lámpara representen ya sea temperatura y humedad , hora , distancia o proximidad), además por otra dirección ofrecida por Dweet se buscará la configuración de colores de la lámpara si no se encuentra se consideraran colores por default. Independientemente de cual sea la opción que se quiera mostrar la pantalla LCD mostrara siempre la temperatura y humedad, junto con la hora y el estado de conexión como se puede observar en la imagen a continuación

Page 7: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

El usuario de la aplicación Android de I.C.I puede cambiar en cualquier momento la configuración de colores o lo que se desea mostrar y la lámpara aceptará esos cambios y los mostrara en escasos segundos. Desde la lámpara cada cierto tiempo se escribirá en otra página ofrecida por Dweet los valores leídos de temperatura y humedad que la aplicación Android de I.C.I. recogerá y mostrará si el usuario así lo desea.

*Descripción programacional

Al programar una placa Arduino o una placa Amica se tiene que tener en cuenta que no existen procesos, ni un sistema operativo; por lo tanto el núcleo del programa es un bucle infinito en el que se repiten las acciones de manera periódica. En el caso de I.C.I. después de configurar todas las clases de las bibliotecas necesarias para que los sensores y la pantalla LCD funcione se comienza con dicho bucle y se realiza la siguiente serie de pasos:

*Se refresca la hora en la pantalla LCD*Se verifica como se encuentra la conexión con el celular*Se leen los sensores de temperatura y humedad*Se enviar los datos de temperatura y humedad a la nube*Se consulta la configuración de colores desde la nube*Se consulta que opción es la que se debe mostrar en la lámpara y en el displaydesde la nube*Se ejecuta la opción elegida*Se espera 1 segundo y se vuelve a ejecutar la serie de pasos mencionada

Hora

Como la placa no posee un RTC y la conexión a internet se soluciona fácilmente a través de la biblioteca ‘ESP8266WiFi’ optamos por obtener la hora a partir de un servicio de NTP (Network Time Protocol) utilizando la biblioteca ‘NTPClient’. Dicha biblioteca permite consultar la hora fácilmente teniendo en cuenta que se devuelve siempre la misma en GMT y por lo tanto se debe sumar o restar una cierta cantidad de segundos (esto se configura en la creación del objeto).

Temperatura y humedad

Como ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este sensor se debe multiplicar la lectura por la constante 0.32226562 (que es el resultado de dividir 330/1024 es decir la cantidad de tensión con la que trabaja la placa ‘Amica’ dividido el nivel de cuantizacion del sensor.

Para el caso de la lectura del nivel relativo de humedad como se ya se hizo mención se utiliza un sensor DHT22 y se lee el sensor con la biblioteca PietteTech_DHT que fue programada para utilizarse con el micro ESP8266 otras bibliotecas no pudieron leer correctamente el sensor. Este sensor utiliza una conexión I2C y necesita ser leído con un intervalo de tiempo de 2 segundos aproximadamente según su hoja de datos ya que es lo que tarda el procedimiento de lectura. Esto es un limitante a la hora de elegir el tiempo de espera entre ejecución y ejecución del programa principal. Si bien se espera un segundo, la lectura de la humedad y temperatura se realiza cada 3.

Configuración desde la nube/Grabando hacia la nube

Page 8: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

Para comunicar la placa ‘Amica’ con el dispositivo Android se utilizó el servicio que ofrece Dweet (https://dweet.io/) . Dweet propone crear una página en la que sencillamente con hacer un POST se escriban los datos y con hacer un GET se lean datos. Estos deben estar formateados como un JSON válido (también cabe la posibilidad de exportar un XML a partir del JSON). El servicio es gratuito si uno accede a que los datos que su aplicación o dispositivo suba sea público.

Para el caso de la configuración de colores se utiliza el Dweet http://www.dweet.io/get/latest/dweet/for/soa-ici-colors. En este el dispositivo Android grabará la información de los colores y si hay un cambio también lo impactará en dicha página en formato XML. Desde la lámpara ese Dweet se leerán y parsearan los datos a mano ya que no se encontró un parser XML para Arduino/ESP8266 realmente eficaz.Un ejemplo de la estructura del XML para la configuración del color es la siguiente

<colorConfiguration xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n <TemperatureColor>\n <LowColor>\n <H>281</H>\n <S>1</S>\n <V>1</V>\n <Threshold>0</Threshold>\n </LowColor>\n <HighColor>\n <H>292</H>\n <S>1</S>\n <V>1</V>\n <Threshold>50</Threshold>\n </HighColor>\n </TemperatureColor>\n <HumidityColor>\n <LowColor>\n <H>57</H>\n <S>1</S>\n <V>1</V>\n <Threshold>0</Threshold>\n </LowColor>\n <HighColor>\n <H>3</H>\n <S>1</S>\n <V>1</V>\n <Threshold>100</Threshold>\n </HighColor>\n </HumidityColor>\n <ProximityColor>\n <LowColor>\n <H>0</H>\n <S>1</S>\n <V>1</V>\n <Threshold>0</Threshold>\n

Page 9: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

</LowColor>\n <HighColor>\n <H>120</H>\n <S>1</S>\n <V>1</V>\n <Threshold>10</Threshold>\n </HighColor>\n </ProximityColor>\n <HourColor>\n <LowColor>\n <H>288</H>\n <S>1</S>\n <V>1</V>\n <Threshold>0</Threshold>\n </LowColor>\n <HighColor>\n <H>17</H>\n <S>1</S>\n <V>1</V>\n <Threshold>86400</Threshold>\n </HighColor>\n </HourColor>\n</colorConfiguration>"

La lámpara en cambio utilizará el Dweet http://www.dweet.io/get/latest/dweet/for/soa-ici-sensor para enviar cada cierta cantidad de tiempo (aproximadamente más de un segundo) las lecturas de humedad y temperatura con un POST. Además la lámpara utilizará el Dweet http://www.dweet.io/get/latest/dweet/for/soa-ici-android para observar cual es la opción que debe estar ejecutando. Los mensajes que pueden aparecer en este Dweet son:

HT: Para mostrar humedad y temperatura Prox: (Seguido de un valor entre 0 y 10) Para mostrar la variación de

colores en la lámpara del sensor proximidad GPS: (Seguido por <latitud>|<longitud>) Para mostrar la variación de

colores en la lámpara de la modificación de la distancia del celular respecto a la primera posición.

Hora: Para mostrar la variación de colores en la lámpara respecto al paso del día

Transición de color

Uno de los aspectos más importantes de la lámpara es su transición de color.Para que sea fluida y amena a la vista no es recomendable utilizar espacio de color RGB ya que en el paso de un color a otro puede caber la posibilidad de pasar por el blanco arruinando la transición, por lo tanto se utilizó el espacio de color HSV (Matiz Saturación y Valor)

HSV tiene la particularidad de expresar el color no como mezcla de los mismos (como se si hace en RGB) si no a partir del Matiz (Hue) que se mide en grados ya que

Page 10: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

conforman una rueda, de la saturación o cantidad de blanco y del valor que es el nivel de negro. Al expresarse el color en una rueda como se ve en la imagen

a partir de un ángulo la transición entre un color y otro tiene necesariamente que pasar por los valores intermedios siendo la misma mucho más suave.Como los leds RGB solamente permiten ser iluminados a partir de un color expresado en RGB se tuvo que programar las funciones de transición de colores de un espacio a otro. La fórmula para convertir de RGB a HSV fue obtenida de esta página https://es.wikipedia.org/wiki/Modelo_de_color_HSV y la fórmula que nos dio resultados positivos para convertir RGB a HSV fue obtenida de esta página https://fr.wikipedia.org/wiki/Teinte_Saturation_Valeur

Medición de la distancia por GPS

Para medir la distancia entre dos puntos marcados a partir de los datos GPS, en principio se pensaría en obtener la hipotenusa a partir del triángulo rectángulo que forman esos puntos , pero la realidad es que la tierra no es un plano sino un geoide y para simplificar el concepto , una esfera. Para obtener la distancia entre dos puntos a partir de la latitud y longitud se aplica la fórmula de Haversine (https://en.wikipedia.org/wiki/Haversine_formula) la cual fue programada en la lampara para dicho fin.

Donde Φ_1 y Φ_2 son las latitudes y λ_1 y λ_2 son las longitudes.

Page 11: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

Diagrama de componentes y conexión:

Page 12: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

Prototipo Final

Page 13: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

APLICACIÓN ANDROID

Elementos de Desarrollo

Para desarrollar la aplicación Android se utilizaron los siguientes elementos:

Visual Studio 2015 con plugin Xamarin Android SDK API Level 15 Celular con Android 5.0 (LG Leon utilizado para debug) [La aplicación usa API

Level 15, Android 4.0.3 como versión mínima requerida] Cable USB - microUSB (para conectar el teléfono celular y realizar un debug) Computadora de escritorio con las siguientes especificaciones

Procesador: Intel Core i7-6700 3.4 GHz Memoria: 2 x Corsair Value 8 GiB DDR4 2133 MHz Almacenamiento: Western Digital WD1001FAES 1TB Sistema Operativo: Windows 10

¿Qué es Xamarin?Xamarin es una compañía encargada del Proyecto Mono, una implementación

libre de la plataforma .NET para desarrollar aplicaciones en sistemas operativos que no sean Windows, en particular GNU/Linux, Android, iOS y Windows Phone, aunque en los tres últimos casos requiere del SDK necesario para programar en dichos sistemas operativos.

Para aplicaciones móviles, Xamarin contaba con su propio entorno de desarrollo, Xamarin Studio, hasta que fue adquirido por Microsoft en 2016. Xamarin para dispositivos móviles pasó a ser un plugin descargable para Visual Studio.

¿Por qué Visual Studio y Xamarin en lugar de Android Studio?

En el grupo de trabajo no se contaba con experiencia en ninguna de las dos posibilidades, y se terminó inclinando por Xamarin debido a que existe más experiencia en uso de .NET que en Java, lenguaje que se utiliza en Android Studio.

En comparación a programar con Java en Android Studio, Xamarin no presenta ninguna limitación notable en cuanto a lo que se puede programar con él, con la excepción de su inferior popularidad, haciendo que encontrar controles de terceros en funcionamiento para Xamarin sea bastante más difícil que encontrarlos para Java.

Page 14: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

La aplicación Android:La aplicación I.C.I. para Android cuenta con cinco activities:

* SplashActivity: Muestra una pantalla de presentación de la aplicación por cuatro segundos, luego pasa a MainMenuActivity.

*MainMenuActivity: El menú principal de la aplicación. Cuenta con tres botones para acceder a las distintas funcionalidades del programa:

Obtener información de Arduino: Que da pie a ReadActivity. Enviar información de los sensores: Despliega un cuadro de diálogo con

cuatro opciones - GPS, Proximidad, Hora o Ninguno -. Los primeros tres pasan la aplicación a WriteActivity. La cuarta opción cierra el cuadro de diálogo sin hacer nada más.

Configuración: Pasa a ConfigActivity.

Page 15: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

*ReadActivity: Crea un DweetReaderService para informar al usuario de la temperatura y humedad indicada por los sensores del sistema Arduino (mediante el servicio Dweet denominado soa-ici-sensor), y envía el XML de configuración de colores al servicio Dweet denominado soa-ici-colors. También muestra un código de dos colores que coinciden con los que muestra la lámpara del sistema Arduino.

*WriteActivity: Al iniciarse, envía el XML de configuración de colores al servicio Dweet denominado soa-ici-colors. Dependiendo de la opción indicada desde MainMenuActivity (la cual recibe mediante un Intent con un valor sensorType), crea un servicio: "GPS" crea un GPSService, "Proximidad" crea un ProximitySensorService y "Hora" crea un HourService. Los dos primeros envían sus valores obtenidos al servicio Dweet denominado soa-ici-arduino. En el caso de Proximidad y Hora, también informa un código de color que coincide con el que se observa en la lámpara del sistema Arduino.

Page 16: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

*ConfigActivity: Una pantalla de configuración en donde se indican los extremos de los códigos de color (y los valores en los que se alcanzan dichos extremos, para las opciones de temperatura y humedad) con los que trabajará la lámpara del sistema Arduino. Al presionar sobre un recuadro de color se abre un cuadro de diálogo para seleccionar el color. Estos valores se guardan en un archivo XML llamado ColorConfiguration guardado en una carpeta SOA-ICI en el almacenamiento interno del dispositivo Android. Cuando se abandona la Activity (mediante el botón de atrás del dispositivo Android), actualiza la configuración del XML (verificando previamente que los valores extremos no y lo envía al servicio Dweet denominado soa-ici-color. Si el archivo XML no existe o es inválido, crea un XML por defecto. Esto también aplica a ReadActivity y WriteActivity

También la aplicación posee un cuadro de diálogo personalizado llamado ColorPickerDialog, el cual tiene tres sliders (representando el código RGB) y un cuadro que muestra el color resultante. Al presionar "Aceptar", se actualiza el recuadro de color por el cual se abrió el cuadro.

ServiciosLa aplicación cuenta con cuatro servicios:

* DweetReaderService: Realiza llamadas al servicio Dweet denominado soa-ici-sensor para obtener la temperatura y humedad sensada por el sistema Arduino. Realiza un Broadcast con los datos recopilados, el cual es utilizado por ReadActivity.

Page 17: so-unlam.com.arso-unlam.com.ar/soa/iot-2016-c2-smart-lamp.docx · Web viewComo ya se mencionó anteriormente para la medición de la temperatura se utiliza el sensor LM35. Para este

*GPSService: Se suscribe al sensor de ubicación para realizar un Broadcast con la latitud y longitud obtenidos, y luego realiza un Broadcast con dicha información, el cual es utilizado por WriteActivity.

*ProximitySensorService: Se suscribe al sensor de proximidad para realizar un Broadcast con el valor obtenido, y luego realiza un Broadcast con dicha información, el cual es utilizado por WriteActivity.

*HourService: Cada segundo, realiza un Broadcast para informar a WriteActivity para actualizar la hora actual que muestra.