[PRZYKŁAD] Pulsoksymetr MAX30100 + KAmduino UNO
Po podłączeniu układu można przejść do napisania oprogramowania na platformę Arduino (Pełny kod znajduje się w sekcji „do pobrania”, na końcu artykułu). Do napisania programu użyta została biblioteka dostępna pod adresem https://github.com/oxullo/Arduino-MAX30100. Należało w niej jednak wprowadzić niewielkie modyfikacje. Podczas uruchamiania przykładowego kodu okazało się, że tętno autora wynosi ok. 30 uderzeń na minutę. Okazało się, że jest to równe częstotliwości sprawdzania pomiaru temperatury i czujnik reagował na momenty zbierania próbek. W związku z tym w funkcji odświeżającej wartości z czujnika zakomentowana została część odpowiedzialna za pomiar temperatury. Funkcja PulseOximeter::update w pliku MAX30100_PulseOximeter.cpp wygląda teraz tak:
void PulseOximeter::update()
{
checkSample();
checkCurrentBias();
// checkTemperature();
}
Także w pliku MAX30100_BeatDetector.h zamieniono parametr BEATDETECTOR_BPFILTER_ALPHA na wartość 0.2 w celu lepszego uśredniania wartości tętna.
#define BEATDETECTOR_BPFILTER_ALPHA 0.2
Zmodyfikowana wersja biblioteki znajduje się w paczce „Kod projektu”. Teraz można przejść do kodu głównego.
Najpierw zostaną zaimportowane biblioteki oraz zadeklarowane niezbędne stałe i zmienne.
#include <LiquidCrystal.h> #include <Wire.h> #include "MAX30100_PulseOximeter.h" #define OKRES_WYSWIETLANIA 200 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); PulseOximeter max30100; uint8_t saturacja; float tetno; uint32_t poprzedniOdczyt = 0;
W funkcji setup inicjalizowane są urządzenia – czujnik MAX30100 oraz ekran LCD. Prąd diody podczerwonej ustawiany jest na wartość 11 mA. Warto zwrócić uwagę, że zbyt duży prąd diody może powodować stałe przesterowanie detektora, a w konsekwencji brak możliwości zaobserwowania zmian w sygnale wyjściowym.
void setup() {
lcd.begin(16,2);
lcd.setCursor(0,0);
max30100.begin();
max30100.setIRLedCurrent(MAX30100_LED_CURR_11MA); //ustawienie pradu diody podczerwonej
}
W głównej pętli programu aktualizowane są odczyty czujnika MAX30100. Następnie, co 200 ms, na ekranie LCD wyświetlane są aktualne wskazania tętna i saturacji.
void loop() {
max30100.update();
if (millis() - poprzedniOdczyt > OKRES_WYSWIETLANIA) {
saturacja = max30100.getSpO2();
tetno = max30100.getHeartRate();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tetno: ");
lcd.print(tetno);
lcd.print(" bpm");
lcd.setCursor(0,1);
lcd.print("Saturacja: ");
lcd.print(saturacja);
lcd.print("%");
poprzedniOdczyt = millis();
}
}
Działanie przykładu zostało zaprezentowane na poniższym materiale wideo:

Tester baterii GBM-3300 marki GW Instek
NCS-PX133P-J2-J
Bezpieczne kleje anaerobowe, dwuskładnikowe kleje strukturalne oraz innowacyjne systemy dozowania w ofercie Semicon 




