Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Capteur d'oxymètre vraiment fait maison

Composants et fournitures

Émetteur infrarouge, 18°
Longueur d'onde entre 805 nm et 1000 nm
× 1
Photodiode LPT80A
La photodiode nécessaire est une large plage, elle doit pouvoir recevoir les deux signaux rouges (600nm) et les signaux infrarouges (940 nm).
× 1
LED 5 mm :Rouge
Longueur d'onde proche de 600 nm
× 1
Résistance 10k ohm
× 1
Résistance 330 ohm
× 2
Module d'affichage LCD Arduino DFRobot I2C 16x2
Ou un autre écran LCD pour afficher les valeurs.
× 1
Arduino UNO
× 1
Câbles de raccordement (générique)
× 1
LED haute luminosité, blanche
Troisième led en option, voir la section amélioration du projet
× 1

Outils et machines nécessaires

Pointe de fer à souder, aile de mouette

Applications et services en ligne

Arduino IDE

À propos de ce projet

En cette période d'isolement, j'ai construit un oxymètre avec des pièces déjà en interne. Après tout, un oxymètre n'est constitué que de deux leds et d'une photodiode.

Je ne suis pas un expert des connaissances médicales et à ce stade du projet je ne suis pas sûr que ce travail ait une valeur diagnostique, mais c'est un bon projet pédagogique pour étudier son fonctionnement, et probablement avec quelques astuces il pourrait devenir un outil médical fait maison.

Saturation en oxygène et COVID-19

Dans cette période incroyable de notre vie, nous avons appris beaucoup de choses sur les virus, les poumons, les masques chirurgicaux, le savon et le lavage des mains. Tout le monde lit sur des symptômes comme la toux, la fièvre et les difficultés respiratoires. Nous savons également qu'une façon de mesurer les difficultés respiratoires consiste à lire la quantité d'oxygène dans notre sang.

Cette mesure peut être lue indirectement avec un dispositif médical appelé Oxymètre . Vous l'avez probablement déjà vu, c'est un appareil non invasif qui se place sur un doigt avec des lumières pulsantes qui font le travail. Comme ceci :

Normalement, lorsque vous allez bien, vous avez un pourcentage de saturation en oxygène (SpO2) proche ou supérieur à 95%. Lorsque la saturation descend en dessous de 90 % et que vous avez de la toux et de la fièvre, c'est un problème.

Si un fabricant pouvait construire un oxymètre, découvrir une infection serait plus facile et pourrait aider les gens à décider d'aller à l'hôpital lorsque le problème existe vraiment et non pour une attaque de panique.

Tout d'abord, comprenez comment fonctionne le capteur de rythme cardiaque

J'ai commencé ce projet en jouant avec un capteur de rythme cardiaque KY-039 que j'ai trouvé dans un kit de capteur que beaucoup d'entre nous ont à la maison. Comme vous pouvez le voir dans le circuit ci-dessous, c'est juste une led infrarouge qui allume une photodiode. Il y a aussi deux résistances pour protéger la led et lire le petit signal du capteur.

Donc, si vous n'avez pas de capteur KY-039, vous pouvez créer votre propre capteur avec peu de composants.

