Cómo construir un Espejo inteligente


Microsoft está apoyando  el proyecto Magic Mirror , un espejo  según la compañía o de bajo coste que cualquier persona puede realizar, con idea de mejorarlo  a toda la gran comunidad maker para crear un espejo conectado capaz de correr aplicaciones y mostrar información en tiempo real mientras nos miramos en él cada mañana
La idea no es nueva ,pero  quizás el uso  intensivo de la  nube de Microsoft  tal vez si pues al concepto de espejo mágico , transciende un paso más allá al permitir el reconocimiento del usuario  pues  el espejo puede reconocer a los usuarios registrados y personalizar la experiencia en consecuencia.

 

El espejo mágico que vamos a ver es  un proyecto de IO   pensado  para mostrar el poder de la plataforma de Windows universal (UWP) alojando aplicaciones web .

El lado del cliente se codificó con las tecnologías web estándar (CSS, HTML, JS) :es decir el corazón . El back-end aprovecha la potencia de NodeJS y Mongo alojados en Azure. El lado del cliente implementa la API de Windows ( mediaCapture ) para detectar las caras de la cámara dispositivos, y usa servicios cognitivos de la cara de la API de Microsoft para que coincida con las caras de los perfiles.

Puesto que un dispositivo de espejo no debería contar de la típica entrada desde un teclado y un ratón, la aplicación web proporciona una visión que permite a los usuarios personalizar la experiencia,pero como añadido, podemos agregar una cámara para reconocimiento facial que permitirá configurar diferentes perfiles para cada miembro de la familia, incluso Microsoft está liberando la API a través de «Microsoft Cognitive Services» para que cualquiera la pueda implementar.

 

Proceso de ensamblaje
El proceso de montaje requiere bastante trabajo manual así que recomiendan  tomar las medidas de seguridad apropiadas.

Usted necesitará los siguientes materiales para montar el espejo mágico:

  • Lamina acrílico de  espejo de 2 vias (2-Way Mirrored Acrylic Sheets)
  • Un armario con espejo o cristal
  • Monitor con tecnología LED de la pantalla
  • Microsoft LifeCam HD-3000 – Webcam (micrófono integrado, USB 2.0), negro ( opcional pero aconsejable)
  • Raspberry Pi 3 Modelo B (1,2 GHz Quad-core ARM Cortex-A53, 1GB RAM, USB 2.0)
  • Tarjeta micro SD
  • Cable micro USB y adaptador de corriente USB
  • Cable de HDMI

 

 

camara

 

Así mismo  también necesitará algunas  herramientas :

  • Pegamento gorila
  • Cinta negra
  • Tijeras
  • Destornillador de múltiples bits
  • Alicates de corte
  • Taladradora eléctrica

 

Los pasos a seguir para la construcción del espejo resumidamente son los siguientes:

Desmontaje del espejo y taladros

En el  proyecto se utiliza un pequeño armario con espejo (los típicos usados para  las medicinas)  que sea  lo suficiente ancho para albergar un monitor  . El bastidor del gabinete médico donde va el espejo normalmente se mantiene unido por  grapas  que se pueden quitar  utilizar un simple  destornillador  La idea es que necesitará quitar el espejo para reemplazarlo  por la  Lamina acrílica de  espejo de 2 vías  .Tenga cuidado con cortarse al quitar el espejo. Una vez que las grapas se hayan ido, se puede quitar el espejo unidireccional y sustituirlo por el espejo de dos vías. Luego tendrá que volver a ensamblar el conjunto con grapas o pegamento .

espejonew

Ahora  tendrá que perforar dos  agujeros : uno  en la parte superior del armario que sea lo suficientemente grande para pasar el extremo USB de la cámara  y otro al fondo  para que pueda pasar a través de los cables de alimentación.

Montaje del monitor

El siguiente paso , es retirar la carcasa exterior del monitor, sin dañar el sensor táctil donde van los controles )como se ve en la imagen siguiente pues necesitará este sensor para controlar la configuración de energía del monitor. Se pueden utilizar los alicates para cortar el panel del sensor de la carcasa exterior. Debe quedar como la imagen de abajo.

tv

El borde de la pantalla es de color gris por lo que puede  cubrir los bordes  con cinta negra.

