Aplicaciones Biomédicas para Arduino/Netduino/Raspberry


El Sensor Shield e-Salud permite que usuarios de Arduino y Raspberry Pi para realizar aplicaciones biométricas y médica donde se necesita supervisión cuerpo mediante el uso de diferentes sensores 9: pulso, el oxígeno en la sangre (SpO2), flujo de aire (respiración), la temperatura corporal, electrocardiograma (ECG) , glucómetro, la respuesta galvánica de la piel (GSR – sudoración), presión arterial (esfigmomanómetro) y el paciente de posición (acelerómetro).

Esta información se puede utilizar para monitorizar en tiempo real el estado de un paciente o para obtener datos sensibles para ser posteriormente analizados para el diagnóstico médico.Información biométrica recopilada puede ser enviado de forma inalámbrica utilizando cualquiera de las 6 opciones de conectividad disponibles: Wi-Fi, 3G, GPRS, Bluetooth, ZigBee 802.15.4 y dependiendo de la aplicación.
Si el diagnóstico imágenes en tiempo real que se necesita una cámara se puede conectar al módulo 3G para enviar fotos y videos de la paciente a un centro de diagnóstico médico.
Los datos pueden ser enviados a la nube con el fin de realizar el almacenamiento permanente o visualizada en tiempo real mediante el envío de los datos directamente a un ordenador portátil o Smartphone. aplicaciones de iPhone y Android han sido diseñados con el fin de ver fácilmente la información del paciente.
e-Health_all_elements
Quick FAQ:
  • ¿Qué significa para contar con una plataforma de monitorización médica abierta?
    Hacks cocina quiere dar a la comunidad las herramientas necesarias para el desarrollo de nuevas aplicaciones de salud electrónica y productos. Queremos Arduino y Raspberry Pi Comunidad a utilizar esta plataforma como una prueba rápida del concepto y la base de una nueva era de productos de código abierto médicos.
  • ¿Cómo asegurar la privacidad de los datos biométricos enviado?
    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 HTTPS (segura) de protocolo que asegurar un punto a otro túnel de seguridad entre cada nodo sensor y el servidor web (este es el mismo método utilizado en las transferencias bancarias).
Luis_connected
e-Health Sensor Shield sobre Arduino Pi (izquierda) Frambuesa (derecha)

e-Health_all_elements

IMPORTANTE: La plataforma de sensores e-Salud ha sido diseñado por Hacks de cocina (la división de hardware abierto de Libelium) con el fin de ayudar a investigadores, desarrolladores y artistas para medir los datos biométricos de sensores para fines de experimentación, diversión y prueba. Hacks cocina ofrece una alternativa barata y abierta en comparación con las soluciones propietarias y precios prohibitivos del mercado médicas. Sin embargo, como la plataforma no tiene certificados médicos no pueden ser usados para controlar a los pacientes críticos que necesitan una supervisión precisa médico o aquellos cuyas condiciones debe ser medido con precisión para un diagnóstico profesional ulterior.

Para mas información ,pulse aquí

Anuncios

Enviando información de sensores a la nube


La telemedicina es el uso de las tecnologías de las telecomunicaciones y de la información con el fin de proporcionar atención clínica de la salud a distancia. Favorece la eliminación de las barreras de distancia y puede mejorar el acceso a los servicios médicos que no suelen estar siempre disponibles en lejanas comunidades rurales. También se utiliza para salvar vidas en cuidados críticos y situaciones de emergencia.

Aunque hubo precursores distantes de la telemedicina, que es esencialmente un producto de telecomunicaciones del siglo 20 y las tecnologías de la información. Estas tecnologías permiten la comunicación entre paciente y el personal médico con conveniencia y fidelidad, así como la transmisión de los médicos, la imagen y la salud informática de datos de un sitio a otro.

Sensores de la  plataforma eHealth permite compartir datos médicos con la nube, y realizar diagnóstico en tiempo real. Gracias a los módulos de comunicación puede enviar muchos datos a través de varios protocolos de transmisión

 

Wifi

Vamos a utilizar el módulo wifi Roving RN-171. Este módulo encaja en el zócalo XBee Shield de nuestra comunicación y permite conectar tu Arduino / escudo RasberryPi a una red WiFi.
e_health+placa
Example code
Wifi examples shows the way to communicate with the Arduino Wifi Demo Android and iPhone app.
Refer to Wifi tutorials (Arduino) (Raspberry) for more information.

Bluetooth

Módulos Bluetooth para Arduino / Netduino/Raspberry son capaces de estar conectados a la XBee Shield y obtener una comunicación serie entre el ordenador y una placa Arduino / RasberryPi a través de protocolo Bluetooth.
xbee2
Módulo Bluetooth para Arduino PRO soporta Serial Port Profile (SPP) para intercambiar datos con otros dispositivos. Este perfil permite crear conexiones a otro dispositivo usando el mismo perfil (p2p conexión). Se envía datos al dispositivo especificado. Este dispositivo es el que ha sido creado para la conexión.
 
Consulte tutoriales Bluetooth (Arduino) (Frambuesa) para obtener más información.

 

Zigbee / 802.15.4

El Arduino Xbee shield permite su Arduino / RasberryPi bordo para comunicarse de forma inalámbrica utilizando Zigbee.
xbee
Example code
This example shows the way to communicate with the Arduino using Zigbee protocol. Upload the next code:

Show Code

/*
 *  eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
 *
 *  Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 *  users to perform biometric and medical applications by using 9 different 
 *  sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 *  Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 *  Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 *  Patient Position (Accelerometer)."  
 *
 *  Explanation: This example shows the way to communicate with  
 *  the Arduino using ZigBee protocol. 
 *
 *  Copyright (C) 2012 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.
 *
 *  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 .
 *
 *  Version 0.1
 *  Author: Luis Martin & Ahmad Saad 
 */

#include
#include

char recv[128];
uint8_t cont = 0;

// Note : The Xbee modules must be configured previously.
// See the next link http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-xbee-shield

void setup()
{
Serial.begin(9600);

eHealth.initPulsioximeter();
eHealth.initPositionSensor();

//Attach the inttruptions for using the pulsioximeter.
PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
delay(1000);

}

