Pulspletysmografi - (IR-pulsmätare) (4 / 5 steg)

Steg 4: Arduino programvara



Att komma igång behöver du GFX och ST7735 Arduino biblioteken från Adafruit. Du hittar dem här (tack Limor).

GFX bibliotek

https://github.com/adafruit/Adafruit-gfx-Library

ST7735 bibliotek

https://github.com/adafruit/Adafruit-ST7735-Library

Inte säker på hur man installerar en Arduino bibliotek? Sedan gå här för fullständiga instruktioner;

https://www.Arduino.cc/en/guide/libraries

Hur det fungerar

Vid start, programvaran vänder på IR-Led och anger att användaren av produkten krävs och kommer att inledas i 10 sekunder. Detta ger användartid placera sitt finger i sensorn.

Under allt programvaran läser utdata för att ADC för 10000 gånger, pausa kort för 1mS per läst. Detta används för att registrera de högsta och lägsta gränserna av den råa samplade signalen.

Dessa högsta och lägsta värden används för att bestämma dynamiska triggerpunkter att upptäcka en kraftigt stigande kanten i hjärtrytm aktivera tidpunkten för perioden mellan pulser och därmed beräkna BPM.

Den låga trigger introducerar hysteres och är nödvändiga för att förhindra åter utlösa på grund av hög samplingsfrekvens som visar ovan.

Hög nivå trigger point iPulseTriggerLevelHigh är 90% av toppen (gröna stjärnor i diagrammen ovan) och låg nivå trigger-punkt är iPulseTiggerLevelLow är 70% av toppen (blå stjärnor i diagrammen ovan).

Programvaran kommer då in en oändlig loop signal provtagning efter en förfluten tid dikteras av ulElapsedTime, ungefärligt 1mS eller 1000Hz. Detta kan justeras genom att variera #define SAMPLE_PERIOD_uS.

Förfluten tid förseningen är inte ett blockerande samtal så andra bakgrunden uppgiften kan utföras vid behov.

När ett prov av hjärtat slå läses från ADC värdet skalas för att passa fönstret vågform. Denna skala är bara en direkt 0-5v = > 0-1023 = > 0-100.

Jag utelämnats avsiktligt automatisk skalning för fönstret vågform som jag hittade när jag tagit den, vågformen ganska mycket försedda fönstret varje gång, som du förväntar. Gör så att du förlorat en hel del viktig information, till exempel när mina fingrar var kallt eller dåligt placerade i sensorn och följaktligen pulsen utgång nivå var låg. Det kändes det mer användbart att hålla denna information närvarande. Dock gav jag en variabel fAmplificationFactor (linje 171, inställd på 2.1) som kan användas för att skala din signal om dina färdigheter i elektronik och konstruktion ger en mindre känslig signal än vad jag kan uppnå.

Koden avgör sedan om detta är en stigande kant (se diagram ovan för logik). Om det är någon fallande kant har upptäckts tiden lagras i ulPulseCurrentTime. Men om det är och en fallande kant har upptäckt detta innebär att den totala träningstiden är perioden mellan pulser.

Programvaran sedan beräknar BPM (som i diagrammen ovan) och justerar för en sjal i funktionsanropet millis() om det behövs.

Denna nya puls lagras sekventiellt i den rullande fönster buffer array lBPMArray [] och genomsnittligt beräknats över alla prover. Den nya beräknade BPM är jämfört med den gamla BPM. Om det är skillnad på uppdateras displayen med det nya värdet. Vilket minskar TFT uppdatering overhead.

Under utvecklingen av koden jag märkte att det inte var möjligt att optimera en enda avsökningshastighet av TFT för BPMs sträcker sig 50... 200. Så ändras iSampleCountMax dynamiskt när pulsen överstiger 100BPM så att skärmen inte blir för trångt och formen på pulsen är fortfarande tydlig.

Den programvara sedan klipp vågformen om av någon anledning är det tog stora för visning och uppdaterar skärmen med det senaste ADC provet och tomter i fönstret vågform.

Tidigare plottade värden först tas bort genom att skriva en lodrät svart linje före handlingen ställning "i farten".

Loopen upprepas.

Rullande medelvärde

Puls beräknas genom att ta en kontinuerligt uppdaterad rullande medelvärde av perioder mellan pulser. Längden på det flytande medelvärdet kan justeras genom att ändra värdet för #define MAX_BPM_ARRAY_SIZE. Ju längre gör du det desto långsammare uppdateringar, men desto bättre tillnärmning (förutsatt att fingret hålls stadigt i sensorn).

För att frön genomsnittet med ett startvärde är array lBPMArray [] pre-lastat med en puls på 60BPM på starta upp.

.

En kopia av koden har inkluderats nedan.

Se Steg
Relaterade Ämnen

Soldriven pulsmätare

Hej alla! I detta Instructable, ska jag visa dig hur man gör ditt eget Arduino-baserad pulsmätare! Men detta är inte bara alla andra DIY värme Rate Monitor; Detta är en Solar Powered pulsmätare!Denna pulsmätare är att för landsbygden i Afrika och Asi...

DIY pulsmätare med TCRT5000L och LM358

göra din egen pulsmätare med enkla komponenter. Scheman finns (se kommentar). Njut!...

DIY puls pulsmätare

