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

Open-Source-Pulsoximeter für COVID-19

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Maxim Integrated MAX30102 Puls- und Herzfrequenzsensor
× 1
DFRobot Gravity I2C OLED-2864 Display
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE
Autodesk Fusion 360

Über dieses Projekt

Die Herausforderungen von COVID-19

COVID-19 ist eine durch das SARS-CoV-2-Virus verursachte Krankheit, die hauptsächlich die Atemwege einer Person angreift. Einige mildere Symptome können Fieber, Schmerzen und Schüttelfrost sein, aber es kann auch zu ernsteren Erkrankungen wie einer Lungenentzündung führen. Eine Person, die an Lungenentzündung oder sogar leichter Atemnot leidet, weiß möglicherweise nicht, wann sie in ein Krankenhaus gehen soll, insbesondere wenn sie noch mehr überfordert ist. Aus diesem Grund habe ich dieses Open-Source-Pulsoximeter entwickelt, das Menschen dabei helfen kann, die Hilfe zu bekommen, die sie brauchen, und genaue Informationen über ihren aktuellen Zustand zu erhalten.

Ein bisschen Haftungsausschluss

Dieses Gerät/Projekt darf nicht als genaues medizinisches Diagnosewerkzeug verwendet werden!

Die Elektronik

MAX30102

128x64 Pixel OLED

Arduino Nano

Aufbau des Geräts Schritt für Schritt

Hier ist eine Schritt-für-Schritt-Anleitung zum Erstellen dieses Projekts.

1. Teile ausdrucken und reinigen

Beginnen Sie damit, dass Sie jedes Stück aus dem Anhangsbereich dieses Projekts herunterladen und in den Slicer Ihrer Wahl laden. Ich habe eine Füllung von etwa 70-80% und mittlere Stützen verwendet, alle mit PLA. Nachdem sie mit dem Drucken fertig waren, entfernte ich die Stützen und schleifte sie leicht, um sicherzustellen, dass sie alle gut zusammenpassen.

2. Löten Sie die Elektronik

Das gesamte Gerät ist um einen Arduino Nano herum konzipiert, der auf einem 44 mm x 30 mm großen Perfboard montiert ist. Zuerst werden Drähte an die VIN-, GND-, SDA- und SCL-Pins des Sensors gelötet und dann unter dem Bettstück zum Arduino Nano geführt.

Als nächstes wird der Anschluss für das OLED am Nano befestigt und dann bis zum Display selbst geführt.

Zum Schluss wird die gesamte Elektronik in das Gehäuse eingeschoben und mit ein paar 3mm Schrauben befestigt.

3. Bauen Sie das Gerät zusammen

Nachdem die Elektronik eingesetzt wurde, befestigen Sie einfach den OLED-Bildschirm am Oberteil und befestigen Sie ihn mit ein paar 3mm-Schrauben am restlichen Chassis. Sie können seine Bewegung testen, indem Sie den Deckel vorsichtig nach oben und unten bewegen.

4. Hochladen der Skizze

Die mitgelieferte Skizze führt einige Aktionen aus, um die aktuelle Herzfrequenz und Sauerstoffsättigung des Benutzers anzuzeigen. Um es hochzuladen, installieren Sie einfach die erforderlichen Bibliotheken und wählen Sie Arduino Nano aus der Board-Liste im Tools-Menü aus und klicken Sie auf Upload.

Die Skizze selbst initialisiert zuerst die OLED und den MAX30102 und meldet gleichzeitig auftretende Fehler. Als nächstes liest es 100 Werte ein, um den Sensor zu kalibrieren und beginnt mit deren Anzeige. Das Gerät tritt dann in eine Schleife ein, in der es 25 neue Werte einliest und daraus einen gleitenden Durchschnitt berechnet. Schließlich überprüft es, ob die Werte gültig sind und gibt sie auf dem Bildschirm aus, wenn sie es sind.

5. Verwendung

Um das Pulsoximeter zu verwenden, legen Sie Ihre Fingerspitze über den Sensor und schließen Sie vorsichtig den oberen Deckel. Schließen Sie dann eine Stromquelle an und warten Sie einfach, bis die Daten angezeigt werden.

Code

  • Pulsoximeter-Code
