Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Wirklich hausgemachter Oximetersensor

Komponenten und Verbrauchsmaterialien

Infrarotstrahler, 18 °
Wellenlänge zwischen 805nm und 1000nm
× 1
Fotodiode LPT80A
Die benötigte Fotodiode ist eine Weitbereichs-Photodiode, sie muss beide roten Signale empfangen können (600 nm) und Infrarotsignale (940 nm).
× 1
5 mm LED:Rot
Wellenlänge nahe 600nm
× 1
Widerstand 10k Ohm
× 1
Widerstand 330 Ohm
× 2
DFRobot I2C 16x2 Arduino LCD-Anzeigemodul
Oder ein anderes LCD-Display zur Anzeige von Werten.
× 1
Arduino UNO
× 1
Jumper (generisch)
× 1
High Brightness LED, Weiß
Optionale dritte LED, siehe Abschnitt Verbesserung des Projekts
× 1

Notwendige Werkzeuge und Maschinen

Lötkolbenspitze, Gull Wing

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

In dieser Zeit der Isolation habe ich ein Oximeter mit bereits im Haus befindlichen Teilen gebaut. Ein Oximeter besteht schließlich nur aus zwei LEDs und einer Fotodiode.

Ich bin kein Experte für medizinisches Wissen und in dieser Phase des Projekts bin ich mir nicht sicher, ob diese Arbeit einen diagnostischen Wert hat, aber es ist ein gutes Bildungsprojekt, um zu studieren, wie es funktioniert, und wahrscheinlich mit ein paar Tipps es könnte ein selbstgemachtes medizinisches Werkzeug werden.

Sauerstoffsättigung und COVID-19

In dieser unglaublichen Zeit unseres Lebens haben wir viel über Viren, Lunge, Mundschutz, Seife und Händewaschen gelernt. Jeder liest von Symptomen wie Husten, Fieber und Atembeschwerden. Wir wissen auch, dass eine Möglichkeit, Atembeschwerden zu messen, darin besteht, den Sauerstoffgehalt in unserem Blut zu messen.

Dieses Maß kann indirekt mit einem medizinischen Gerät namens Oximeter abgelesen werden . Sie haben es wahrscheinlich schon gesehen, es ist ein nicht-invasives Gerät, das mit einigen pulsierenden Lichtern an einem Finger angebracht wird, die die Arbeit erledigen. So:

Normalerweise, wenn es Ihnen gut geht, haben Sie einen Prozentsatz der Sauerstoffsättigung (SpO2) nahe oder größer als 95 %. Wenn die Sättigung unter 90% sinkt und Sie Husten und Fieber haben, ist dies ein Problem.

Wenn ein Hersteller ein Oximeter bauen könnte, wäre die Entdeckung einer Infektion einfacher und könnte den Menschen helfen, sich für einen Krankenhausaufenthalt zu entscheiden, wenn das Problem wirklich besteht und nicht wegen einer Panikattacke.

Verstehen Sie zunächst, wie der Herzschlagsensor funktioniert

Ich habe dieses Projekt mit einem KY-039-Herzschlagsensor begonnen, den ich in einem Kit-Sensor gefunden habe, den viele von uns zu Hause haben. Wie Sie in der folgenden Schaltung sehen können, ist es nur eine Infrarot-LED, die eine Fotodiode beleuchtet. Es gibt auch zwei Widerstände, um die LED zu schützen und das kleine Signal des Sensors zu lesen.

Wenn Sie also keinen KY-039-Sensor haben, können Sie mit wenigen Komponenten Ihren eigenen Sensor bauen.

Der Finger wird wie auf diesem Foto zwischen dem Sensor und der Fotodiode platziert (ursprünglich von dieser Seite aufgenommen und modifiziert):

Das von der Infrarot-LED emittierte Licht wird teilweise vom Nagel, der Haut und allen anderen Teilen Ihres Fingers absorbiert, ist jedoch nicht konstant, da es sich aufgrund der Veränderungen des Blutes in Ihren Venen ändert. Wenn Ihr Herz schlägt, wird Blut in Ihre Adern geschoben und die Lichtabsorption ändert sich. Wir können den Strom messen, der von der Fotodiode erzeugt wird, die durch das Infrarotlicht beleuchtet wird, das sie erreicht.

Der KY-039-Sensor hat ein S (Signal-)Pin, um diesen sich ändernden Wert zu lesen.

Wir können die Herzschlagfrequenz messen, indem wir die Spitzen des Signals zählen

