Plumbob Sensor de pulso (4 / 5 paso)

Paso 4: Codificación de Arduino

INTERRUMPIR

tasa de volátiles int [10];                    utilizado para sostener el último IBI diez valores
volatile unsigned sampleCounter largo = 0;          para determinar el tiempo de pulso
volatile unsigned lastBeatTime largo = 0;           utilizado para encontrar el intervalo beat inter
volátil int P = 512;                      utilizado para encontrar el pico en la onda del pulso
volátil int T = 512;                     solía encontrar a través de la onda del pulso
trille el volátil int = 512;                utilizado para encontrar el momento instantáneo de latidos cardíacos
amplificador int volátiles = 100;                   utiliza para mantener la amplitud de la onda de pulso
volátil firstBeat booleano = true;        utilizan a matriz de tasa de semilla así inicio con BPM razonable
volátil secondBeat booleano = true;       utilizan a matriz de tasa de semilla así inicio con BPM razonable

void interruptSetup() {}
Inicializa el Timer2 para lanzar una interrupción cada 2mS.
TCCR2A = 0 X 02;     DESACTIVAR EL PWM EN DIGITAL PINES 3 Y 11 Y ENTRAR EN MODO DE CTC
TCCR2B = 0 X 06;     NO FUERCE LA COMPARE, PRESCALER DE 256
OCR2A = 0X7C;      Ponga la parte superior de la cuenta a 124 para 500Hz frecuencia de muestreo
TIMSK2 = 0 X 02;     PERMITEN INTERRUMPIR EL PARTIDO ENTRE EL TIMER2 Y OCR2A
SEI();             ASEGÚRESE DE QUE SE HABILITAN LAS INTERRUPCIONES GLOBALES
}

ESTA ES LA RUTINA DE SERVICIO DE INTERRUPCIÓN DEL TEMPORIZADOR 2.
Temporizador 2 se cerciora de que tomar una lectura cada 2 milisegundos
ISR(TIMER2_COMPA_vect) {/ / cuando Timer2 cuenta a 124
CLI();                                      deshabilitar interrupciones mientras hacemos esto
Señal = analogRead(pulsePin);              leer el Sensor del pulso
sampleCounter += 2;                         seguimiento del tiempo en mS con esta variable
int N = sampleCounter - lastBeatTime;       controlar el tiempo desde el último golpe para evitar ruidos

encontrar el pico y a través de la onda de pulso
Si (señal < trille & & N > (IBI/5) * 3) {/ evitar dichrotic ruido en espera 3/5 del último IBI
Si (señal < T) {/ / T es a través del
T = señal;                         seguimiento de punto más bajo de la onda del pulso
}
}

Si (señal > trille & & señal > P) {/ / trillar condición ayuda a evitar el ruido
P = señal;                             P es el pico
} / / seguimiento de punto más alto de la onda del pulso

AHORA ES EL MOMENTO PARA BUSCAR LOS LATIDOS DEL CORAZÓN
señal picos para arriba en valor cada vez que hay un pulso
Si (N > 250) {/ / evitar ruido de alta frecuencia
Si ((señal > trillar) & & (pulso == false) & & (N > (IBI/5) * 3)) {}
Pulso = true;                               la bandera de pulso cuando pensamos que es un pulso
digitalWrite(blinkPin,HIGH);                Encienda el LED del pin 13
IBI = sampleCounter - lastBeatTime;         medir el tiempo entre latidos en mS
lastBeatTime = sampleCounter;               seguimiento de tiempo para el próximo pulso

if(firstBeat) {/ / si es la primera vez que encontramos un beat, if firstBeat == TRUE
firstBeat = false;                 claro firstBeat bandera
retorno;                            Valor IBI no es confiable para descartarlo
}
if(secondBeat) {/ / si este es el segundo golpe, if secondBeat == TRUE
secondBeat = false;                 claro secondBeat bandera
para (int i = 0; i < = 9; i ++) {/ / el funcionamiento total para obtener un gratuito BPM en el inicio de la semilla
índice [i] = IBI;
}
}

Mantenga un total de los últimos 10 valores IBI
palabra runningTotal = 0;                   despejar la variable runningTotal

para (int i = 0; i < = 8; i ++) {/ / cambio de datos en la matriz de la tarifa
índice [i] = velocidad [i + 1];              y el valor más antiguo de IBI
runningTotal += velocidad [i];          se suman los 9 valores más antiguo de IBI
}

[9] la tarifa = IBI;                          Añadir el IBI más reciente a la matriz de la tarifa
runningTotal += velocidad [9];                Añadir el último IBI a runningTotal
runningTotal / = 10;                     promedio de los últimos 10 valores IBI
BPM = 60000/runningTotal;               ¿Cuántas pulsaciones caben en un minuto? es BPM!
QS = true;                              establecido ser cuantificado
BANDERA DE QS NO SE BORRA DENTRO DE ESTE ISR
}
}

