Pulse Sensor Plumbob (4 / 5 stap)

Stap 4: Arduino codering

ONDERBREKEN

vluchtige int tarief [10];                    gebruikt om te houden IBI van laatste tien waarden
volatile unsigned long sampleCounter = 0;          gebruikt om te bepalen van de timing van de pols
volatile unsigned long lastBeatTime = 0;           gebruikt voor het vinden van het inter-beat-interval
vluchtige int P = 512;                      gebruikt voor het vinden van hoogtepunt in de pols golf
vluchtige int T = 512;                     gebruikt om te zoeken via pols golf
vluchtige int propageren = 512;                gebruikt voor het vinden van instant moment van hartslag
vluchtige int amp = 100;                   gebruikt om te houden van de amplitude van pulse golfvorm
vluchtige Booleaanse firstBeat = true;        zaad tarief matrix zo gewend we opstarten met redelijke BPM
vluchtige Boole secondBeat = waar;       zaad tarief matrix zo gewend we opstarten met redelijke BPM

ongeldig interruptSetup() {}
Timer2 te gooien een interrupt elke 2mS initialiseert.
TCCR2A = 0X02;     UITSCHAKELEN PWM OP DIGITALE PENNEN 3 EN 11, EN GA NAAR CTC MODUS
TCCR2B = 0X06;     FORCEER NIET VERGELIJKEN, 256 PRESCALER
OCR2A = 0X7C;      DE TOP van de graaf voor 500Hz SAMPLINGFREQUENTIE ingesteld op 124
TIMSK2 = 0X02;     INSCHAKELEN ONDERBREKEN OP DE MATCH TUSSEN TIMER2 EN OCR2A
Sei();             CONTROLEER OF GLOBAL INTERRUPTS ZIJN INGESCHAKELD
}

DIT IS DE TIMER 2 INTERRUPT SERVICE ROUTINE.
Timer 2 zorgt ervoor dat wij een lezing elke 2 miliseconden
ISR(TIMER2_COMPA_vect) {/ / geactiveerd wanneer Timer2 naar 124 telt
cli();                                      interrupts uitschakelen terwijl we dit doen
Signaal = analogRead(pulsePin);              Lees de Pulse-Sensor
sampleCounter += 2;                         bijhouden van de tijd in mS met deze variabele
int N = sampleCounter - lastBeatTime;       bewaken van de tijd sinds de laatste beat om te voorkomen dat lawaai

vinden van de piek en dal van de pols golf
Als (signaal < propageren & & N > (IBI/5) * 3) {/ / dichrotic ruis te vermijden door te wachten 3/5 van laatste IBI
Als (signaal < T) {/ / T is de trog
T = signaal;                         bijhouden van laagste punt in de pols golf
}
}

Als (signaal > propageren & & signaal > P) {/ / propageren voorwaarde helpt voorkomen dat lawaai
P = signaal;                             P is de piek
} / / bijhouden van hoogtepunt in de pols golf

NU IS HET TIJD OM TE ZOEKEN DE HARTSLAG
Spanningspulsen signaal omhoog in waarde, telkens als er een puls
Als (N > 250) {/ / hoge frequentie ruis te voorkomen
Als ((signaal > propageren) & & (Pulse == false) & & (N > (IBI/5) * 3)) {}
Pulse = true;                               set de Pulse-vlag als we er denken is een puls
digitalWrite(blinkPin,HIGH);                pin 13 LED inschakelen
IBI = sampleCounter - lastBeatTime;         meten van de tijd tussen de beats in mS
lastBeatTime = sampleCounter;               bijhouden van de tijd voor volgende pulse

if(firstBeat) {/ / als het is de eerste keer vonden we een beat, als firstBeat == TRUE
firstBeat = false;                 firstBeat markering wissen
terugkeer;                            IBI waarde is onbetrouwbaar dus gooi het
}
if(secondBeat) {/ / als dit de tweede beat, if is secondBeat == TRUE
secondBeat = false;                 secondBeat markering wissen
for (int i = 0; ik < = 9; i ++) {/ / zaad van het lopende totaal te krijgen een realisitic BPM bij het opstarten
tarief [i] = IBI;
}
}

Houd een lopend totaal van de laatste 10 IBI-waarden
woord runningTotal = 0;                   Schakel de runningTotal variabele

voor (int i = 0; ik < = 8; i ++) {/ / verplaatsen van gegevens in de array tarief
tarief [i] = overdrachtsnelheid [i + 1];              en neerzetten van de oudste IBI-waarde
runningTotal += tarief [i];          de 9 oudste IBI waarden optellen
}

Stem op [9] = IBI;                          de nieuwste IBI toevoegen aan de matrix tarief
runningTotal += tarief [9];                de nieuwste IBI aan runningTotal toevoegen
runningTotal / = 10;                     de laatste 10 IBI gemiddelden
BPM = 60000/runningTotal;               Hoeveel beats kunnen passen in een minuut? dat is de BPM!
QS = true;                              Stel zelf gekwantificeerd vlag
QS VLAG WORDT NIET GEWIST BINNEN DEZE ISR
}
}

