Plumbob capteur d’impulsion (4 / 5 étapes)

Étape 4: Arduino codage

INTERRUPT

taux de volatile int [10] ;                    utilisé pour stocker des valeurs de dernier dix IBI
volatile unsigned long sampleCounter = 0 ;          utilisé pour déterminer le minutage de l’impulsion
volatile unsigned long lastBeatTime = 0 ;           utilisé pour trouver l’intervalle de temps inter
volatile int P = 512 ;                      utilisé pour trouver la pointe dans l’onde de pouls
volatile int T = 512 ;                     utilisé pour trouver des creux dans l’onde de pouls
battre le volatile int = 512 ;                utilisé pour trouver instantanément moment de battement de coeur
volatile int amp = 100 ;                   utilisé pour maintenir l’amplitude de l’onde de pouls
volatil firstBeat boolean = true ;        utilisé en tableau de taux de graines donc nous démarrage avec BPM raisonnable
volatil secondBeat boolean = true ;       utilisé en tableau de taux de graines donc nous démarrage avec BPM raisonnable

void interruptSetup() {}
Initialise le Timer2 pour lancer une interruption chaque 2mS.
TCCR2A = 0 X 02 ;     DISABLE PWM SUR BROCHES NUMÉRIQUES 3 ET 11 ET ALLER DANS LE MODE DE LA CCT
TCCR2B = 0 X 06 ;     NE FORCEZ PAS COMPARER, PRÉDIVISEUR 256
OCR2A = 0X7C ;      POSER le toit du comte de 124 pour la fréquence d’échantillonnage de 500Hz
TIMSK2 = 0 X 02 ;     ENABLE INTERROMPRE LE MATCH ENTRE LE TIMER2 ET OCR2A
SEI() ;             ASSUREZ-VOUS QUE GLOBAL INTERRUPTIONS SONT ACTIVÉES
}

IL S’AGIT DE LA MINUTERIE 2 INTERRUPT SERVICE ROUTINE.
Minuterie 2 permet de s’assurer que nous prenons une lecture chaque 2 millisecondes
ISR(TIMER2_COMPA_vect) {/ / déclenchée lorsque Timer2 a atteint 124
CLI() ;                                      désactiver les interruptions pendant que nous le faisons
Signal = analogRead(pulsePin) ;              lire le capteur d’impulsions
sampleCounter += 2 ;                         garder une trace du temps en mS avec cette variable
int N = sampleCounter - lastBeatTime ;       surveiller le temps depuis le dernier battement pour éviter le bruit

trouver la crête et le creux de la vague d’impulsion
Si (Signal < battre & & N > (IBI/5) * 3) {/ / éviter les bruits de la fonction en attendant 3/5 des dernier IBI
Si (Signal < T) {/ / T est la fosse
T = Signal ;                         garder une trace de point le plus bas dans l’onde de pouls
}
}

Si (Signal > battre & & Signal > P) {/ / battre condition permet d’éviter les bruits
P = Signal ;                             P est le sommet
} / / suivi de point culminant dans l’onde de pouls

MAINTENANT IL EST TEMPS DE CHERCHER LE BATTEMENT DU CŒUR
signaler les surtensions vers le haut en valeur chaque fois qu’il y a une impulsion
Si (N > 250) {/ / éviter les bruits de haute fréquence
Si ((Signal > battre) & & (Pulse == false) & & (N > (IBI/5) * 3)) {}
Pulse = true ;                               l’indicateur de pouls lorsque nous pensons qu’il est une impulsion
digitalWrite(blinkPin,HIGH) ;                tourner sur la broche 13 LED
IBI = sampleCounter - lastBeatTime ;         mesurer le temps entre deux battements en mS
lastBeatTime = sampleCounter ;               garder une trace de temps pour la prochaine impulsion

if(firstBeat) {/ / si c’est la première fois nous avons trouvé a battu, si firstBeat == TRUE
firstBeat = false ;                 effacer firstBeat indicateur
retour ;                            Valeur IBI n’est pas fiable alors jetez-le
}
if(secondBeat) {/ / si c’est le deuxième battement, si secondBeat = TRUE
secondBeat = false ;                 Effacez secondBeat indicateur
pour (int i = 0; j’ai < = 9; i ++) {/ / semences le fonctionnement total pour obtenir une realisitic BPM au démarrage
taux de [i] = IBI ;
}
}

Gardez un total cumulé des 10 dernières valeurs IBI
runningTotal mot = 0 ;                   effacer la variable runningTotal

pour (int i = 0; j’ai < = 8; i ++) {/ / déplacement des données dans le tableau des taux
taux de [i] = taux [i + 1] ;              Déposez la plus ancienne valeur IBI
taux de += runningTotal [i] ;          additionner les valeurs IBI plus anciennes 9
}

Note [9] = IBI ;                          Ajouter la dernière IBI au tableau des taux
taux de runningTotal += [9] ;                Ajouter la dernière IBI à runningTotal
runningTotal / = 10 ;                     moyenne des 10 dernières valeurs IBI
BPM = 60000/runningTotal ;               Combien de temps peuvent s’insérer dans une minute ? C’est le BPM !
QS = true ;                              Définissez quantifié Self indicateur
INDICATEUR DE LA QS NE S’EFFACE PAS À L’INTÉRIEUR DE CE RAPPORT DE RECHERCHE INTERNATIONALE
}
}

