Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Hartslag detecteren met een fotoresistor

Componenten en benodigdheden

Digilent OpenScope MZ
× 1
Arduino UNO
× 1
Texas Instruments Quad Op-Amp voor algemeen gebruik
× 1
Texas Instruments High Speed ​​Single Comparator
× 1
Multi-Turn Precisie Potentiometer - 10k ohm (25 Turn)
× 2
Single Turn Potentiometer-100k ohm
Als u een multi-turn potentiometer kunt krijgen, is deze gemakkelijker af te stellen.
× 1
Single Turn Potentiometer - 10k ohm
× 1
Condensator 100 µF
× 1
Condensator 100 nF
× 1
Weerstand 10k ohm
Of een enkele 20k
× 2
Weerstand 4.75k ohm
× 1
Weerstand 82k ohm
Je kunt ook twee van de 100k potentiometers nemen en één instellen op 82k.
× 1

Apps en online services

Arduino IDE
Digilent WaveForms Live

Over dit project

Inleiding

Dit project is geïnspireerd op een YouTube-video gepost door CapitanoRed , waar de auteur een op fotoresistor gebaseerde hartslagmeter maakte om op een oscilloscoop weer te geven. Nadat ik hun video had gezien, wilde ik het project repliceren en een Arduino toevoegen om de hartslag te berekenen en weer te geven. Op die manier zou je naar de golfvorm op een oscilloscoop kunnen kijken en tegelijkertijd je hartslag kunnen uitlezen.

Wanneer het hart samentrekt en bloed door het lichaam stuwt, zijn de tijdelijke schommelingen in de bloeddruk waarneembaar. Dit is de reden waarom we onze pols kunnen voelen. In delen van het lichaam waar de huid en het vlees dun genoeg zijn, kunnen deze pulsen worden gedetecteerd in de kleine variaties van het licht dat er doorheen gaat. Hoewel onze ogen niet gevoelig genoeg zijn om het licht zelfs maar door ons lichaam te zien gaan, om nog maar te zwijgen van de fluctuaties, hebben fotoresistors dit niveau van gevoeligheid.

Een fotoweerstand varieert zijn weerstand met de intensiteit van het licht dat erop valt. Hoewel de variatie in weerstand vrij klein kan zijn voor subtiele veranderingen in lichtintensiteit, kunnen ze worden versterkt met behulp van een aantal operationele versterker-IC's.

Werkingsprincipes

De onderstaande diagrammen tonen het schema van het circuit en het breadboard dat in dit project wordt gebruikt.

De fotoweerstand zit in een spanningsdeler met de 20kΩ weerstand, wat betekent dat naarmate de hoeveelheid licht op de weerstand toeneemt, de spanning op de deler ook toeneemt. De eerste operationele versterker ("Amp1" in de afbeelding hierboven) dient als een filter voor de spanningsdeler en verwijdert hoogfrequente ruis uit het signaal. De tweede opamp ("Amp2") dient als een inverterende versterker, ingesteld om het signaal dat door het filter komt te maximaliseren. De derde operationele versterker ("Amp3") stelt de virtuele aarde in, die het signaal centreert op 2,5V. Dit zorgt ervoor dat de opamps een maximale signaalzwaai van 0V tot 5V kunnen leveren. Nadat het is gefilterd en versterkt, ziet het signaal er ongeveer zo uit.

Om de Arduino je hartslag te laten meten, moet het signaal door een comparator ("Cmp" in het schema). Een comparator is een gespecialiseerde op-amp die is ontworpen om een ​​hoog of laag signaal uit te voeren. Wanneer de spanning aan de positieve ingang groter is dan de negatieve ingang, geeft de comparator een hoge output, en wanneer de spanning aan de positieve ingang kleiner is dan de negatieve ingang, geeft de comparator een lage output. In de meest elementaire configuratie dient een comparator als een drempeldetector, die aangeeft wanneer de gemeten spanning boven of onder die drempel ligt. Omdat een comparator ofwel hoog (5V) of laag (0V) uitvoert, is hij perfect voor interfaces met de digitale pinnen van een Arduino.

