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

Echt zelfgemaakte oximetersensor

Componenten en benodigdheden

Infraroodzender, 18 °
Golflengte tussen 805nm en 1000nm
× 1
Fotodiode LPT80A
De benodigde fotodiode heeft een groot bereik, deze moet beide rode signalen kunnen ontvangen (600 nm) en infraroodsignalen (940nm).
× 1
5 mm LED:rood
Golflengte dichtbij 600nm
× 1
Weerstand 10k ohm
× 1
Weerstand 330 ohm
× 2
DFRobot I2C 16x2 Arduino LCD-displaymodule
Of een ander lcd-scherm om waarden weer te geven.
× 1
Arduino UNO
× 1
Jumperdraden (algemeen)
× 1
Hoge helderheid LED, wit
Optioneel derde led, zie verbeteringsgedeelte van het project
× 1

Benodigde gereedschappen en machines

Soldeerboutpunt, meeuwvleugel

Apps en online services

Arduino IDE

Over dit project

In deze periode van isolatie heb ik een oximeter gebouwd met onderdelen al in huis. Een oximeter wordt immers gemaakt door twee leds en een fotodiode.

Ik ben geen expert op het gebied van medische kennis en in dit stadium van het project weet ik niet zeker of dit werk een diagnostische waarde heeft, maar het is een goed educatief project om te bestuderen hoe het werkt, en waarschijnlijk met een paar tips zou een zelfgemaakte medische tool kunnen worden.

Zuurstofverzadiging en COVID-19

In deze ongelooflijke periode van ons leven hebben we veel geleerd over virussen, longen, chirurgische maskers, zeep en handen wassen. Iedereen leest over symptomen als hoesten, koorts en ademhalingsmoeilijkheden. We weten ook dat een manier om ademhalingsmoeilijkheden te meten het aflezen van de hoeveelheid zuurstof in ons bloed is.

Deze meting kan indirect worden afgelezen met een medisch apparaat genaamd Oximeter . Je hebt het waarschijnlijk al gezien, het is een niet-invasief apparaat dat op een vinger wordt geplaatst met enkele pulserende lampjes die het werk doen. Zoals dit:

Normaal gesproken, als je in orde bent, heb je een zuurstofverzadigingspercentage (SpO2) van bijna of hoger dan 95%. Als de verzadiging onder de 90% komt en je hoest en koorts hebt, is dat een probleem.

Als een fabrikant een oximeter zou kunnen bouwen, zou hij ontdekken dat een infectie gemakkelijker zou zijn en mensen zou kunnen helpen beslissen om naar het ziekenhuis te gaan wanneer het probleem echt bestaat en niet voor een paniekaanval.

Begrijp eerst hoe de hartslagsensor werkt

Ik ben dit project begonnen door te spelen met een KY-039 hartslagsensor die ik heb gevonden in een kitsensor die velen van ons in huis hebben. Zoals je in het onderstaande circuit kunt zien, is het slechts een infrarood led die een fotodiode verlicht. Er zijn ook twee weerstanden om de led te beschermen en het kleine signaal van de sensor te lezen.

Dus als je geen KY-039-sensor hebt, kun je met weinig componenten je eigen sensor bouwen.

De vinger wordt tussen de sensor en de fotodiode geplaatst zoals op deze foto (oorspronkelijk overgenomen van deze site en aangepast):

Het licht dat door de infrarood-led wordt uitgestraald, wordt gedeeltelijk geabsorbeerd door de nagel, de huid en alle andere delen van je vinger, maar het is niet constant omdat het verandert als gevolg van de veranderingen in het bloed dat door je aderen stroomt. Wanneer je hart klopt, wordt het bloed in je aderen gestuwd en verandert de lichtabsorptie. We kunnen de stroom meten die wordt gegenereerd door de fotodiode die wordt verlicht door het infraroodlicht dat hem bereikt.

De KY-039-sensor heeft een S (signaal)pin om die veranderende waarde te lezen.

We kunnen de hartslag meten door pieken van het signaal te tellen

Een waarde aflezen van een variabel signaal van een sensor is niet zo eenvoudig, omdat er veel ruis is, het signaal erg laag is, en we moeten wat rekenwerk doen om de goede waarden te vinden om te plotten.