Si (señal < trille & & pulso == true) {/ / cuando los valores se van hacia abajo, el ritmo es más
digitalWrite(blinkPin,LOW);            Apagar pin 13 LED
Pulso = false;                         restablecer la bandera del pulso por lo que podemos hacerlo otra vez
amp = P - T;                           obtener la amplitud de la onda de pulso
trillar = amp/2 + T;                    sistema de trilla al 50% de la amplitud
P = trillar;                            restablecer estas para la próxima vez
T = trillar;
}

Si (N > 2500) {/ / si 2,5 segundos pasan sin un ritmo
trillar = 512;                          sistema de trilla por defecto
P = 512;                               P por defecto
T = 512;                               T por defecto
lastBeatTime = sampleCounter;          llevar la lastBeatTime hasta la fecha
firstBeat = true;                      ajústelas para evitar ruidos
secondBeat = true;                     cuando volvamos el latido del corazón
}

SEI();                                     Enable interrumpe cuando estás hecho!
} / / fin de isr

ARDUINO

/*
>> Pulso Sensor Amped 1.1 <<
Este código es para el Sensor de pulso amplificada por Joel Murphy y Yury Gitman
www.pulsesensor.com
>>> Sensor de pulso cable morado va al Pin analógico 0 <<<
Adquisición de muestra de Sensor de pulso y procesamiento sucede en el fondo a través de la interrupción del Timer 2. frecuencia de muestreo de 2ms.
PWM en los pines 3 y 11 no funcionará cuando se utiliza este código, porque estamos utilizando Timer 2.
Se actualizan automáticamente las siguientes variables:
Señal: int que contiene los datos de la señal analógica directamente desde el sensor. Actualizado cada 2mS.
IBI: int que contiene el intervalo de tiempo entre latidos. resolución de 2ms.
BPM: int que contiene el valor de la frecuencia cardíaca, deriva cada latido, con un promedio de valores anteriores de IBI 10.
QS: valor booleano que es true cuando se encuentra pulso y BPM se actualizan. Usuario debe reiniciar.
Pulso: valor booleano que es true cuando un latido del corazón es detectada luego falsa en tiempo con LED pin13 salir.

Este código está diseñado con salida serial de datos procesamiento de dibujo "PulseSensorAmped_Processing-xx"
El bosquejo de procesamiento es un visualizador de datos simples.
Todo el trabajo para encontrar el latido del corazón y determinar el ritmo cardíaco ocurre en el código siguiente.
PIN 13 LED parpadeará con latidos del corazón.
Si desea utilizar el pin 13 para otra cosa, ajustar el controlador de interrupción
También se desvanecerá un LED en pin fadePin con cada latido. Poner una resistencia de LED y series de fadePin a GND.
Comprobar código detallado tutorial:
http://pulsesensor.myshopify.com/pages/Pulse-sensor-Amped-Arduino-v1dot1

Código versión 02 por Joel Murphy & Yuri Gitman otoño 2012
Esta actualización cambia el nombre de la variable de HRV a IBI, que está parado para el intervalo entre latidos, para mayor claridad.
Cambió la interrupción al Timer2.  Frecuencia de muestreo de 500Hz, 2 ms resolución valor IBI.
Se descolora LED pin se trasladó al pin 5 (uso del Timer2 desactiva PWM en pines 3 y 11).
Arreglado por ineficiencias desde la última versión.
*/