void loop()
{

//1. Read from eHealth.
int airFlow = eHealth.getAirFlow();
float temperature = eHealth.getTemperature();
float conductance = eHealth.getSkinConductance();
float resistance = eHealth.getSkinResistance();
int BPM = eHealth.getBPM();
int SPO2 = eHealth.getOxygenSaturation();
uint8_t pos = eHealth.getBodyPosition();

Serial.print(int(airFlow)); Serial.print(“#”);
Serial.print(temperature); Serial.print(“#”);
Serial.print(int(BPM)); Serial.print(“#”);
Serial.print(int(SPO2)); Serial.print(“#”);
Serial.print(conductance); Serial.print(“#”);
Serial.print(int(resistance)); Serial.print(“#”);
Serial.print(int(pos)); Serial.print(“#”);
Serial.print(“\n”);

// Reduce this delay for more data rate
delay(250);
}

void check(){
cont=0; delay(500);
while (Serial.available()>0)
{
recv[cont]=Serial.read(); delay(10);
cont++;
}
recv[cont]=’\0′;
Serial.println(recv);
Serial.flush(); delay(100);
}

//Include always this code when using the pulsioximeter sensor
//=========================================================================
void readPulsioximeter(){

cont ++;

if (cont == 50) { //Get only one 50 measures to reduce the latency
eHealth.readPulsioximeter();
cont = 0;
}
}

NOTE: The Xbee modules must be configured previously. See the next link http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-xbee-shield
Refer to XBee tutorials (Arduino) (Raspberry) for more information.

GPRS

Cuatribanda GPRS para Arduino/Netduino Módulo /Raspberry (SIM900) ofrece conexión GPRS a la placa Arduino / cartón RasberryPi. Usted puede enviar sus datos a través de SMS o de llamadas perdidas no de tu Arduino/netduino a los dispositivos móviles … oa otro Arduino / netduino/RasberryPi conectado a este módulo.
e_health+placa_Verde
Example code
This example shows the way to send a text message with the corporal temperature using the GPRS module. Upload the next code:

Show Code

/*
 *  eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
 *
 *  Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 *  users to perform biometric and medical applications by using 9 different 
 *  sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 *  Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 *  Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 *  Patient Position (Accelerometer)."  
 *
 *  Explanation: This example shows the way to send a text message with 
 *  the corporal temperature using the GPRS module. 
 *
 *  Copyright (C) 2012 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.
 *
 *  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 .
 *
 *  Version 0.1
 *  Author: Luis Martin & Ahmad Saad 
 */

// For more information about the GPRS shield please see our tutorial
// in cooking-hacks web site. http://www.cooking-hacks.com

#include

// the pin to switch on the module (without press on button)
int pinModuleOn = 2;

// ********* is the number to call
char phoneNumber[]=”**********”;

void switchModule(){
digitalWrite(pinModuleOn,HIGH);
delay(2000);
digitalWrite(pinModuleOn,LOW);
}

void setup() {

// UART baud rate
Serial.begin(115200);
delay(2000);

// Sitches the module ON
// switchModulo();

for (int i=0;i < 5;i++){
Serial.println(“Push the button”);
delay(5000);
}
// Sets the SMS mode to text
Serial.println(“AT+CMGF=1”);
delay(100);
}

void loop(){

delay(100);
float temperature = eHealth.getTemperature();

delay(1500);
// send the SMS number
Serial.print(“AT+CMGS=\””);
Serial.print(phoneNumber);
Serial.println(“\””);
// the SMS body
while(Serial.read()!=’>’);
Serial.print(temperature);

delay(1000);
//sends ++
Serial.write(0x1A);
Serial.write(0x0D);
Serial.write(0x0A);
delay(5000);

}

Refer to GPRS tutorials (Arduino) (Raspberry) for more information.

3G

El nuevo escudo 3G para Arduino / Netduino/Rasberry permite la conectividad a alta velocidad WCDMA y HSPA celulares con el fin de hacer posible la creación de un nivel superior de interactividad proyectos en todo el mundo dentro de la nueva “Internet de las Cosas” era..
gps_e_health
e_health_con_conectores
Example code
This example how to send data using 3G shield and making a connection to a server. Upload the next code:

Show Code

/*
 *  eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
 *
 *  Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 *  users to perform biometric and medical applications by using 9 different 
 *  sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 *  Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 *  Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 *  Patient Position (Accelerometer)."  
 *
 *  Explanation: This example how to send data using 3G shield and 
 *  making a connection to a server. 
 *
 *  Copyright (C) 2012 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.
 *
 *  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 .
 *
 *  Version 0.1
 *  Author: Luis Martin & Ahmad Saad 
 */

// For more information about the 3G shield please see our tutorial
// in cooking-hacks web site. http://www.cooking-hacks.com

#include

char data[512];
char tosend[128];
int led = 13;
int onModulePin = 2; // the pin to switch on the module (without press on button)

int x = 0;

char name[20];

char server[ ]=”192.198.1.1″; //Your server IP address
char port[ ]=”5555″; // Your port.

void switchModule(){
digitalWrite(onModulePin,HIGH);
delay(2000);
digitalWrite(onModulePin,LOW);
}

void setup(){

Serial.begin(115200); // UART baud rate
delay(2000);
pinMode(led, OUTPUT);
pinMode(onModulePin, OUTPUT);
switchModule(); // switches the module ON

for (int i=0;i< 5;i++){
delay(5000);
}

Serial.println(“AT+CGSOCKCONT=1,\”IP\”,\”internetmas\””);
Serial.flush();
x=0;
do
{
while(Serial.available()==0);
data[x]=Serial.read();
x++;
} while(!(data[x-1]==’K’&&data[x-2]==’O’)); //waits for response “Network opened”

}

void loop()
{
float temperature = eHealth.getTemperature();
int longitud = sprintf(tosend,”%d”, temperature);

Serial.print(“AT+NETOPEN=\”TCP\”,”);
//Opens the socket with the type of protocol and the port
Serial.println(port);
Serial.flush();
x=0;

do
{
while(Serial.available()==0);
data[x]=Serial.read();
x++;
}
while(!(data[x-1]==’K’&&data[x-2]==’O’)); //waits for response “Network opened”

Serial.print(“AT+TCPCONNECT=\””); //Connects with the server
Serial.print(server);
Serial.print(“\”,”);
Serial.println(port);

Serial.flush();
while(Serial.read()!=’K’);

Serial.print(“AT+TCPWRITE=”);
Serial.println(longitud, DEC); //Sends TCP data
Serial.flush();

do
{
while (Serial.available() == 0) {};
//Serial.println(char(Serial.read()));
} while(Serial.read()!=’>’);

Serial.println(tosend);

x=0;

do
{
while(Serial.available()==0);
data[x]=Serial.read();
x++;
}
while(!(data[x-1]==’K’&&data[x-2]==’O’));

Serial.println(“AT+NETCLOSE”); //Opens the socket with the type of protocol and the port
Serial.flush();
while(Serial.read()!=’K’);

while(1);

}

Camera for Photo Diagnosis

Este módulo permite la conexión de una cámara para grabar video y tomar fotos. Una vez guardado el archivo de vídeo o la imagen se pueden enviar a un servidor FTP o FTPS como se verá más adelante. Las imágenes con tutorial módulo 3G.
 
Cámara para el escudo 3G
3G camera
Inserte la cámara con los contactos metálicos hacia arriba
3G camera
Example Code
Take photos is very easy. Upload the next code.

Show Code

/*
*  Copyright (C) 2012 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.
*
*  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 .
*
*  Version 0.1
*  Author: Alejandro Gállego
*/

int led = 13;
int onModulePin = 2; // the pin to switch on the module (without press on button)

int x = 0;

char name[20];

void switchModule(){
digitalWrite(onModulePin,HIGH);
delay(2000);
digitalWrite(onModulePin,LOW);
}

void setup(){

Serial.begin(115200); // UART baud rate
delay(2000);
pinMode(led, OUTPUT);
pinMode(onModulePin, OUTPUT);
switchModule(); // switches the module ON

for (int i=0;i < 5;i++){
delay(5000);
}

Serial.println(“AT+CCAMS”); //starts the camera
while(Serial.read()!=’K’);

Serial.println(“AT+CCAMSETD=640,480”); //sets VGA (640*480) resolution
while(Serial.read()!=’K’);

Serial.println(“AT+FSLOCA=0”); //stores the image file in the 3G module
while(Serial.read()!=’K’);

}

void loop(){

delay(1500);
while(Serial.available()!=0){
Serial.read();
}
Serial.println(“AT+CCAMTP”); //takes a picture, but not saved it
while(Serial.read()!=’K’);

Serial.println(“AT+CCAMEP”); // saves the picture into C:/Picture
Serial.flush();
while(Serial.read()!=’/’);
while(Serial.read()!=’/’);

x=0;
do{
while(Serial.available()==0);
name[x]=Serial.read();
x++;
}while(x < 19);

while(Serial.read()!=’K’);
Serial.println(name);

Serial.println(“AT+CCAME”); // stops the camera
while(Serial.read()!=’K’);

while(1);

}

Example picture 2: (Patient photo)
Snake bites occur when a snake bites the skin. They are medical emergencies if the snake is poisonous.
Sending images via 3g is a simple and rapid method for medical consultation
Refer to 3G tutorials (Arduino) (Raspberry) for more information.
Para saber más,pulse aquí

Visualizando datos en Arduino y Netduino


 


GLCD

La biblioteca de e-salud incluye funciones para gestionar una pantalla gráfica LCD para la visualización de datos. La mochila de serie gráfica LCD está soldada a la 128×64 pixel LCD gráfico y proporciona al usuario una interfaz serial simple.
Caracteristicas:
Voltaje: 5V – 7V DC
Corriente: 220mA (luz de fondo al 100%)
De entrada: 0-5V, 115.200 bps (ajustable), 8 bits de datos, 1 bit de parada, sin paridad
Conexión del GLCD
Es necesario conectar el dispositivo con las señales en la posición correcta. El cable rojo que alimenta el módulo muestra cómo conectarlo.
e_health+pantalla
pantalla2

Las medidas de los sensores se distribuye en tres pantallas que cambian al presionar el botón.

e-Health_button-01

En la primera pantalla podemos ver algunos valores como la temperatura, el pulso o el oxígeno.

pantalla1b

En la segunda pantalla se utiliza para la presentación de la onda de flujo de aire.

pantalla4

Cuando no se detecta la respiración, la pantalla se aconsejan de un RISQ de apnea.

pantalla3

La última pantalla recibe la onda del ECG.

pantalla5
Después de la tercera pantalla, si se presiona el botón de nuevo, volverá a la primera pantalla.
GLCD biblioteca
La biblioteca de la sanidad electrónica incluye todas las funciones necesarias para la gestión de la pantalla LCD y mostrar en tiempo real las medidas de sensores de datos. Para utilizar esta función, ante todo, debe incluir la biblioteca correspondiente.
 #include
Library functions:
  •  init() // Configure and initializes the LCD.
  •  InitValuesScreen() // Configure some parameters of the values screen.
  •  PrintValuesScreen() // It prints (refresh) the values of the sensors in the screen.
  •  InitECGScreen() // Configure some parameters of the ECG screen.
  •  printECGScreen() // It prints (refresh) the ECG wave in the LCD screen.
  •  initAirFlowScreen() //Configure some parameters of the AirFlow screen.
  •  PrintAirFlowScreen() // It prints (refresh) the AirFlow wave in the LCD screen.
Inicializar el LCD
Utilice la función de inicio en la configuración antes de empezar a usar la pantalla LCD.
Example
   {
    eHealthDisplay.init ();
    }
Los valores de la pantalla:
En esta pantalla se pueden ver algunos parámetros numéricos como el pulso, el oxígeno, la temperatura, amd una representación de la posición del cuerpo actual.
Inicialización
Esta pantalla debe ser inicializado con la siguiente función:
Example:
   {
    eHealthDisplay.initValuesScreen ();
    }
Obtención de datos
Para actualizar los valores de la LCD ejecutar la siguiente función.
Example
   {
    eHealthDisplay.printValuesScreen ();
    }
AirFlow pantalla:
En esta pantalla podemos ver el flujo de aire (respiración) de onda y el número de respiraciones por minuto. Esta pantalla incluye un asesor apnea cuando no respira.
Inicialización
Esta pantalla debe ser inicializado con la siguiente función:
Example:
   {
    eHealthDisplay.initAirFlowScreen ();
    }
Obtención de datos
Para actualizar los valores de la LCD ejecutar la siguiente función.
Example
   {
    eHealthDisplay.printAirFlowScreen ();
    }
ECGScreen:
Esta pantalla recibe la onda de electrocardiograma y mide la frecuencia de latido del corazón.
Inicialización
Esta pantalla debe ser inicializado con la siguiente función:
Example:
   {
    eHealthDisplay.initECGScreen ();
    }
Obtención de datos
Para actualizar los valores de la LCD ejecutar la siguiente función.
Example
   {
    eHealthDisplay.printECGScreen ();
    }
El pulsador:
La junta eHealth icludes un botón pulsador integrado para cambiar entre la pantalla o se puede utilizar un botón de lika purpuose general para cualquier aplicación. El botón pulsador se enruta al pin digital 4.
Example
Arduino
Sube el siguiente código para ver los datos en el GLCD:

 # Include
# Include
# Include

#define pushButton 4

uint8_t screenNumber = 1;
uint8_t buttonState;
uint8_t cont = 0;

void setup () {
Serial.begin(115200);
retardo (100);

//Configure and initializes the LCD.
eHealthDisplay.init();
retardo (100);
}

void loop () {

//Screen number one with the numerical sensor values and body position
//=========================================================================

eHealthDisplay.initValuesScreen();
retardo (100);

//Attach the inttruptions for using the pulsioximeter

PCintPort::attachInterrupt(6, readPulsioximeter, RISING);

while(screenNumber == 1) {
//It prints data sensor measures in the LCD.
buttonState = digitalRead(pushButton);
delay(10);

if(buttonState == 1) {
screenNumber++;
}

eHealthDisplay.printValuesScreen();
}

PCintPort::detachInterrupt(6);

//Screen number two wich represent the air flow wave
//=========================================================================

eHealthDisplay.initAirFlowScreen();

while( screenNumber == 2) {
buttonState = digitalRead(pushButton);
delay(10);

if(buttonState==1){
screenNumber++;
}

eHealthDisplay.printAirFlowScreen();
}

//Screen number three wich represent the ECG wave
//=========================================================================

eHealthDisplay.initECGScreen();

while( screenNumber == 3) {
buttonState = digitalRead(pushButton);
delay(10);

if(buttonState==1){
screenNumber++;
}

eHealthDisplay.printECGScreen();
}

screenNumber = 1;
delay(10);
}

//Include always this function for using the pulsioximeter sensor
//=========================================================================
void readPulsioximeter() {

cont ++;

if (cont == 50) {
//Get only one 50 measures to reduce the latency
eHealth.readPulsioximeter();
cont = 0;
}
}

El GLCD muestra la información de los nodos se envía, que contiene los datos de sensor recogidos.

KST: Real-time data viewing and plotting

KST es el más rápido en tiempo real a gran conjunto de datos de visualización y trazado herramienta disponible (usted puede estar interesado en algunos puntos de referencia) y tiene una funcionalidad integrada de análisis de datos. Es muy fácil de usar y contiene muchas potente incorporado en funciones y se puede ampliar con plugins y extensiones.
3-pics
KST está licenciado bajo la GPL, y es como tal libremente disponible para cualquier persona. Lo que es más, a partir de 2.0.x está disponible en todas las plataformas: Microsoft Windows, Linux, Mac OSX.
Antes de todo, usted tiene que instalar el programa KST en su PC. Puede descargar el programa desde la página web KST:
http://kst-plot.kde.org/
Vamos a utilizar KST para representar la onda ECG, flujo de aire y la respuesta galvánica de la piel.
Ejemplo de código
Este ejemplo es para el sistema operativo Linux. Se representan las diferentes olas y los datos medidos por el sensor plataforma e-Salud.
Puede encontrar más información acerca de cómo utilizar KST en este video tutorial.
Para comenzar a trabajar con los datos en tiempo real primero debe cargar el código apropiado en el Arduino.
Como vamos a trabajar con Linux vamos a utilizar la consola para guardar los datos en un archivo (. Txt).
Enchufe en el dispositivo, y ejecutar

 stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon 
  -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
14_
en la consola “A”.
Con esta orden se debe configurar el puerto ttyACM0.
A continuación, utilice el comando en la consola del mismo para crear el archivo de texto en el que se almacenarán los datos.
  tail-f / dev/ttyACM0> Desktop / test.txt
456_
Los programas de Arduino KST muestras están listas para enviar datos de forma continua cuando recibe una “C” y dejar de enviar cuando se recibe una “F”. Estos datos se enviarán por consola “B” con los comandos:
 echo 'C' > /dev/ttyACM0
  echo 'F' > /dev/ttyACM0
546_
7887_
Cconfiguración básica
Ahora con el archivo creado y actualizado con los datos recibidos, tenemos que abrir el programa KST.
Para configurar KST para cada ejemplo, tendremos que establecer parámetros comunes.
1) En la ventana emergente, seleccione el directorio en el txt. Creado anteriormente y pulse el botón Configurar.
Pantallazo_
2) El siguiente paso, es configurar la fuente de datos.
Pantallazo-1_
3) Seleccione los datos de medición. Los datos de campo / columna 2.

Pantallazo_

Pantallazo-1_

El paso final es diferente dependiendo de cada ejemplo.
ECG ejemplo en KST
En este ejemplo se configura el KST para mostrar un determinado período de tiempo x (x = 300). Estamos interesados sólo en los valores más actuales del ECG.

Pantallazo-4_Pantallazo-6_

ecg_measure
The Arduino code used in this program is presented next:
#Include

extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long time;

byte serialByte;
void setup () {
Serial.begin (9600);
Serial.println(“Starting…”);
}

void loop () {
while (Serial.available()>0){
serialByte=Serial.read();
if (serialByte==’C’){
while (1) {
fanalog0=eHealth.getECG();
// Use the timer0 => 1 tick every 4 us
time=(timer0_overflow_count << 8) + TCNT0;
// Microseconds conversion.
time=(time*4);
//Print in a file for simulation
Serial.print(time);
Serial.print(“;”);
Serial.println(fanalog0,5);

if (Serial.available()>0){
serialByte=Serial.read();
if (serialByte==’F’) break;
}
}
}
}
}

Respuesta Galvánica de la Piel ejemplo en KST
En el ejemplo de respuesta galvánica de la piel que está interesado en todos los datos desde el inicio de la medición. Vamos a configurar el KST para mostrar una onda con todos los datos.

Pantallazo-5_Pantallazo-6_

Pantallazo-2
Pantallazo2
The Arduino code used in this program is presented next:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks. 
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)."  
  *
 * In this example we read the value of the GSR sensor 
 * and print the GSR wave form in the KST .
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad 
  * /

# Include

extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long time;
byte serialByte;

void setup () {
Serial.begin (9600);
Serial.println(“Starting…”);
}

void loop () {
while (Serial.available()>0){
serialByte=Serial.read();

if (serialByte==’C’){
while (1) {
fanalog0=eHealth.getSkinConductance();
// Use the timer0 => 1 tick every 4 us
time=(timer0_overflow_count << 8) + TCNT0;
// Microseconds conversion.
time=time*4;
//Print in a file for simulation
Serial.print(time);
Serial.print(char(‘ ; ‘));
Serial.println(fanalog0,5);
if (Serial.available()>0){
serialByte=Serial.read();
if (serialByte==’F’) break;
}
}
}
}
}

Flujo de aire en el ejemplo KST
Podemos configurar el programa KST en este ejemplo de acuerdo con los datos que queremos Muestra (métodos anteriores).
breathing_measure
The Arduino code used in this program is presented next:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)."  
  *
 * In this example we read the value of the air flow sensor 
 * and print the air Flow wave form using KST.
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad 
  * /

# Include

extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long time;
byte serialByte;

void setup () {
Serial.begin (9600);
Serial.println(“Starting…”);
}

void loop () {
while (Serial.available()>0) {
serialByte=Serial.read();

if (serialByte==’C’){
while (1) {
fanalog0=eHealth.getAirFlow();
// Use the timer0 => 1 tick every 4 us
time=(timer0_overflow_count << 8) + TCNT0;
// Microseconds conversion.
time=time*4;
//Print in a file for simulation
Serial.print(time);
Serial.print(“;”);
Serial.println(fanalog0,5);
if (Serial.available()>0){
serialByte=Serial.read();
if (serialByte==’F’) break;
}
}
}
}
}

La consola serie

Todos los datos se pueden visualizar en el monitor serie de Arduino / RasberryPi utilizando el siguiente programa de consola serie.
Cargar el programa eHealth_SerialMenu ejemplo y abrir el monitor serie de Arduino IDE.
En el menú principal podemos encontrar todos los sensores de salud electrónica. Mediante el envío de un comando para el puerto serie que se puede seleccionar uno de ellos.
NOTA: La medición de la glucosa no se ha aplicado en este ejemplo porque ambos procesos utilizan UART comunicación y puede causar un mal funcionamiento
MainMenu
Para ver las medidas del sensor, envía el comando correspondiente y pulse la tecla Intro.
Puede volver al menú principal mediante el envío de la orden de “B”.
ExitCommand
Ejemplo
Arduino
The Arduino code used in this program is presented next:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)." 
  *
 * In this example we have used the serial monitor like a programed
 * console where we can choose the sensor we want to view.  *   
  * 
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martín & Ahmad Saad
  * /

# Include
# Include

char serialByte;
uint8_t state = 0;
uint8_t cont = 0;

float parameter = 0.098;

void setup ()
{
Serial.begin(115200);
initScreen();
retardo (100);
}

void loop ()
{
state = 0;

while (Serial.available()>0){
serialByte=Serial.read();

if ((serialByte==’A’) || (serialByte == ‘a’)){ //Airflow sensor
airFlowMenu();
airFlowBucle();

} else if ((serialByte==’S’) || (serialByte == ‘s’)){
skinSensorMenu();
skinSensorBucle();

} else if ((serialByte==’E’) || (serialByte == ‘e’)){
ECGMenu();
ECGBucle();

} else if ((serialByte==’P’) || (serialByte == ‘p’)){
pulsioximeterMenu();
pulsioximeterBucle();

} else if ((serialByte==’B’) || (serialByte == ‘b’)){
bodyPositionMenu();
bodyPositionBucle();

} else if ((serialByte==’T’) || (serialByte == ‘t’)){
temperatureMenu();
temperatureBucle();

} else if ((serialByte==’N’) || (serialByte == ‘n’)){
BloodPressureMenu();
BloodPressureBucle();
}
}
}

void initScreen(void)
{
printLogoEhealth();
retardo (100);
mainMenu();
}

void mainMenu(void)
{
lineFeed(); Serial.print(F(” ——–> EHEALTH MENU OPTIONS <——–“)); lineFeed(); lineFeed();

initialSpace(); Serial.print(F(“A : AirFlow sensor options”)); lineFeed();
initialSpace(); Serial.print(F(“S : Skin sensor options”)); lineFeed();
initialSpace(); Serial.print(F(“E : ECG sensor options”)); lineFeed();
initialSpace(); Serial.print(F(“P : Pulsioximeter sensor options”)); lineFeed();
initialSpace(); Serial.print(F(“B : Body position sensor options”)); lineFeed();
initialSpace(); Serial.print(F(“T : Temperature sensor options”)); lineFeed();
initialSpace(); Serial.print(F(“N : Blood Pressure sensor options”));lineFeed();
}

void airFlowMenu(void)
{
lineFeed(); Serial.print(F(“——–> AIRFLOW MENU OPTIONS <——–“)); lineFeed(); lineFeed();
initialSpace(); Serial.print(F(“W : Wave form”)); lineFeed();
initialSpace(); Serial.print(F(“V : Analogic value”)); lineFeed();
initialSpace(); Serial.print(F(“B : BACK MAIN MENU”)); lineFeed();
}

void airFlowBucle(void) {
while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’W’) || (serialByte == ‘w’)){ //Airflow sensor
while (1) {
serialByte=Serial.read();
eHealth.airFlowWave(eHealth.getAirFlow());

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
airFlowMenu();
break;
}
}
} else if ((serialByte==’V’) || (serialByte == ‘v’)){
while (1) {
serialByte=Serial.read();
Serial.print(F(” Airflow analogic value : “));
Serial.println(eHealth.getAirFlow());
delay(20);
if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
airFlowMenu();
break;
}
}
} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();
}