Ik moet deze nuttige post van Johan Ha bedanken, waarin wordt uitgelegd hoe je het gemiddelde van het signaal kunt berekenen en waarin ook wordt uitgelegd hoe je het geluid van een huislamp kunt verwijderen (dat licht is een geluid!).

De truc is om een ​​array te maken waarin we een waarde pushen en een waarde laten vallen om het gemiddelde van de laatste X-waarden van de sensor te krijgen. Hij heeft ook een manier beschreven om de stijging van het signaal te vinden, door N groeiende waarden te tellen. Ik bedoel, als een waarde N keer hoger is dan de voorgaande waarde, is het een piek.

Met behulp van de Arduino Serial plot-tool of een andere seriële tool om waarden te analyseren die op de COM-poort zijn afgedrukt (zoals SerialPlot), en door verschillende waarden te proberen, kunnen we een correct getal N definiëren (rise_threshold constante n de code). Als u een te groot of te klein getal definieert, kunt u enkele beats missen of een dicrotische notch tellen als een beat.

Als je eenmaal weet hoe je de pieken kunt fijnmaken, tel ze dan gewoon, of bereken de tijd tussen een kleine reeks beats om je BPM te bepalen snelheid (Beats Per Minute ).

De oximeter bouwen (de KY-039-sensor hacken) om zuurstofverzadiging te vinden

Ons bloed absorbeert licht op een andere manier met de verandering van de golflengte van het licht. Het rode lampje (~600nm ) wordt beter opgenomen door het bloed dat meer zuurstof bevat, dus we kunnen de metingen vergelijken met infrarood led (~950nm ) met die gemaakt met rode led en vind het percentage zuurstof in ons bloed. Die waarde heet Sp02% (perifere capillaire zuurstofverzadiging ).

Omdat ik een KY-039-sensor heb, heb ik besloten deze aan te passen. Het heeft alleen een infrarood led, dus ik heb een RED . toegevoegd led, koppel de IR . los geleid vanaf de Vcc en maak verbinding met een 330 ohm weerstand de twee leds naar twee verschillende pinnen van Arduino.

(Als je geen KY-039-sensor hebt om te wijzigen, kun je hem bouwen, het zijn slechts een paar leds, een fotodiode en 3 weerstanden, en het schema is heel eenvoudig!)

Hier is het schema van de gewijzigde sensor:

Op deze manier kunnen we de IR . inschakelen geleid en lees de waarde van de KY-039 S pin, dan kunnen we de IR . uitschakelen led en zet de RODE . aan led, en lees de waarde van de KY-039 S pinnen.

Hier is het van mij:

Als je de twee signalen plot, kun je zien dat IR-waarden altijd lager zijn dan rode waarden.

Om een ​​goed signaal te vinden, vergeet niet om de vingertop correct op de fotodiode te plaatsen en de leds moeten de nagel raken, als u een comfortabele positie vindt met een goede aflezing op de plot, verander deze dan niet.

Omdat de signalen laag zijn en ruis erg problematisch is, heb ik gemerkt dat er altijd een goed omgevingslicht nodig is om bruikbare maatregelen te krijgen. Beweeg uw vinger dus niet tijdens het meten en verander het licht niet, alleen een schaduw op de sensor kan alles veranderen.

Hoe wordt de verzadiging SpO2% gemeten

Het zuurstofverzadigingsniveau (SpO2) is de fractie van met zuurstof verzadigde hemoglobine ten opzichte van de totale hemoglobine en is een functie van een parameter genaamd R (Ik heb deze informatie gevonden in een academisch artikel van Politecnico uit Milaan), die wordt berekend met behulp van minimum- en maximumwaarden van de twee signalen:

R =( (REDmax-REDmin) / REDmin) / ((IRmax-IRmin) / IRmin)

Elk instrument heeft zijn eigen R en er is kalibratie nodig om de curve (de functie) te vinden die R verbindt met SpO2%.

We hebben het aantal pieken geteld, maar nu moeten we max . vinden en min waarden van de twee curven (ROOD led en IR led).

Om deze taak te volbrengen evalueren we de "periode" van de hartslag (dat wil zeggen hoeveel milliseconden een hartslag duurt) en delen deze voor de bemonsteringsfrequentie om te bepalen hoeveel samples een periode maken. De bemonsteringsfrequentie is in ons geval 40 milliseconden omdat we de IR-led 20 milliseconden uitlezen en daarna de RODE led van nog eens 20 milliseconden.