Einen Wert aus einem variablen Signal von einem Sensor abzulesen ist nicht so einfach, weil es viel Rauschen gibt, das Signal sehr niedrig ist und wir etwas rechnen müssen, um die guten Werte für die Darstellung zu finden.

Ich muss diesem nützlichen Beitrag von Johan Ha danken, der erklärt, wie man den Durchschnitt des Signals berechnet und wie man das Rauschen einer Heimlampe entfernt (dieses Licht ist ein Rauschen!).

Der Trick besteht darin, ein Array zu erstellen, in dem wir einen Wert pushen und einen Wert fallen lassen, um den Durchschnitt der letzten X-Werte zu bilden, die vom Sensor gelesen werden. Er hat auch einen Weg beschrieben, den Anstieg des Signals zu ermitteln, indem er N wachsende Werte zählt. Ich meine, wenn ein Wert N-mal größer als der vorherige Wert ist, ist es ein Peak.

Mit dem Arduino Serial Plot-Tool oder einem anderen seriellen Tool zum Analysieren der auf dem COM-Port gedruckten Werte (wie SerialPlot) und dem Ausprobieren verschiedener Werte können wir eine korrekte Zahl N definieren (rise_threshold Konstante n der Code). Wenn Sie eine Zahl zu groß oder zu klein definieren, können Sie einige Beats verpassen oder eine dikrotische Kerbe zählen als Beat.

Sobald Sie verstanden haben, wie Sie die Spitzen verfeinern können, zählen Sie sie einfach oder berechnen Sie die Zeit zwischen einer kleinen Reihe von Schlägen, um Ihren BPM zu bestimmen Rate (Beats pro Minute ).

Aufbau des Oximeters (Hacken des KY-039-Sensors), um die Sauerstoffsättigung zu finden

Unser Blut absorbiert Licht auf andere Weise mit der Änderung der Wellenlänge des Lichts. Das rote Licht (~600nm ) wird vom sauerstoffreicheren Blut besser aufgenommen, sodass wir die Messungen mit Infrarot-LEDs (~950nm .) vergleichen können ) mit denen mit roter LED und finden Sie den Sauerstoffanteil in unserem Blut. Dieser Wert heißt Sp02% (periphere kapillare Sauerstoffsättigung ).

Da ich einen KY-039-Sensor habe, habe ich mich entschieden, ihn zu modifizieren. Es hat nur eine Infrarot-LED, daher habe ich eine ROTE hinzugefügt LED, trennen Sie die IR geführt vom Vcc und mit einem 330 Ohm verbinden Widerstand die beiden LEDs zu zwei verschiedenen Pins von Arduino.

(Wenn Sie keinen KY-039-Sensor zum Modifizieren haben, können Sie ihn bauen, es sind nur ein paar LEDs, eine Fotodiode und 3 Widerstände, und der Schaltplan ist wirklich einfach!)

Hier ist das Schema des modifizierten Sensors:

Auf diese Weise können wir die IR einschalten geführt und den Wert vom KY-039 gelesen S Pin, dann können wir die IR ausschalten geführt und ROT einschalten geführt, und lesen Sie den Wert aus dem KY-039 S Pin.

Hier ist es von mir:

Wenn Sie die beiden Signale grafisch darstellen, können Sie sehen, dass die IR-Werte immer niedriger sind als die Rot-Werte.

Um ein gutes Signal zu finden, denken Sie daran, die Fingerspitze richtig auf die Fotodiode zu legen und die LEDs sollten den Nagel berühren. Wenn Sie eine bequeme Position mit gutem Ablesen auf dem Plot gefunden haben, ändern Sie sie nicht.

Da die Signale gering sind und das Rauschen sehr problematisch ist, ist mir aufgefallen, dass immer ein gutes Umgebungslicht erforderlich ist, um nützliche Maßnahmen zu erhalten. Bewege also beim Messen nicht deinen Finger und verändere nicht das Licht, nur ein Schatten auf dem Sensor könnte alles verändern.

Wie wird die Sättigung SpO2% gemessen

Der Sauerstoffsättigungsgrad (SpO2) ist der Anteil von sauerstoffgesättigtem Hämoglobin im Verhältnis zum Gesamthämoglobin und ist eine Funktion eines Parameters namens R (Ich habe diese Informationen in einer wissenschaftlichen Arbeit von Politecnico in Mailand gefunden), die anhand von Minimal- und Maximalwerten aus den beiden Signalen berechnet wird:

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

Jedes Instrument hat sein eigenes R und es ist eine Kalibrierung erforderlich, um die Kurve (die Funktion) zu finden, die R mit SpO2% verbindet.