void skinSensorMenu(void)
{
lineFeed(); Serial.print(F(“——–> SKIN SENSOR MENU OPTIONS <——–“)); lineFeed(); lineFeed();
outputMenu();
}

void skinSensorBucle(void) {
while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’S’) || (serialByte == ‘s’)){
while (1) {

lineFeed();

serialByte=Serial.read();
float conductance = eHealth.getSkinConductance();
long resistance = eHealth.getSkinResistance();
float conductanceVoltage = eHealth.getSkinConductanceVoltage();

if (conductance == -1) {
Serial.println(” No patient connection”);
} Else {

Serial.print(F(” Skin conductance value : “));
Serial.println(conductance);

Serial.print(F(” Skin resistance value : “));
Serial.println(resistance);

Serial.print(F(” Skin conductance value in volts: “));
Serial.println(conductanceVoltage);

retardo (500);
}

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
skinSensorMenu();
break;
}
}

} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();
}

void ECGMenu(void) {
lineFeed(); Serial.print(F(“——–> ECG MENU OPTIONS <——–“)); lineFeed(); lineFeed();
outputMenu();
}

void ECGBucle(void) {
while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’S’) || (serialByte == ‘s’)){
while (1) {

lineFeed();
serialByte=Serial.read();

retardo (500);

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
ECGMenu();
break;
}
}
} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();
}

