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

Open source pulsoximeter voor COVID-19

Componenten en benodigdheden

Arduino Nano R3
× 1
Maxim Integrated MAX30102 Pols- en hartslagsensor
× 1
DFRobot Gravity I2C OLED-2864 Display
× 1

Benodigde gereedschappen en machines

3D-printer (algemeen)
Soldeerbout (algemeen)

Apps en online services

Arduino IDE
Autodesk Fusion 360

Over dit project

De uitdagingen van COVID-19

COVID-19 is een ziekte die wordt veroorzaakt door het SARS-CoV-2-virus dat voornamelijk de luchtwegen van een persoon aanvalt. Sommige mildere symptomen kunnen koorts, pijn en koude rillingen zijn, maar het kan ook leiden tot ernstiger aandoeningen zoals longontsteking. Iemand met longontsteking of zelfs lichte kortademigheid weet misschien niet wanneer hij naar een ziekenhuis moet gaan, vooral omdat hij nog meer overweldigd begint te raken. Daarom heb ik deze open source pulsoximeter gemaakt, die kan helpen mensen de hulp te geven die ze nodig hebben en nauwkeurige informatie te krijgen over hun huidige toestand.

Een beetje een disclaimer

Dit apparaat/project mag niet worden gebruikt als een nauwkeurig medisch diagnostisch hulpmiddel!

De elektronica

MAX30102

128x64 Pixel OLED

Arduino Nano

Het apparaat stap voor stap bouwen

Hier is een stapsgewijze uitleg van hoe u dit project kunt bouwen.

1. Print de onderdelen uit en maak ze schoon

Begin met het downloaden van elk stuk uit het bijlagegedeelte van dit project en laad het in uw slicer naar keuze. Ik gebruikte een vulling van ongeveer 70-80% en medium steunen, allemaal met PLA. Nadat ze klaar waren met afdrukken, heb ik de steunen verwijderd en wat licht geschuurd om ervoor te zorgen dat ze allemaal mooi in elkaar passen.

2. Soldeer de elektronica

Het hele apparaat is ontworpen rond een Arduino Nano die is gemonteerd op een stuk van 44 mm bij 30 mm perfboard. Eerst worden draden gesoldeerd aan de VIN-, GND-, SDA- en SCL-pinnen van de sensor en lopen ze vervolgens onder het bedstuk door naar de Arduino Nano.

Vervolgens wordt de connector voor de OLED aan de Nano bevestigd en vervolgens naar het scherm zelf geleid.

En tot slot wordt de hele elektronica-assemblage in de behuizing geschoven en vastgezet met een paar 3 mm schroeven.

3. Monteer het apparaat

Nadat de elektronica is geplaatst, bevestigt u eenvoudig het OLED-scherm aan het bovenste stuk en bevestigt u het aan de rest van het chassis met een paar 3 mm-schroeven. Je kunt de beweging testen door het deksel voorzichtig op en neer te bewegen.

4. De schets uploaden

De meegeleverde schets voert een aantal acties uit om de huidige hartslag en zuurstofsaturatie van de gebruiker weer te geven. Om het te uploaden, installeert u gewoon de vereiste bibliotheken en selecteert u Arduino Nano in de bordlijst in het menu Extra en klikt u op Uploaden.

Wat betreft de schets zelf, deze initialiseert eerst de OLED en MAX30102, terwijl eventuele fouten worden gerapporteerd. Vervolgens leest het 100 waarden in om de sensor te kalibreren en begint deze weer te geven. Het apparaat komt dan in een lus waar het 25 nieuwe waarden inleest en daarmee een voortschrijdend gemiddelde berekent. Ten slotte controleert het of de waarden geldig zijn en drukt ze af op het scherm als dat zo is.

5. Het gebruiken

Om de pulsoximeter te gebruiken, plaatst u uw vingertop over de sensor en sluit u voorzichtig het bovendeksel. Sluit vervolgens een stroombron aan en wacht gewoon tot u gegevens ziet verschijnen.

Code

  • Pulsoximetercode
