Verunchikc / proyecto-Buikuan

0 stars 0 forks source link

Saturación de oxígeno (SPO2) #13

Open juandamonsalve opened 7 months ago

juandamonsalve commented 7 months ago

Este código en Micro Python implementa la medición de saturación de oxígeno utilizando el sensor MAX 30102, el sensor de temperatura MLX90614 y una pantalla OLED SSD1306. La configuración inicial incluye la importación de los módulos necesarios, como pulsómetro, y la definición de la comunicación I2C a través de SoftI2C. Se crea una instancia del sensor de temperatura mlx90614.MLX90614 y un objeto SSD1306_I2C para la pantalla OLED. La funcionalidad principal del código se basa en un temporizador (Timer) que ejecuta periódicamente la función de desborde cada segundo. En esta función, se comparan las lecturas de BPM, SpO2 y temperatura con umbrales específicos. Si se cumplen ciertas condiciones, se formatean los datos y se muestran en la pantalla OLED. Este proceso se repite de manera continua, proporcionando actualizaciones regulares. La medición real comienza con la creación de una instancia de la clase Pulso llamada oled. Al llamar al método muestra de esta instancia, se inicia la adquisición de datos del sensor MAX 30102. La función realiza la conversión de datos y establece la lógica para calcular la frecuencia cardíaca (BPM) y la saturación de oxígeno (SpO2). Los resultados se almacenan en variables, y el flujo del programa sigue ejecutándose en un bucle continuo. Este código presenta una integración efectiva de sensores y pantalla OLED para medir y visualizar la saturación de oxígeno en tiempo real. La implementación del temporizador garantiza actualizaciones regulares en la pantalla, ofreciendo una interfaz de usuario dinámica y de fácil interpretación.

juandamonsalve commented 7 months ago

import pulsometro from pulsometro import Pulso from machine import Timer,SoftI2C, Pin import time import mlx90614 import ssd1306

i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=100000) sensor = mlx90614.MLX90614(i2c)

oled_width = 128 oled_height = 64 oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

temporiza = Timer(0) def desborde (Timer):

if oledC.datos <= 30 and oledC.datos2 >= 31 or oledC.datos3 >= 10:
    print("BPM={:02} SpO2={:02}% Temp={:02} °C ".format(oledC.datos, oledC.datos2, oledC.datos3))
    datos_string= str("{:.3f}".format(oledC.datos))
    datos2_string= str("{:.3f}".format(oledC.datos2))
    temperature_string = str("{:.3f}".format(sensor.read_object_temp()))
    oled.text('Datos:', 15, 10)
    oled.text('BPM:'+datos_string, 15, 25)
    oled.text('SpO2:'+datos2_string, 15, 35)
    oled.text('Temp:'+temperature_string, 15, 45)
    oled.show()
    time.sleep_ms(60)
    oled.fill(0)

__

temporiza.init(period=1000,mode=Timer.PERIODIC,callback=desborde)

_____

oledC = Pulso() oledC.muestra()