Una vez preparado el monitor tenga en cuenta   que debe colocar el  monitor  tan cerca del espejo como sea posible. Desde la pagina de github puede encontrar el modelo en 3D de los soportes para que  puede 3d imprimir usted mismo. Si no desea imprimir los topes , puede utilizar rollos de papel higiénico como un reemplazo  piezas de poliestierreno cortadas  para que encajen en el armario

A continuación se muestra una imagen que muestra cómo el monitor debe descansar sobre los topes.

espejo

Añadir el resto de electrónica

Ahora  toca dotar del cerebro al espejo por lo que lo siguiente es fijar la Raspberry Pi 3 junto con sus conexiones. Conectaremos la alimentación  a la Raspberry Pi 3 de 5v  mediante un alimentador (mínimo 1500mA) a la toma micro-usb. También conectaremos por hdmi   al monitor a través de la conexión HDMI del  monitor a la toma correspondiente de su Raspberry Pi 3.

Por ultimo conectaremos la  cámara, para lo cual la fijaremos con cinta a la parte superior de la caja y la conectaremos a la Pi3 a través del USB.

rp3

 

La instalación de la aplicación

Una vez que el espejo este montada y cableada, puede instalar la aplicación en su espejo mágico Frambuesa Pi (RP). Los chicos de Microsoft han hecho un gran esfuerzo pues  aunque por el momento solo es posible desplegar el sw necesario  para la Raspbery pi desde un PC, muy pronto aseguran sus creadores que también sera posible hacerlo desde un Mac.

En caso del despliegue en un PC los requisitos previos son :

  • Visual Studio (2013+)
  • Windows 10 SDK instalado en Visual Studio
  • Raspberry pi 3 ejecutando el núcleo de Windows IO

 

Los pasos a seguir son los siguientes:

  1. En Visual Studio, haga clic en ile > New Project > JavaScript Templates > Windows > Hosted Web Apps ( Archivo> Nuevo> Proyecto JavaScript plantillas> Windows> Aplicaciones Web alojados)
  2. Ir al explorador de soluciones, haga clic en package.appxmanifest> Aplicación y establecer http://webreflections.azurewebsites.net/mirror  como la página de inicio
  3. Dentro de la vista package.appxmanifest, haga clic en la pestaña URI contenido e insertar  http://webreflections.azurewebsites.net/ con WinRT de todos los accesos
  4. Haga clic en la pestaña Capacidades y seleccione a Webcam
  5. En la cinta, cambiar la arquitectura taget de cualquiera de las CPU a ARM
  6. Haga clic en play,que debería decir la máquina remota(Remote Machine)
  7. Un mensaje debería aparecer que le pide el nombre de la máquina. Ajuste el IPv4 de la RP como el nombre de la máquina y seleccione universal para la autenticación
  8. !Ya está listo!: Ha instalado con éxito la aplicación web alojada de Espejo Mágico  en su Raspberrypi que ejecuta el núcleo de Windows IO .

 

El espejo será capaz de mostrarnos información como la hora, fecha, el tiempo, datos financieros y la situación del tráfico, y en la parte superior aparecerán las notificaciones con prioridad y en la parte inferior tendremos las cosas menos urgentes

Obviamente en el centro permanecerá totalmente limpio, salvo un mensaje de bienvenida, ya que hay que recordar que principalmente es un espejo aunque con extra de tecnología de nuestro siglo.

Toda los detalles e instrucciones ya están disponibles en el GitHub oficial de Microsoft; y si todo esto les suena familiar, es porque este proyecto se basa en una creación de Michael Teeuw  del que ya hablamos en este blog , quien en 2014 presentó dentro de la comunidad Raspberry su desarrollo de Magic Mirror, que ahora ha sido potenciado por los servicios Cloud de Microsoft.

Tutorial IoT con Fiware


Gracias a  Telefónica R&D Chile( Telefónica I + D Chile) nos  ofrecen   un interesantisimo tutorial  intruductorio sobre  IOT   concretamente usando la plataforma Orion Context Broker  (FIWARE ) con Arduino aunque puede extrapolarse  a otras placas de IoT ( por ejemplo Netduino ,Intel Edison o Raspberry Pi)

 