Als we het beeld van het signaal van de opamp van dichterbij bekijken, is het duidelijk dat er een secundaire puls is voordat de spanning daalt (dit wordt de dicrotische notch genoemd). Bovendien is er een aanzienlijke hoeveelheid ruis in het signaal. Deze twee feiten betekenen dat de basisconfiguratie van de comparator pulsen niet goed kan detecteren. In plaats van een enkele vierkante puls voor elke hartslag, genereert de comparator meerdere pulsen. Dit zal gebeuren omdat ruis ervoor zorgt dat het signaal meerdere keren de drempel overschrijdt tijdens de op- en neergaande beweging, en, afhankelijk van waar de drempels zijn ingesteld, mogelijk tijdens de dicrotische notch. Dit zal ertoe leiden dat de Arduino veel meer pulsen telt dan er daadwerkelijk aanwezig waren.

Een ruissignaal kan worden opgevangen door hysterese te gebruiken. Dit document door Texas Instruments presenteert een uitstekende discussie over het onderwerp signaalconditionering met hysterese, laat zien hoe signaalruis de prestaties van comparatoren beïnvloedt en hoe met deze problemen om te gaan. Ik gebruikte hun schema's en afgeleide vergelijkingen (respectievelijk pagina's 5 en 7 van het document) om de asymmetrische comparator voor dit project te ontwerpen. Het algemene idee is dat een feedbacklus van de uitgang de spanning op de positieve ingang zal veranderen, wat betekent dat de drempel om van laag naar hoog te gaan anders zal zijn dan de drempel om van hoog naar laag te gaan. Wat dit in de context van hartpulsen betekent, is dat de comparator kan worden ingesteld om op één punt van de opwaartse beweging te activeren en vervolgens op een ander punt op de neerwaartse beweging, bij voorkeur na de dicrotische inkeping. Op deze manier ziet de Arduino een enkele vierkante puls voor elke hartslag, zoals hieronder weergegeven.

Voorbereiding van de fotoresistor

Ik raad ten zeerste aan om een ​​soort doorzichtige hoes op de fotoresistor te gebruiken, zoals doorzichtige krimpkous. Zorg er in ieder geval voor dat de snoeren volledig bedekt zijn om te voorkomen dat ze uw huid aanraken. De spanningen die door uw lichaam worden gegenereerd, vallen ruim binnen het bereik dat de fotoresistor creëert wanneer deze uw hartslag detecteert, dus contact met uw huid kan de resultaten vertekenen.

De hartslagmeter afstemmen

Gebruik voor de potentiometer in het schema (R7) een potentiometer met één slag en pas deze aan om de versterking van de opamp te maximaliseren zonder in verzadiging te raken. Begin door één kant van de potentiometer in te stellen op ongeveer 375Ω en het filter ("Amp1") aan deze kant aan te sluiten. Deze hoeveelheid versterking zou voldoende puls moeten genereren om het in WaveForms Live te kunnen zien. Nadat u de stappen in de volgende sectie ("Pulsen in WaveForms Live bekijken") hebt gevolgd en uw hartslag met succes hebt bekeken, kunt u de versterking indien nodig wijzigen. Verhoog de pulsamplitude door aan de potentiometer te draaien om de weerstand aan de filterzijde te verkleinen. Als de amplitude al te groot is en clipping veroorzaakt, maak dan de weerstand aan de filterzijde groter. Lees de bijschriften bij de afbeeldingen die volgen om te bepalen hoe een gewenst signaal eruitziet.

Ik raad aan om multi-turn potentiometers te gebruiken voor weerstanden R3 en R4 om de drempels voor de comparator nauwkeurig in te stellen. Weerstand R5 kan elke weerstand zijn in het bereik van 10-100 kΩ, zolang deze maar nauwkeurig wordt gemeten. U kunt de spreadsheet in de bijlagensectie gebruiken om te bepalen op welke waarden R3 en R4 moeten worden ingesteld op basis van de gemeten waarde van R5 en de drempelspanningen. De drempels "Vl" en "Vh" moeten worden gewijzigd op basis van de puls die u door de oscilloscoop ziet (zie het gedeelte met de titel "Comparatordrempels instellen").

Weerstanden R8 en R9 kunnen worden vervangen door één potentiometer, waarbij de middelste pin wordt aangesloten op de positieve ingang van de opamp. Op deze manier kan de virtuele aarde eenvoudig worden aangepast zonder dat u bijpassende weerstanden hoeft te zoeken. Gebruik een voltmeter of de OpenScope terwijl u de output instelt op 2,5V.