VARIABLES
int pulsePin = 0;                 Pulso púrpura Sensor cable conectado al pin analógico 0
int blinkPin = 7;               PIN a parpadear led en cada latido

fadePin int = 5;                  pasador de lujo blink de decoloración con clase en cada latido
int fadeRate = 0;                 solía desaparecer LED en con PWM en fadePin

estas variables son volátiles porque se utilizan durante la rutina de servicio de interrupción.
int volátil BPM;                   utiliza para mantener el pulso
volátil int señal;                contiene los datos crudos entrantes
int volátil IBI = 600;             retiene el tiempo entre contracciones, el intervalo entre latidos
volátil pulso boolean = false;     verdadero cuando el pulso es alto, false cuando es baja
volátiles QS boolean = false;        llega a ser verdad cuando Arduoino encuentra un ritmo.

void setup() {}

pinMode(blinkPin,OUTPUT);         PIN que empezará a parpadear a los latidos del corazón!
pinMode(fadePin,OUTPUT);          PIN que se decoloran a los latidos del corazón!
Serial.Begin(115200);             Estamos de acuerdo en hablar rápido!
interruptSetup();                 poder para leer la señal del Sensor de pulso cada 2 ms
ONU-comentario la línea siguiente si está encendido el Sensor del pulso en bajo voltaje,
Y QUE LA TENSIÓN SE APLICA AL PERNO A-REF
analogReference(EXTERNAL);
}

void loop() {}
sendDataToProcessing (de ', señal);     enviar procesamiento de los datos en bruto del Sensor pulso
Si (QS == true) {/ / bandera ser cuantificada es verdadera cuando arduino encuentra un latido
fadeRate = 255;                  Conjunto 'fadeRate' Variable de hasta 255 descolorarse LED con pulso
sendDataToProcessing('B',BPM);   enviar de la frecuencia cardíaca con un prefijo 'B'
sendDataToProcessing('Q',IBI);   enviar tiempo entre latidos con un prefijo 'Q'
QS = false;                      restablecer la bandera de ser cuantificado para la próxima vez
}

ledFadeToBeat();

Delay(20);                             tomar un descanso
}

void ledFadeToBeat() {}
fadeRate-= 10;                         Ajuste el fade de LED
fadeRate = constrain(fadeRate,0,255);   evitar LED fade valor de a números negativos!
analogWrite(fadePin,fadeRate);          se descolora LED
}

void sendDataToProcessing (símbolo de char, int datos) {}
Serial.Print(Symbol);                Prefijo símbolo dice procesamiento viene qué tipo de datos
Serial.println(Data);                los datos para enviar hasta culminar en un retorno de carro
}

Artículos Relacionados

Sensor de pulso ambiente Arduino casero

Sensor de pulso ambiente Arduino casero

Vi Open Hardware Sensor de pulso en el pensamiento que intentaría hacer en casa. Me llevó un rato, pero aquí está mi proceso de torpe.Paso 1: Sensor de pulso - ResumenHe estado trabajando en volver a hacer el Sensor del pulso del Hardware abierto por
Latido del corazón para el sensor de pulso + ESP8266

Latido del corazón para el sensor de pulso + ESP8266

Como parte de un deseo de aprender sobre ESP8266 independientePensé en un proyecto para conectar sensor de pulso y transmitir el BPM al ordenador mediante conexión TCP.Durante la construcción, me encontré con algunos problemas.Los problemas por mi op
Cola de control de Sensor de pulso

Cola de control de Sensor de pulso

Hey todo el mundo!Este Tutorial irá a través de los pasos de cómo crear su propio animatronic cola! He visto colas de aimatronic muchos que ya sea controlada por un control remoto o fije con un código de barrido continuo, me decidí a hacer mi cola qu
Sensor de pulso LED (PPG) para Arduino

