Plataforma de sensores e-Health V1.0 para Arduino y Raspberry Pi [aplicaciones biométricas / medicina]


En agosto de 2013 Cooking Hacks lanzó la nueva versión del primer escudo biométrica para Arduino y Raspberry Pi: la plataforma  e-Health Sensor. Gracias a la retroalimentación de la comunidad y varios proyectos que han sido creados con esta, han mejorado la plataforma de e-Health con nuevas características tales como:

  • Nuevo sensor de músculo
  • Sensor de presión de la sangre nueva
  • Glucómetro actualizado
  • Nuevas posibilidades de conexión

En este post  vamos a explicar cómo trabajar cplataforma  e-Health Sensor.V2.0.

E-Health Sensor Shield V2.0 permite a los usuarios de Arduino y Raspberry Pi realizar aplicaciones biométricas y médicas donde la supervisión del cuerpo sea necesaria mediante el uso de 10 sensores diferentes: pulso, oxígeno en sangre (SPO2), flujo de aire (respiración), temperatura corporal, Electrocardiograma (ECG), glucómetro, respuesta galvánica de la piel (GSR – sudoración), presión arterial (esfigmomanómetro), posición del paciente (acelerómetro) y sensor de músculo/eletromyography (EMG).

Esta información puede utilizarse para monitorizar en tiempo real el estado de un paciente o para obtener datos sensibles para ser analizados posteriormente para el diagnóstico médico. La información biométrica obtenida puede enviarse sin cables usando cualquiera de las 6 opciones de conectividad: Wi-Fi, 3 G, GPRS, Bluetooth, 802.15.4 y ZigBee dependiendo de la aplicación.

Si para  el diagnóstico de la imagen en tiempo real es necesaria una cámara puede conectarse el módulo 3G para enviar fotos y videos del paciente a un centro de diagnóstico médico.

Los datos pueden enviarse a la nube para almacenamiento permanente o visualizarlos en tiempo real enviando los datos directamente a un ordenador portátil o Smartphone. También  hay desarrollado  varias aplicaciones iPhone y Android  para poder ver fácilmente la información del paciente.

La privacidad es uno de los puntos clave en este tipo de aplicaciones. Por esta razón, la plataforma incluye varios niveles de seguridad:

    • En la capa de enlace de comunicación: AES 128 para 802.14.5 / ZigBee y WPA2 para Wifi.
    • En la capa de aplicación: mediante el protocolo HTTPS (seguro) nos aseguramos de un túnel de seguridad de punto a punto entre cada nodo de sensor y el servidor web (este es el mismo método utilizado en las transferencias bancarias).

e-Health protector del Sensor sobre Arduino (izquierda) frambuesa Pi (derecha)

Importante: La plataforma de e-Health Sensor ha sido diseñada por Cooking Hacks (la división de hardware abierto de Libelium) para ayudar a los investigadores, desarrolladores y artistas para medir datos de sensor biométrico para fines de experimentación, diversión y prueba proporcionando una alternativa barata y abierta en comparación con las soluciones propietarias  debido al precio prohibitivo de llas profesionales usadas por el  mercado médico. Precisamente por esta razon, como la plataforma no tiene certificaciones médicas no puede  ser utilizada para monitorizar pacientes críticos que necesitan un control médico preciso o aquellos cuyas condiciones deben medirse con precisión para un diagnóstico profesional ulterior.
Gracias a la comunidad Arduino y Raspberry  Pi ,es  posible  una rápida prueba de concepto y servir de  base de una nueva era de productos médicos de código abierto.

El paquete que vamos a utilizar en este tutorial se basa en la plataforma de Sensor de eHealth de Cooking Hacks. La E-Health protector del Sensor es totalmente compatible con las nuevas y viejas versiones de Arduino USB, Duemilanove y Mega y Rsapberry.

  • 8 sensores médicos no invasiva + 1 invasoras
  • Almacenamiento y uso de las mediciones de glucosa.
  • Monitoreo de señales ECG.
  • Señales de monitorización EMG.
  • Control de flujo de aire del paciente.
  • Control de flujo de aire del paciente.
  • Datos de la temperatura del cuerpo.
  • Medidas de respuesta galvánica de la piel.
  • Detección de la posición del cuerpo.
  • Funciones de pulso y oxígeno.
  • Dispositivo de control de la presión arterial.
  • Múltiples sistemas de visualización de datos.
  • Compatible con todos dispositivos UART.

Características eléctricas:

La placa puede ser alimentada por el PC o por una fuente externa. Algunos de los puertos USB en los ordenadores no son capaces de dar toda la corriente para que el módulo pueda  trabajar, si el módulo tiene problemas cuando funcione, se puede utilizar una fuente externa (12V – 2A) en el Arduino/RasberryPi

El escudo

 

Escudo de e-Health sobre Raspberry Pi

Para conectar el protector del Sensor e-Health para Raspberry Pi es necesario un  adaptador que haga de puente de conexión .

La idea detrás del  puente de conexión Arduino shields es permitir utilizar cualquiera de los escudos, placas y módulos diseñados para Arduino en Raspberry Pi. También incluye la posibilidad de conectar sensores analógicos y digitales, utilizando el mismo pinout de Arduino pero con la potencia y capacidades de Raspberry Pi

La conexión puente es compatible con Raspberry Pi, Raspberry Pi (modelo B +), Raspberry Pi 2 y el Raspberry Pi 3.

Para hacer completa la compatibilidad han creado la biblioteca de arduPi que permite el uso de frambuesa con el mismo código utilizado en Arduino. Para ello, han implementado funciones de conversión de modo que usted puede controlar de la misma manera como en Arduino la entrada-salida interfaces: i2C, SPI, UART, analógica, digital, en Raspberry Pi.

Vamos a resumir lo que podemos hacer con este escudo junto con la biblioteca de arduPi:

ADVERTENCIAS:

  • Los módulos LCD, esfigmomanómetro y comunicación utilizan el puerto UART y no pueden trabajar al mismo tiempo.
  • El glucómetro es ahora compatible con otros dispositivos UART y tiene su propio conector. Pero no puede trabajar con el esfigmomanómetro conectado.
  • El sensor de EMG y el ECG no pueden trabajar al mismo tiempo. Utilizar los puentes integrados en el tablero para utilizar uno u otro
  • Para utilizar el sensor de EMG, usted tiene que tener los puentes en la posición de EMG. Para utilizar el sensor de ECG, usted tiene que tener los puentes en la configuración de ECG.