Följande instructable representerar en puls pulsmätare med Linkit ONE. Det kan visa din puls på en seriell övervaka. Projektet är mycket lätt att göra och kräver mycket mindre delar och tid att montera.Detta är min första instructable. Behaga en posi...

Linkit en puls pulsmätare

Detta är en riktigt rolig och cool instructable, i detta instructable jag ska visa dig hur man bygger en puls pulsmätare. Denna enhet övervakar ditt hjärta BPM (slag per minut) och visar den på skärmen. Detta projekt har ett brett utbud av medicinska...

Hur man analyserar pulsmätare data

jag har använt en pulsmätare (HRM) i år. Jag gillar det eftersom det ger mig ett objektivt mått på hur hårt jag har arbetat. Jag har läst de häften som medföljer i förpackningen när du köper din HRM. Detta är den "Zon" system som används för att...

Elektrokardiografiska & pulsmätare

detta instructable visar dig hur man gör en elektrokardiografiska och pulsmätare. Den är avsedd att vara en rolig vetenskap projekt bara. Naturligtvis bör det inte fungera som ett medicinskt syfte.Observera: För att undvika varje risk för elektriska...

LinkIt en avlägsen pulsmätare

Detta instructable visar hur man bygger en Wifi aktiverat pulsmätare med hjälp Mediatek LinkIt ett development kit. Hjärtfrekvensen bestäms med hjälp av photoplethysmograph (PPG) signal från motivets fingertoppen. Puls informationen överförs regelbun...

Hemgjorda pulsmätare

Vi har utformat detta pulsmätare med flera specifikationer i åtanke. Först ville vi ha en mobil pulsmätare som kan spela in och lagra pulsnivå i 24 timmar. För det andra ville vi pulsmätaren för att kunna plocka upp pulsen under normal rörelse och nä...

Intellekten Edison: pulsmätare

Detta är hur man gör en enkel DIY pulsmätare med Intel Edison.Den huvudsakliga bygget själv är ganska enkel. Du behöver en liten slang. LDR-motstånd och en led.Koden måste å andra sidan en hel del kalibrera.Jag använde min typiska puls på baslinjen w...

Talar Arduino pulsmätare

Min partner och jag ville göra pulsmätare som mer än att bara mäter en användares pulsen. Våra hjärta frekvensen ordningsmanen samtal! Varje knapp ger en verbal beskrivning av dess funktionalitet och gör mätningarna visas på skärmen. Denna bildskärm...

Webbaktiverade Polar pulsmätare

Använd en Polar pulssensor, en billig hårdvara ombord ansluten via USB och en liten bit av programvara för att sätta din puls på webben. Realtidsdata är serveras direkt från din dator och göras tillgängliga via Yaler reläet (disclosure: Jag är en av...

Hur man gör en styrfäste för en Garmin eller andra pulsmätare

material:EltejpSkrot tunn träbitPlast tape "Bärande"skrot av tunn gummi matta/duk1) först skära plast bandet med hälften, är detta vad kommer att öka diametern på styret så titta del av pulsmätaren passar runt den mindre diameter slangen.2) fäst...

Pulsmätare med ett fotomotstånd

Detta projekt använder en NI myRIO, ett fotomotstånd och naturlig belysning för att avgöra din puls. När en knapp trycks på myRIO, läses spänningen från fotomotstånd i 10 sekunder. Slag per minut är sedan visas på en LCD-display med Pmod adaptern för...

Trådlös pulsmätare

Detta instructable är att ge en tutorial för att integreringen av en puls Sensor Amped, en Arduino Uno och nrf240L01 + transceiver moduler för att bilda en trådlös överföring från komponenter som kan enkelt köpas "från hyllan".Steg 1: Få puls se...

Pulsmätaren

Detta Instructable handlar om att göra en pulsmätare med hjälp av en piezoelektrisk sensor. Jag har läst någonstans i avsnittet medicinska Hacks i "Hackaday blogg" och tänkte ge det ett försök. Jag har också lagt till en bearbetning skiss som dr...

Heart rate monitor with PC connectivity

En puls monitor(HRM) är en personlig övervakning anordning som gör att man kan mäta sin puls i realtid eller registrera pulsen för senare studie. Det är i stor utsträckning av artister av olika typer av fysisk träning. Detta projekt visar en teknik f...

Mätintervall för puls enhet använder arduino

Detta projekt visar du hur att designa och bygga en apparat för att mäta pulsen med hjälp av våra härliga Arduino!Steg 1: Grundläggande information om projektet En pulsmätare är en personlig övervakning anordning som gör att man kanSom du ser i figur...

Garderob förvaring för en Ski maskin och andra ändringar

detta är våra 1991 NordicTrack Challenger Ski maskinen viks till en vertikal konfiguration jag aktiverat för lagring i en hall garderob. Vi bor i en mindre hem nu och har inte utrymme i källaren för en NordicTrack ski maskin att sitta redo att använd...

Styra bluetoothenheter LE från en Raspberry Pi

Bluetooth Low Energy (aka BLE/Bluetooth 4.0/Bluetooth Smart) är den senaste inkarnationen av Bluetooth teknik som utvecklats av Bluetooth SIG (den organisation som underhåller specifikationen). Detta meddelande protokoll är avsedd för applikationer d...