void pulsioximeterMenu(void)
{
lineFeed(); Serial.print(F(“——–> PULSIOXIMETER MENU OPTIONS <——–“)); lineFeed(); lineFeed();
outputMenu();
}

void pulsioximeterBucle(void)
{
//Attach the interruptions for using the pulsioximeter.
PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
eHealth.initPulsioximeter();

while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’S’) || (serialByte == ‘s’)){
while (1) {

//eHealth.readPulsioximeter();

lineFeed();
serialByte=Serial.read();
Serial.print(“PRbpm : “);
Serial.print(eHealth.getOxygenSaturation());

Serial.print(” % SPo2 : “);
Serial.print(eHealth.getBPM());

Serial.print(“\n”);
retardo (500);

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
pulsioximeterMenu();
break;
}
}
} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();

PCintPort::detachInterrupt(6);
}

void bodyPositionMenu(void)
{
lineFeed(); Serial.print(F(“——–> BODY POSTITIONMENU OPTIONS <——–“)); lineFeed(); lineFeed();
outputMenu();
}

void bodyPositionBucle(void)
{
while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’S’) || (serialByte == ‘s’)){
while (1) {

lineFeed();
serialByte=Serial.read();

Serial.print(“Current position : “);
uint8_t position = eHealth.getBodyPosition();
eHealth.printPosition(position);
retardo (100);

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
bodyPositionMenu();
break;
}
}
} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();
}

void temperatureMenu(void)
{
lineFeed(); Serial.print(F(“——–> TEMPERATURE MENU OPTIONS <——–“)); lineFeed(); lineFeed();
outputMenu();
}

void temperatureBucle(void)
{
while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’S’) || (serialByte == ‘s’)){
while (1) {

lineFeed();
serialByte=Serial.read();

float temperature = eHealth.getTemperature();
Serial.print(“Temperature (ºC): “);
Serial.println(temperature, 2);

delay (1000);

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
temperatureMenu();
break;
}
}
} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();
}

void BloodPressureMenu(void)
{
lineFeed(); Serial.print(F(“——–> BLOOD PRESSURE MENU OPTIONS <——–“)); lineFeed(); lineFeed();
outputMenu();
}

void BloodPressureBucle()
{
while (state == 0) {
while (Serial.available()>0){
serialByte=Serial.read();
if ((serialByte==’S’) || (serialByte == ‘s’)){
while (1) {

lineFeed();
serialByte=Serial.read();
Serial.println(“Press On/Off button please…”);

eHealth.initBloodPressureSensor(parameter);

Serial.println(“****************************”);
Serial.print(“Systolic blood pressure value : “);
Serial.println(eHealth.getSystolicPressure());

Serial.println(“****************************”);
Serial.print(“Diastolic blood pressure value : “);
Serial.println(eHealth.getDiastolicPressure());
retardo (3000);

if ((serialByte== ‘B’) || (serialByte == ‘b’)) {
BloodPressureMenu();
break;
}
}
} else if ((serialByte==’B’) || (serialByte == ‘b’)){
state = 1;
}
}
}
mainMenu();
}

void outputMenu(void) {
initialSpace(); Serial.print(F(“S : Serial output value”)); lineFeed();
initialSpace(); Serial.print(F(“B : BACK MAIN MENU”)); lineFeed();
}

void printLogoEhealth(void)
{
starLine();
starPrint(); blank(); HLeterOne(); blank(); blank(); blank(); tLeterOne(); hLeterOne(); starPrint(); lineFeed();
starPrint(); eLeterTwo(); HLeterTwo(); eLeterTwo(); aLeterTwo(); lLeterTwo(); tLeterTwo(); hLeterTwo(); starPrint(); lineFeed();
starPrint(); eLeterThree(); HLeterThree(); eLeterThree(); aLeterThree(); lLeterThree(); tLeterThree(); hLeterThree(); starPrint(); lineFeed();
starPrint(); eLeterFour(); HLeterFour(); eLeterFour(); aLeterFour(); lLeterFour(); tLeterFour(); hLeterFour(); starPrint(); lineFeed();
starPrint(); eLeterFive(); HLeterFive(); eLeterFive(); aLeterFive(); lLeterFive(); tLeterFive(); hLeterFive(); starPrint(); lineFeed();
starPrint(); eLeterSix(); HLeterSix(); eLeterSix(); aLeterSix(); lLeterSix(); tLeterSix(); hLeterSix(); starPrint(); lineFeed();
starLine();
}

void eLeterTwo(void) { Serial.print(F(” _____ “)); }
void eLeterThree(void) { Serial.print(F(“| __ | “)); }
void eLeterFour(void) { Serial.print(F(“| ___| “)); }
void eLeterFive(void) { Serial.print(F(“| |___ “)); }
void eLeterSix(void) { Serial.print(F(“|_____| “)); }