Le doigt est placé entre le capteur et la photodiode comme sur cette photo (tirée à l'origine de ce site et modifiée) :

La lumière émise par la led infrarouge est partiellement absorbée par l'ongle, la peau, et toutes les autres parties de votre doigt, mais elle n'est pas constante car elle change suite aux changements du sang qui coule dans vos veines. Lorsque votre cœur bat, le sang est poussé dans vos veines et l'absorption de la lumière change. On peut mesurer le courant généré par la photodiode éclairée par la lumière infrarouge qui l'atteint.

Le capteur KY-039 a un S (signal) broche pour lire cette valeur changeante.

Nous pouvons mesurer le rythme cardiaque en comptant les pics du signal

Lire une valeur à partir d'un signal variable d'un capteur n'est pas si facile, car il y a beaucoup de bruit, le signal est vraiment faible, et nous devons faire quelques calculs pour trouver les bonnes valeurs à tracer.

Je dois remercier ce post utile de Johan Ha, qui explique comment calculer la moyenne du signal et il explique aussi comment supprimer le bruit fait par une lampe domestique (cette lumière est un bruit !).

L'astuce consiste à créer un tableau dans lequel nous poussons une valeur et déposons une valeur pour faire la moyenne des dernières valeurs X lues à partir du capteur. Il a également décrit un moyen de trouver la montée du signal, en comptant N valeurs croissantes. Je veux dire, quand une valeur est supérieure à la valeur précédente pour N fois, c'est un pic.

En utilisant l'outil Arduino Serial plot ou un autre outil série pour analyser les valeurs imprimées sur le port COM (comme SerialPlot), et en essayant différentes valeurs, nous pouvons définir un nombre correct N (rise_threshold constante n le code). Si vous définissez un nombre trop grand ou trop petit, vous pouvez manquer quelques temps ou compter un entaille dicrotique comme un battement.

Une fois que vous avez compris comment affiner les pics, il suffit de les compter ou de calculer le temps entre une petite série de battements pour déterminer votre BPM taux (Battements par minute ).

Construire l'oxymètre (pirater le capteur KY-039) pour trouver la saturation en oxygène

Notre sang absorbe la lumière d'une manière différente avec le changement de la longueur d'onde de la lumière. La lumière rouge (~600nm ) est mieux absorbé par le sang qui contient plus d'oxygène, on peut donc comparer les mesures faites avec la led infrarouge (~950nm ) avec celles à led rouge et trouver le pourcentage d'oxygène dans notre sang. Cette valeur s'appelle Sp02% (saturation capillaire périphérique en oxygène ).

Depuis que j'ai un capteur KY-039, j'ai décidé de le modifier. Il a juste une led infrarouge, j'ai donc ajouté un ROUGE led, déconnectez le IR dirigé par le Vcc et connectez-vous avec un 330 ohm résistance les deux leds à deux broches différentes d'Arduino.

(Si vous n'avez pas de capteur KY-039 à modifier vous pouvez le construire, c'est juste quelques leds, une photodiode et 3 résistances, et le schéma est vraiment simple !)

Voici le schéma du capteur modifié :

De cette façon, nous pouvons activer le IR led et lire la valeur du KY-039 S broche, alors nous pouvons désactiver le IR led et allumez le ROUGE led, et lire la valeur du KY-039 S épingle.

Voici le mien :

Si vous tracez les deux signaux, vous pouvez voir que les valeurs IR sont toujours inférieures aux valeurs rouges.

Pour trouver un bon signal pensez à bien placer le bout du doigt sur la photodiode et les leds doivent toucher l'ongle, lorsque vous trouvez une position confortable avec une bonne lecture sur le plot ne la changez pas.

Comme les signaux sont faibles et que le bruit est très problématique, pour obtenir des mesures utiles, j'ai remarqué qu'une bonne lumière ambiante est toujours nécessaire. Alors, ne bougez pas votre doigt pendant la mesure et ne changez pas la lumière, juste une ombre sur le capteur pourrait tout changer.

Comment est mesurée la saturation SpO2%

Le niveau de saturation en oxygène (SpO2) est la fraction d'hémoglobine saturée en oxygène par rapport à l'hémoglobine totale et est fonction d'un paramètre appelé R (J'ai trouvé cette information dans un article académique du Politecnico de Milan), qui est calculé en utilisant les valeurs minimales et maximales des deux signaux :

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

Chaque instrument a son propre R et il faut un étalonnage pour trouver la courbe (la fonction) qui relie R à SpO2%.

Nous avons compté le nombre de pics, mais maintenant nous devons trouver max et min valeurs des deux courbes (ROUGE led et IR led).