Als (signaal < propageren & & Pulse == true) {/ / wanneer de waarden worden naar beneden, de beat is voorbij
digitalWrite(blinkPin,LOW);            uitschakelen van de pin 13 LED
Pulse = false;                         reset van de Pulse-vlag, zodat we het weer doen kunnen
amp = P - T;                           krijgen van de amplitude van de Golf van de pols
propageren = amp/2 + T;                    set propageren op 50% van de amplitude
P = propageren;                            deze voor de volgende keer opnieuw instellen
T = propageren;
}

Als (N > 2500) {/ / als 2,5 seconden gaan zonder een beat
propageren = 512;                          set propageren standaard
P = 512;                               P standaardwaarde instellen
T = 512;                               T standaardwaarde instellen
lastBeatTime = sampleCounter;          de lastBeatTime op de hoogte brengen
firstBeat = true;                      Dit om te voorkomen dat lawaai instellen
secondBeat = true;                     Wanneer we de hartslag terug te krijgen
}

Sei();                                     inschakelen onderbreekt wanneer youre gedaan!
} / / einde van isr

ARDUINO

/*
>> Sensor Amped 1.1 pulse <<
Deze code is voor Pulse Sensor Amped door Joel Murphy en Yury Gitman
www.pulsesensor.com
>>> Pulse Sensor paarse draad naar analoge Pin 0 gaat <<<
Pulse Sensor monster acquisitie en verwerking gebeurt op de achtergrond via Timer 2 interrupt. samplefrequentie van 2mS.
PWM op pin 3 en 11 zal niet werken wanneer using zulks wetboek, omdat we zijn met behulp van Timer 2!
De volgende variabelen worden automatisch bijgewerkt:
Signaal: int die in het bezit van het analoge signaal gegevens rechtstreeks uit de sensor. bijgewerkt elke 2mS.
IBI: int die in het bezit van het tijdsinterval tussen beats. resolutie van de 2mS.
BPM: int die in het bezit van de hartslag, ontleend elke beat, gemiddeld vorige 10 IBI-waarden.
QS: boolean die true wanneer de Pulse is gevonden is en BPM is bijgewerkt. Gebruiker moet opnieuw instellen.
Pulse: Boolean-waarde die geldt als een hartslag is voelde dan vals in de tijd met pin13 LED uitgaan.

Deze code is ontworpen met seriële uitvoergegevens naar Processing Schets "PulseSensorAmped_Processing-xx"
De Processing schets is een eenvoudige data-visualisatie.
Al het werk te vinden van de hartslag en het bepalen van de hartslag gebeurt in de onderstaande code.
Pin 13 LED zal knipperen met hartslag.
Als u pin 13 voor iets anders gebruiken wilt, past u de interrupt handler
Het zal ook een LED op pin fadePin met elke beat vervagen. Zet een LED en een serie weerstand van fadePin naar GND.
Bekijk hier voor gedetailleerde code walkthrough:
http://pulsesensor.myshopify.com/pages/Pulse-sensor-Amped-Arduino-v1dot1

Code versie 02 door Joel Murphy & Yury Gitman najaar 2012
Deze update wijzigt de naam van de HRV-variabele aan IBI, wat voor inter Beat Interval, voor de duidelijkheid staat.
De interrupt overgeschakeld naar Timer2.  500Hz samplefrequentie, 2mS resolutie IBI waarde.
Fade LED pin verhuisde naar pin 5 (gebruik van Timer2 schakelt PWM op pin 3 & 11).
Opgeruimd van inefficiënties sinds de laatste versie.
*/