El escudo

Versión 2 del escudo:

  • Esta versión incluye un conmutador Digital para activar/desactivar la toma de corriente para módulos inalámbricos usando GPIO23 (Digital Pin 3).

Versión 1 del escudo:

  • 8 pines digitales.
  • Conector para módulos inalámbricos.
  • Pernos de RX/TX.
  • pasadores de i2C (SDA, SCL).
  • Pasadores de SPI (SCK MISO, MOSI, CS). Puede utilizarse también como GPIO.
  • 8 canales convertidor analógico a digital.
  • Interruptor para activar la fuente de alimentación externa.

 La biblioteca: arduPi

arduPi es una librería C++ que permite escribir programas para Raspberry Pi como si estuvieras escribiendo un programa de arduino. Todas las funciones para el control de comunicaciones del puerto serie, i2C, SPI y GPIO pins están disponibles mediante la sintaxis de arduino.

arduPi ha sido probado en una distribución Raspbian. Para grabar una imagen de Raspbian a la tarjeta SD se pueden descargar los NOOBS aquí y siga estas instrucciones.

Una vez instalado Raspbian, descargue e instale arduPi biblioteca en una carpeta nueva, por ejemplo: “página de inicio/pi/ardupi”

Para Rasberry Pi:

wget http://www.cooking-hacks.com/media/cooking/images/documentation/raspberry_arduino_shield/raspberrypi.zip && unzip raspberrypi.zip && cd cooking/arduPi && chmod +x install_arduPi && ./install_arduPi && rm install_arduPi && cd ../..
Para Raspberry Pi 2 y 3:
wget http://www.cooking-hacks.com/media/cooking/images/documentation/raspberry_arduino_shield/raspberrypi2.zip && unzip raspberrypi2.zip && cd cooking/arduPi && chmod +x install_arduPi && ./install_arduPi && rm install_arduPi && cd ../..

Descargar arduPi biblioteca para Raspberry Pi

Descargar biblioteca de arduPi de frambuesa Pi 2 y 3

Usted puede encontrar una biblioteca de cambios aquí.

Funciones generales de Arduino:

  • Delay()
  • delayMicroseconds()
  • Millis()
  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead() (en pines de A0 a A7. Ejemplo: analogRead(5) leerá A5)
  • shiftIn()
  • shiftOut()
  • attachInterrupt() *
  • detachInterrupt()

[*] Podemos detectar interrumpe el ascenso y descenso. Cualquier pin digital (de 2 a 13) puede ser utilizado en attachInterrupt(). Por ejemplo, si queremos estar al tanto de eventos de levantamiento en el pin 6 que podemos hacer attachInterrupt(6,function_to_call,RISING).

Biblioteca  serie:

  • available()
  • begin()
  • end()
  • Flush()
  • Peek()
  • Print()
  • println()
  • Read()
  • readBytes()
  • readBytesUntil()
  • Find()
  • findUntil()
  • parseInt()
  • parseFloat()
  • setTimeout()
  • Write()

Biblioteca wire:

  • begin()
  • requestFrom()
  • beginTransmission()
  • endTransmission()
  • Write()
  • Read()

Biblioteca SPI:

  • begin()
  • end()
  • setBitOrder()
  • setClockDivider()
  • setDataMode()
  • Transfer()

Uso de la biblioteca arduPi:

En la carpeta de biblioteca encontrarás 3 archivos: arduPi.cpp, arduPi.h y arduPi_template.cpp
el archivo arduPi_template.cpp está destinado a ser utilizado como punto de partida para crear programas con el mismo comportamiento como un programa de arduino.

Aquí puede ver el código de plantilla:

//Include arduPi library
    #include "arduPi.h"

    /*********************************************************
     *  IF YOUR ARDUINO CODE HAS OTHER FUNCTIONS APART FROM  *
     *  setup() AND loop() YOU MUST DECLARE THEM HERE        *
     * *******************************************************/

    /**************************
     * YOUR ARDUINO CODE HERE *
     * ************************/

    int main (){
        setup();
        while(1){
            loop();
        }
        return (0);
    }

Como se puede ver en la función main() la función setup() es llamada una vez y luego la función loop() se llama contínuamente hasta que el programa se ve obligado a terminar.

Ya sea si están empezando a escribir un nuevo programa, o si usted tiene un programa de arduino escrito que utiliza las funciones portadas puede utilizar la plantilla (ardupi_template.cpp) y poner el código de arduino donde dice: el código de ARDUINO aquí. Recuerde que el programa que está escribiendo un programa C++ para que todas las bibliotecas de C++ pueden utilizarse.

También recordar, como se puede leer en la plantilla que si el código de arduino utiliza otras funciones setup() y loop() debe declararlos en el área indicada.

 Habilitación de Interfaces:

Los siguientes pasos han sido probados con Raspbian Jessie: 4.4.9 (Linux versión 4.4.9-v7+ ([email protected]) (gcc versión 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #884 SMP el viernes 6 de mayo 17:28:59 BST 2016)

Raspberry Pi 2:

  • Abrir un terminal en la Raspberry Pi, o conecte al Raspberry Pi a través de SSH.
  • Abra el archivo /boot/config.txt: sudo nano /boot/config.txt
  • Agregue las líneas siguientes al archivo:
#enable uart interface
enable_uart=1

#enable spi interface
dtparam=spi=on

#enable i2c interface
dtparam=i2c_arm=on
  • Presione CTRL + X para salir y guardar el archivo.
  • Actualizar el sistema operativo con los últimos parches.
sudo apt-get update
sudo apt-get upgrade
  • Reiniciar la Raspberry Pi.
sudo reboot

Raspberry Pi 3:

  • Abrir un terminal en la Raspberry Pi, o conecte al Raspberry Pi a través de SSH.
  • Abra el /boot/config.txt archivo <:sudo nano /boot/config.txt
  • Agregue las líneas siguientes al archivo:
#map mini-UART to internal bluetooth an free-up main UART to handle CookingHacks modules
dtoverlay=pi3-miniuart-bt

#enable uart interface
enable_uart=1

#enable spi interface
dtparam=spi=on

#enable i2c interface
dtparam=i2c_arm=on
  •  Presione CTRL + X para salir y guardar el archivo.
  • Abra el archivo /boot/cmdline.txt:sudo nano /boot/cmdline.txt
  • Este archivo contiene algo similar a esto (el contenido puede variar):
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
  • Eliminar los parámetros que hacen referencia al puerto serie UART (ttyAMA0):
dwc_otg.lpm_enable=0  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait ip=192.168.1.160:::255.255.255.0
  • Presione CTRL + X para salir y guardar el archivo.
  • Actualizar el sistema operativo con los últimos parches.
sudo apt-get update
sudo apt-get upgrade
  • Reiniciar la Raspberry Pi.
sudo reboot
    

Ejecución de su programa

Para ejecutar el programa debe tener los permisos adecuados para utilizar GPIO (/ dev/mem debe accederse en la frambuesa). Puede ejecutar el programa con sudo:

sudo ./MY_PROGRAM

 Circuitos básicos.

ADVERTENCIA: los niveles de voltaje GPIO 3.3 V y no 5 V tolerantes. No hay ninguna protección de sobretensión en el tablero. Entradas digitales utilizan un nivel de lógica de 3V3 y no son tolerantes de niveles 5V, como se podría encontrar en un Arduino 5V alimentado.Tenga extrema precaución cuando trabaje con GPIO, puede dañar su Raspberry Pi, su equipo y potencialmente a sí mismo y otros. Si lo hace es bajo su propio riesgo!

4.1 GPIO de entrada

Periféricos GPIO varían bastante. En algunos casos, son muy simples, por ejemplo un grupo de pines pueden activarse como un grupo a la entrada o salida. Los voltajes de entrada y de salida son por lo general limitado a la   tensión de alimentación del dispositivo con los GPIOs por lo que pueden resultar dañados por una mayor tensión.

Algunos GPIOs tienen 5 entradas tolerantes V: incluso en los voltajes de la fuente baja, el dispositivo puede aceptar 5V sin daño.

Para Raspberry Pi, presentamos un ejemplo de cómo adaptar el nivel de voltaje de una medida de sensor de 5V para evitar posibles daños.

Componentes para este ejemplos y circuito de adaptación de tensión pueden fundados en el Starter Kit para Raspberry Pi.

Cuando un pin GPIO se configura como una entrada con un ejemplo de botón básico, podemos tener estos problemas de incompatibilidad de voltajes.

Este circuito es malo porque cuando usted presiona el botón de la entrada GPIO está conectada a 5 voltios, por lo tanto nuestro dispositivo puede dañarse.

Sin embargo, esto puede evitarse utilizando simplemente una resistencia en el cable del pulsador. El valor de la resistencia se determina por la corriente de la salida de los pines GPIO (la corriente por el circuito solía para leer el pin) y la cantidad de caída de voltaje que crea como resultado de ello. Con el resistor de 5K se obtiene 3, 3V en lo GPIO de entrada.

Vgpio = 5V· (10K/(10K+5K)) = 3, 3V

 medición del Sensor GPIO

Tenemos el mismo problema si utilizamos un sensor funcionando a 5 voltios.

Aquí está un ejemplo usando un sensor PIR.

Como se muestra en la imagen, utilizamos el mismo divisor resistivo utilizado para adaptar el nivel de tensión.

 ADC.

El escudo incluye a un ADC de 12b de la resolución que permite para conectar cualquier sensor a frambuesa con mayor precisión que Arduino. La comunicación entre la Raspberry Pi  y el ADC del escudo se realiza vía i2C.

La información de cada canal se puede obtener dos bytes de lectura de i2C, pero previamente un byte (que corresponde a la dirección de canal) debe enviar a través de i2C dependiendo del canal que queremos seleccionar. Aquí está una lista con las direcciones de canal:

Canal Dirección
0 0xDC
1 0x9C
2 0xCC
3 0x8C
4 0xAC
5 0xEC
6 0xBC
7 0xFC

Veremos un ejemplo de un programa que lee cada canal continuamente esperando 5 segundos entre repeticiones.

Con un cable de conexión el pin de 5V con algunos de los pines del ADC un valor cerca de 5.000000 debe leerse.

Todos los ejemplos en esta guía utilizan la biblioteca arduPi

//Include arduPi library 
#include "arduPi.h" 

char selected_channel[1];
char read_values[4];

int channel_0 = 0; 
int channel_1 = 0; 
int channel_2 = 0; 
int channel_3 = 0; 
int channel_4 = 0; 
int channel_5 = 0; 
int channel_6 = 0; 
int channel_7 = 0; 

float analog_0 = 0.0; 
float analog_1 = 0.0; 
float analog_2 = 0.0; 
float analog_3 = 0.0; 
float analog_4 = 0.0; 
float analog_5 = 0.0; 
float analog_6 = 0.0; 
float analog_7 = 0.0; 

void setup() 
{ 
  Wire.begin(); // join i2C bus (address optional for master) 
} 

void loop() 
{ 
  // channel 0 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0xDC;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_0 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_0 = channel_0 * 5.0 / 4095.0;
  printf("Channel 0:\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_0, analog_0); 


  // channel 1 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0x9C;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_1 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_1 = channel_1 * 5.0 / 4095.0;
  printf("Channel 1:\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_1, analog_1); 
  
 
  // channel 2 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0xCC;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_2 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_2 = channel_2 * 5.0 / 4095.0;
  printf("Channel 2:\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_2, analog_2); 
  
  
  // channel 3 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0x8C;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_3 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_3 = channel_3 * 5.0 / 4095.0; 
  printf("Channel 3:\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_3, analog_3); 
  
  
  // channel 4 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0xAC;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_4 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_4 = channel_4 * 5.0 / 4095.0; 
  printf("Channel 4 (vertical header):\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_4, analog_4); 
  
  
  // channel 5 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0xEC;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_5 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_5 = channel_5 * 5.0 / 4095.0; 
  printf("Channel 5 (vertical header):\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_5, analog_5); 
  
  
  // channel 6 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0xBC;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_6 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_6 = channel_6 * 5.0 / 4095.0; 
  printf("Channel 6 (vertical header):\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_6, analog_6); 
  
  
  // channel 7 
  Wire.beginTransmission(8); 
  selected_channel[0] = 0xFC;
  Wire.read_rs(selected_channel, read_values, 2);
  Wire.read_rs(selected_channel, read_values, 2);
  channel_7 = int(read_values[0])*16 + int(read_values[1]>>4); 
  analog_7 = channel_7 * 5.0 / 4095.0;
  printf("Channel 7 (vertical header):\n");
  printf("Digital value = %d / Analog value = %fV\n\n", channel_7, analog_7); 
  
  
  printf("***********************************\n"); 



  delay(1000); 

} 


int main (){ 
    setup(); 
    while(1){ 
        loop(); 
    } 
    return (0); 
}
                

Aquí está la salida de este programa que se conecta al pin de 5V de la Raspberry  Pia la entrada analógica 0:

UART.

Acceso al UART con arduPi biblioteca es tan simple como hacerlo con Arduino.

Necesita incluir arduPi.h en el código y crear una instancia de clase SerialPi nombrarlo serie.

Nombre de la instancia como serie le permite utilizar la sintaxis de arduino. (Todo esto está ya hecho si utilizas la plantilla proporcionada para crear sus programas).

Las funciones disponibles son:

  • Serial.Available()
  • Serial.Begin()
  • Serial.end()
  • Serial.Flush()
  • Serial.Peek()
  • Serial.Print()
  • Serial.println()
  • Serial.Read()
  • Serial.readBytes()
  • Serial.readBytesUntil()
  • Serial.Find()
  • Serial.findUntil()
  • Serial.parseInt()
  • Serial.parseFloat()
  • Serial.setTimeout()
  • Serial.Write()

Todas estas funciones tienen la misma funcionalidad que el arduino unos. Puede encontrar más información en:http://Arduino.CC/en/Reference/serial

Un ejemplo de código que se pueden encontrar en el tutorial de frambuesa Pi XBee acess el UART

 i2C.

Un ejemplo de uso de i2C puede encontrarse en la sección de ADC .

Aquí mostramos otro ejemplo usando lo BlinkM RGB i2C controlado dirigido.

BlinkM utiliza una alta calidad, poder más elevado LED RGB y un pequeño Microcontrolador AVR para permitir que un usuario de una interfaz i2C simple digital control de un LED RGB.

En el ejemplo vamos a cambiar el color led usando fade transiciones y también cambiando directamente. Más información sobre lo LED y los comandos que podemos enviar a él puede encontrarse en la hoja de datos.

Conectar la clavija (-) del led con el pin GND del escudo.

Conecta (+) del pin del led con el pin de 5V de la pantalla.

Conectar la clavija d del led con el pin SDA del escudo.

Conectar la clavija c del led con el pin SCL del escudo.

Aquí está el código:

/*  
 *  Raspberry Pi to Arduino Shields Connection Bridge
 *  
 *  Copyright (C) Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version. 
 *  a
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License 
 *  along with this program.  If not, see http://www.gnu.org/licenses/. 
 *  
 *  Version:           2.0
 *  Design:            David Gascón 
 *  Implementation:    Jorge Casanova & Luis Martín
 */


//Include arduPi library
#include "arduPi.h"


void setup(){
    Wire.begin();
    Wire.beginTransmission(9);
    Wire.write('o'); //End the current Light script
    Wire.endTransmission();
}

void loop(){
    for (int i=0;i < 5;i++){
        Wire.beginTransmission(9);
        Wire.write('n'); //Change to color
        Wire.write(byte(0xff)); //Red component
        Wire.write(byte(0x00)); //Green component
        Wire.write(byte(0x00)); //Blue component
        Wire.endTransmission();

        delay(500);
        
        Wire.beginTransmission(9);
        Wire.write('n'); //Change to color
        Wire.write(byte(0x00)); //Red component
        Wire.write(byte(0x00)); //Green component
        Wire.write(byte(0xff)); //Blue component
        Wire.endTransmission();
        
        delay(500);
    }
    
    for (int i=0;i < 10;i++){
        Wire.beginTransmission(9);
        Wire.write('c'); //Fade to color
        Wire.write(byte(0xff)); //Red component
        Wire.write(byte(0x00)); //Green component
        Wire.write(byte(0x5a)); //Blue component
        Wire.endTransmission();

        delay(150);
        
        Wire.beginTransmission(9);
        Wire.write('c'); //Fade to color
        Wire.write(byte(0x55)); //Red component
        Wire.write(byte(0x20)); //Green component
        Wire.write(byte(0x5a)); //Blue component
        Wire.endTransmission();

        delay(150);
    }
}

int main (){
    setup();
    while(1){
        loop();
    }
    return (0);
}

Este código alternativo de rojo a azul cinco veces y luego hacer unas transiciones suaves entre colores violáceos.

 SPI.

Es posible comunicar con dispositivos SPI usando las funciones arduPi.

En este ejemplo utilizamos las funciones SPI para imprimir mensajes en la ST7920 LCD12864 (LCD SPI)

En primer lugar, tenemos que poner el interruptor de la pantalla LCD en modo SPI.

Ahora procedemos con la conexión entre el LCD y el Raspberry Pi a arduino shield:

VCC de la LCD a 5v del escudo

GND de la LCD a GND del escudo

SCK de lo LCD a SCK del escudo

SID de la LCD a MOSI del escudo

CS de la pantalla LCD al pin 8 del escudo

Como puedes ver estamos utilizando el número pin 8 del escudo frambuesa Pi como chip select. Así que cuando tenemos que seleccionar la pantalla LCD como el dispositivo de destino para la comunicación SPI tenemos poner el pin 8 a alta.

Aquí está el código

/*  
 *  Raspberry Pi to Arduino Shields Connection Bridge
 *  
 *  Copyright (C) Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version. 
 *  a
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License 
 *  along with this program.  If not, see http://www.gnu.org/licenses/. 
 *  
 *  Version:           2.0
 *  Design:            David Gascón 
 *  Implementation:    Jorge Casanova & Luis Martín
 */

//Include arduPi library
#include "arduPi.h"

int latchPin = 8;
unsigned char char1[]=" Cooking Hacks  ";
unsigned char char2[]="  SPI LCD for   ";
unsigned char char3[]="  Raspberry Pi  ";

void initialise();
void displayString(int X,int Y,unsigned char *ptr,int dat);
void writeCommand(int CMD);
void writeData(int CMD);
void writeByte(int dat);
void clear();

void setup(){
    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    SPI.setDataMode(SPI_MODE0);
    SPI.setClockDivider(SPI_CLOCK_DIV128);

    initialise();
}

void loop(){
    displayString(0,0,char1,16);
    delay(2000);
    clear();
    displayString(1,0,char2,16);
    displayString(2,0,char3,16);
    delay(2000);
    clear();
}

void initialise(){
    pinMode(latchPin, OUTPUT);     
    digitalWrite(latchPin, LOW);

    delayMicroseconds(80);

    writeCommand(0x30);
    writeCommand(0x0c);
    writeCommand(0x01);
    writeCommand(0x06);
}


void displayString(int X,int Y,unsigned char *ptr,int dat){
    int i;

    switch(X){
        case 0:  Y|=0x80;break;

        case 1:  Y|=0x90;break;

        case 2:  Y|=0x88;break;

        case 3:  Y|=0x98;break;

        default: break;
    }

    writeCommand(Y);

    for(i=0;i < dat;i++){ 
        writeData(ptr[i]);
    }

}

void writeCommand(int CMD){
    int H_data,L_data;
    H_data = CMD;
    H_data &= 0xf0;
    L_data = CMD;
    L_data &= 0x0f;
    L_data <<= 4;
    writeByte(0xf8);
    writeByte(H_data);
    writeByte(L_data);
}

void writeData(int CMD){
    int H_data,L_data;
    H_data = CMD;
    H_data &= 0xf0;
    L_data = CMD;
    L_data &= 0x0f;
    L_data <<= 4;
    writeByte(0xfa);
    writeByte(H_data);
    writeByte(L_data);
}

void writeByte(int dat){
    digitalWrite(latchPin, HIGH);
    delayMicroseconds(80);
    SPI.transfer(dat);
    digitalWrite(latchPin, LOW);
}

void clear(){
    writeCommand(0x30);
    writeCommand(0x01);
}


int main (){
    setup();
    while(1){
        loop();
    }
    return (0);
}

Este programa mostrará los mensajes “Cooking Hacks” y “SPI LCD para Raspberry Pi” con un retraso de 2 segundos en el medio.

 Mas ayuda

Se puede obtener ayuda en la sección específica creada en este  foro.

Fuente cooking-hacks

Anuncios

Como construir su servicio propio de entretenimiento en la nube


Muchas películas , programas y series de televisión que se pueden ver en servicios de streaming (como  Netflix ) de forma regular hasta que por el  motivo que sea se cancele cierta serie,pelicula o programa ,lo cual  significa que podría estar a mitad de camino a través de su película favorita cuando se cancelase el servicio. ¿La solución?Pues puede comprar todo su propio contenido y configurar su propio servicio de streaming basado en la nube privada para luego visionarlo desde cualquier computadora o dispositivo desde su propio servicio de streaming personal.

El aspirante a esta interesante función es   Plex, que ahora  ademas ha lanzado un  servicio  Plex en la Nube, ahora en fase beta, permitiendo  utilizar una nube local de Amazon para almacenar todas sus películas y programas y corriente a ellos desde cualquier lugar.

Anteriormente, había que organizar los archivos por sí mismo, por lo que significaba dejar una unidad de computadora o red encendida todo el tiempo para llegar a su contenido a través de la web. Con la nube Plex  ya no es necesario, aunque sí es necesario  pagar por el servicio Cloud Plex (de $ 4.99 al mes) y registrarse para obtener almacenamiento de Amazon ( $ 59,99 al  año para  almacenamiento ilimitado).

Por supuesto  también existen otras opciones si usted no desea usar  la nube Plex. No son tan similares como la opcion de Netflix-Plex en la nube, pero si ya paga por el almacenamiento de estos servicios, entonces son buenas alternativas a considerar ya  que se ahorraría los 5$ al mes del servicio Cloud Plex.

Todos estos servicios requieren que usted tenga sus películas y programas en un formato de vídeo popular, libre de DRM en primer lugar,etc .

Es importante tener en cuenta que, si bien muchas personas consideran que ya han pagado para poder ver los contenidos en cualquier lugar que les gusta, examinar en  su propia conciencia y por supuesto las leyes nacionales antes de proceder  a utilizar este tipo de servicios. No podemos garantizar que cualquiera de estos servicios va a hacer la vista gorda al material si  infringe derechos de autor, así que proceda  bajo  su propio riesgo (!y por supuetso pague  por sus  películas!).

Cloud  Plex

Plex ya era una opción decente para la construcción de un servicio de streaming privado ,  pero ahora con la solución en  la nube hace que el servicio sea aún mejor pues sólo tiene que cargar todo lo que tiene en  los servidores de Amazon, y Plex tira  procede a indexar  desde allí.

Usted tiene que pagar para almacenamiento ilimitado de Amazon (o conformarse con los  5GB que se obtiene con Amazon  Prime), a continuación, obtener  a un paso  Plex , y luego esperar en línea para la versión beta de la nube Plex .

Obviamente también puede subir sus vídeos a través de la interfaz web de Amazon o por medio de las aplicaciones de escritorio (que necesita los clientes de escritorio para archivos anteriores 2 GB).

Con todo lo que hace, se obtiene una nueva opción  Plex Cloud  cuando se conecte,  funcionando  de una manera muy similar a la creación de su propio servidor.  Plex colocara  las películas y programas en su casillero Amazon, y los organiza en una biblioteca para usted. Usted tendrá la opción  automáticamente de ver los episodios ordenados , unos tras otros  con las miniaturas y los metadatos extraídos de la web, y una interfaz intuitiva para el seguimiento de lo que está viendo y lo que todavía no ha visto.

Asimismo con un sencillo paso , Plex puede obtener  su biblioteca desde cualquier navegador web, así como a través de las aplicaciones oficiales para Android, iOS, Apple TV, PlayStation, Xbox, y casi todos los otros dispositivos de medios conocidos por el hombre.

plex

Google Drive

Google Drive le permite almacenar casi cualquier archivo que te guste en la nube, incluyendo los formatos comunes de video, que se ven  en las ventanas de estilo YouTube. Usted obtiene 15 GB de espacio de forma gratuita, que puede llegar hasta 1 TB por $ 9.99 al mes o 30 TB por $ 299.99 al mes (ver la lista de precios completa para más opciones).

Los archivos pueden ser cargados a través de la interfaz web o por medio de los clientes de escritorio para sistemas Windows y Mac. Aplicaciones para iOS y Android le permiten obtener en sus películas y programas desde cualquier lugar, y se puede sincronizar archivos sin conexión para la reproducción en dispositivos móviles, si usted tiene un largo vuelo o un fin de semana en el bosque planeado.

Google Drive carece de la interfaz de medios de estilo  intuitiva como Plex , y en realidad no esta construido para ser un clon de Netflix (por lo que no recuerda dónde se está haciendo en cada episodio y así sucesivamente). Dicho esto, se trata de Google, por lo que el almacenamiento en la nube y las características de clasificación son todos fáciles de usar y sólido como una roca en términos de estabilidad (que es poco probable conseguir los problemas de conexión).

La forma más fácil de utilizarlo es  configurando las carpetas para todas sus películas y programas y luego usar las capacidades de búsqueda de primer nivel de accionamiento para encontrar lo que quiere ver a continuación.

google.png

Dropbox

Dropbox, como Google Drive, no está configurado tampoco  para proporcionar una experiencia en la forma en que Plex lo hace , pero va a permitir reproducir sus películas y programas directamente desde la web. Si usted va a ir más allá de los 2 GB (que es el espacio se obtiene de forma gratuita ), es necesario desenbolsar $ 99 al año o $ 9.99 al mes para  1 TB.

Por supuesto Dropbox sirve  mucho más que para  la reproducción de sus archivos multimedia. Es una buena opción si ya se utiliza para la sincronización de archivos y copias de seguridad, y que fácilmente puede mantener su biblioteca sincronizada a través de múltiples máquinas sin trabajar mucho

Para ver sobre la marcha si biblioteca de medios  hay aplicaciones móviles para Android y iOS si va a estar sin Wi-Fi por un tiempo y luego se puede guardar fácilmente películas y programas para el almacenamiento local y verlas sin conexión.

Es la opción menos conveniente en nuestra lista para la creación de su propia servicio de streaming en la nube , pero es la mejor manera de mantener una biblioteca de medios de comunicación locales sincronizados en varios equipos y dispositivos.

!Incluso puede utilizar Dropbox para copia de seguridad de las bibliotecas de iTunes, así, listas de reproducción y de todo, si usted está dispuesto a ir a una cuenta Pro!.

dropbox.png

Fuente aqui

EasyEDA ofrece nuevo sistema para PCB e importación de DXF


En un post anterior  hablábamos del paquete easyEDA (Electronic Design Automation) que esta constituido por  herramientas diseñadas específicamente a proyectos y producción de sistemas electrónicos, abarcando desde la creación del circuito integrado hasta el desarrollo de placas de circuito impreso cuya peculiaridad es que su uso es completamente online( es decir  sin necesidad de instalar ningún software en su ordenador)  y ademas es una herramienta gratuita

Obviamente al estar  basada en la nube podremos crear directamente nuestros diseños de manera online desde cualquier equipo y ubicación  lo cual lo hace perfecto para trabajos colaborativos  . Esta herramienta está diseñada específicamente para proporcionar a los ingenieros electrónicos, educadores, estudiantes de ingeniería y aficionados a la electrónica una herramienta completa pero a su vez sencilla de manejar, y todo ello desde nuestro navegador web.

Durante los últimos 6 años, el equipo EasyEDA han estado buscando nuevas maneras de mejorar su herramienta del trabajo para ingenieros electrónicos, estudiantes y aficionados,  por lo que recientemente han  anunciado algunas grandes mejoras para la nueva versión de EasyEDA.

Nuevo sistema para PCB

Ahora, se puede probar la nueva página Orden PCB a través de https://easyeda.com/order

EasyEDA no sólo soporta   pedidos de placas  PCB directamente desde el Editor de PCB EasyEDA , también admite archivos Gerber de cualquier otra herramienta de EDA. Puede cargar Altium, Kicad, Águila, DipTrace,etc. a  archivos P-CAD Gerber a este enlace:

introducir descripción de la imagen aquí

Al mismo tiempo, apoyan hasta 16 capas BPC.

Ofrecen de hecho un tutorial sobre el pedido de PCB EasyEDA, consultehttps://easyeda.com/Doc/Tutorial/PCBOrderFAQ

Plantillas de pedido con su PCB

Una plantilla puede ayudar a soldar la placa PCB rápidamente. Para el montaje SMT eficiente y confiable  el uso de una plantilla es pues una necesidad.
EasyEDA puede proporcionar la opción de no reticular (o sin marco) y las plantillas marco.
La imagen de la derecha muestra una plantilla sin marco. Las  plantillas sin marco son más baratos y de menor peso (0,2 Kg) para que puedan ayudar a reducir los gastos de envío.

introducir descripción de la imagen aquí
dd

Las nuevas características del editor de EasyEDA

  1. No hay necesidad de configurar la anchura y la altura de la zona de trabajo pues  en todos los editores ya no tiene fronteras: ahora es interminable, por lo que es más fácil de apoyar diseños muy grandes y complejos de PCB.
  2. Mayor velocidad de respuesta para  hacerzoom, alejar o desplazarse . Se trata de una actualización de funciones grande para diseños complejos.
  3. Acciones de desplazamiento nuevas:la funcionalidad original de hacer clic derecho para mover el lienzo en cualquier lugar en las direcciones horizontal y vertical todavía funciona, pero las barras de desplazamiento de la zona de trabajo han sido sustituidos por dos nuevas acciones. Manteniendo pulsada la tecla SHIFT mientras se utiliza la función de rueda de desplazamiento del ratón se moverá (PAN), el lienzo en una dirección horizontal. Manteniendo pulsada la tecla CTRL mientras se utiliza la función de rueda de desplazamiento del ratón se moverá (PAN), el lienzo en una dirección vertical.

 

Consejos: EasyEDA ha eliminado la barra de desplazamiento por lo que tal vez necesite un poco de tiempo para adaptarse a la nueva interfaz de usuario.Use la tecla AZ de acceso directo para acercar y alejar la imagen. Usando  las teclas de las flechas puede ayudar a mover el lienzo, hacer uso de función de giro para ayudarle a mover el lienzo de forma rápida.

Importación DXF

La creación de la placa irregular o esquemas elaborados es más fácil en EasyEDA gracias al nuevo menú de importación DXF.

A veces cuando se está diseñando un PCB de un recinto  puede tener un perfil curvado o algunas otras características mecánicas inevitables que tienen que ser acomodadas, necesita una manera fácil de crear un borde de placa adecuado. La creación de un borde de placa como un archivo DXF necesitaba una herramienta de CAD 2D  de terceros   para hacer esto más fácil, pero no había manera de importar en EasyEDA.¡Hasta ahora!

Usted encontrará el menú * Importación DXF en el menú Archivo.

introducir descripción de la imagen aquí

Después de seleccionar el archivo * .dxf, se encuentra un cuadro de diálogo como se muestra en la siguiente imagen:

introducir descripción de la imagen aquí

EasyEDA ofrece dos cuadros de opción: unidad de DXF: (mm o pulgadas) y capa de PCB:donde se seleccionan los PCB capa que el dibujo importado se va a aplicar .

Después de hacer clic en el botón Importar, se encuentra el dibujo DXF colocado en la capa seleccionada de su lienzo PCB.

introducir descripción de la imagen aquí

Free Online Visor de Gerber

EasyEDA Gerber Visor es un visor de archivos Gerber RS-274X y archivos de perforación Excellon en línea.

Por favor, intente hacia fuera en https://gerber-viewer.easyeda.com/

introducir descripción de la imagen aquí

 

En resumen vemos que la herramienta ha mejorado ostensiblemente  permitiéndonos ahora  importar a EasyEDA otros diseños hechos con Altium, Eagle y KiCad, de esta forma no solo podremos guardar en la nube nuestros esquemas, sino también editarlos si fuera necesario. Además, otra característica destacada de EasyEDA es que los usuarios tienen acceso a módulos Open Source desarrollados por ingenieros electrónicos

Para guardar todos  nuestros proyectos obviamente nos tendremos que  registrar desde su página web,(simplemente nos piden una dirección de correo y  una contraseña de acceso al servicio, aunque si tiene una cuenta de Google podrás iniciar sesión directamente con dichos credenciales, de esta forma no será necesario el registro de una cuenta nueva)

Y por cierto ,si usted desea apoyar EasyEDA equipo, puede pedir sus placas  PCB a ellos, así como sugerir algunas nuevas características que le gustaría ver en futuras versiones.

Cómo limitar lo que Google sabe de nosotros


Muchos ríos de tinta  se gastan todos los días sobre  el inmenso poder que tiene Google ,gracias a que almacenan  todos los datos de la navegación, nuestros correos, posicionamiento  e incluso los vídeos que vemos .

En aras a  ayudar a ser mas trasparente por fin Google ha puesto a disposición de sus usuarios una  nueva herramienta para controlar  precisamente lo que guarda  Google para cada persona :se trata de My Activity, gracias a la cual  cualquier usuario  por fin ya puede  descubrir qué exactamente  Google  almacena de nuestra actividad  y ademas , y esto es lo realmente importante, poder controlarla .

 

google1

Con esta nueva plataforma web , se puede  mostrar  el registro  de nuestra actividad en la web , pudiendo ver un historial completo de las búsquedas que ha hecho (tanto de conceptos como de imágenes o en dentro de YouTube), los emails que ha leído o los accesos a Google Now -por citar solo algunas pocas acciones.

google2
Nos alegan que todos  estos datos se guardan para  hacer que servicios de Google nos sean mucho más útiles y recibamos, por ejemplo, más opciones de transporte público en Maps o resultados más rápidos en el buscador.

Como novedad ahora   toda esta gran cantidad de información almacenada personal , se puede ahora revisar concienzudamente ,  editarla  e incluso “borrar” todo aquello que no se  quiera que aparezca en nuestro historial.

 

En la web My activity  hay  un buscador en la zona superior y un menú de opciones a la izquierda,donde nos aparece  el menú mas interesante : hablamos del menú  “Control de tu actividad  ”

 

menus

A continuación, vamos a a  ver  los controles disponibles   en la herramienta para administrar dichos datos y editar nuestra actividad.

  • Actividad en la Web y en Aplicaciones : Guardar su actividad de búsqueda en aplicaciones y en navegadores para realizar búsquedas más rápidas y tener experiencias personalizadas en la Búsqueda, Maps, Now y otros productos de Google. Incluir el historial de navegación de Chrome y la actividad que realice en los sitios web y las aplicaciones que usen los servicios de Google. Tenga en cuenta que  si utiliza más de una cuenta a la vez, es posible que algunos datos se guarden en la cuenta predeterminada y otros en función de la cuenta con la que se este validado.
  • Historial de Ubicaciones:Crea un mapa privado de los lugares a los que va con los dispositivos en los que haya iniciado sesión para teóricamente proporcionar búsquedas mejoradas en mapas, rutas de desplazamientos y mucho más
  • Información de los dispositivo:Almacenar sus contactos, calendarios, aplicaciones y otros datos del dispositivo para mejorar su experiencia en Google.
  • Actividad de Voz y Audio:Ayuda a reconocer su voz y a mejorar el reconocimiento del habla almacenando sus entradas de voz y audio en su cuenta (por ejemplo, cuando dices “OK Google” para realizar una búsqueda de voz).
  • Historial de búsqueda de YouTube:Guardar las búsquedas que realice en YouTube para agilizar sus futuras búsquedas y mejorar sus recomendaciones.
  • Historial de reproducciones de YouTube:Le permite encontrar los vídeos de YouTube que ha visto recientemente con más facilidad y mejora sus recomendaciones.

Todas las opciones comentadas , bien se pueden desactivar pulsando sobre el botón azul   que aparece en el borde superior derecho  junto con el titulo .

El funcionamiento no puede ser mas minimalista: a la derecha activado el almacenamiento en Google del Historial  y a la izquierda desactivado

control

Ademas de controlar el registro de toda esta actividad , asimismo se nos permite  llegando casi al final de cada apartado administrar todos los eventos almacenados .

Lo primero que veremos es  un buscador general  y mas abajo  un filtro   y a continuación todas las entradas clasificadas temporalmente por bloques .

Como en muchas aplicaciones de Google ( al mas puro estilo androide) en la barra superior aparece tres puntitos verticales  que son el  acceso al menú de opciones para obtener mas detalles,eliminar esa entrada,etc

historial

Si  duda es una herramienta muy interesante y al margen del control lo cual en estos tiempos no es desdeñable por la gran perdida de privacidad  también estoy convencido nos puede ser útiles  en nuestro día ,por ejemplo si ir mas lejos al pasar del móvil , tableta  y al ordenador para ver una pagina o un vídeo que no recordamos y nos gustaría ver , etc.

Fuente https://myactivity.google.com/myactivity

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:

 

 

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 :camera:
  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.

Evento Developer Tour, ReConnect 2015


Hace un año el evento Connect() Microsoft inició un viaje de un nuevo Microsoft para desarrolladores, presentando  el futuro Open Source de .NET en  entornos no Microsoft,  como pueden ser  Linux y   hasta Mac.

La pieza angular  de este entorno lo constitute el nuevo entorno de desarrollo de Visual Studio, asi como la plataforma renovada  en nube tipo  IaaS constituida por Azure.

En cuanto a  herramientas destaca  una version de Visual Studio para programar en cualquier dispositivo y en cualquier Sistema operativo:  es decir no cerrado exclusivamente   a SO  Windows, lo cual es una autentica  buena noticia  para  todos  los desarrolladores que  usan  plataformas tan distintas  a Windows   como pueden ser Linux o Mac.

reconnect.PNG

Desde Microsoft Ibérica estan ofreciendo una serie de eventos presenciales, de la mano de los mejores profesionales de la comunidad, donde se  puede tener la posibilidad de conocer de primera mano las últimas novedades en desarrollo que se presentaron en el evento Connect de Nueva York.

Entre los contenidos  previstos   destaca el desarrollar sitios web modernos, interactivos y rápidos con ASP.NET, gracias  al uso de las novedades que trae Visual Studio 2015 asi como  conocer Visual Studio Code

Visual Studio Code Beta es la nueva herramienta gratuita de edición de código redefinida y optimizada para la compilación y depuración de aplicaciones web y en la nube modernas,que ademas encontrará es compatible con su plataforma favorita: Linux, OS X y Windows.

Una de las novedades de esta  nueva herramienta es las cobertura de más de 30 lenguajes  por el momento, resaltado de sintaxis y coincidencia de paréntesis. Gracias a la coloración y el resaltado de la sintaxis, así como a la coincidencia de paréntesis, Code es un excelente editor para todas las tareas de programación. Visual Studio Code es compatible con JavaScript, C#, C++, PHP, Java, HTML, R, CSS, SQL, Markdown, TypeScript, LESS, SASS, JSON, XML y Python, así como con muchos otros formatos de archivo comunes.

Tambien con estas sesiones pretenden dar a  conocer  las nuevas características que  ayudarán desplegar    y alojar en la nube de Microsoft  (Microsoft Azure) , que ademas también ha incorporado este año grandes novedades

 

Los eventos previstos  hasta final de año  son los siguientes:

 

Más información y Registro
Málaga, 25 de noviembre de 2015 Evento finalizado
Barcelona 3 de diciembre de 2015 Registro w
Sevilla, 10 de diciembre de 2015 Registro w
Madrid, 11 de diciembre de 2015 Registro w
Zaragoza, 16 de diciembre de 2015 Registro w
Logroño, 17 de diciembre de 2015 Registro w
Tenerife, 17 de diciembre de 2015 Registro w
Palma de Mallorca, 17 de diciembre de 2015 Registro w

Mas información aqui

Operando sobre un GNU/Linux mediante un navegador


eyeOS es una plataforma de nube privada con una interfaz de escritorio basada en la web, tambien  llamado “escritorio en la nube” por su similitud a un interfaz que  proporciona un escritorio completo desde la nube con gestión de archivos, herramientas de gestión de la información personal, herramientas colaborativas y aplicaciones de la compañía.

eyeOS es un proyecto iniciado en agosto del 2005 por Pau Garcia-Milà y Marc Cercós,cuya   primer hito fue la creación de un  nucleo propio  de nube privada  que lo ofrecieron libremente para que cualquier pudiera instalarlo y utilizarlo en sus servidores e intranets con Windows.

En marzo de 2006, abrieron el sitio eyeOS.info, un servicio gratuito online basado en su software original, adaptado para usarlo como un escritorio virtual en línea al que cualquiera pudiera acceder. El usuario puede almacenar cosas en él y usar las aplicaciones disponibles como un sistema operativo legítimo, desde cualquier parte del mundo y sin instalar software adicional.

Desde sus inicios como proyecto Open Source bajo licencia AGPL el producto ha ido avanzando y en 2012 cambió a un modelo de licencias privadas.

En el año 2014 Telefónica anunció la adquisición de eyeOS con el objetivo de reforzar en un futuro su oferta de servicios cloud móviles y fomentar el desarrollo de soluciones tecnológicas de software libre.

En este contexto,la tecnología de eyeOS permite tambien virtualizar no solo escritorios  Windows , tambien  escritorios completos Linux en formato VDI( Virtual Desktop  Interface ), accediendo simplemente desde un navegador HTML5 ,como pueden ser   Edge de  Microsoft  o Google Chrome.

Todas las  peticiones  se procesan en una granja OpenStack-KVM-Spice y otras muchas tecnologías OpenSource.

Como podeemos ver en el siguiente video , el rendimiento es sorprendente