Un punto interesante para analizar el IoT (Internet of Things  )es el uso de las normas. Para el caso concreto vamos a revisar más adelante en la sección Orion Context Broker, una adaptación basada en la especificación OMA (Open Mobile Alliance) NGSI (Next Generation Service Interface).  En términos simples, esto significa que las peticiones HTTP o acciones que deben utilizarse son los que están actualmente empleados por los navegadores tales como GET, POST, DELETE y PUT para interactuar con el contexto Broker.

Configuración de hardware

Los componentes que vamos a utilizar son:

  •  Una placa Arduino (hay muchas alternativas, pero una versión con WiFi es esencial)
  •  Una placa protoboard
  •  LEDs
  •  Cables de conexión
  • Un router o un dispositivo celular que pueden ofrecer Wi-Fi (tethering)

Como se ha comentado en este blog , Arduino tiene su propia interfaz de desarrollo utilizando el lenguaje C ++ y se integra una serie de librerías para facilitar la  aplicación de prototipos. Esto no quiere decir que Arduino no se puede utilizar en entornos industriales o de alta demanda. Sin embargo, en estos escenarios cuestiones de costos por lo general conducen a la utilización de componentes ad-hoc.

Al observar la estructura, se puede reconocer algunos pines digitales en la parte superior y analógicas pines en la parte inferior (idéntico  a muchas otras placas como Netduino). Además, en la parte inferior, también  hay una  fila de conectores para alimentar al propia  placa u otras que se conecten. Por supuesto la  placa   también  tiene un conector a una toma de corriente y un conector mini USB, entre otros componentes, dependiendo de la versión de la tarjeta y si se utiliza add-on «escudos» o no.

Si conectamos un LED a la placa podemos hacerlo directamente, conectando el ánodo LED de pin digital 13 y el cátodo del   led  al pin de   GND como se ve aquí.  Hay que señalar que es interesante conectar  entre el pin digital 13 con una resistencia de 220 ohmios para proteger el diodo led , pero estrictamente podría omitirse dicha resistencia.

led.jpg

 

Por último, este mismo esquema se puede usar para agregar más LEDs o sensores de nuestra placa Arduino para que pueda añadir más funcionalidades. Para ello hay que recordar que en un tablero de alimentación corre horizontalmente en los puntos exteriores y vertical en los puntos interiores

 

Arduino, software and communications Arduino, software y comunicaciones

En este ejemplo  vamos a aprender cómo programar la placa Arduino con el fin de activar el LED se instaló en la segunda parte y se apaga. A continuación, vamos a utilizar una conexión a Internet con WIFI  en  la placa.

Como requisito previo, hay que ya hemos configurado el software de Arduino según nuestro sistema operativo. Además, hay que tener USB de la placa conectada a nuestro ordenador para cargar el programa a nuestra placa (  consulte  aquí para ver cómo instalar el software en una placa Intel Edison).

Debe onviamente seleccionar la versión del software que corresponde a su sistema operativo.  Una vez que el software está configurado e instalado abrimos nuestra IDE hasta el comienzo de la codificación.

sketc

 

Vamos  a ver  un ejemplo de la IDE Arduino.  Este ejemplo es específicamente para el IDE para los conjuntos de Intel, aunque los conceptos son los mismos. En la segunda fila de menú (donde el icono de comprobación es), encontrará los comandos para compilar y cargar nuestros desarrollos a la placa.   Si examina el código, tenemos dos funciones.  Uno es de configuración, donde las variables se inicializan y el bucle en el que se ejecutan las operaciones según se requiera. En el menú Archivo tenemos los ejemplos de opciones – 01 Básico – Blink. Esto mostrará una nueva ventana con el código necesario para poner a prueba nuestra LED:

/*

Blink Parpadeo

Se enciende un LED durante un segundo, luego se apaga durante un segundo, en repetidas ocasiones.

Este código de ejemplo está en el dominio público.

*/ Pin 13 tiene un LED conectado en la mayoría de las placas Arduino.

// Darle un nombre:

int led = 13;

// La instalación se ejecuta de rutina una vez cuando se presiona RESET:

void setup() { 

// Inicializar el pin digital como salida.

pinMode (led, OUTPUT);

}

// La rutina de bucle se ejecuta una y otra vez para siempre:

void loop() {

digitalWrite(led, HIGH);  //  Enciende el LED (ALTA es el nivel de tensión)

delay(1000);  // Espera un segundo

digitalWrite(led, LOW);  //  Apagar el LED haciendo que la tensión BAJA

delay(1000);  // Espera un segundo

}