De periode van de beat is de tijd die verstrijkt tussen twee stijgende curven in het signaal.

Zodat ik de laatste L . kan analyseren samples (waarbij L =periode / 40), die ik in een array heb opgeslagen, om REDmax . te vinden , REDmin , IRmax en IRmin waarden.

Met maximale en minimale waarden kan ik R . berekenen .

R, L en periode worden elke beat berekend, dus de calculus van R wordt ook gedaan voor elke beat.

Van R tot SpO2%:hoe de oximeter te kalibreren?

De functie die R . koppelt met SpO2 kan worden vereenvoudigd met een rechte lijn:

SpO2 =K * R + M

We hebben dus twee punten nodig (twee waardeparen van SpO2 en R) om K en M te bepalen. De enige manier om deze 2 punten te vinden is door een andere oximeter te gebruiken en de waarden van het display af te lezen.

De nieuwe oximeter zal de referentie zijn, we lezen de SpO2-waarde af terwijl we de R-waarden meten van onze zelfgemaakte oximeter.

Adem eerst normaal en lees de waarde van SpO2 en R. Schrijf het op.

Probeer vervolgens de adem in te houden en na 10-20 seconden zult u de SpO2 in de nieuwe oximeter aflezen, u zou ook de R-parameter van uw oximeter moeten zien groeien. Voordat u flauwvalt, noteert u de bereikte waarden van SpO2 en de waarde van uw R-parameter.

Los de 2e graads vergelijking op en vind K en M voor je oximeter.

Het is nu mogelijk om zowel bpm en SpO2 waarden voor elke maat van R .

Ik heb ook een display toegevoegd om alle getallen weer te geven, ik toon alleen waarden als ik ten minste 5 maten van perioden heb gevonden die niet te veel veranderen (±10% van de periodelengte). Op deze manier verwijder ik waarden die te veel veranderen, afhankelijk van de slechte componenten of verandering van omgevingslicht of vingerbeweging.

De c waarde geeft aan dat de getoonde waarden zijn berekend met c stabiele maten.

Projectverbetering:verwijder de variabiliteit van het omgevingslicht

Na een paar dagen spelen met mijn project, heb ik een manier gevonden om het te verbeteren.

Ik heb gemerkt dat met deze goedkope componenten (we gebruiken alleen leds en een fotodiode!) de maatregelen te veel afhankelijk zijn van omgevingslicht en dit is niet goed, als we gegevens goed willen lezen in een echte werkomgeving. Omdat ik heb gemerkt dat de resultaten op een zonnige dag beter zijn dan bij bewolkt licht of 's avonds wanneer ik een elektrische lamp gebruik, heb ik besloten om een ​​derde led toe te voegen, die altijd aan is en alleen licht op de vinger geeft .

Met deze 3-leds-sensor worden ook de maatregelen genomen onder een zwarte doek om het omgevingslicht dat altijd zou kunnen veranderen uit te sluiten.

Nu zijn de resultaten beter en zijn ze niet meer afhankelijk van het omgevingslicht.

Ik heb ook de oximeter opnieuw moeten kalibreren, zoals je in de video kunt zien na een paar seconden, vindt deze correct bpm ans SpO2% :


Code

  • oximeter-diy-ver-0.92.ino