Pulsen bekijken in WaveForms Live

Om je hartslag via WaveForms Live te bekijken, moet je enkele instellingen in het menu wijzigen. Standaard is de uitvoer ofwel langwerpig en moeilijk te interpreteren, of de updatesnelheid zal erg traag zijn en het zal moeilijk zijn om uw greep op de fotoresistor aan te passen om duidelijke pulsen te genereren.

Sluit de OpenScope oscilloscoop Kanaal 2 (blauwe draad) aan op de uitgang van "Amp2" en zorg ervoor dat de aardedraad is verbonden met de aarde op het breadboard. Verander in WaveForms Live Tijd naar "1s" en in de Trigger menu druk op de UIT knop. Voor beide Osc Ch 1 en Osc Ch2 menu's instellen Verschuiving tot 2,5V en naast Samples klik op het slotpictogram en typ "1000" in het veld dat beschikbaar komt. Hierdoor verschijnt het signaal op een tijdschaal die gemakkelijk te interpreteren is, maar waardoor de updates vaker plaatsvinden dan standaard het geval zou zijn. Het scherm zou ongeveer elke 4 seconden moeten worden bijgewerkt. Als dit nog steeds te traag is, kunt u de Samples . vergroten waarde, maar ten koste van een korter fragment van het signaal ("2000" legt ongeveer één hartslag per keer vast).

Druk op de RUN knop en neem uw hartslag met uw vinger op de fotoresistor. U moet de beste manier vinden om consistente resultaten te krijgen. Het systeem is erg gevoelig voor veranderingen in druk, dus je moet een manier vinden om je vinger heel stil te houden. Ik vond de beste plaats om mijn pols te nemen in het eerste gewricht van de wijsvinger. Het kost wat tijd om jezelf te trainen, maar uiteindelijk vind je de beste methode. Als uw hartslag te klein lijkt, past u de potentiometer aan volgens de instructies in de eerste alinea van het vorige gedeelte ("De hartslagmeter afstemmen").

Vergelijkingsdrempels instellen

Zodra het signaal zichtbaar is op de oscilloscoop, moet u de drempels instellen waarop de comparator de Arduino activeert en signaleert. Krijg een representatieve golfvorm en stop het vastleggen om de golfvorm op het scherm te houden. Druk onderaan het scherm op de CURSORS knop. Onder Type selecteer "Voltage" en stel beide CursorChannels . in naar "Osc 2". Op het display verschijnen twee horizontale stippellijnen. Sleep de driehoeken aan de linkerkant om ze te verplaatsen. Zet een van de lijnen op een punt in de buurt van de piek van de puls en de andere op een punt onder de dicrotische inkeping. Kijk naar de onderkant van het scherm en noteer de twee spanningen die tussen haakjes worden weergegeven. Voer deze waarden in als de drempelspanningen "Vl" en "Vh" in het werkblad dat aan het einde is bijgevoegd. De kleinere waarde is "Vl" en de grotere is "Vh". Op basis van deze waarden en de R5-waarde van de weerstand die je hebt gekozen, stel je de R3- en R4-waarden van de potentiometer in die de spreadsheet berekent.

Nadat de comparator is ingesteld, moet deze een signaal beginnen af ​​te geven dat lijkt op het signaal vóór de sectie "Voorbereiding van de fotoresistor".

Arduino-code

De Arduino-code bestaat uit een frequentieteller en een methode om de hartslag in slagen per minuut te berekenen. De frequentieteller houdt rekening met de breedte van de puls die uit de comparator komt en verwerpt alles kleiner dan 200 milliseconden of groter dan 800 milliseconden. Dit voorkomt dat er valse gegevens worden weergegeven wanneer de fotoresistor niet wordt gebruikt voor metingen en de comparator hoog of laag kan zijn of snel tussen de twee toestanden kan schakelen. De code houdt een lopend gemiddelde van de hartslag van de afgelopen 15 seconden bij om gemiste pulsen als gevolg van signaalruis veroorzaakt door onbedoelde bewegingen uit te filteren.

Toekomstige verbeteringen