Pour accomplir ce travail, nous évaluons la "période" du battement cardiaque (c'est-à-dire combien de millisecondes dure un battement) et la divisons pour le taux d'échantillonnage afin de déterminer combien d'échantillons constituent une période. Le taux d'échantillonnage est dans notre cas de 40 millisecondes car nous lisons la led IR pendant 20 millisecondes puis la led ROUGE de 20 millisecondes supplémentaires.

La période du battement est le temps qui s'écoule entre deux courbes montantes du signal.

Je peux donc analyser le dernier L échantillons (où L =période / 40), que j'ai enregistrés dans un tableau, pour trouver REDmax , REDmin , IRmax et IRmin valeurs.

Avec les valeurs maximales et minimales, je peux calculer R .

R, L et la période sont calculés à chaque battement, donc le calcul de R est également effectué pour chaque battement.

De R à SpO2% :Comment calibrer l'oxymètre ?

La fonction qui relie R avec SpO2 peut être simplifié par une ligne droite :

SpO2 =K * R + M

Nous avons donc besoin de deux points (deux couples de valeur de SpO2 et R) pour déterminer K et M. La seule façon de trouver ces 2 points est d'utiliser un autre oxymètre et de lire les valeurs sur son affichage.

Le nouvel oxymètre sera la référence, nous lisons la valeur SpO2 tout en mesurant les valeurs R de notre oxymètre maison.

Respirez d'abord normalement et lisez la valeur de SpO2 et R. Notez-la.

Ensuite, essayez de garder votre respiration et après 10 à 20 secondes, vous lirez la SpO2 dans le nouvel oxymètre en baisse, vous devriez également voir le paramètre R de votre oxymètre augmenter. Avant de vous évanouir, notez les valeurs de SpO2 atteintes et la valeur de votre paramètre R.

Résolvez l'équation du 2e degré et trouvez K et M pour votre oxymètre.

Il est maintenant possible de calculer les deux bpm et SpO2 valeurs pour chaque mesure de R .

J'ai également ajouté un affichage pour afficher tous les nombres, je n'affiche les valeurs que si j'ai trouvé au moins 5 mesures de périodes qui ne changent pas trop (±10% de la durée de la période). De cette façon, je supprime les valeurs qui changent trop en fonction des composants médiocres ou du changement des lumières ambiantes ou du mouvement des doigts.

Le c valeur indique que les valeurs affichées sont calculées avec c mesures stables.

Amélioration du projet :supprimer la variabilité de la lumière ambiante

Après quelques jours de jeu avec mon projet, j'ai trouvé un moyen de l'améliorer.

J'ai remarqué qu'avec ces composants à faible coût (nous n'utilisons que des leds et une photodiode !) environnement de travail. Comme j'ai remarqué que par une journée ensoleillée les résultats sont meilleurs qu'avec une lumière nuageuse ou le soir lorsque j'utilise une lampe électrique, j'ai décidé d'ajouter une troisième led, qui est toujours allumée et fournit juste de la lumière sur le doigt .

Avec ce capteur à 3 leds, les mesures sont également prises sous un chiffon noir pour exclure la lumière ambiante qui pourrait toujours changer.

Désormais, les résultats sont meilleurs et ne dépendent plus de la lumière ambiante.

J'ai également dû recalibrer l'oxymètre, comme vous pouvez le voir sur la vidéo après quelques secondes, il trouve correctement bpm et SpO2% :


Code

  • oxymètre-diy-ver-0.92.ino
oxymètre-diy-ver-0.92.inoArduino
Il s'agit du code source de l'oxymètre DIY, qui est fabriqué avec peu de composants qu'un fabricant pourrait avoir à la maison.
/* * un oxymètre de bricolage. v.0.92 (corrections mineures) * en piratant un capteur de rythme cardiaque ky-039 ou en utilisant une led infrarouge * une led rouge et une photodiode. * https://hackaday.io/project/170752-oximeter-do-it-yourself */#include  #include #define maxperiod_siz 80 // nombre max d'échantillons dans une période# définir des mesures 10 // nombre de périodes stockées#define samp_siz 4 // nombre d'échantillons pour la moyenne#define rise_threshold 3 // nombre de mesures ascendantes pour déterminer un pic // un cristal liquide affiche BPM LiquidCrystal_I2C lcd (0x3F, 16, 2);int T =20; // slot millisecondes pour lire une valeur à partir du 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}} ;configuration vide() { Serial.begin(9600); Serial.flush(); pinMode (sensorPin, INPUT); pinMode(REDLed,OUTPUT); pinMode(IRLed,OUTPUT); // initialise l'écran LCD lcd.init(); LCD rétro-éclairage(); // éteint les leds 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, lecteur, début ; float readsRED[samp_siz], sumRED,lastRED ; période int, échantillons; période=0 ; échantillons=0 ; int samplesCounter =0; float litIRMM[maxperiod_siz],readsREDMM[maxperiod_siz] ; int ptrMM =0; for (int i =0; i =samples){ samplesCounter =0; IRmax =0 ; IRmin =1023 ; ROUGEmax =0 ; REDmin =1023 ; for(int i=0;i IRmax) IRmax =readsIRMM[i]; if( readsIRMM[i]>0 &&readsIRMM[i] REDmax) REDmax =litREDMM[i] ; if( readsREDMM[i]>0 &&readsREDMM[i] 4) { // // LA SATURTION EST UNE FONCTION DE R (calibration) // Y =k*x + m // k et m sont calculés avec un autre oxymètre int SpO2 =-19 * R + 112; lcd.setCursor(4,0); if(avBPM> 40 &&avBPM <220) lcd.print(String(avBPM)+" "); //sinon lcd.print("---"); lcd.setCursor(4,1) ; if(SpO2> 70 &&SpO2 <150) lcd.print( " " + Chaîne(SpO2) +"% "); //sinon lcd.print("--% "); } else { if(c <3) { // si moins de 2 mesures ajoutent ? lcd.setCursor(3,0); lcd.write( 2 ); //bpm ? lcd.setCursor(4,1) ; lcd.write( 2 ); //SpO2 ? } } } } else { // Ok, la courbe est descendante montante =false; augmentation_compte =0 ; lcd.setCursor(3,0);lcd.print(" "); } // pour la comparer avec la nouvelle valeur et trouver les pics beforeIR =lastIR; } // le doigt est à l'intérieur // TRACER tout 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(); // gère les tableaux ptr++; ptr %=samp_siz; } // boucle pendant 1}

Schémas

Dans mon projet, j'ai modifié un KY-039 mais ce capteur n'est pas disponible dans la bibliothèque de frittage, je l'ai donc construit avec les quelques composants qui en sont constitués, mais je n'ai pas trouvé de photodiode appropriée dans la bibliothèque de frittage. oxymeter-diy_oW9ZI5zQtJ.fzzUn oxymètre simple pour lire l'oxygène dans le sang peut être fait en piratant le capteur KY-039, ou en construisant un capteur à partir de zéro,

Processus de fabrication

  1. Circuit d'économie d'énergie basé sur un capteur infrarouge et fonctionnement
  2. Système de capteur de mouvement infrarouge DIY pour Raspberry Pi
  3. Capteur de mouvement utilisant Raspberry Pi
  4. Capteur d'humidité du sol Raspberry Pi
  5. Test du capteur DS18B20
  6. Capteur de température Raspberry Pi
  7. Télémétrie du capteur 2.0.1
  8. Capteur d'émotion/EEG
  9. Mesures de température par capteur infrarouge