- MAX30100 సెన్సార్
- అవసరమైన భాగాలు
- ESP32 తో MAX30100 ఆక్సిమీటర్ ఇంటర్ఫేసింగ్
- హార్ట్ రేట్ మానిటరింగ్ కోసం ESP32 తో అడాఫ్రూట్ IO
- కోడ్ వివరణ
- IoT బేస్డ్ పల్స్ ఆక్సిమీటర్ ప్రదర్శన
పల్స్ ఆక్సిమెట్రీ అనేది విస్తృతంగా ఉపయోగించే వైద్య కొలత పరికరం మరియు ఇది మన రక్తంలో ఆక్సిజన్ సంతృప్త స్థాయిని కొలిచే నాన్-ఇన్వాసివ్ మరియు నొప్పిలేకుండా చేసే పరీక్ష, ఇది ఆక్సిజన్లో చిన్న మార్పులను సులభంగా గుర్తించగలదు. ప్రస్తుత కోవిడ్ -19 పరిస్థితిలో, రోగితో సంబంధాలు పెట్టుకోకుండా ఒకేసారి బహుళ రోగుల ఆక్సిజన్ స్థాయిని రిమోట్గా గుర్తించడం చాలా ముఖ్యం.
కాబట్టి, ఈ ప్రాజెక్ట్లో, మేము MAX30100 పల్స్ ఆక్సిమీటర్ మరియు ESP32 ఉపయోగించి పల్స్ ఆక్సిమీటర్ను నిర్మిస్తాము, అది బ్లడ్ ఆక్సిజన్ స్థాయిని ట్రాక్ చేస్తుంది మరియు వై-ఫై నెట్వర్క్కు కనెక్ట్ చేయడం ద్వారా డేటాను ఇంటర్నెట్ ద్వారా పంపుతుంది. ఈ విధంగా, రోగులతో సామాజిక దూరాన్ని కొనసాగించడం ద్వారా మేము బహుళ రోగులను రిమోట్గా పర్యవేక్షించవచ్చు. పొందిన డేటా గ్రాఫ్ వలె చూపబడుతుంది, ఇది రోగి యొక్క పరిస్థితిని ట్రాక్ చేయడం మరియు విశ్లేషించడం సులభం చేస్తుంది. గతంలో, మేము పల్స్ సెన్సార్లను ఉపయోగించి ఇతర హృదయ స్పందన మానిటర్లను కూడా నిర్మించాము. మీకు ఇతర కోవిడ్ -19 సంబంధిత ప్రాజెక్టులపై ఆసక్తి ఉంటే, మీరు హ్యూమన్ బాడీ థర్మామీటర్, జ్వరం పర్యవేక్షణ కోసం స్మార్ట్ ఐఆర్ థర్మామీటర్ మరియు మేము ఇంతకుముందు నిర్మించిన వాల్-మౌంట్ టెంపరేచర్ స్కానర్ను చూడవచ్చు.
కోవిడ్ -19 అప్లికేషన్ కాకుండా, దీర్ఘకాలిక అబ్స్ట్రక్టివ్ పల్మనరీ డిసీజ్ (సిఓపిడి), ఉబ్బసం, న్యుమోనియా, lung పిరితిత్తుల క్యాన్సర్, రక్తహీనత, గుండెపోటు లేదా గుండె ఆగిపోవడం లేదా పుట్టుకతో వచ్చే గుండె లోపాలలో కూడా ఈ ప్రాజెక్ట్ విస్తృతంగా ఉపయోగించబడుతుంది.
గమనించండి, ఈ ప్రాజెక్ట్లో ఉపయోగించిన సెన్సార్ వైద్యపరంగా రేట్ చేయబడలేదు మరియు ఫెయిల్ ప్రూఫ్ అనువర్తనాల కోసం ప్రాజెక్ట్ పరీక్షించబడదు. రోగి యొక్క పల్స్ మరియు ఆక్సిజన్ స్థాయిని నిర్ణయించడానికి మరియు వైద్య నిపుణుడితో చర్చించడానికి ఎల్లప్పుడూ వైద్యపరంగా రేట్ చేయబడిన పల్స్ ఆక్సిమీటర్ను ఉపయోగించండి. ఇక్కడ చర్చించిన ప్రాజెక్ట్ విద్యా ప్రయోజనాల కోసం మాత్రమే.
MAX30100 సెన్సార్
MAX30100 సెన్సార్ ఇంటిగ్రేటెడ్ పల్స్ ఆక్సిమెట్రీ మరియు హృదయ స్పందన మానిటర్ మాడ్యూల్. ఇది I2C డేటా లైన్తో కమ్యూనికేట్ చేస్తుంది మరియు హోస్ట్ మైక్రోకంట్రోలర్ యూనిట్కు SpO2 మరియు పల్స్ సమాచారాన్ని అందిస్తుంది. ఇది ఫోటోడెటెక్టర్లను ఉపయోగిస్తుంది, ఎరుపు, ఆకుపచ్చ IR LED LED పప్పులను మాడ్యులేట్ చేసే ఆప్టికల్ ఎలిమెంట్స్. LED కరెంట్ 0 నుండి 50mA వరకు కాన్ఫిగర్ చేయబడుతుంది. క్రింద ఉన్న చిత్రం MAX30100 సెన్సార్ను చూపుతోంది.
పై సెన్సార్ మాడ్యూల్ 1.8V తో 5.5V పరిధికి పనిచేస్తుంది. I2C పిన్స్ కోసం పుల్-అప్ రెసిస్టర్లు మాడ్యూల్లో చేర్చబడ్డాయి.
అవసరమైన భాగాలు
- వైఫై కనెక్షన్
- ESP32
- MAX30100 సెన్సార్
- అడాఫ్రూట్ IO యూజర్ ఐడి మరియు కస్టమ్ సృష్టించిన డాష్బోర్డ్ (దీన్ని మరింత చేస్తుంది)
- కనీసం 1A యొక్క రేటెడ్ కరెంట్తో 5V తగినంత విద్యుత్ సరఫరా యూనిట్
- USB కేబుల్ మైక్రో USB నుండి USBA వరకు
- ESP32 ప్రోగ్రామింగ్ వాతావరణంతో Arduino IDE తో PC.
ESP32 తో MAX30100 ఆక్సిమీటర్ ఇంటర్ఫేసింగ్
ESP32 తో MAX30100 కోసం పూర్తి సర్క్యూట్ రేఖాచిత్రం క్రింద ఇవ్వబడింది.
ఇది చాలా సులభమైన స్కీమాటిక్. ESP32 దేవ్కిట్ సి యొక్క పిన్ 21 మరియు 22 పల్స్ ఆక్సిమీటర్ సెన్సార్ MAX30100 తో SDA మరియు SCL పిన్లతో అనుసంధానించబడి ఉన్నాయి. ఆక్సిమీటర్ కూడా ESP32 డెవలప్మెంట్ బోర్డులోని 5 వి పిన్తో పనిచేస్తుంది. నేను బ్రెడ్బోర్డ్ మరియు కనెక్ట్ వైర్లను ఉపయోగించి నా కనెక్షన్ను చేసాను మరియు నా పరీక్ష సెటప్ ఇలా కనిపిస్తుంది-
హార్ట్ రేట్ మానిటరింగ్ కోసం ESP32 తో అడాఫ్రూట్ IO
మేము ఇంతకుముందు వేర్వేరు IoT అనువర్తనాల కోసం అనేక Adafruit IO ప్రాజెక్టులను నిర్మించాము. అడాఫ్రూట్ IO అనేది కస్టమ్ డాష్బోర్డ్ను సృష్టించగల అద్భుతమైన వేదిక. IoT ఆధారిత పల్స్-ఆక్సిమీటర్ సెన్సార్ కోసం అనుకూల డాష్బోర్డ్ను సృష్టించడానికి, క్రింది దశలను ఉపయోగించండి-
దశ 1: పిడికిలి పేరు, చివరి పేరు, ఇమెయిల్ చిరునామా, వినియోగదారు పేరు మరియు పాస్వర్డ్ ఇచ్చిన తర్వాత మొదట అడాఫ్రూట్ IO లో సైన్ అప్ చేయండి.
దశ 2: సైన్-ఇన్ ప్రక్రియ పూర్తయిన తర్వాత ఖాళీ డాష్బోర్డ్ విండో తెరవబడుతుంది. ఈ విభాగంలో, డేటాను వివిధ మార్గాల్లో చూపించడానికి మేము డాష్బోర్డ్ను సృష్టించాలి. అందువల్ల, క్రొత్త డాష్బోర్డ్ను సృష్టించడానికి మరియు డాష్బోర్డ్ పేరు మరియు వివరణను అందించే సమయం ఇది.
దశ 3: పై ఫారమ్ నింపిన తరువాత, సెన్సార్ కోసం గ్రాఫ్ మరియు కంట్రోల్ విభాగాన్ని సృష్టించే సమయం ఇది.
స్విచ్ బ్లాక్ ఎంచుకోండి. పల్స్-ఆక్సిమీటర్ సెన్సార్ను ఆన్ లేదా ఆఫ్ చేయడానికి ఇది అవసరం.
దశ 4: బ్లాక్ పేరు రాయండి. పై చిత్రంలో మనం చూడగలిగినట్లుగా, టోగుల్ ఫంక్షన్ ఆన్ మరియు ఆఫ్ అనే రెండు రాష్ట్రాలను అందిస్తుంది. అదే ప్రక్రియలో, గ్రాఫ్ బ్లాక్ను ఎంచుకోండి.
హార్ట్ బిట్ మరియు SpO2 అనే రెండు గ్రాఫ్లు ప్రదర్శించబడుతున్నందున ఈ గ్రాఫ్ విభాగాన్ని రెండుసార్లు ఎంచుకోవాలి. రెండు విభాగాలు సృష్టించబడతాయి. మేము చూడగలిగినట్లుగా, మేము అన్ని ఇన్పుట్ మరియు అవుట్పుట్ కార్యాచరణను ఎంచుకున్నాము.
దశ 5: తదుపరి మరియు చివరి దశ అడాఫ్రూట్ కీని కలిగి ఉండటం. మనం చూడగలిగినట్లుగా, మేము అడాఫ్రూట్ కీని పొందుతాము మరియు దీనిని కోడ్లో చేర్చాలి.
అడాఫ్రూట్ IO ఇప్పుడు కాన్ఫిగర్ చేయబడింది. ఈ ప్రాజెక్ట్ కోసం హార్డ్వేర్ను సిద్ధం చేసి ఫర్మ్వేర్ను రూపొందించే సమయం ఇది.
కోడ్ వివరణ
ఈ కోడ్ చాలా లైబ్రరీలను ఉపయోగిస్తుంది మరియు అన్నీ ముఖ్యమైనవి. లైబ్రరీలు MAX30100 పల్స్ ఆక్సిమీటర్ సెన్సార్ లైబ్రరీ, I2C కోసం Wire.h , ESP32 , Adafruit MQTT మరియు MQTT క్లయింట్ లైబ్రరీలో వైఫై సంబంధిత మద్దతు కోసం WiFi.h. పూర్తి ప్రోగ్రామ్ ఈ పేజీ దిగువన చూడవచ్చు.
పైన పేర్కొన్న ఆ లైబ్రరీలను కోడ్ ప్రారంభంలో చేర్చారు.
# చేర్చండి
తదుపరి రెండు నిర్వచనాలు WLAN SSID మరియు WLAN పాస్వర్డ్. ఇది ఖచ్చితంగా ఉండాలి మరియు ఇది వైఫై నెట్వర్క్తో కనెక్ట్ కావడానికి ESP32 ద్వారా ఉపయోగించబడుతుంది.
# WLAN_SSID "xxxxxxxx" ను నిర్వచించండి # WLAN_PASS "2581xxxxx2" ని నిర్వచించండి
తరువాత, మేము అడాఫ్రూట్ io నిర్వచనాలను నిర్వచించాము.
# AIO_UPDATE_RATE_SEC 5 ని నిర్వచించండి # AIO_SERVER "io.adafruit.com" # AIO_SERVERPORT 1883 ని నిర్వచించండి # AIO_USERNAME ని నిర్వచించండి "xxxxxxxxxxxx" # AIO_KEY "abcdefgh
నవీకరణ రేటు ప్రతి 5 సెకన్లలో డేటాను అప్డేట్ చేస్తుంది, సర్వర్ 1883 యొక్క సర్వర్ పోర్ట్తో io.adafruit.com అవుతుంది. వినియోగదారు పేరు మరియు పాస్వర్డ్ అడాఫ్రూట్ IO డాష్బోర్డ్ నుండి ఉత్పత్తి చేయబడిన వినియోగదారు పేరు మరియు పాస్వర్డ్ అవుతుంది. ఇది అందరికీ భిన్నంగా ఉంటుంది మరియు అడాఫ్రూట్ సెటప్ విభాగంలో వివరించిన విధంగా ఉత్పత్తి చేయాలి.
స్కీమాటిక్లో చూపిన విధంగా I2C పోర్ట్లు నిర్వచించబడతాయి.
# I2C_SDA 21 ని నిర్వచించండి # I2C_SCL 22 ని నిర్వచించండి
తరువాత, చివరి నివేదిక మరియు bpm మరియు spo2 విలువను నిల్వ చేయడానికి మూడు వేరియబుల్స్ ఉపయోగించబడతాయి.
uint32_t tsLastReport = 0; ఫ్లోట్ bpm_dt = 0; ఫ్లోట్ spo2_dt = 0;
MQTT పబ్-సబ్ మోడల్తో పనిచేస్తుంది (ప్రచురించండి మరియు సభ్యత్వాన్ని పొందండి). ఈ పని నమూనాలో, అడాఫ్రూట్ సర్వర్కు డేటాను సమర్పించే పరికరం ప్రచురణ మోడ్లో ఉంటుంది, ఇక్కడ అడాఫ్రూట్ IO సర్వర్ అదే డేటా పాయింట్లకు చందా పొందుతుంది. అటువంటి ప్రభావంలో, పరికరం ఏదైనా క్రొత్త డేటాను ప్రచురించినప్పుడల్లా, సర్వర్, దానికి చందా పొందినట్లుగా, డేటాను స్వీకరిస్తుంది మరియు అవసరమైన చర్యను అందిస్తుంది.
సర్వర్ డేటాను ప్రచురించినప్పుడు అదే జరుగుతుంది మరియు పరికరం దీనికి సభ్యత్వాన్ని పొందుతుంది. మా అనువర్తనంలో, పరికరం SPO2 మరియు BPM యొక్క డేటాను సర్వర్కు పంపుతుంది, కాబట్టి ఇది అదే ప్రచురిస్తుంది మరియు ఇది సర్వర్ నుండి ఆన్-ఆఫ్ స్థితిని అందుకుంటుంది, తద్వారా దీనికి చందా పొందుతుంది. ఈ విషయం క్రింద వివరించిన కోడ్ స్నిప్పెట్లో కాన్ఫిగర్ చేయబడింది-
వైఫై క్లయింట్ క్లయింట్; Adafruit_MQTT_Client mqtt (& క్లయింట్, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Subscribe sw_sub = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ ఫీడ్లు / స్విచ్"); // AIO కోసం MQTT మార్గాలు ఫారమ్ను అనుసరించండి:
లో సెటప్ ఫంక్షన్, మేము ముందే SSID మరియు పాస్వర్డ్ తో వైఫై కనెక్ట్, I2C ప్రారంభమై, స్విచ్ రాష్ట్ర (Adafruit IO డాష్బోర్డ్ లో రూపొందించినవారు స్విచ్ బటన్) కోసం MQTT సబ్స్క్రిప్షన్ విధానం ప్రారంభించిన.
void setup () {Serial.begin (115200); వైర్.బెగిన్ (I2C_SDA, I2C_SCL); WiFi.begin (WLAN_SSID, WLAN_PASS); అయితే (WiFi.status ()! = WL_CONNECTED) {ఆలస్యం (500); సీరియల్.ప్రింట్ ("."); } సీరియల్.ప్రింట్ల్న్ (); సీరియల్.ప్రింట్ల్న్ ("వైఫై కనెక్ట్"); సీరియల్.ప్రింట్ల్న్ ("IP చిరునామా:"); సీరియల్.ప్రింట్ల్న్ (వైఫై.లోకాలిఐపి ()); mqtt.subscribe (& sw_sub); సీరియల్.ప్రింట్ ("పల్స్ ఆక్సిమీటర్ను ప్రారంభిస్తోంది.."); // పల్స్ఆక్సిమీటర్ ఉదాహరణను ప్రారంభించండి // వైఫల్యాలు సాధారణంగా సరికాని I2C వైరింగ్, విద్యుత్ సరఫరా లేకపోవడం // లేదా తప్పు టార్గెట్ చిప్ (! Pox.begin ()) {సీరియల్.ప్రింట్ల్న్ ("FAILED") కారణంగా; (;;); } else {Serial.println ("SUCCESS"); } // IR LED యొక్క డిఫాల్ట్ కరెంట్ 50mA మరియు దీనిని ఈ క్రింది పంక్తిని విడదీయడం ద్వారా మార్చవచ్చు. అందుబాటులో ఉన్న అన్ని // ఎంపికల కోసం MAX30100_Registers.h ని తనిఖీ చేయండి. పోక్స్.setIRLedCurrent (MAX30100_LED_CURR_7_6MA); // బీట్ డిటెక్షన్ కోసం బ్యాక్ నమోదు చేయండి pox.setOnBeatDetectedCallback (onBeatDetected); stopReadPOX (); }
వీటన్నిటి తరువాత, మాక్స్ 30100 లెడ్ కరెంట్ సెట్టింగ్తో ప్రారంభించబడింది. వేర్వేరు కాన్ఫిగరేషన్ల కోసం MAX30100 హెడర్ ఫైళ్ళలో వేర్వేరు ప్రస్తుత సెట్టింగులు అందుబాటులో ఉన్నాయి. హృదయ స్పందన గుర్తింపు కాల్ బ్యాక్ ఫంక్షన్ కూడా ప్రారంభించబడింది. ఈ అన్ని సెటప్ల తరువాత, ఆక్సిమీటర్ సెన్సార్ ఆపివేయబడుతుంది.
లో లూప్ ఫంక్షన్, MQTT కనెక్షన్ ప్రారంభించారు మరియు సబ్స్క్రిప్షన్ నమూనా లో తనిఖీ ప్రతి 5000 మిల్లీసెకన్లు. ఈ పరిస్థితిలో, స్విచ్ ఆన్ చేయబడితే, అది ఆక్సిమీటర్ సెన్సార్ను చదవడం ప్రారంభిస్తుంది మరియు హార్ట్బీట్ మరియు SPO2 విలువ యొక్క డేటాను ప్రచురిస్తుంది. స్విచ్ ఆపివేయబడితే, ఇది పల్స్ ఆక్సిమీటర్ సెన్సార్కు సంబంధించిన అన్ని పనులను నిలిపివేస్తుంది.
శూన్య లూప్ () {MQTT_connect (); Adafruit_MQTT_ సబ్స్క్రయిబ్ * చందా; అయితే ((చందా = mqtt.readSubscription (5000%)) {if (subscription == & sw_sub) {Serial.print (F ("Got:")); సీరియల్.ప్రింట్ల్న్ ((చార్ *) sw_sub.lastread); if (! strcmp ((char *) sw_sub.lastread, "ON")) {Serial.print (("POX ప్రారంభిస్తోంది…")); startReadPOX (); బేస్టైప్_టి x తిరిగి వచ్చింది; if (poxReadTaskHld == NULL) {xReturned = xTaskCreate (poxReadTask, / * విధిని అమలు చేసే ఫంక్షన్. * / "pox_read", / * పనికి వచన పేరు. * / 1024 * 3, / * పదాలలో స్టాక్ పరిమాణం, కాదు బైట్లు. * / NULL, / * పరామితి పనిలోకి ప్రవేశించింది. * / 2, / * విధిని సృష్టించే ప్రాధాన్యత. * / & poxReadTaskHld); / * సృష్టించిన పని యొక్క హ్యాండిల్ను దాటడానికి ఉపయోగిస్తారు. * /} ఆలస్యం (100); if (mqttPubTaskHld == NULL) {xReturned = xTaskCreate (mqttPubTask,/ * విధిని అమలు చేసే ఫంక్షన్. * / "mqttPub", / * పని కోసం వచన పేరు. * / 1024 * 3, / * పరిమాణంలో స్టాక్ పరిమాణాలు, బైట్లు కాదు. * / NULL, / * పారామితి పనిలోకి ప్రవేశించింది. * / 2, / * విధిని సృష్టించే ప్రాధాన్యత. * / & mqttPubTaskHld); / * సృష్టించిన పని యొక్క హ్యాండిల్ను దాటడానికి ఉపయోగిస్తారు. * /}} else {Serial.print (("POX ని ఆపుతుంది…")); // (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld) ఉంటే POX చదివే పనిని తొలగించండి; poxReadTaskHld = NULL; } // MQTT పబ్ టాస్క్ను తొలగించండి (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * సృష్టించిన పని యొక్క హ్యాండిల్ను దాటడానికి ఉపయోగిస్తారు. * /}} else {Serial.print (("POX ని ఆపుతుంది…")); // (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld) ఉంటే POX చదివే పనిని తొలగించండి; poxReadTaskHld = NULL; } // MQTT పబ్ టాస్క్ను తొలగించండి (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * సృష్టించిన పని యొక్క హ్యాండిల్ను దాటడానికి ఉపయోగిస్తారు. * /}} else {Serial.print (("POX ని ఆపుతుంది…")); // (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld) ఉంటే POX చదివే పనిని తొలగించండి; poxReadTaskHld = NULL; } // MQTT పబ్ టాస్క్ను తొలగించండి (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}
IoT బేస్డ్ పల్స్ ఆక్సిమీటర్ ప్రదర్శన
సర్క్యూట్ బ్రెడ్బోర్డ్లో సరిగ్గా కనెక్ట్ చేయబడింది మరియు క్రింద ఇవ్వబడిన ప్రోగ్రామ్ ESP32 కు అప్లోడ్ చేయబడుతుంది. మీ కోడ్లో వై-ఫై మరియు అడాఫ్రూట్ ఆధారాలను మీ కోసం పని చేసేలా మార్చారని నిర్ధారించుకోండి.
వైఫై మరియు అడాఫ్రూట్ IO సర్వర్తో కనెక్షన్ తరువాత, ఇది.హించిన విధంగా పనిచేయడం ప్రారంభించింది.
SPO2 స్థాయి 96% మరియు హృదయ స్పందన నిమిషానికి 78 నుండి 81 బిట్లను చూపుతున్నట్లు మనం చూడవచ్చు. ఇది డేటాను సంగ్రహించే సమయాన్ని కూడా అందిస్తోంది.
పై చిత్రంలో మనం చూడగలిగినట్లుగా, స్విచ్ ఆపివేయబడింది మరియు డేటా 0. ప్రాజెక్ట్ యొక్క పూర్తి పని వీడియోను కూడా ఈ పేజీ దిగువన చూడవచ్చు.
మీరు వ్యాసాన్ని ఆస్వాదించారని మరియు ఉపయోగకరమైనదాన్ని నేర్చుకున్నారని ఆశిస్తున్నాము, మీకు ఏవైనా ప్రశ్నలు ఉంటే, దయచేసి వాటిని క్రింది వ్యాఖ్య విభాగంలో ఉంచండి లేదా వాటిని మా ఫోరమ్లలో పోస్ట్ చేయండి.