VARIABELEN
int pulsePin = 0;                 Hartslag Sensor paarse draad aangesloten op analoge pin 0
int blinkPin = 7;               PIN te knipperen leidde bij elke hartslag

int fadePin = 5;                  PIN te verbeelden stijlvolle fading knipperen bij elke hartslag
int fadeRate = 0;                 gebruikt voor LED fade op met PWM op fadePin

deze variabelen zijn volatiel, omdat ze worden gebruikt tijdens de interrupt service routine!
vluchtige int BPM;                   gebruikt om te houden van de polsslag
vluchtige int signaal;                houdt de binnenkomende onbewerkte gegevens
vluchtige int IBI = 600;             houdt de tijd tussen de beats, het Interval tussen Beat
vluchtige Booleaanse Pulse = false;     waar wanneer pulse wave hoog, false is als het lage
vluchtige Booleaanse QS = false;        waar wordt als Arduoino een beat vindt.

VOID Setup {}

pinMode(blinkPin,OUTPUT);         PIN die naar uw hartslag zal knipperen!
pinMode(fadePin,OUTPUT);          PIN dat tot je hartslag vervagen zal!
Serial.begin(115200);             We willen snel praten!
interruptSetup();                 stelt te lezen Pulse Sensor signaal elke 2mS
UN-COMMENT de volgende regel als u zijn het VOEDEN van de Pulse-Sensor op laagspanning,
EN DIE SPANNING VAN TOEPASSING OP DE PIN A-REF
analogReference(EXTERNAL);
}

void loop {}
sendDataToProcessing (de ', signaal);     Stuur verwerking van de ruwe gegevens van de Pulse Sensor
Als (QS == true) {/ / gekwantificeerd zelf vlag geldt wanneer arduino een hartslag vindt
fadeRate = 255;                  'FadeRate' variabele ingesteld op 255 te vervagen LED met pulse
sendDataToProcessing('B',BPM);   Stuur hartslag met een 'B'-prefix
sendDataToProcessing('Q',IBI);   tijd tussen beats met een voorvoegsel 'Q' verzenden
QS = false;                      Reset de vlag gekwantificeerd zelf voor de volgende keer
}

ledFadeToBeat();

vertraging(20);                             Neem een pauze
}

ongeldig ledFadeToBeat() {}
fadeRate-= 10;                         LED vervagen waarde instellen
fadeRate = constrain(fadeRate,0,255);   LED vervagen waarde in negatieve getallen gaan houden!
analogWrite(fadePin,fadeRate);          vervagen van LED
}

VOID sendDataToProcessing (char symbool, int data) {}
Serial.Print(Symbol);                symbool voorvoegsel vertelt verwerken wat voor soort gegevens komt
Serial.println(Data);                de gegevens moeten worden verzonden die wordt afgesloten met een regeleinde
}

Gerelateerde Artikelen

Zelfgemaakte Arduino vriendelijke Pulse Sensor

Zelfgemaakte Arduino vriendelijke Pulse Sensor

Ik zag de Open Hardware Pulse Sensor bij gedachte dat ik zou proberen om er thuis. Kostte me een tijdje, maar hier is mijn stuntelige proces.Stap 1: Pulse Sensor--overzichtIk heb gewerkt aan het opnieuw maken van de de Open Hardware Pulse Sensor dus
Wearable hartslag sensor ESP8266 + Pulse sensor

Wearable hartslag sensor ESP8266 + Pulse sensor

Als onderdeel van een wens om te leren over ESP8266 als standaloneIk dacht over een project voor puls sensor aansluiten en doorgeven van de BPM op de computer door TCP-verbinding.Tijdens de bouw kwam ik enkele problemen.De problemen bij mijn mening,
Pulse Sensor met Bluetooth en Arduino

Pulse Sensor met Bluetooth en Arduino