void HLeterOne(void) { Serial.print(F(” _ _ “)); }
void HLeterTwo(void) { Serial.print(F(“| | | | “)); }
void HLeterThree(void) { Serial.print(F(“| |__| | “)); }
void HLeterFour(void) { Serial.print(F(“| __ | “)); }
void HLeterFive(void) { Serial.print(F(“| | | | “)); }
void HLeterSix(void) { Serial.print(F(“|_| |_| “)); }

void aLeterTwo(void) { Serial.print(F(” ______ “)); }
void aLeterThree(void) { Serial.print(F(“| | “)); }
void aLeterFour(void) { Serial.print(F(“| {} | “)); }
void aLeterFive(void) { Serial.print(F(“| __ | “)); }
void aLeterSix(void) { Serial.print(F(“|_| |_| “)); }

void lLeterTwo(void) { Serial.print(F(” _ “)); }
void lLeterThree(void) { Serial.print(F(“| | “)); }
void lLeterFour(void) { Serial.print(F(“| | “)); }
void lLeterFive(void) { Serial.print(F(“| |____ “)); }
void lLeterSix(void) { Serial.print(F(“|______|”)); }

void tLeterOne(void) { Serial.print(F(” _ “));}
void tLeterTwo(void) { Serial.print(F(” _| |__ “)); }
void tLeterThree(void) { Serial.print(F(“(_ __) “)); }
void tLeterFour(void) { Serial.print(F(” | | “)); }
void tLeterFive(void) { Serial.print(F(” | |__ “)); }
void tLeterSix(void) { Serial.print(F(” |____) “)); }

void hLeterOne(void) { Serial.print(F(” _ “));}
void hLeterTwo(void) { Serial.print(F(“| | “)); }
void hLeterThree(void) { Serial.print(F(“| |___ “)); }
void hLeterFour(void) { Serial.print(F(“| _ | “)); }
void hLeterFive(void) { Serial.print(F(“| | | | “)); }
void hLeterSix(void) { Serial.print(F(“|_| |_| “)); }

void blank(void) { Serial.print(F(” “));}

void initialSpace(void)
{
Serial.print(F(” “));
}

void starPrint(void)
{
Serial.print(F(“* “));
}

void lineFeed(void)
{
Serial.print(F(“\n”));
}

void starLine(void)
{
for (int i = 0; i< 63; i++)
{
Serial.print(F(“*”));
}
lineFeed();
}

int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v – (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

//Include always this code for using the pulsioximeter sensor
//=========================================================================
void readPulsioximeter(){

cont ++;

if (cont == 30) { //Get only one of 25 measures to reduce the latency
eHealth.readPulsioximeter();
cont = 0;
}
}

Upload the code and watch the Serial monitor.

SmartPhone Application

ehealth_icon_op3
The wifi module may perform direct communications with iPhone and Android devices without the need of an intermediate router by creating an Adhoc network between them.
We have developed the application e-Health Sensor Plattform, for both iPhone and Android platforms. The application may be also downloaded from the official App markets or from the Libelium website for free: http://www.cooking-hacks.com/apps
Official app markets URL’s:
ehealth_icon_op3 ehealth_icon_op3
Instalación:
a) Download the application from App Store:
  • From the iPhone, go to App Store. Go to Search screen and search “e-Health Sensor Plattform”.
  • Select e-Health app. Press FREE button, and then INSTALL button.
  • Accept the rights and then the app will appear in your iPhone screen.

You can do the same from the Computer with iTunes. Open iTunes and search “e-Health Sensor Plattform”: https://itunes.apple.com/us/app/e-health-sensor-platform/id581953525

  • Save the app in iTunes and synchronize it with your iPhone or iPod.

 

b) Download the application (e-Health.ipa) from the Libelium website: http://www.libelium.com/apps
  • Then double click on the icon, or right click and open with iTunes.
  • Inside iTunes, on the left panel, click on DEVICES->Your Device.
  • Select on the top “Apps”, and select Sync Apps. Drag into the desired screen e-Health app.
Once installed, the app appears in your iPhone/iPod screen.
The use of the app is very simple, first you have to connect to one of the Arduino nodes selecting it in Settings->Wi-Fi, and then launch the application.
To connect to the network created by the wifi module of Arduino: Go to Settings->Wi-Fi and select iPHONE_ADHOC .
iphone_app
Once connected, you can launch the App.
iphone_appiphone_app
The App shows the information the nodes are sending which contains the sensor data gathered.
The first tab “Charts” shows:
  • Respiratory rate chart
  • Electrocardiogram: is necessary to correctly set the delay between frames for the correct measurement of electrocardiogram
The “Current data” tab, shows data that is in continuous change:
  • Temperatura
  • Pulso
  • Oxígeno
  • Conductividad
  • Resistencia
  • Flujo de aire
iphone_appiphone_app
The “Tests” tab shows the information about:
  • Systolic Pressure
  • Diastolic Pressure
  • Glucometer
Finally, in the “Movement” tab shows the position of the body.
iphone_app
NOTE: The measurement of glucose has not been implemented in this example because both processes use UART communication and can cause malfunction
Ejemplo
Arduino
The Arduino code used in this program is presented next:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)."  
  *
 * Explanation: This example shows the way to communicate with  
 * the Arduino Wifi Demo iPhone app. 
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad 
  * /

# Include
# Include

char recv[256];
float parameter = 0.098;
uint8_t cont = 0;

void setup () {

//eHealth.readGlucometer();
Serial.begin (9600);
eHealth.initPulsioximeter();
eHealth.initPositionSensor();
}