oximeter-diy-ver-0.92.inoArduino
Dit is de broncode van de Oximeter DIY, die is gemaakt met weinig componenten die een maker in huis zou kunnen hebben.
/* * een oximeter-doe-het-zelf. v.0.92 (kleine reparaties) * door een ky-039 hartslagsensor te hacken of een infrarood led te gebruiken * een rode led en een fotodiode. * https://hackaday.io/project/170752-oximeter-do-it-yourself */#include  #include #define maxperiod_siz 80 // max. aantal monsters in een periode# definieer metingen 10 // aantal opgeslagen perioden#define samp_siz 4 // aantal monsters voor gemiddelde#define rise_threshold 3 // aantal stijgende maatregelen om een ​​piek te bepalen // een vloeibaar kristal geeft BPM LiquidCrystal_I2C lcd(0x3F, 16, 2);intT =20; // slot milliseconden om een ​​waarde te lezen van de sensorint sensorPin =A1; int REDLed =3;int IRLed =4;byte sym[3][8] ={ { B00000, B01010, B11111, B11111, B01110, B00100, B00000, B00000},{ B00000, B00000, B00000, B11000, B00100, B01000 , B10000, B11100}, {B00000, B00100, B01010, B00010, B00100, B00100, B00000, B00100}}; ongeldige setup() { Serial.begin(9600); Serieel.flush(); pinMode (sensorPin, INPUT); pinMode (REDLed, UITGANG); pinMode (IRLed, UITGANG); // initialiseer de LCD lcd.init(); lcd.achtergrondverlichting(); // schakel leds digitalWrite uit (REDLed, LOW); digitalWrite (IRLed, LAAG); for(int i=0;i<8;i++) lcd.createChar(i, sym[i]);}void loop (){ bool finger_status =true; float readsIR[samp_siz], sumIR,lastIR, reader, start; float leestRED[samp_siz], sumRED,lastRED; int periode, monsters; periode=0; monsters=0; int samplesCounter =0; float leestIRMM[maxperiod_siz],readsREDMM[maxperiod_siz]; int ptrMM =0; for (int i =0; i =samples){ samplesCounter =0; IRmax =0; IRmin=1023; ROODmax =0; REDmin=1023; for(int i=0;i IRmax) IRmax =readsIRMM[i]; if( leestIRMM[i]>0 &&leestIRMM[i] REDmax) REDmax =leestREDMM[i]; if( leestREDMM[i]>0 &&leestREDMM[i] 4) { // // VERZADIGING IS EEN FUNCTIE VAN R (kalibratie) // Y =k*x + m // k en m worden berekend met een andere oximeter int SpO2 =-19 * R + 112; lcd.setCursor(4,0); if(avBPM> 40 &&avBPM <220) lcd.print(String(avBPM)+" "); //else lcd.print("---"); lcd.setCursor(4,1); if(SpO2> 70 &&SpO2 <150) lcd.print( " " + String (SpO2) +"% "); //else lcd.print("--% "); } else { if(c <3) { // if less than 2 maten add ? lcd.setCursor (3,0); lcd.schrijven( 2 ); //bpm? lcd.setCursor(4,1); lcd.schrijven( 2 ); //SpO2 ? } } } } else { // Ok, de curve daalt stijgend =false; stijging_count =0; lcd.setCursor(3,0);lcd.print(" "); } // om het te vergelijken met de nieuwe waarde en pieken te vinden beforeIR =lastIR; } // vinger is binnen // PLOT alles Serial.print (lastIR); Serieel.print(","); Serial.print(laatsteRED); /* * Serial.print(","); Serieafdruk(R); Serieel.print(","); Seriële.afdruk (IRmax); Serieel.print(","); Seriële.afdruk (IRmin); Serieel.print(","); Serieafdruk (REDmax); Serieel.print(","); Seriële.afdruk (REDmin); Serieel.print(","); Serial.print(avR); Serieel.print(","); Seriële.afdruk (avBPM); */ Serieel.println(); // behandel de arrays ptr++; ptr %=samp_grootte; } // loop while 1}

Schema's

In mijn project heb ik een KY-039 aangepast, maar die sensor is niet beschikbaar in de fritzing-bibliotheek, dus ik heb hem gebouwd met de weinige componenten waaruit is gemaakt, maar ik heb geen goede fotodiode gevonden in de fritzing-bibliotheek. oximeter-diy_oW9ZI5zQtJ.fzzEen eenvoudige oximeter om zuurstof in het bloed te meten kan worden gemaakt door de KY-039-sensor te hacken, of door een sensor helemaal opnieuw te bouwen,

Productieproces

  1. Infrarood sensorgebaseerd stroombesparingscircuit en werkend
  2. Inzicht in de golflengtekeuze in LiDAR-systemen
  3. DIY infrarood bewegingssensorsysteem voor Raspberry Pi
  4. Bewegingssensor met Raspberry Pi
  5. Raspberry Pi Bodemvochtsensor
  6. Test DS18B20-sensor
  7. Raspberry Pi-temperatuursensor
  8. Sensortelemetrie 2.0.1
  9. Emotiesensor / EEG
  10. Zelfgemaakte tv B-Gone
  11. Temperatuurmetingen met infraroodsensor