Dit is bedoeld om het gebruik van de puls-sensor (dat is nu gemakkelijk beschikbaar) met arduino uno projecten en Bluetooth HC-05 module, de pols-sensor op de vinger wordt geplaatst en het meet de hartslag en stuurt de hartslag naar android mobiele t
Pulse Sensor gecontroleerd staart

Pulse Sensor gecontroleerd staart

Hey iedereen!Deze Tutorial doorloopt de stappen van hoe maak je eigen animatronic staart! Ik heb veel aimatronic staarten die hetzij gecontroleerd door een afstandsbediening of ingesteld op een continue sweep-code, heb ik besloten om mijn staart word
Arduino Pulse Sensor

Arduino Pulse Sensor

Dit is mijn eerste project hier, een arduino pro mini bord met Pulse Sensor gepubliceerd.Hier zal ik u laten zien hoe ik het deed mijn arduino bekabeling en codering, met inbegrip van de broncode en schema's. Ook ik een windows-hulpprogramma om aan t
Valentines Pulse Sensor

Valentines Pulse Sensor

bouwen op andermans werk, ik kwam met dit kleine apparaat om te gaan en mijn hartslag meten. Nu, ik wist dat het gepast was om te gaan en een hart-vorm maken van LEDs en zo, ik deed. Niet met een sjabloon, was ik nogal clueless. Een beetje experiment
Arduino Pulse Sensor Cardio grafiek

Arduino Pulse Sensor Cardio grafiek

De toepassing van de Arduino Pulse Sensor Cardio Graph illustreert hart beat informatie in grafische vorm. De toepassing toont verschillende hartslag variatie grafieken: Beats Per Minute (BPM), Interbeat intervallen (IBI), hartslag frequentie (Hz), P
Het gebruik van Pulse Sensor

Het gebruik van Pulse Sensor

Puls is een opensource hartslagsensor.Het maakt gebruik van verschillende lichtdoorlatendheid voor weefsels van het lichaam veroorzaakt door vasculaire pulserende voor het meten van de hartslag.Stap 1:1. bouw van de Arduino omgeving, de Arduino IDE d
LED Pulse Sensor (PPG) voor Arduino

LED Pulse Sensor (PPG) voor Arduino

Binnen dit Instructable ik zal je laten zien, het implementeren van een eenvoudige PPG (photoplethysmogram)-sensor voor de arduino. Dit apparaat gebruikt infrarood licht om je pols meten. U kan deze techniek weten uit de vingertop pulse sensoren in z
DIY Arduino Pulse Sensor

DIY Arduino Pulse Sensor

Dus vermeld ik in een eerdere Instructable dat ik een onderwijs-assistent (TA) voor een engineering introductiecursus voor biomedische ingenieurstechnieken majors aan de Vanderbilt University. Mijn belangrijkste taak als een TA is opnieuw schrijven e
Snake spel met pulse sensor

Snake spel met pulse sensor

Dit is een spel van de slang die is genavigeerd door een joystick. We hebben ook een hartslag sensor gebruikt om tweak het spel. De puls-sensor maakt het scherm veranderen van kleur afhankelijk van je hartslag. Het moment wanneer je hart klopt, is he
NeoPixel LED hart Sensor jas

NeoPixel LED hart Sensor jas

Start uit te proberen te laten uitzien als Iron Man, uiteindelijk te denken een beetje over je menselijkheid, hebben veel plezier in het proces. Dit project is bedoeld om te produceren en interessante en onverwachte ingang van een bron die we nemen v
Arduino aangedreven digitale pulse meter

Arduino aangedreven digitale pulse meter

In dit instructable, ga ik te laten zien hoe mijn PIC16F628A gebaseerd pols meter project met behulp van de Arduino te repliceren. Dit project maakt gebruik van een Arduino Uno bestuur, een Easy Pulse Plugin sensoren een 4-cijferige SPI zeven segment
LinKit One Pulse Rate Monitor

LinKit One Pulse Rate Monitor

Dit is een erg leuk en cool instructable, In dit instructable ga ik u tonen hoe te bouwen van een hartslagmeter tarief. Dit apparaat controleert uw hart BPM (beats per minuut) en weergegeven op het scherm. Dit project heeft een brede waaier van medis