void loop () {

Serial.print(“$$$”);
marcar ();

/ / 1. Configure the transport protocol (UDP, TCP, FTP, HTTP…)
Serial.print(“set ip 3\r”); check();
/ / 2. Configure the way the modules will resolve the IP address.
Serial.print(“set id 2\r”); check();
/ / 3. Configure how to connect the AP.
Serial.print(“set wa 6\r”); check();
// 3.1 Sets the name of the ADhoc network.
Serial.print(“set ws iPHONE_ADHOC\r”); check();
// 3.2 Sets the channel of the ADhoc network
Serial.print(“set wc 6\r”); check();

Serial.print(“set wj 4\r”); check();
Serial.print(“save\r”); check();
Serial.print(“exit\r”); check();
Serial.print(“$$$”); check();
// Configures UDP host and ports.
Serial.print(“set ih 255.255.255.255\r”); check();
Serial.print(“set ir 12345\r”); check();
Serial.print(“set il 2000\r”); check();
// Checks if everything is Ok, even if It’s correctly connected.

// Exits from command mode, and then the UDP messages
// can be sent and received.
Serial.print(“exit\r”);
marcar ();

//Attach the inttruptions for using the pulsioximeter.
PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
delay (1000);

while (1) {

eHealth.initBloodPressureSensor(0.1);

//1. Read from eHealth.
int airFlow = eHealth.getAirFlow();
float temperature = eHealth.getTemperature();
float conductance = eHealth.getSkinConductance();
float resistance = eHealth.getSkinResistance();
float conductanceVol = eHealth.getSkinConductanceVoltage();
int BPM = eHealth.getBPM();
int SPO2 = eHealth.getOxygenSaturation();
uint8_t pos = eHealth.getBodyPosition();
int syst = eHealth.getSystolicPressure();
int diast = eHealth.getDiastolicPressure();
float ECG = eHealth.getECG();
//uint8_t glucose = eHealth.glucoseDataVector[0].glucose;

/ / 2. Send data to the Android smartphone
Serial.print(int(airFlow)); Serial.print(“#”);
Serial.print(ECG); Serial.print(“#”);
Serial.print(temperature); Serial.print(“#”);
Serial.print(int(BPM)); Serial.print(“#”);
Serial.print(int(SPO2)); Serial.print(“#”);
Serial.print(conductance); Serial.print(“#”);
Serial.print(int(resistance)); Serial.print(“#”);
Serial.print(int(airFlow)); Serial.print(“#”);
Serial.print(syst); Serial.print(“#”);
Serial.print(diast); Serial.print(“#”);
Serial.print(int(0)); Serial.print(“#”);
Serial.print(int(pos)); Serial.print(“#”);
Serial.print(“\n”);

// Reduce this delay for more data rate
retardo (100);
}

}

//=========================================================================

void check(){
cont=0;
retardo (500);
while (Serial.available()>0)
{
recv[cont]=Serial.read();
delay(10);
cont + +;
}
recv[cont]=’\0′;
Serial.println(recv);
Serial.flush ();
retardo (100);
}

//Include always this code when using the pulsioximeter sensor
//=========================================================================
void readPulsioximeter(){

cont ++;

if (cont == 50) { //Get only one 50 measures to reduce the latency
eHealth.readPulsioximeter();
cont = 0;
}
}

Instalación:
a) Download the application from Android Market:
  • From the Android device, go to Android Market.
  • Search “” or “” and press enter
b) Download the application () from Libelium website: http://www.libelium.com/apps
  • Insert it to the SD card of your Android device.
  • Then explore the SD card in your Android device and install the application. You can explore the SD card with “Astro”, “ES Explora”, or “File Explorer” applications.
Once installed, the app appears in your device screen.
The use of the app is very simple, first you have to create an AP from your Android device and then set Waspmote to connect to it.
To create the AP from the Android device:
Go to Settings->Tethering & Portable Hotspot or Settings->Wifi-> My Wifi Zone (depending of the version of mobile).
android_app

Then configure the WLAN hotspot (name= ANDROID, Security= Open).

android_app
Finally, enable Portable WLAN hotspot (or My Wifi Zone), and Arduino will connect to the Android device. Once connected, you can launch the e-Health App.
android_appandroid_app
The App shows the information the nodes are sending which contains the sensor data gathered.
The first tab “Charts” shows:
  • Respiratory rate chart
  • Electrocardiogram: is necessary to correctly set the delay between frames for the correct measurement of electrocardiogram
The “Current data” tab, shows data that is in continuous change:
  • Temperatura
  • Pulso
  • Oxígeno
  • Conductividad
  • Resistencia
  • Flujo de aire
android_appandroid_app

The “Tests” tab shows the information about:
  • Systolic Pressure
  • Diastolic Pressure
  • Glucometer
Finally, in the “Movement” tab shows the position of the body.
android_app
NOTE: The measurement of glucose has not been implemented in this example because both processes use UART communication and can cause malfunction
Ejemplo
Arduino
The Arduino code used in this program is presented next:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)."  
  *
 * Explanation: This example shows the way to communicate with  
 * the Arduino Wifi Demo Android app. 
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad 
  * /

# Include
# Include

char recv[128];
float parameter = 0.098;
uint8_t cont = 0;

void setup ()
{
Serial.begin (9600);

eHealth.initPulsioximeter();
eHealth.initPositionSensor();

//Attach the inttruptions for using the pulsioximeter.
PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
delay (1000);

}

void loop ()
{
while (Serial.available()>0) {}
// Enters in command mode
Serial.print(“$$$”); check();
// Sets DHCP and TCP protocol
Serial.print(“set ip dhcp 1\r”); check();
Serial.print(“set ip protocol 1\r”); check();
// Configures the way to join the network AP
Serial.print(“set wlan join 0\r”); check();
Serial.print(“join ANDROID\r”); check();

Serial.print(“set ih 255.255.255.255\r”); delay(1000);

Serial.print(“set ir 12345\r”); check();
Serial.print(“set il 2000\r”); check();
Serial.print(“exit\r”); check();

while (1) {

eHealth.initBloodPressureSensor(0.098);

//1. Read from eHealth.
int airFlow = eHealth.getAirFlow();
float temperature = eHealth.getTemperature();
float conductance = eHealth.getSkinConductance();
float resistance = eHealth.getSkinResistance();
float conductanceVol = eHealth.getSkinConductanceVoltage();
int BPM = eHealth.getBPM();
int SPO2 = eHealth.getOxygenSaturation();
uint8_t pos = eHealth.getBodyPosition();
int syst = eHealth.getSystolicPressure();
int diast = eHealth.getDiastolicPressure();
float ECG = eHealth.getECG();
//uint8_t glucose = eHealth.glucoseDataVector[0].glucose;

//Data sensor must be sent in this order to mobile android application
Serial.print(int(airFlow)); Serial.print(“#”);
Serial.print(ECG); Serial.print(“#”);
Serial.print(syst); Serial.print(“#”);
Serial.print(diast); Serial.print(“#”);
Serial.print(int(0)); Serial.print(“#”); //Glucose is not implemented yet
Serial.print(temperature); Serial.print(“#”);
Serial.print(int(BPM)); Serial.print(“#”);
Serial.print(int(SPO2)); Serial.print(“#”);
Serial.print(conductance); Serial.print(“#”);
Serial.print(int(resistance)); Serial.print(“#”);
Serial.print(int(airFlow)); Serial.print(“#”);
Serial.print(int(pos)); Serial.print(“#”);
Serial.print(“\n”);

// Reduce this delay for more data rate
delay(250);
}
}

void check(){
cont=0; delay(500);
while (Serial.available()>0)
{
recv[cont]=Serial.read(); delay(10);
cont + +;
}
recv[cont]=’\0′;
Serial.println(recv);
Serial.flush(); delay(100);
}

//Include always this code when using the pulsioximeter sensor
//=========================================================================
void readPulsioximeter(){

cont ++;

if (cont == 50) { //Get only one 50 measures to reduce the latency
eHealth.readPulsioximeter();
cont = 0;
}
}

Para más informacion,pulse aquí

Sensor de posicion corporal para Arduino y Netduino


 

Características del sensor de posición

El sensor de posición del paciente (Acelerómetro) supervisa cinco posiciones diferentes de pacientes (de pie / sentado, en decúbito supino, prono, izquierda y derecha).
En muchos casos, es necesario supervisar las posiciones del cuerpo y movimientos realizados a causa de su relación con enfermedades particulares (es decir, apnea del sueño y el síndrome de las piernas inquietas). El análisis de los movimientos durante el sueño también ayuda a la hora de determinar la calidad del sueño y los patrones de sueño irregulares. El sensor de posición del cuerpo también podría ayudar a detectar desmayos o caídas de personas mayores o personas con discapacidad.
pulsometro_pecho_presentacion
Sensor de Posición del cuerpo eHealth utiliza un acelerómetro de triple eje para obtener la posición del paciente.
Caracteristicas:
1,95 V a 3,6 V de tensión de alimentación
1,6 V a 3,6 V de tensión interfaz
± 2g / ± 4g / ± 8g de forma dinámica a gran escala seleccionable
Este acelerómetro se embala con funciones integradas con opciones programables por el usuario flexible, configurable a dos acelerómetro pins.The interrupción tiene seleccionables por el usuario escalas completas de ± 2g / ± 4g / ± 8g con datos filtrados de paso alto, así como los datos no filtrados disponible en tiempo real .
Posiciones del cuerpo:

body_positions

Conexión del sensor
Lo primero que vamos a hacer con el módulo para conectar los puentes en la posición correcta. En este caso, los puentes tienen que ajustar en posición de puerta de enlace POS.
El sensor de posición del cuerpo tiene sólo una manera sencilla y de conexión. Conecte el cable de cinta con el sensor de posición del cuerpo y la junta de e-Salud como se muestra en la imagen de abajo.conectando_pulsometro_pecho
elementos_pulsometro
e_health+pulsometro_pecho
Coloque la cinta alrededor del pecho y el conector colocado abajo
luis1
Funciones de biblioteca
La biblioteca de la salud electrónica permite una forma de programación simple. Con una simple función que podemos obtener la posición del paciente y mostrarla en el monitor de serie del Arduino / RasberryPi o en el GLCD.
Inicialización del sensor
Antes de comenzar a utilizar el sensor, tenemos que inicializar algunos parámetros. Utilice la siguiente función para configurar el sensor.
Example:
   {
  eHealth.initPositionSensor ();
  }
Obtención de datos
Las funciones siguientes devuelven el valor a que representan la posición corporal almacenada en variables privadas de la clase de e-Salud.
Example:
   {
   posición uint8_t eHealth.getBodyPosition = ();
  }
La posición de la pacient
1 == posición supina.
2 == decúbito lateral izquierdo.
3 == Rigth decúbito lateral.
4 == posición prona.
5 == permanezca sentado o de posición.
impresión de datos
Para representar los datos de una manera fácil en el monitor de Arduino / RasberryPi serial, e-salud biblioteca, incluye una función de impresión.
Ejemplo:
  {
  Serial.print("Current position : ");
  uint8_t position = eHealth.getBodyPosition(); 
  eHealth.printPosition(position);  
 }
Arduino
Sube el siguiente código para ver los datos en el monitor serie:.
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)." 
  *
 * In this example with the body position sensor we measure 
 * the current body position of the patient and show it in the serial
 * monitor.
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad
  * /

# Include

void setup () {

Serial.begin(115200);
eHealth.initPositionSensor();
}

void loop () {

Serial.print(“Current position : “);
uint8_t position = eHealth.getBodyPosition();
eHealth.printPosition(position);

Serial.print(“\n”);
delay(1000); // wait for a second.
}

Sube el código y ver el monitor.Here serie es la salida utilizando el terminal USB Arduino IDE puerto serie:
Ejemplo_BodyPosition_
Raspberry Pi
En desarrollo
Mobile App
La aplicación muestra la información de los nodos se envía, que contiene los datos de sensor recogidos. aplicación de Smartphone
iphone_6
GLCD
El GLCD muestra la información de los nodos se envía, que contiene los datos de sensor recogidos. GLCD
GLCD
Para saber más ,pulsa  aquí

Sensores GSR para Arduino/Netduino/Raspberry


 

Conductancia de la piel, también conocida como la respuesta galvánica de la piel (GSR) es un método de medición de la conductividad eléctrica de la piel, que varía con su nivel de humedad. Esto es de interés porque las glándulas sudoríparas son controlados por el sistema nervioso simpático, por lo que los momentos de emoción fuerte, cambie la resistencia eléctrica de la piel. Conductancia de la piel se utiliza como una indicación de excitación psicológica o fisiológica, el sensor de respuesta galvánica de la piel (GSR – sudoración) mide la conductancia eléctrica entre 2 puntos, y es esencialmente un tipo de ohmímetro.
velcro
gsr
En el método de respuesta conductancia de la piel, la conductividad de la piel se mide en dedos de la palma de la mano. El principio o la teoría de funcionamiento del sensor de respuesta galvánica es para medir la resistencia eléctrica de la piel basado en el sudor producido por el cuerpo. Cuando alto nivel de sudoración se lleva a cabo, la resistencia eléctrica de la piel cae. Una piel secadora registra resistencia mucho mayor. La conductancia de la piel de respuesta del sensor mide el reflejo psico galvánico del cuerpo. Emociones como la excitación, estrés, choque, etc puede dar lugar a la fluctuación de la conductividad de la piel. Medición de conductancia de la piel es uno de los componentes de los dispositivos de polígrafo y se utiliza en la investigación científica de excitación emocional o fisiológico.

Calibración del sensor
La precisión del sensor es suficiente en la mayoría de las aplicaciones. Pero se puede mejorar esta precisión mediante un proceso de calibración.
Cuando se utiliza sensor de temperatura, en realidad se está midiendo una tensión, y en relación a lo que la temperatura de funcionamiento del sensor debe ser. Si usted puede evitar errores en las mediciones de voltaje, y representan la relación entre la tensión y la temperatura con mayor precisión, se pueden obtener mejores lecturas de temperatura.
La calibración es un proceso de medición de los valores reales de tensión. En el archivo eHealth.cpp podemos encontrar getSkinConductance y funciones getSkinResistance. El valor 0,5 es imprecisa por defecto.
Si se mide el valor de la tensión con un multímetro y modificar la biblioteca obtendrá una mayor precisión.
Resistencia
Coloque las puntas del multímetro entre 0,5 V (cable rojo) y GND (Negro cable). En este caso se modificaría 0,5 a 0,498.
e-Health_button4-01
Conexión del sensor
Conecte los cables a los contactos en el GSR. Los contactos no tiene polarización.
4_det
e_health_velcros
El sensor galvánica de la piel tiene dos contactos y funciona como un ohmiómetro de la medición de la resistencia de los materiales. Coloque sus dedos en los contactos metálicos y apriete el velcro como se muestra en la imagen de abajo ..
dedo_velcro1
dedo_velcro2
dedo_velcro3
dedo_velcro4
Library functions con  Arduino
Getting data
With this simple functions we can read the value of the sensor. The library returns the value of the skin resistance and the skin conductance.
Ejemplo:
  {
 float conductance = eHealth.getSkinConductance();
 float resistance = eHealth.getSkinResistance();
  float conductanceVol = eHealth.getSkinConductanceVoltage();
 }
Upload the next code for seeing data in the serial monitor:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)." 
  *
 * In this example we use the skin sensor to measure some 
 * parameters like the skin resistance and coductance. 
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad 
  * /

# Include

/ / La rutina de instalación se ejecuta una vez cuando se pulsa reset:
void setup () {
Serial.begin(115200);
}

/ / Bucle se ejecuta la rutina una y otra vez para siempre:
void loop () {

float conductance = eHealth.getSkinConductance();
float resistance = eHealth.getSkinResistance();
float conductanceVol = eHealth.getSkinConductanceVoltage();

Serial.print(“Conductance : “);
Serial.print(conductance, 2);
Serial.println (“”);

Serial.print(“Resistance : “);
Serial.print(resistance, 2);
Serial.println (“”);

Serial.print(“Conductance Voltage : “);
Serial.print(conductanceVol, 4);
Serial.println (“”);

Serial.print(“\n”);

// wait for a second
delay (1000);
}

Upload the code to Arduino and watch the Serial monitor.
Here is the USB output using the Arduino IDE serial port terminal:
Ejemplo_GSR_
Raspberry Pi
Compile the following code example:
Show Code

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

//Needed for eHealth
eHealthClass eHealth;

extern SerialPi Serial;

void setup () {

}

void loop () {

float conductance = eHealth.getSkinConductance();
float resistance = eHealth.getSkinResistance();
float conductanceVol = eHealth.getSkinConductanceVoltage();

printf(“Conductance : %f \n”, conductance);
printf(“Resistance : %f \n”, resistance);
printf(“Conductance Voltage : %f \n”, conductanceVol);

printf (“\ n”);

// wait for a second
delay (1000);
}

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

Mobile App
The App shows the information the nodes are sending which contains the sensor data gathered. Smartphone app
android_6
GLCD
The GLCD shows the information the nodes are sending which contains the sensor data gathered. GLCD
GLCD
KST
KST program shows the ECG wave.
Pantallazo-2
Pantallazo2
Para saber más ,pulse  aquí

Sensor de Glucosa para Arduino y Netduino


Glucometer es un dispositivo médico para determinar la concentración aproximada de glucosa en la sangre. Una pequeña gota de sangre, obtenida pinchando la piel con una lanceta, se coloca sobre una tira de ensayo desechable que el medidor lee y utiliza para calcular el nivel de glucosa en sangre. El medidor muestra el nivel en mg / dl o mmol / l.

presentacion_glucometro
A pesar de intervalos muy variables entre las comidas o el consumo ocasional de comidas con una carga de carbohidratos sustancial, humanos los niveles de glucosa en la sangre tienden a permanecer dentro de la gama normal. Sin embargo, poco después de comer, el nivel de glucosa en la sangre puede aumentar, en los no diabéticos, de manera temporal hasta 7,8 mmol / L (140 mg / dL) o un poco más.
Conexión del sensor
Antes de comenzar a utilizar el glucómetro necesitamos una medida al menos en la memoria del glucómetro. Después de eso, puede obtener toda la información contenida en el glucómetro (fecha, valor de glucosa).
elementos_pulsometro
Encienda el glucómetro y coloque una tira de prueba en la máquina cuando la máquina está lista. Observe el indicador para la colocación de la sangre a la tira.
glucometro
Limpie el extremo de su dedo índice con alcohol antes de pincharse con una aguja o lanceta estéril.
pinchando_dedo
Punzee la punta de su dedo en la almohadilla suave, carnoso y obtener una gota de sangre. El tipo de gota de sangre está determinado por el tipo de tira que está utilizando
dedo_sangre
Coloque la gota de sangre en el lado de la tira.
prueba_glucosa1
prueba_glucosa
El glucómetro se tome unos momentos para calcular la lectura de azúcar en la sangre
medida_glucosa
El glucómetro almacenará el valor en la memoria.
Con el fin de extraer los datos del glucómetro a la Arduino o Raspberry Pi, conecte el cable como se muestra en la imagen.
conectando_lector_azul
Usted debe ver en la pantalla del glucómetro el mensaje “PC”, que indica la conexión correcta.
elementos_pulsometro
Library functions para Arduino
Getting data
With a simple function we can read all the measures stored in the glucometer and show them in the terminal. The function must be used before the intilizazion of the serial monitor.
Example of use:
  {
 eHealth.readGlucometer();
 Serial.begin(115200);
 }
The amount of data read is accessible with a another public function.
Example of use:
  {
 uint8_t numberOfData eHealthClass.getGlucometerLength()
 }
The maximum number of measures is 32. The vector where data is a public variable of the e-Health class.
Example of use:
{ Serial.print(F("Glucose value : ")); Serial.print(eHealth.glucoseDataVector[i].glucose); Serial.println(F(" mg/dL")); }
Arduino
Upload the next code for seeing data in the serial monitor:
Show Code

  / *
 * eHealth sensor platform for Arduino and Raspberry from Cooking-hacks.
  *
 * Description: "The e-Health Sensor Shield allows Arduino and Raspberry Pi 
 * users to perform biometric and medical applications by using 9 different 
 * sensors: Pulse and Oxygen in Blood Sensor (SPO2), Airflow Sensor (Breathing),
 * Body Temperature, Electrocardiogram Sensor (ECG), Glucometer, Galvanic Skin
 * Response Sensor (GSR - Sweating), Blood Pressure (Sphygmomanometer) and 
 * Patient Position (Accelerometer)." 
  *  
 * In this example we are going to get data stored in the glucometer 
 * memory and show the result in the serial monitor.   
  *
 * Copyright (C) 2012 Libelium Comunicaciones Distribuidas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
 * the Free Software Foundation, either version 3 of the License, or
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería. If not, see .
  *
 * Version 0.1
 * Author: Luis Martin & Ahmad Saad
  * /

# Include

void setup () {

eHealth.readGlucometer();
Serial.begin(115200);
retardo (100);
}

void loop () {

uint8_t numberOfData = eHealth.getGlucometerLength();
Serial.print(F(“Number of measures : “));
Serial.println(numberOfData, DEC);
retardo (100);

for (int i = 0; i < numberOfData; i++) {
// The protocol sends data in this order
Serial.println(F(“==========================================”));

Serial.print(F(“Measure number “));
Serial.println(i + 1);

Serial.print(F(“Date -> “));
Serial.print(eHealth.glucoseDataVector[i].day);
Serial.print(F(” of “));
Serial.print(eHealth.numberToMonth(eHealth.glucoseDataVector[i].month));
Serial.print(F(” of “));
Serial.print(2000 + eHealth.glucoseDataVector[i].year);
Serial.print(F(” at “));

if (eHealth.glucoseDataVector[i].hour < 10) {
Serial.print(0); // Only for best representation.
}

Serial.print(eHealth.glucoseDataVector[i].hour);
Serial.print(F(“:”));

if (eHealth.glucoseDataVector[i].minutes < 10) {
Serial.print(0);// Only for best representation.
}
Serial.print(eHealth.glucoseDataVector[i].minutes);

if (eHealth.glucoseDataVector[i].meridian == 0xBB)
Serial.println(F(” pm”));
else if (eHealth.glucoseDataVector[i].meridian == 0xAA)
Serial.println(F(” am”));

Serial.print(F(“Glucose value : “));
Serial.print(eHealth.glucoseDataVector[i].glucose);
Serial.println(F(” mg/dL”));
}

delay(20000);
}

Upload the code and watch the Serial monitor.Here is the USB output using the Arduino IDE serial port terminal:
Ejemplo_glucometro_
Raspberry Pi
Compile the following code:
Show Code

//Include eHealth library #include "eHealth.h" //Needed for eHealth eHealthClass eHealth; /********************************************************* * IF YOUR ARDUINO CODE HAS OTHER FUNCTIONS APART FROM * * setup() AND loop() YOU MUST DECLARE THEM HERE * * *******************************************************/ void setup() { eHealth.readGlucometer(); delay(100); } void loop() { uint8_t numberOfData = eHealth.getGlucometerLength(); printf("Number of measures : %d\n",numberOfData); delay(100); for (int i = 0; i %d",eHealth.glucoseDataVector[i].day); printf(" of "); printf("%d",eHealth.numberToMonth(eHealth.glucoseDataVector[i].month)); printf(" of "); printf("%d",2000 + eHealth.glucoseDataVector[i].year); printf(" at "); if (eHealth.glucoseDataVector[i].hour < 10) { printf("0"); // Only for best representation. } printf("%d",eHealth.glucoseDataVector[i].hour); printf(":"); if (eHealth.glucoseDataVector[i].minutes < 10) { printf("0");// Only for best representation. } printf("%d",eHealth.glucoseDataVector[i].minutes); if (eHealth.glucoseDataVector[i].meridian == 0xBB) printf(" pm"); else if (eHealth.glucoseDataVector[i].meridian == 0xAA) printf(" am"); printf("Glucose value : %d mg/dL",eHealth.glucoseDataVector[i].glucose); } delay(20000); } int main (){ setup(); while(1){ loop(); } return (0); }

Más informacion ,pulse aqui

Sensor presión arterial para Arduino y Netduino


 

Presión arterial

La presión arterial es la presión de la sangre en las arterias cuando se bombea alrededor del cuerpo por el corazón. Cuando el corazón late, se contrae y empuja la sangre por las arterias para el resto de su cuerpo. Esta fuerza crea la presión en las arterias.La presión arterial se registra como dos números-la presión sistólica (cuando late el corazón) sobre la presión diastólica (cuando el corazón se relaja entre latidos).
Monitoreo de la presión arterial en casa es importante para muchas personas, especialmente si usted tiene presión arterial alta.La presión arterial no se mantiene igual todo el tiempo. Cambia para satisfacer las necesidades de su cuerpo. Se ve afectada por varios factores, incluyendo la posición del cuerpo, la respiración o el estado emocional de ejercicio y el sueño. Lo mejor es medir la presión arterial cuando se está relajado y sentado o acostado.
Clasificación de la presión arterial en adultos (18 años y mayores)
Sistólica (mm Hg) Diastólica (mm Hg)
La hipotensión <90 <60
Deseado 90-119 60-79
La prehipertensión 120-139 80-89
Hipertensión en fase 1 140-159 90-99
Fase 2 Hipertensión 160-179 100-109
Crisis hipertensiva ≥ 180 ≥ 110
La presión arterial alta (hipertensión) puede llevar a problemas graves como el infarto de miocardio, accidente cerebrovascular o enfermedad renal. La presión arterial alta generalmente no tiene síntomas, por lo que necesita para que su presión arterial regularmente.
El sensor tiene que estar conectado a la Arduino y utilizar la batería interna (2X3A)
tensiometro_presentacion
La precisión del sensor de la presión arterial (esfigmomanómetro) es suficiente en la mayoría de las aplicaciones. Pero se puede mejorar esta precisión mediante un proceso de calibración.
La calibración de este sensor es complicado. Libelium equipo se encarga de realizar y proporciona un valor de calibración de desviación.
Tan sólo hay que modificar el parámetro en nuestro código.
pegatina_tensiometro
Tensionometre
Lo primero que vamos a hacer con el módulo para conectar los puentes en la posición correcta. En este caso, los puentes tienen que ajustar en posición de puerta de enlace SPHY.
pulsometro_conectando_e_health
Conecte el cable jack con el esfigmomanómetro y el consejo e-Salud.
tensiometro + e_health
Coloque el tensiómetro en la muñeca, como se muestra en la imagen de abajo. La palma hacia arriba y el lado rigth del medidor de la presión arterial para arriba, coloque el brazalete en la muñeca izquierda desde 5-10mm (aproximadamente un ancho dedo meñique).
tensiometro_conector
Para corregir medida es importante para mantener el corazón y la muñeca en el plano horizontal.
tensionometer_man
Luis2
Presione On / Off botón y espere a que el esfigmomanómetro se adopte la medida.
pulsando_boton_pulsometro
Después de unos segundos, el resultado se muestra en la pantalla del esfigmomanómetro y en el monitor de Arduino serial. La medida se toma de forma independiente por el Arduino / RasberryPi, y puede no coincidir exactamente, pero los valores deben ser muy similares. No haga movimientos bruscos o la medida no será fiable.
Inicialización del sensor de la presión arterial
Algunos parámetros se debe inicializar para empezar a utilizar el sensor de la presión arterial (esfigmomanómetro). La siguiente función inicializa algunas variables y esperar hasta que el botón de encendido / apagado del esfigmomanómetro se presiona.
Ejemplo:
  {
   flotar parámetro = -0,1;
   eHealth.initBloodPressureSensor (parámetro);  
  }
Debido a un proceso de calibración, todo el esfigmomanómetro tienen un parámetro especial que debe ser introducido en el código.

Obtención de datos

Las funciones siguientes devuelven los valores de la presión sistólica y diastólica, medida por el esfigmomanómetro y se almacenan en las variables privadas de la clase de e-Salud.
Ejemplo:
  }
   int = Serial.println sistólica (eHealth.getSystolicPressure ());      
   int = Serial.println diastólica (eHealth.getDiastolicPressure ());
  }
Arduino
Sube el siguiente código para ver los datos en el monitor serie:
Show Code

  / *
  * Plataforma para la eSalud sensor Arduino y frambuesa de cocina-hacks.
  *
  * Descripción: "The Shield Sensor de e-Salud permite a Arduino y Frambuesa Pi 
  * Los usuarios realizar aplicaciones biométricas y médicos mediante el uso de 9 diferentes 
  * Sensores de pulso: Sensor de oxígeno y sangre (SpO2), sensor de flujo de aire (respiración),
  * Temperatura Corporal, Sensor Electrocardiograma (ECG), Glucómetro, Skin Galvanic
  * Respuesta del sensor (GSR - Sudoración), la tensión arterial (esfigmomanómetro) y 
  * Paciente posición (acelerómetro). " 
  *  
  * En este ejemplo vamos a medir la presión arterial
  * Y mostrar el resultado en el monitor serie.   
  *
  * Copyright (C) 2012 Libelium Comunicaciones distribuídas SL
  * Http://www.libelium.com
  *
  * Este programa es software libre: usted puede redistribuirlo y / o modificarlo
  * Bajo los términos de la Licencia Pública General de GNU según es publicada por
  * La Free Software Foundation, bien de la versión 3 de la Licencia, o
  * (A su elección) cualquier versión posterior.
  *
  * Este programa se distribuye con la esperanza de que sea útil,
  * Pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
  * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR.  Consulte la
  * GNU General Public License para más detalles.
  *
  * Usted debe haber recibido una copia de la Licencia Pública General de GNU
  * Junto con esta librería.  Si no es así, consulte.
  *
  * Versión 0.1
  * Autor: Luis Martin & Saad Ahmad
  * /

# Include

/ / Este parámetro debe ser introducido manualmente.
/ / Por favor, consulte el tutorial para más información.
flotar parámetro = 0,0;

void setup () {
Serial.begin (115200);
Serial.println (“Pulse el botón On / Off por favor …”);

}

void loop () {

eHealth.initBloodPressureSensor (parámetro);

Serial.println (“****************************”);
Serial.print (“valor de la presión arterial sistólica:”);
Serial.println (eHealth.getSystolicPressure ());
delay (10);

Serial.println (“****************************”);
Serial.print (“valor presión arterial diastólica:”);
Serial.println (eHealth.getDiastolicPressure ());
delay (10);

retardo (3000);
}

Sube el código y ver el monitor.Here serie es la salida utilizando el terminal USB Arduino IDE puerto serie:
Ejemplo_PresionSanguinea_
Raspberry Pi
Mobile App
The App shows the information the nodes are sending which contains the sensor data gathered. Smartphone app
iphone_5
GLCD
The GLCD shows the information the nodes are sending which contains the sensor data gathered. GLCD
GLCD
Para saber más pulse aquí