Het belangrijkste nadeel van dit project is dat het moeilijk is om de fotoweerstand zo vast te houden dat de pulsen dezelfde amplitude hebben tussen gebruik. Omdat de sensor voor pulsdetectie afhankelijk is van omgevingslicht, kunnen veranderende lichtniveaus gedurende de dag verschillende resultaten opleveren. Ik merkte dat op bewolkte dagen mijn comparatordrempels te breed waren, en op helder verlichte dagen was de dicrotische inkeping erg uitgesproken en kon een valse pulsdetectie veroorzaken. Bovendien zijn zelfs subtiele lichtveranderingen veroorzaakt door beweging in de kamer detecteerbaar door de fotoresistor. De kwestie van consistentie kan op een aantal verschillende manieren worden aangepakt.

Het sensorsysteem kan een LED bevatten om consistent licht te bieden. Dit zou lijken op de hartbewakingsclips die worden gebruikt in dokterspraktijken of de hartslagmeters die te zien zijn in mobiele telefoons. Ik probeerde een rode LED tegen de bovenkant van mijn vinger te houden met de fotoweerstand aan de andere kant. De resultaten waren bemoedigend, dus dit is waarschijnlijk een haalbare optie als er een goede behuizing kan worden gemaakt.

Wat de software betreft, zou een mogelijke oplossing zijn om een ​​automatisch bereikalgoritme in de Arduino te gebruiken. Het zou de pulsen detecteren en hun pieken en dalen vinden. Dit zou echter niet voldoende zijn om een ​​hartslagmeting uit te voeren. Een goede frequentieteller vereist interrupts. Zonder onderbrekingen doet de Arduino-processor misschien iets anders dan de invoerpinnen controleren en een puls missen. Aangezien interrupts alleen beschikbaar zijn op digitale pinnen, is de beste manier om de automatische bereikinstelling te implementeren het gebruik van digitale potentiometers. De Arduino zou de analoge pin gebruiken om het bereik te vinden waarin de puls verschijnt, bepalen wat de comparatordrempels zouden moeten zijn, deze toepassen via de digitale potentiometers en vervolgens het digitale signaal van de comparator gebruiken om de frequentietelling uit te voeren.

Code

  • vergelijker calcs.xlsx
  • Arduino-hartslagteller
vergelijker calcs.xlsxArduino
Deze Excel-spreadsheet berekent de R3- en R4-waarden om asymmetrische drempels voor de comparator in te stellen. U kunt de R5-kolom wijzigen in een gemeten weerstandswaarde. Vl en Vh moeten worden gewijzigd in de drempels die nodig zijn om een ​​zuivere hartslag te krijgen.
Geen voorbeeld (alleen downloaden).
Arduino-hartslagtellerArduino
Deze code berekent uw hartslag op basis van pulsen die door de comparator worden verzonden.
#define INT0 3float frequency;long timeCount;int counter;long pulseStart;int inputPin =3;boolean low;float freqAvg;float total;void setup() {attachInterrupt(digitalPinToInterrupt(INT0), intrruption, CHANGE); teller =0; tijdtelling =0; frequentie =0; laag =onwaar; Serieel.begin(9600); totaal =15;}void loop() { timeCount =millis(); while(millis() - timeCount <5000){ frequency =counter; } if(frequentie> 3){ totaal +=frequentie; totaal -=freqAvg; freqAvg =totaal/3; } toonHR(); counter =0;}void intrruption(){ if(digitalRead(3) ==0){ fallDetect(); laag =waar; } else if(digitalRead(3) ==1){ widthCheck(); }}void fallDetect(){ pulseStart =millis();}void widthCheck(){ long pulseEnd =millis(); if((pulseEnd - pulseStart> 200) &&(pulseEnd - pulseStart <800) &&low){ counter++; laag =onwaar; }}void showHR(){ Serial.print("Hartslag ="); Serial.println(freqAvg * 12); }

Schema's

hr_monitor_tnffXlVQQV.fzz

Productieproces

  1. Externe defibrillator
  2. Kunstmatig hart
  3. Kunstmatige hartklep
  4. EKG-apparaat
  5. Pacemaker
  6. Bliksem detecteren met een Raspberry Pi
  7. Windows 10 IoT Core – Hartslagpulsen lezen
  8. Hartslagmeter op afstand
  9. Het magnetisme van de kern van een enkel atoom detecteren
  10. Sensoren geïntegreerd in kledingmonitor Hartslag
  11. Een gezond hart begint met olievrije perslucht