Wir haben die Anzahl der Peaks gezählt, aber jetzt müssen wir max finden und min Werte der beiden Kurven (ROT geführt und IR geführt).

Um diese Aufgabe zu erfüllen, werten wir die "Periode" des Herzschlags aus (dh wie viele Millisekunden ein Schlag dauert) und teilen sie für die Abtastrate, um zu bestimmen, wie viele Abtastungen eine Periode ergeben. Die Abtastrate beträgt in unserem Fall 40 Millisekunden, da wir die IR-LED für 20 Millisekunden und dann die ROTE LED für weitere 20 Millisekunden lesen.

Die Beat-Periode ist die Zeit, die zwischen zwei ansteigenden Kurven im Signal vergeht.

Damit ich das letzte L analysieren kann Samples (wobei L =Periode / 40), die ich in einem Array gespeichert habe, um REDmax zu finden , REDmin , IRmax und IRmin Werte.

Mit maximalen und minimalen Werten kann ich R calculate berechnen .

R, L und Periode werden bei jedem Schlag berechnet, daher wird die Berechnung von R auch für jeden Schlag durchgeführt.

Von R zu SpO2%:Wie wird das Oximeter kalibriert?

Die Funktion, die R verknüpft mit SpO2 kann mit einer geraden Linie vereinfacht werden:

SpO2 =K * R + M

Wir brauchen also zwei Punkte (zwei Wertepaare von SpO2 und R), um K und M zu bestimmen. Die einzige Möglichkeit, diese 2 Punkte zu finden, besteht darin, ein anderes Oximeter zu verwenden und die Werte von seinem Display abzulesen.

Das neue Oximeter wird die Referenz sein, wir lesen den SpO2-Wert ab, während wir die R-Werte von unserem hausgemachten Oximeter messen.

Atmen Sie zuerst normal ein und lesen Sie den Wert von SpO2 und R ab. Schreiben Sie ihn auf.

Versuchen Sie dann, den Atem anzuhalten, und nach 10-20 Sekunden wird SpO2 im neuen Oximeter abnehmen, Sie sollten auch den R-Parameter Ihres Oximeters ansteigen sehen. Bevor Sie ohnmächtig werden, notieren Sie sich die erreichten SpO2-Werte und den Wert Ihres R-Parameters.

Löse die Gleichung 2. Grades und finde K und M für dein Oximeter.

Jetzt ist es möglich, sowohl bpm . zu berechnen und SpO2 Werte für jedes Maß von R .

Ich habe auch eine Anzeige hinzugefügt, um alle Zahlen anzuzeigen. Ich zeige Werte nur an, wenn ich mindestens 5 Takte von Perioden gefunden habe, die sich nicht zu sehr ändern (±10% der Periodenlänge). Auf diese Weise entferne ich Werte, die sich zu stark ändern, die von den schlechten Komponenten oder der Änderung des Umgebungslichts oder der Fingerbewegung abhängen.

Das c value gibt an, dass die angezeigten Werte mit c . berechnet wurden stabile Maßnahmen.

Projektverbesserung:Entfernen Sie die Umgebungslichtvariabilität

Nachdem ich ein paar Tage mit meinem Projekt gespielt habe, habe ich einen Weg gefunden, es zu verbessern.

Ich habe festgestellt, dass bei diesen kostengünstigen Komponenten (wir verwenden nur LEDs und eine Fotodiode!) Arbeitsumfeld. Da ich gemerkt habe, dass die Ergebnisse an einem sonnigen Tag besser sind als bei bewölktem Licht oder abends, wenn ich eine elektrische Lampe verwende, habe ich mich entschieden, eine dritte LED hinzuzufügen, die immer leuchtet und nur Licht am Finger spendet .

Bei diesem 3-LED-Sensor werden die Maßnahmen auch unter einem schwarzen Tuch getroffen, um das Umgebungslicht auszuschließen, das sich ständig ändern könnte.

Jetzt sind die Ergebnisse besser und hängen nicht mehr vom Umgebungslicht ab.

Ich musste auch das Oximeter neu kalibrieren, wie Sie im Video sehen können, findet es nach wenigen Sekunden korrekt bpm und SpO2% :


Code

  • oximeter-diy-ver-0.92.ino