Pulsoximeter-CodeC/C++
/* Hardwareverbindungen (Breakoutboard zu Arduino):-5V =5V (3,3V sind erlaubt) -GND =GND -SDA =A4 (oder SDA) -SCL =A5 (oder SCL) -INT =Nicht verbunden Der MAX30105 Breakout kann 5V oder 3,3V I2C-Logik verarbeiten. Wir empfehlen, das Board mit 5 V zu versorgen, aber es wird auch mit 3,3 V betrieben.*/#include #include "MAX30105.h"#include "spo2_algorithm.h"#include "SSD1306Ascii.h"#include "SSD1306AsciiWire .h"MAX30105 Partikelsensor;SSD1306AsciiWire oled;#define MAX_BRIGHTNESS 255#wenn definiert(__AVR_ATmega328P__) || define(__AVR_ATmega168__)//Arduino Uno hat nicht genug SRAM, um 50 Samples von IR-LED-Daten und roten LED-Daten im 32-Bit-Format zu speichern//Um dieses Problem zu lösen, werden 16-Bit-MSB der abgetasteten Daten abgeschnitten. Samples werden zu 16-Bit data.uint16_t irBuffer[50]; // Infrarot-LED-Sensor datauint16_t redBuffer [50]; // rote LED-Sensordaten #elseuint32_t irBuffer [50]; // Infrarot-LED-Sensor datauint32_t redBuffer [50]; // rote LED-Sensordaten #endifint32_t spo2; //SPO2-Wertint8_t validSPO2; // Indikator, der anzeigt, ob die SPO2-Berechnung validint32_t heartRate ist; //Herzfrequenzwertint8_t validHeartRate; // Indikator, um anzuzeigen, ob die Herzfrequenzberechnung validvoid setup () { Serial.begin (115200); // serielle Kommunikation mit 115200 Bits pro Sekunde initialisieren:oled.begin(&Adafruit128x64, 0x3C); oled.setFont(Arial14); // Sensor initialisieren, wenn (! particleSensor.begin (Wire, I2C_SPEED_FAST)) // Standard-I2C-Port verwenden, 400 kHz Geschwindigkeit { Serial.println (F ("MAX30105 wurde nicht gefunden. Bitte Verkabelung / Stromversorgung überprüfen")); während (1); } PartikelSensor.setup(55, 4, 2, 200, 411, 4096); // Sensor mit diesen Einstellungen konfigurieren}void loop () { // die ersten 50 Samples lesen und den Signalbereich bestimmen für (byte i =0; i <50; i++) { while (particleSensor.available () ==false ) //haben wir neue daten? PartikelSensor.check(); // Überprüfen Sie den Sensor auf neue Daten redBuffer[i] =PartikelSensor.getRed(); irBuffer[i] =PartikelSensor.getIR(); PartikelSensor.nextSample(); // Wir sind mit diesem Beispiel fertig, also gehen Sie zum nächsten Beispiel Serial.print (F ("red=")); Serial.print (redBuffer[i], DEC); Serial.print (F (, ir ==)); Serial.println (irBuffer[i], DEC); } //Herzfrequenz und SpO2 nach den ersten 50 Proben berechnen (ersten 4 Sekunden der Proben) maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); //Kontinuierliche Entnahme von Proben aus dem MAX30102. Herzfrequenz und SpO2 werden jede Sekunde berechnet, während (1) {//die ersten 25 Probensätze im Speicher abgelegt und die letzten 25 Probensätze nach oben verschoben werden für (Byte i =25; i <50; i++) { redBuffer[i - 25] =redBuffer[i]; irPuffer[i - 25] =irPuffer[i]; } // 25 Probensätze nehmen, bevor die Herzfrequenz berechnet wird. for (byte i =25; i <50; i++) { while (particleSensor.available() ==false) // haben wir neue daten? PartikelSensor.check(); // Überprüfen Sie den Sensor auf neue Daten redBuffer[i] =PartikelSensor.getRed(); irBuffer[i] =PartikelSensor.getIR(); PartikelSensor.nextSample(); // Wir sind mit diesem Beispiel fertig, also gehen Sie zum nächsten Beispiel Serial.print (F ("red=")); Serial.print (redBuffer[i], DEC); Serial.print (F (, ir ==)); Serial.print (irBuffer[i], DEC); Serial.print (F (, HR ==)); Serial.print (Herzfrequenz, DEZ); Serial.print (F (, HRvalid =")); Serial.print (gültigeHeartRate, DEZ); Serial.print (F (", SPO2 =")); Serial.print (spo2, DEC); Serial.print (F (, SPO2Valid =")); Serial.println (gültigSPO2, DEC); } //Nach dem Sammeln von 25 neuen Samples HR und SP02 neu berechnen maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); printToScreen(); }}void printToScreen() {oled.clear(); oled.setCursor(0,0); if(validSPO2 &&validHeartRate) {oled.print(F("HR:")); oled.println (Herzfrequenz, DEZ); oled.print(F("SPO2:")); oled.println(spo2, DEC); aufrechtzuerhalten. Else { oled.print (F ("Nicht gültig")); }}

Kundenspezifische Teile und Gehäuse

Schaltpläne


Herstellungsprozess

  1. Ein Projektprotokoll für FirePick Delta, die Open Source MicroFactory
  2. Arduino Digital Dice
  3. Iron Man
  4. Finde mich
  5. Arduino 3D-gedruckter Roboterarm
  6. PULSEOXIMETER für NOTFALL bei CORONAVIRUS-KRANKHEIT
  7. Arduino-Befeuchtersteuerung
  8. NeoMatrix Arduino Pong
  9. Health Band - Ein intelligenter Assistent für ältere Menschen
  10. Die Notwendigkeit von Open Source am Edge (eBook)