Si (Signal < battre & & Pulse == true) {/ / lorsque les valeurs sont en baisse, le rythme est plus
digitalWrite(blinkPin,LOW) ;            désactiver les LED pin 13
Pulse = false ;                         réinitialiser l’indicateur de pouls, alors nous pouvons le faire à nouveau
amp = P - T ;                           obtenir l’amplitude de l’onde de pouls
battre = amp/2 + T ;                    battre le jeu à 50 % de l’amplitude
P = battre ;                            réinitialiser ces pour la prochaine fois
T = battre ;
}

Si (N > 2500) {/ / si 2,5 secondes passent sans un battement
battre = 512 ;                          battre le jeu par défaut
P = 512 ;                               la valeur par défaut de P
T = 512 ;                               la valeur par défaut de T
lastBeatTime = sampleCounter ;          mettre le lastBeatTime à jour
firstBeat = true ;                      Réglez ces pour éviter le bruit
secondBeat = true ;                     Quand nous rentrerons le battement du cœur
}

SEI() ;                                     Enable interrompt quand vous êtes fait !
} / / fin isr

ARDUINO

/*
>> Capteur amplifié 1.1 d’impulsion <<
Ce code est pour capteur de pouls Amped par Joel Murphy et Yury Gitman
www.pulsesensor.com
>>> Capteur d’impulsions fil violet va sur broche analogique 0 <<<
Acquisition d’échantillon de capteur d’impulsions et traitement se passe en arrière-plan via 2 Timer interrupt. fréquence d’échantillonnage de 2 ms.
PWM sur les broches 3 et 11 ne fonctionne pas lorsque vous utilisez ce code, parce que nous utilisons Timer 2 !
Les variables suivantes sont automatiquement mis à jour :
Signal : int qui contient les données de signal analogique directement à partir du capteur. mis à jour chaque 2mS.
IBI : int qui contient l’intervalle de temps entre les battements. résolution de 2 ms.
BPM : int qui contient la valeur de la fréquence cardiaque, dérivé chaque battement, avec une moyenne de 10 valeurs de IBI précédentes.
QS : valeur booléenne qui est faite de vrai chaque fois que l’impulsion se trouve et BPM sont mis à jour. L’utilisateur doit réinitialiser.
Pouls : valeur booléenne qui est true lorsqu’un battement de coeur est senti faux puis dans le temps avec LED pin13 sortir.

Ce code est conçu avec la sortie de données série de traitement sketch « PulseSensorAmped_Processing-xx »
L’esquisse de traitement est un visualiseur de données simples.
Tout le travail pour déterminer le rythme cardiaque et la fréquence cardiaque se produit dans le code ci-dessous.
Broche 13 LED clignote avec heartbeat.
Si vous souhaitez utiliser la broche 13 pour autre chose, ajuster le gestionnaire d’interruption
Cela disparaîtra aussi une LED sur tige fadePin à chaque battement. Mettre une résistance série et LED de fadePin à GND.
Cliquez ici pour la procédure pas à pas détaillé de code :
http://pulsesensor.myshopify.com/pages/Pulse-Sensor-Amped-Arduino-v1dot1

Code de Version 02 par Joel Murphy & Yury Gitman automne 2012
Cette mise à jour modifie le nom de variable de VRC à IBI, acronyme de inter-Beat intervalle, pour plus de clarté.
Passé l’interruption à Timer2.  Fréquence d’échantillonnage de 500Hz, 2 ms résolution valeur IBI.
Se fanent LED pin s’installe à la broche 5 (utilisation du Timer2 désactive PWM sur les broches 3 et 11).
Rangé les inefficacités depuis la dernière version.
*/