El ejemplo que genera Arduino es bastante simple.  En la línea 10 se establece una variable con el número pin correspondiente en la placa . Posteriormente, el pasador la variable se  configura  como salida y se inicializa. Y, en el bucle, el LED se enciende y se apaga separado por un retraso de un segundo .

Antes de cargar el código anterior en la placa , el IDE se debe configurar para que sepa la placa  y qué puerto se  está utilizando:

Select Tools> Board> Intel Edison Seleccione Herramientas> Junta> Intel Edison ( para el caso de una placa Intel Edison)

Select Tools> Port> dev / ttyACM0 Seleccione Herramientas> Puerto> dev / ttyACM0

Ahora bien, si la tarjeta está correctamente conectada al puerto USB, podemos ‘Subir’ el código de la tarjeta (Ctrl + U) y deberíamos ver nuestra LED encendido y apagado de cada segundo.

 

Ahora para usar el wifi, tenemos que trabajar un poco más.  Por suerte, en los ejemplos de Arduino, tenemos una sección de WIFI con diferentes alternativas utilizando las soluciones de redes.  Entre ellos se encuentran los servidores Telnet y clientes, servidores Web y clientes, e incluso un cliente de Twitter.

CONSEJO: En nuestro caso, por motivos de simplicidad, podemos utilizar un cliente Web ya que vamos a enviar solicitudes posteriormente al corredor Orion Contexto utilizando el protocolo HTTP.  Tenga en cuenta que hay mejores soluciones, pero para los propósitos educativos vamos a tratar de minimizar el código tanto como sea posible.

<SPI.h>

<WiFi.h> >

/ ************************** /

/ * * Configuración de la instalación /

/ ************************ /

char ssid[] = «YourWifiSSID»;//Nombre de la red

char pass[] = «WifiPassword»; //Contraseña de red

char server[] = «130.206.80.47»;  // ORION IP address -> Create in /lab/ // Dirección IP ORION -> Crear en / lab /

int status = WL_IDLE_STATUS; int estado = WL_IDLE_STATUS; // we predefine the status as On but not connected // Nos predefinimos la condición pero no conectada

int led = 13; int LED = 13; // We initialize a variable to assign the pin number to which the led will be connected // Inicializamos una variable para asignar el número de identificación personal al cual se conectará el LED

/**

* Configuración Configuración Arduino

* (Ejecutar una sola vez)

**/