oximeter-diy-ver-0.92.inoArduino
Dies ist der Quellcode des Oximeter DIY, das mit wenigen Komponenten hergestellt wird, die ein Hersteller zu Hause haben könnte.
/* * ein Oximeter DIY. v.0.92 (kleinere Korrekturen) * durch Hacken eines ky-039-Herzschlagsensors oder Verwendung einer Infrarot-LED * einer roten LED und einer Fotodiode. * https://hackaday.io/project/170752-oximeter-do-it-yourself */#include  #include #define maxperiod_siz 80 // max. Define Measures 10 // Anzahl der gespeicherten Perioden#define samp_siz 4 // Anzahl der Samples für den Durchschnitt#define rise_threshold 3 // Anzahl der steigenden Measures um einen Peak zu bestimmen // ein Flüssigkristall zeigt BPM an LiquidCrystal_I2C lcd(0x3F, 16, 2);int T =20; // Millisekunden stecken, um einen Wert aus dem sensorint zu lesen 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}};void setup () { Serial.begin (9600); Serial.flush(); pinMode (sensorPin, EINGANG); pinMode (REDLed, OUTPUT); pinMode (IRLed, OUTPUT); // das LCD initialisieren lcd.init (); LCD-Rücklicht(); // LEDs ausschalten DigitalWrite (REDLed, LOW); digitalWrite (IRLed, LOW); for(int i=0;i<8;i++) lcd.createChar(i, sym[i]);}void loop (){ bool finger_status =true; float readsIR[samp_siz], sumIR,lastIR, Leser, Start; float liestRED[samp_siz], sumRED,lastRED; int-Periode, Stichproben; Periode =0; Proben =0; int SamplesCounter =0; float readsIRMM[maxperiod_siz],readsREDMM[maxperiod_siz]; int ptrMM =0; for (int i =0; i =samples){ SamplesCounter =0; IRmax =0; IRmin =1023; ROTmax =0; REDmin=1023; for(int i=0;i IRmax) IRmax =readsIRMM[i]; if( readsIRMM[i]>0 &&readsIRMM[i] REDmax) REDmax =readsREDMM[i]; if( readsREDMM[i]>0 &&readsREDMM[i] 4) { // // SATURTION IST EINE FUNKTION VON R (Kalibrierung) // Y =k*x + m // k und m werden berechnet mit ein weiteres Oximeter int SpO2 =-19 * R + 112; lcd.setCursor(4,0); if(avBPM> 40 &&avBPM <220) lcd.print(String(avBPM)+" "); // sonst lcd.print("---"); lcd.setCursor(4,1); if(SpO2> 70 &&SpO2 <150) lcd.print(" " + String(SpO2) +"%"); // sonst lcd.print("--%"); } else { if(c <3) {// wenn weniger als 2 Takte addieren? lcd.setCursor(3,0); lcd.write( 2 ); //bpm? lcd.setCursor(4,1); lcd.write( 2 ); //SpO2 ? } } } } else { // Ok, die Kurve fällt steigend =false; rise_count =0; lcd.setCursor(3,0);lcd.print(" "); } // um es mit dem neuen Wert zu vergleichen und Peaks zu finden beforeIR =lastIR; } // Finger ist drin // PLOT alles Serial.print (lastIR); Serial.print (","); Serial.print (lastRED); /* * Serial.print(","); Serial.print (R); Serial.print (","); Serial.print (IRmax); Serial.print (","); Serial.print (IRmin); Serial.print (","); Serial.print (REDmax); Serial.print (","); Serial.print (REDmin); Serial.print (","); Serial.print (avR); Serial.print (","); Serial.print (avBPM); */ Serial.println(); // die Arrays behandeln ptr++; ptr %=samp_siz; } // Schleife während 1}

Schaltpläne

In meinem Projekt habe ich einen KY-039 modifiziert, aber dieser Sensor ist nicht in der Fritzing-Bibliothek verfügbar. oximeter-diy_oW9ZI5zQtJ.fzzEin einfaches Oximeter zum Ablesen von Sauerstoff im Blut kann durch Hacken des KY-039-Sensors oder durch den Bau eines neuen Sensors hergestellt werden.

Herstellungsprozess

  1. Infrarotsensorbasierte Stromsparschaltung und Funktion
  2. Die Wellenlängenauswahl in LiDAR-Systemen verstehen
  3. DIY Infrarot-Bewegungssensorsystem für Raspberry Pi
  4. Bewegungssensor mit Raspberry Pi
  5. Raspberry Pi Bodenfeuchtigkeitssensor
  6. DS18B20-Sensor testen
  7. Raspberry Pi-Temperatursensor
  8. Sensortelemetrie 2.0.1
  9. Emotionssensor / EEG
  10. Infrarotsensor-Temperaturmessungen