Sensor de pulso LED (PPG) para Arduino

Dentro de este Instructable te mostraré, cómo implementar un simple sensor PPG (photoplethysmogram) para arduino. Este dispositivo utiliza luz infrarroja para medir pulso usted. Puede conocer esta técnica de los sensores del pulso de la yema del dedo
LilyPad y sensores de pulso: la experiencia de otros cuerpo

LilyPad y sensores de pulso: la experiencia de otros cuerpo

He creado y la instalación interactiva dirigida a esclarecer en cuerpo avergonzar.Mi objetivo era hacer la experiencia participante tener un cuerpo diferente de su, así había alterado un chaleco salvavidas y presentado con arena, lo que es peso 4,2 k
Sensor de pulso de San Valentín

Sensor de pulso de San Valentín

basándose en el trabajo de otros, se me ocurrió este pequeño dispositivo ir a medir mi ritmo cardíaco. Ahora, sabía que fue apropiado ir a hacer en forma de un corazón de LEDs y así lo hice. No tener ninguna plantilla, estaba bastante desorientado. U
Juego de la serpiente con sensor de pulso

Juego de la serpiente con sensor de pulso

Este es un juego de snake que se navega por un joystick. También hemos utilizado un sensor de pulso para trucar el juego. El sensor del pulso hace que la pantalla cambia de color dependiendo de los latidos del corazón. El momento cuando su corazón la
Sensor de pulso de Arduino

Sensor de pulso de Arduino

Este es mi primer proyecto publicado aquí, un arduino pro mini tablero con Sensor de pulso.Aquí les mostraré cómo hice mi arduino cableado y codificación, incluyendo el código fuente y esquemas. También código de una herramienta de windows para mostr
Cómo utilizar el Sensor del pulso

Cómo utilizar el Sensor del pulso

Sensor de pulso es un sensor de ritmo cardíaco de código abierto.Utiliza diferentes transmitencia ligera para los tejidos del cuerpo causando por pulsación vascular para medir el pulso.Paso 1:1. construir el entorno de Arduino, descargar el IDE de Ar
Sensor de pulso de Arduino DIY

Sensor de pulso de Arduino DIY

Así que mencionado en un Instructable anterior que soy una ayudante de enseñanza (TA) para un curso introductorio de ingeniería por especialidad de la ingeniería biomédica en la Universidad de Vanderbilt. Mi tarea principal como un TA es re-escribir
Pulso Sensor con Bluetooth y Arduino

Pulso Sensor con Bluetooth y Arduino

Esto proyectos pretende utilizar el sensor del pulso (que es fácilmente disponible ahora) con arduino uno y módulo Bluetooth HC-05, el sensor del pulso se coloca en el dedo y mide la frecuencia cardíaca y luego envía el pulso al móvil android mediant
Pulso de Arduino Sensor Cardio gráfico

Pulso de Arduino Sensor Cardio gráfico

La aplicación de Arduino pulso Sensor Cardio gráfico ilustra corazón beat información en forma gráfica. La aplicación muestra gráficos de variación de ritmo cardíaco diferente: latidos por minuto (BPM), intervalos Interbeat (IBI), frecuencia cardiaca
Monitor de pulso de Arduino de homebrew (visualizar su latido del corazón)

Monitor de pulso de Arduino de homebrew (visualizar su latido del corazón)

películas ven cool con los EKG (electrocardiograma), que emite y detecta actividades de corazón. Hace unos meses tuvimos que rodar una escena de hospital para nuestro proyecto de escuela. Necesitábamos un instrumento de EKG. Para mantener la película
Monitor de frecuencia de pulso DIY

Monitor de frecuencia de pulso DIY

El siguiente instructivo representa a un monitor de frecuencia de pulso con un Linkit. El pulso puede mostrar en un monitor de la serie. El proyecto es muy fácil de hacer y requiere muy menos piezas y el tiempo para montar.Este es mi primer instructa