VARIABLES
int pulsePin = 0 ;                 Impulsion capteur violet fil connecté à broche analogique 0
int blinkPin = 7 ;               broche à clignoter conduit à chaque battement

int fadePin = 5 ;                  broche pour fantaisie chic décoloration blink à chaque battement
int fadeRate = 0 ;                 utilisé pour se faner LED sur avec PWM sur fadePin

ces variables sont instables car ils sont utilisés au cours de la routine d’interruption du service !
volatile int puls/min ;                   utilisée pour stocker la valeur du pouls
volatile int Signal ;                contient les données brutes entrantes
volatile int IBI = 600 ;             détient le temps entre deux battements, l’intervalle inter-Beat
volatil Pulse booléen = false ;     true lorsque l’onde de pouls est élevé, false lorsqu’elle est faible
volatils QS booléens = false ;        prend la valeur true lorsque Arduoino trouve un battement.

void setup() {}

pinMode(blinkPin,OUTPUT) ;         goupille qui se mettra à clignoter à votre rythme cardiaque !
pinMode(fadePin,OUTPUT) ;          goupille qui se dissipera à votre rythme cardiaque !
Serial.Begin(115200) ;             Nous sommes d’accord parler vite !
interruptSetup() ;                 met en place à lu signal capteur d’impulsions chaque 2mS
UN commentaire la ligne suivante si vous êtes mise sous tension du capteur d’impulsions à basse tension,
ET DEMANDER QUE LA TENSION SUR LA BROCHE A-REF
analogReference(EXTERNAL) ;
}

void loop() {}
sendDataToProcessing (les de ', de Signal) ;     Envoyer les données brutes du capteur d’impulsions de traitement
Si (QS == true) {/ / drapeau Self quantifié est vrai quand arduino trouve un battement de coeur
fadeRate = 255 ;                  La valeur « fadeRate » Variable 255 se faner LED avec impulsion
sendDataToProcessing('B',BPM) ;   Envoyer la fréquence cardiaque avec un préfixe « B »
sendDataToProcessing('Q',IBI) ;   Envoyer le temps entre deux battements avec le préfixe « Q »
QS = false ;                      réinitialiser l’indicateur auto quantifiés pour la prochaine fois
}

ledFadeToBeat() ;

Delay(20) ;                             Faites une pause
}

void ledFadeToBeat() {}
fadeRate-= 10 ;                         valeur de fondu de LED
fadeRate = constrain(fadeRate,0,255) ;   valeur fondu LED empêcher d’entrer dans les nombres négatifs !
analogWrite(fadePin,fadeRate) ;          fondu de LED
}

void sendDataToProcessing (symbole de char, int data) {}
Serial.Print(Symbol) ;                préfixe de symbole indique quel type de données provient de la transformation
Serial.println(Data) ;                les données à envoyer qui a abouti à un retour chariot
}

Articles Liés

Maison de l’environnement Arduino capteur d’impulsions

Maison de l’environnement Arduino capteur d’impulsions

J'ai vu le Capteur d'impulsions Open Hardware à la pensée que je voudrais essayer de faire à la maison. M'a fallu un certain temps, mais voici mon processus maladroit.Étape 1: Capteur d'impulsions--vue d'ensembleJ'ai travaillé sur la re-prise le le C
Capteur d’impulsions valentines

Capteur d’impulsions valentines

s'appuyant sur le travail des autres, je suis venu avec ce petit appareil d'aller mesurer mon rythme cardiaque. Maintenant, je savais que c'était normal d'aller faire une forme de coeur de LEDs et donc, j'ai fait. N'ayant ne pas de n'importe quel mod
Jeu de serpent avec capteur d’impulsions

Jeu de serpent avec capteur d’impulsions