PulsoximetercodeC/C++
/* Hardware-aansluitingen (Breakoutboard naar Arduino):-5V =5V (3,3V is toegestaan) -GND =GND -SDA =A4 (of SDA) -SCL =A5 (of SCL) -INT =Niet aangesloten De MAX30105 Breakout kan 5V of 3,3V I2C-logica aan. We raden aan om het bord te voeden met 5V, maar het werkt ook op 3,3V.*/#include #include "MAX30105.h"#include "spo2_algorithm.h"#include "SSD1306Ascii.h"#include "SSD1306AsciiWire .h"MAX30105 partikelSensor;SSD1306AsciiWire oled;#define MAX_BRIGHTNESS 255#if gedefinieerd(__AVR_ATmega328P__) || gedefinieerd (__AVR_ATmega168__)//Arduino Uno heeft niet genoeg SRAM om 50 voorbeelden van IR-led-gegevens en rode led-gegevens op te slaan in 32-bits formaat// Om dit probleem op te lossen, wordt 16-bit MSB van de gesamplede gegevens afgekapt. Samples worden 16-bits data.uint16_t irBuffer[50]; // infrarood LED-sensor datauint16_t redBuffer [50]; //rode LED-sensorgegevens #elseuint32_t irBuffer [50]; // infrarood LED-sensor datauint32_t redBuffer [50]; // rode LED-sensorgegevens # endifint32_t spo2; //SPO2 valueint8_t validSPO2; // indicator om te laten zien of de SPO2-berekening validint32_t heartRate is; //hartslagwaardeint8_t validHeartRate; // indicator om te laten zien of de hartslagberekening geldig isvoid setup(){Serial.begin(115200); // initialiseer seriële communicatie met 115200 bits per seconde:oled.begin(&Adafruit128x64, 0x3C); oled.setFont(Arial14); // Initialiseer de sensor als (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Gebruik standaard I2C-poort, 400kHz-snelheid {Serial.println(F ("MAX30105 is niet gevonden. Controleer de bedrading/voeding.")); terwijl (1); } partikelSensor.setup (55, 4, 2, 200, 411, 4096); // Configureer de sensor met deze instellingen} void loop () { // lees de eerste 50 samples en bepaal het signaalbereik voor (byte i =0; i <50; i++) { while (particleSensor.available() ==false ) // hebben we nieuwe gegevens? partikelsensor.check(); // Controleer de sensor op nieuwe gegevens redBuffer [i] =partikelSensor.getRed (); irBuffer[i] =particleSensor.getIR(); partikelSensor.nextSample(); //We zijn klaar met dit voorbeeld, dus ga naar het volgende voorbeeld Serial.print(F("red=")); Serial.print(redBuffer[i], DEC); Serial.print(F(", ir=")); Serial.println(irBuffer[i], DEC); } // bereken hartslag en SpO2 na eerste 50 monsters (eerste 4 seconden van monsters) maxim_heart_rate_and_oxygen_saturation (irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); //Continu monsters nemen van MAX30102. Hartslag en SpO2 worden elke seconde berekend terwijl (1) { // de eerste 25 sets monsters in het geheugen dumpen en de laatste 25 sets monsters naar boven verschuiven voor (byte i =25; i <50; i++) { redBuffer[i - 25] =redBuffer[i]; irBuffer[i - 25] =irBuffer[i]; } //neem 25 sets monsters voordat u de hartslag berekent. for (byte i =25; i <50; i++) { while (particleSensor.available() ==false) // hebben we nieuwe gegevens? partikelsensor.check(); // Controleer de sensor op nieuwe gegevens redBuffer [i] =partikelSensor.getRed (); irBuffer[i] =particleSensor.getIR(); partikelSensor.nextSample(); //We zijn klaar met dit voorbeeld, dus ga naar het volgende voorbeeld Serial.print(F("red=")); Serial.print(redBuffer[i], DEC); Serial.print(F(", ir=")); Serial.print(irBuffer[i], DEC); Serial.print(F(", HR=")); Serial.print (hartslag, DEC); Serial.print(F(", HRvalid=")); Serial.print (validHeartRate, DEC); Serial.print(F(", SPO2=")); Serial.print(spo2, DEC); Serial.print(F(", SPO2Valid=")); Serial.println(validSPO2, DEC); } //Na het verzamelen van 25 nieuwe monsters herbereken je HR en SP02 maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); printToScreen(); }} ongeldig printToScreen() { oled.clear(); oled.setCursor(0,0); if(validSPO2 &&validHeartRate) { oled.print(F("HR:")); oled.println(heartRate, DEC); oled.print(F("SPO2:")); oled.println(spo2, DEC); } else { oled.print(F("Niet geldig")); }}

Aangepaste onderdelen en behuizingen

Schema's


Productieproces

  1. Een projectlogboek voor FirePick Delta, de Open Source MicroFactory
  2. Arduino digitale dobbelstenen
  3. Iron Man
  4. Vind mij
  5. Arduino 3D-geprinte robotarm
  6. PULSE OXIMETER voor gebruik in noodgevallen tijdens CORONAVIRUS-ZIEKTE
  7. Arduino-luchtbevochtigerbediening
  8. NeoMatrix Arduino Pong
  9. Arduino-joystick
  10. Health Band - Een slimme assistent voor ouderen
  11. De noodzaak van open source aan de rand (eBook)