void setup() {

// Inititialization del puerto serie Arduino

Serial.begin(9600);

while (!Serial) {

// Esperar para el puerto serie para conectar. y Necesario para Leonardo solamente

}

// Comprobar que la placa tiene un escudo WiFi

if (WiFi.status() == WL_NO_SHIELD) {

Serial.println(«Wifi shield is not available»);

// No continúe con la instalación, o en otras palabras, se quedan aquí para siempre

while(true);

}

El código completo está disponible en:

https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

FIWARE  y Orion Context Broker

Como se ha discutido anteriormente en este ejemplo, el Broker de Orión define un contexto como un servicio que en base al stándar  OMA NGSI 9/10 puede manejar el envío y recepción de información contextual.  ¿Qué significa esto?  En primer lugar, para manejar un gran número de mensajes de entidades y administrar las actualizaciones, consultas, y también se encargan suscripciones de datos de las entidades. Recordemos que, según la NGSI 9 y 10 estándares, nos ocupamos de las entidades como una abstracción de los nodos físicos o dispositivos utilizados en las soluciones de la IO.

En el ejemplo anterior, hemos hecho una solicitud de actualización a una entidad ya creada.  Pero primero vamos a revisar cómo trabajar con Orión. . Una manera simple de probar el servicio OCB es crear una cuenta en https://account.lab.fiware.org/ y crear una máquina virtual con Orion preconfigurada en la sección de la nube. Alternativamente, el sitio y el acceso GitHub de Orión descargar una máquina virtual para ejecutar en nuestro entorno local

Otra herramienta útil es un cliente REST, pero podemos usar cURL si parece más sencillo. RESTClient es un cliente para Firefox que es bastante fácil de usar.

Los aspectos de configuración de la OCB están fuera del alcance de este tutorial, ya que requeriría demasiados detalles.  En cuanto al Laboratorio fiware, es importante tener en cuenta que fiware proporciona máquinas virtuales en la nube de forma gratuita para probar fiware compontents. Sólo tiene que crear una cuenta para acceder a los servicios. Sólo una advertencia rápida. . A partir de hoy (19-03-2015) y temporalmente, España no tiene recursos disponibles, pero hay otras regiones en las que las máquinas virtuales se pueden crear.

Cuando tengamos las herramientas necesarias, la forma más básica para interactuar con la OCB es:

1. Creando una entidad:Para ello hay que tener en cuenta varios factores.  En primer lugar, la llamada se envía como una solicitud HTTP POST, por ejemplo, http://myhost.com:1026/v1/updateContext.  Con esto queremos decir que estamos ocupando la versión 1 del API con la operación updateContext.

También tenemos que definir varias variables en la cabecera de la solicitud:

Accept: application/json

Content-Type: application/json

X-Auth-Token: [TOKEN AUTHENTICATION]

En cuanto a la generación de tokens, la forma más sencilla es utilizar un script en Python creado por Carlos Ralli en GitHub. Se necesita una cuenta FIWAREy ejecutar el ‘get_token.py  se requiere la escritura’.

Después de configurar el encabezado de la solicitud, configurar el «cuerpo» de la solicitud mediante el siguiente código JSON:

{

«contextElements»:[

{

«type»:»LED»,

«isPattern»:»false»,

«id»:»LED001″, «

«attributes»:[

{

«name»:»switch»,

«type»:»bool»,

«value»:»false»

}

]

}

],

«updateAction»:»APPEND»

}

Esta es la estructura de un «contexto Elementos», que es un grupo de entidades con ciertos atributos, tales como, «isPattern» e «id», «tipo». » type »  se refiere a un tipo definido y permite la búsqueda de entidades por un tipo particular. «Id» es un atributo que debe ser único para cada entidad para ejecutar búsquedas en base a este ID. «IsPattern» se explicará más adelante en el punto No. 2.

También puede agregar una serie de atributos de la entidad en la propiedad «atributos», donde cada atributo se define por el «nombre», «tipo» y «valor». Por último, «updateAction» define si vamos a realizar un «añadir» o y «UPDATE».

Si todo va bien, vamos a recibir una respuesta 200 OK desde el servidor y que nos dará los detalles de la entidad creada:

{

«contextResponses» :

{

«contextElement» : {

«type» : «LED»,

«isPattern» : «false»,

«id» : «LED001», «

«attributes» :

{

«name» : «switch»,

«type» : «bool»,

«value» : «»

}

]

},

«statusCode» : { «

«code» : «200»,

«reasonPhrase» : «OK»

}

}

]

}

2. Consultar la entidad: Para consultar una entidad, la operación estándar es ‘queryContext’ que sería http://myhost.com:1026/v1/queryContext.También aplicamos las cabeceras que se describen en el punto No. 1 y el uso post.

El JSON utilizado en el cuerpo de la petición sería la siguiente:

{

«entities»:[

{

«type»:»LED»,

«isPattern»:»false»,

«id»:»LED001″

}

]

}

Aquí es donde puede utilizar «isPattern» en «verdadero» y trabajar bien en el campo «tipo» o el campo «id» con expresiones regulares si queremos ejecutar una búsqueda un poco más compleja. En el ejemplo anterior sólo estamos buscando la misma entidad creada a través de la «id».

También hay una manera más sencilla de hacer la misma consulta utilizando la siguiente solicitud: GET http://myhost.com:1026/v1/contextEntities/LED001 donde LED001 es el «id» de la entidad a buscar.

3. Actualización de la entidad: Esto es idéntico al punto No. 1, pero cambiando el atributo «updateAction» de «añadir» a «UPDATE».

Por último, la integración de todo lo que hemos revisado, seremos capaces de generar una acción desde una página Web sencilla que se puede implementar en un servidor remoto y, de hecho demostrar que el LED de la aplicación se activa de forma remota utilizando la OCB.

Para ello vamos a utilizar el LED001 de reciente creación, estableciendo el atributo «interruptor» de verdadero a falso y viceversa para comprobar la acción.

Nuestra web se vería así:

 

ejemplño

Para ello, el código html, css y js se comparten en:   https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

 

 

 

Fuente    aqui