Il s'agit d'un jeu de serpent, qui est gouverné par un joystick. Nous avons également utilisé un capteur d'impulsions pour peaufiner le jeu. Le capteur d'impulsions rend l'écran change de couleur en fonction de votre rythme cardiaque. Le moment où vo
Comment utiliser le capteur d’impulsions

Comment utiliser le capteur d’impulsions

Pulse est un capteur de fréquence cardiaque opensource.Il utilise différent niveau de transmission lumineuse pour les tissus de l'organisme, provoquant par pulsation vasculaire pour mesurer le pouls.Étape 1 :1. construire l'environnement Arduino, tél
Capteur d’impulsions Arduino

Capteur d’impulsions Arduino

Il s'agit de mon premier projet publié ici, un arduino pro mini planche avec capteur d'impulsions.Ici je vais vous montrer comment j'ai fait mon arduino de câblage et de codage, y compris le code source et les schémas. Aussi, j'ai codé un outil de wi
Capteur d’impulsions de la LED (PPG) pour Arduino

Capteur d’impulsions de la LED (PPG) pour Arduino

Au sein de ce Instructable je vais vous montrer, comment implémenter un simple capteur PPG (photoplethysmogram) pour arduino. Cet appareil utilise la lumière infrarouge pour mesurer l'impulsion vous. Vous connaissez peut-être cette technique des capt
Capteur d’impulsions d’Arduino DIY

Capteur d’impulsions d’Arduino DIY

Donc je l'ai mentionné dans un précédent Instructable que je suis un dépanneur (TA) pour le cours de génie d'initiation pour les majors de l'ingénierie biomédicale à l'Université Vanderbilt. Ma tâche principale comme un TA est de ré-écrire quelques e
Capteur avec Bluetooth et Arduino d’impulsion

Capteur avec Bluetooth et Arduino d’impulsion

Ces projets vise à utiliser le capteur d'impulsions (qui est facilement disponible maintenant) avec arduino uno et module Bluetooth HC-05, le capteur d'impulsions est placé sur le doigt et il mesure la fréquence cardiaque et envoie ensuite la fréquen
Capteur contrôlée queue d’impulsion

Capteur contrôlée queue d’impulsion

Hey tout le monde !Ce tutoriel passe par les étapes de comment créer votre queue animatronic très propre ! J'ai vu plusieurs queues d'aimatronic que soit contrôlé par une télécommande ou définir un code de balayage continu, j'ai décidé de faire ma qu
Veste de capteur LED coeur NeoPixel

Veste de capteur LED coeur NeoPixel

Commencez par essayer de ressembler à Iron Man, finissent par penser un peu à votre humanité, avoir beaucoup de plaisir dans le processus. Ce projet vise à produire et effet intéressant et inattendu d'une source qui nous prennent pour accordé, notre
Wearable coeur battre capteur ESP8266 + Pulse

Wearable coeur battre capteur ESP8266 + Pulse

Dans le cadre d'une volonté d'en savoir plus sur ESP8266 comme autonomeJ'ai pensé à un projet visant à connecter le capteur d'impulsions et de transmettre le BPM à l'ordinateur par une connexion TCP.Lors de la construction, je suis tombé sur quelques
Arduino Pulse capteur Cardio graphique

Arduino Pulse capteur Cardio graphique

L'application de l'Arduino Pulse capteur Cardio graphique illustre coeur battre informations sous forme graphique. L'application affiche des graphiques de variation différente fréquence cardiaque : battements par Minute (BPM), Interbeat intervalles (
Lilypad et capteurs de pouls : l’autre expérience de corps

Lilypad et capteurs de pouls : l’autre expérience de corps

J'ai créé et installation interactive visant à une lumière sur la honte du corps.Mon but était de faire l'expérience de participants ayant un corps différent de leur un, donc j'ai modifié un gilet de sauvetage et a soumis à sable, ce qui en fait pese
Impulsions modulées en platine tourne-disque

Impulsions modulées en platine tourne-disque

Ce projet vous enseigne comment pirater un tourne-disque à spin basé sur votre fréquence cardiaque. Essentiellement, nous allons être collecte des données du capteur de pouls via l'Arduino. Puis nous prenons le convertir de moyenne gamme humaine de B