- MAX30100 سینسر
- مطلوبہ اجزاء
- ESP32 کے ساتھ MAX30100 آکسومیٹر کو انٹرفیس کرنا
- ہارٹ ریٹ مانیٹرنگ کے لئے ESP32 کے ساتھ اڈفریٹ IO
- کوڈ کی وضاحت
- آئی او ٹی پر مبنی پلس آکسیمیٹر مظاہرہ
پلس آکسیمٹری ایک وسیع پیمانے پر استعمال شدہ طبی پیمائش کا آلہ ہے اور یہ ایک غیر ناگوار اور پیڑارہت ٹیسٹ ہے جو ہمارے خون میں آکسیجن سنترپتی کی سطح کا پیمانہ بناتا ہے جو آکسیجن میں چھوٹی چھوٹی تبدیلیوں کا آسانی سے پتہ لگاسکتا ہے۔ کوویڈ 19 کی موجودہ صورتحال میں ، مریض سے رابطہ کیے بغیر ایک ہی وقت میں ایک ہی وقت میں متعدد مریضوں کی آکسیجن کی سطح کا پتہ لگانا ضروری ہوگیا ہے۔
لہذا ، اس پروجیکٹ میں ، ہم MAX30100 پلس آکسیمٹر اور ESP32 کا استعمال کرتے ہوئے پلس آکسیمیٹر بناتے ہیں جو بلڈ آکسیجن کی سطح کو ٹریک کرے گا اور وائی فائی نیٹ ورک سے رابطہ کرکے انٹرنیٹ کے ذریعے ڈیٹا بھیجے گا ۔ اس طرح ، ہم مریضوں کے ساتھ معاشرتی فاصلہ برقرار رکھتے ہوئے ایک سے زیادہ مریضوں کی دور سے نگرانی کر سکتے ہیں ۔ حاصل کردہ ڈیٹا کو ایک گراف کے طور پر دکھایا جائے گا جس سے مریض کی حالت کا سراغ لگانا اور تجزیہ کرنا آسان ہوجاتا ہے۔ اس سے قبل ، ہم نبض کے سینسروں کا استعمال کرتے ہوئے دل کی شرح کے دوسرے مانیٹر بھی بناتے ہیں۔ اور اگر آپ کوویڈ 19 سے متعلق دیگر منصوبوں میں دلچسپی رکھتے ہیں تو ، آپ بخار کی نگرانی کے لئے ہیومن باڈی تھرمامیٹر ، اسمارٹ آئی آر تھرمامیٹر ، اور وال ماؤنٹ ٹمپریچر اسکینر چیک کرسکتے ہیں جو ہم پہلے تیار کرتے ہیں۔
کوویڈ ۔19 درخواست کے علاوہ ، اس منصوبے کو دائمی رکاوٹ پلمونری بیماری (سی او پی ڈی) ، دمہ ، نمونیا ، پھیپھڑوں کے کینسر ، خون کی کمی ، دل کا دورہ پڑنے یا دل کی خرابی ، یا پیدائشی دل کی خرابیوں میں بھی وسیع پیمانے پر استعمال کیا جاسکتا ہے۔
یاد رکھیں کہ ، اس پروجیکٹ میں استعمال ہونے والے سینسر کو میڈیکل طور پر درجہ بندی نہیں کیا گیا ہے ، اور اس پروجیکٹ کو فیل پروف ایپلی کیشنز کے لئے جانچ نہیں کیا گیا ہے۔ مریض کی نبض اور آکسیجن کی سطح کا تعین کرنے کے لئے ہمیشہ میڈیکیٹ ریٹیڈ پلس آکسیمیٹر کا استعمال کریں اور طبی معالج سے بات کریں۔ یہاں زیر بحث منصوبہ صرف تعلیمی مقاصد کے لئے ہے۔
MAX30100 سینسر
MAX30100 سینسر مربوط پلس آکسیمٹری اور دل کی شرح مانیٹر ماڈیول ہے۔ یہ I2C ڈیٹا لائن کے ساتھ بات چیت کرتا ہے اور میزبان مائکروکونٹرولر یونٹ کو SpO2 اور پلس کی معلومات فراہم کرتا ہے ۔ یہ فوٹو ڈیٹیکٹر ، آپٹیکل عناصر کا استعمال کرتا ہے جہاں سرخ ، سبز IR LED یلئڈی دالوں کو ماڈیول کرتا ہے۔ ایل ای ڈی موجودہ 0 سے 50mA تک قابل ترتیب ہے۔ نیچے کی تصویر MAX30100 سینسر کو دکھا رہی ہے۔
مذکورہ بالا سینسر ماڈیول 1.8V سے 5.5V کی حد تک کام کرتا ہے۔ I2C پنوں کے لئے پل اپ ریزسٹرس ماڈیول میں شامل ہیں۔
مطلوبہ اجزاء
- ایک وائی فائی کنکشن
- ESP32
- MAX30100 سینسر
- اڈفریٹ IO صارف کی شناخت اور ایک کسٹم تخلیق کردہ ڈیش بورڈ (اس کو مزید بنا دے گا)
- 5V مناسب بجلی کی فراہمی کا یونٹ جس میں کم از کم 1A کا درجہ بند موجودہ ہے
- USB کیبل مائیکرو USB سے USBA
- ESP32 پروگرامنگ ماحول کے ساتھ Ardino IDE والا ایک پی سی۔
ESP32 کے ساتھ MAX30100 آکسومیٹر کو انٹرفیس کرنا
ESP32 کے ساتھ MAX30100 کے لئے مکمل سرکٹ ڈایاگرام ذیل میں دیا گیا ہے۔
یہ ایک بہت ہی آسان تدبیر ہے۔ ای ایس پی 32 ڈوکیٹ سی کا 21 اور 22 پن نبض آکسیمیٹر سینسر MAX30100 کے ساتھ ایس ڈی اے اور ایس سی ایل پنوں کے ساتھ جڑا ہوا ہے۔ آکسیمیٹر ESP32 ڈویلپمنٹ بورڈ میں 5V پن کے ذریعے بھی چلتا ہے۔ میں نے روٹی بورڈ کا استعمال کرتے ہوئے اور تاروں سے منسلک ہونے کا اپنا رابطہ قائم کیا ہے اور میرا ٹیسٹنگ سیٹ اپ ایسا لگتا ہے۔
ہارٹ ریٹ مانیٹرنگ کے لئے ESP32 کے ساتھ اڈفریٹ IO
اس سے قبل ہم نے مختلف IOT ایپلی کیشنز کے لئے بہت سارے ایڈفریٹ IO پروجیکٹس بنائے ہیں۔ اڈفریٹ IO ایک عمدہ پلیٹ فارم ہے جہاں ایک کسٹم ڈیش بورڈ بنایا جاسکتا ہے۔ IOT پر مبنی پلس آکسی میٹر سینسر کیلئے کسٹم ڈیش بورڈ بنانے کے لئے ، درج ذیل اقدامات استعمال کریں-
پہلا مرحلہ: مٹھی کا نام ، آخری نام ، ای میل پتہ ، صارف کا نام اور پاس ورڈ دینے کے بعد پہلے ایڈفریٹ IO میں سائن اپ کریں۔
مرحلہ 2: سائن ان عمل مکمل ہونے کے بعد خالی ڈیش بورڈ ونڈو کھل جائے گی۔ اس طبقہ میں ، ہمیں مختلف طریقوں سے ڈیٹا ظاہر کرنے کے لئے ڈیش بورڈ بنانے کی ضرورت ہوگی۔ لہذا ، اب وقت آگیا ہے کہ نیا ڈیش بورڈ تیار کریں اور ڈیش بورڈ کا نام اور تفصیل فراہم کریں۔
مرحلہ 3: مذکورہ فارم کو بھرنے کے بعد ، یہ وقت آگیا ہے کہ سینسر کے لئے گراف اور کنٹرول سیکشن بنایا جائے۔
سوئچ بلاک کو منتخب کریں۔ یہ نبض آکسی میٹر سینسر کو آن یا آف کرنے کے لئے درکار ہوگا۔
مرحلہ 4: بلاک کا نام لکھیں۔ جیسا کہ ہم مذکورہ تصویر میں دیکھ سکتے ہیں ، ٹوگل فنکشن دو ریاستیں فراہم کرے گا ، آن اور آف۔ اسی عمل میں ، گراف بلاک کو منتخب کریں۔
اس گراف سیکشن کو دو بار منتخب کرنے کی ضرورت ہے کیونکہ دو گراف دکھائے جائیں گے ، ہارٹ بٹ اور ایس پی او 2۔ دونوں حصے بنائے گئے ہیں۔ جیسا کہ ہم دیکھ سکتے ہیں ، ہم نے تمام ان پٹ اور آؤٹ پٹ فعالیت کو منتخب کیا ہے۔
مرحلہ 5: اگلا اور آخری مرحلہ یہ ہے کہ ایڈفریٹ کی چابی ہو۔ جیسا کہ ہم دیکھ سکتے ہیں ، ہمیں اڈفریٹ کی کلید مل جاتی ہے اور اس کو کوڈ میں شامل کرنے کی ضرورت ہے۔
اڈفریٹ IO اب تشکیل شدہ ہے۔ اب وقت آگیا ہے کہ اس پروجیکٹ کے لئے ہارڈ ویئر تیار کریں اور فرم ویئر تیار کریں۔
کوڈ کی وضاحت
یہ کوڈ بہت ساری لائبریریوں کا استعمال کرتا ہے اور سب اہم ہیں۔ لائبریریوں MAX30100 پلس Oximeter سینسر لائبریری، ہیں Wire.h I2C لئے، WiFi.h ESP32 میں وائی فائی سے متعلق اعانت لئے Adafruit MQTT ، اور MQTT کلائنٹ لائبریری. مکمل پروگرام اس صفحے کے نیچے پایا جاسکتا ہے۔
مذکورہ لائبریریاں کوڈ کے شروع میں شامل ہیں۔
# شامل کریں
اگلی دو تعریفیں WLAN SSID اور WLAN پاس ورڈ ہیں۔ یہ درست ہونا ضروری ہے اور یہ ESP32 کے ذریعہ وائی فائی نیٹ ورک سے رابطہ قائم کرنے کے لئے استعمال ہوگا۔
# ڈیفائن WLAN_SSID "xxxxxxxxxxx" # ڈیفائن WLAN_PASS "2581xxxxx2"
اگلا ، ہم نے Adaf فروٹ io کی تعریف کی۔
# تعی AIن AIO_UPDATE_RATE_SEC 5 # تعی AIن AIO_SERVER "io.adafruit.com" # تعی AIن AIO_SERVERPORT 1883 # تعی AIن AIO_USERNAME "xxxxxxxxxxxxxxx" # تعی AIن AIO_KEY "abcdefgh"
تازہ کاری کی شرح ہر 5 سیکنڈ میں ڈیٹا کو اپ ڈیٹ کرے گی ، سرور 1883 کی سرور پورٹ کے ساتھ io.adafruit.com ہوگا ۔ صارف نام اور پاس ورڈ ایڈفروٹ IO ڈیش بورڈ سے تیار کردہ صارف نام اور پاس ورڈ ہوگا۔ یہ سب کے لئے مختلف ہوگا اور اس کو تیار کرنے کی ضرورت ہوگی جیسا کہ اڈ فروٹ سیٹ اپ سیکشن میں بتایا گیا ہے۔
I2C بندرگاہوں کی وضاحت بعد میں کی گئی ہے جیسا کہ اسکیمٹک میں دکھایا گیا ہے۔
# تعریف I2C_SDA 21 # تعی Iن I2C_SCL 22
اس کے بعد ، آخری رپورٹ اور بی پی ایم اور سپو 2 ویلیو کو اسٹور کرنے کے لئے تین متغیرات کا استعمال کیا جاتا ہے۔
uint32_t tsLastReport = 0؛ فلوٹ bpm_dt = 0؛ فلوٹ spo2_dt = 0؛
ایم کیو ٹی ٹی ایک پب سب ماڈل (شائع اور سبسکرائب) کے ساتھ کام کرتی ہے۔ اس ورک ماڈل میں ، ڈیوائس جو ایڈا فروٹ سرور کو ڈیٹا پیش کرتا ہے وہ اشاعت کے موڈ میں رہتا ہے جہاں اڈفریٹ IO سرور اسی ڈیٹا پوائنٹس کو سبسکرائب کرتا ہے۔ اس طرح کے اثر میں ، جب بھی آلہ کوئی نیا ڈیٹا شائع کرتا ہے ، سرور ، جیسا کہ اس کا سبسکرائب کیا جاتا ہے ، ڈیٹا وصول کرتا ہے اور ضروری کارروائی فراہم کرتا ہے۔
جب سرور ڈیٹا کو شائع کرتا ہے تو وہی ہوتا ہے ، اور آلہ اس میں سبسکرائب کرتا ہے۔ ہماری درخواست میں ، ڈیوائس ایس پی او 2 اور بی پی ایم کے ڈیٹا کو سرور پر بھیجتا ہے ، لہذا یہ ایک ہی شائع کرتا ہے اور اسے سرور سے اوپن آف اسٹیٹ ملتا ہے ، اس طرح اس کی رکنیت اختیار کرتا ہے۔ اس چیز کو ذیل میں بیان کردہ کوڈ کے ٹکڑوں میں تشکیل دیا گیا ہے۔
وائی فائی کلائنٹ اڈفروٹ_ ایم کیو ٹیT_ کلائنٹ ایم کی ٹی ٹی ((اور مؤکل ، AIO_SERVER ، AIO_SERVERPORT ، AIO_USERNAME ، AIO_KEY))؛ اڈفروٹ_یم کیوٹیT_ سبسکرائب کریں sw_sub = اڈفریٹ_ ایم کیو ٹیT_ سبسکرائب کریں (& mqtt، AIO_USERNAME "/ فیڈ / سوئچ")؛ // نوٹس کریں ایم کیوٹی راستوں کے لئے اے آئی او فارم کی پیروی کریں:
میں سیٹ اپ کی تقریب، ہم I2C شروع ہونے والے پیش وضاحتی SSID اور پاس ورڈ کے ساتھ وائی فائی سے منسلک، اور سوئچ ریاست (Adafruit IO ڈیش بورڈ میں پیدا سوئچ بٹن) کے لئے MQTT سبسکرپشن عمل شروع کر رہے ہیں.
باطل سیٹ اپ () {سیریل.بیگین (115200)؛ وائر.بیگین (I2C_SDA ، I2C_SCL)؛ WiFi.begin (WLAN_SSID، WLAN_PASS)؛ جبکہ (WiFi.status ()! = WL_CONNECTED) {تاخیر (500)؛ سیریل.پرنٹ (".")؛ ial سیریل.پرنٹلن ()؛ سیریل.پرنٹلن ("وائی فائی منسلک")؛ سیریل.پرنٹلن ("آئی پی ایڈریس:")؛ سیریل.پرنٹ لِن (وائی فائی ۔لکالپ ())؛ mqtt.subscribe (& sw_sub)؛ سیریل.پرنٹ ("پلس آکسیمیٹر شروع کرنا..")؛ // پلس آکسی میٹر مثال شروع کریں // ناکامیوں کی وجہ عام طور پر ایک غلط I2C وائرنگ ، گمشدہ بجلی کی فراہمی // یا غلط ٹارگٹ چپ کی وجہ سے ہوتا ہے اگر (! pox.begin ()) ial Serial.println ("FAILED")؛ کے لئے (؛؛)؛ } دوسری {Serial.println ("کامیابی")؛ } // IR ایل ای ڈی کے لئے پہلے سے طے شدہ موجودہ 50mA ہے اور اسے تبدیل کیا جاسکتا ہے // مندرجہ ذیل لائن کو غیر یقینی بناکر۔ دستیاب // دستیاب اختیارات کے لئے MAX30100_Register.h چیک کریں۔ پوکسسیٹ آئرنڈ کرنٹ (MAX30100_LED_CURR_7_6MA)؛ // پیٹ کا پتہ لگانے کے لئے کال بیک رجسٹر کریں۔ اسٹاپ ریڈپاکس ()؛ }
ان سب کے بعد ، زیادہ سے زیادہ 100 کی قیادت والی موجودہ ترتیب کے ساتھ شروع کی جاتی ہے۔ مختلف ترتیب کے لئے MAX30100 ہیڈر فائلوں میں مختلف موجودہ ترتیبات بھی دستیاب ہیں۔ دل کی دھڑکن کا پتہ لگانے کال بیک فنکشن بھی شروع کردیا گیا ہے۔ ان سبھی سیٹ اپ کے بعد ، آکسیمیٹر سینسر رک گیا ہے۔
میں لوپ تقریب، MQTT کنکشن شروع کیا جاتا ہے اور رکنیت ماڈل میں موازنہ کیا جاتا ہے ہر 5000 ملی سیکنڈز. اس صورتحال میں ، اگر سوئچ آن ہے تو ، وہ آکسی میٹر سینسر کو پڑھنے اور دل کی دھڑکن اور ایس پی او 2 ویلیو کا ڈیٹا شائع کرنا شروع کردیتا ہے ۔ اگر سوئچ آف ہے تو ، یہ نبض آکسیمیٹر سینسر سے متعلق تمام کام معطل کردیتا ہے۔
باطل لوپ () {MQTT_connect ()؛ Adaf فرو_MQTT_ سبسکرائب * سبسکرپشن؛ جبکہ ((خریداری = mqtt.readSubscription (5000))) {اگر (سبسکرپشن == & sw_sub) ial Serial.print (F ("Got:"))؛ سیریل.پرنٹلن ((چار *) sw_sub.lastread)؛ if (! strcmp ((char *) sw_sub.lastread، "ON")) ial Serial.print (("POX شروع کر رہا ہے…"))؛ startReadPOX ()؛ بیس ٹائپ_ٹ x دوبارہ بنایا گیا؛ if (poxReadTaskHld == NULL) {xReturned = xTaskCreate (poxReadTask، / * فنکشن جو کام کو نافذ کرتی ہے۔ بائٹس. * / NULL ، / * پیرامیٹر ٹاسک میں داخل ہوگیا۔ * / 2، / * ترجیح جس پر ٹاسک بنایا گیا ہے۔ * / & poxReadTaskHld)؛ / * تخلیق کردہ ٹاسک کو ختم کرنے کے لئے استعمال ہوتا ہے۔ * /} تاخیر (100)؛ اگر (mqttPubTaskHld == NULL) {xReturned = xTaskCreate (mqttPubTask ،/ * فنکشن جو کام کو نافذ کرتا ہے۔ * / "mqttPub" ، / * اس کام کے ل for متن کا نام۔ * / 1024 * 3 ، / * الفاظ میں اسٹیک سائز ، بائٹس نہیں۔ * / NULL ، / * پیرامیٹر کام میں گزر گیا۔ * / 2 ، / * ترجیح جس میں ٹاسک بنایا گیا ہے۔ * / & mqttPubTaskHld)؛ / * تخلیق کردہ ٹاسک کو ختم کرنے کے لئے استعمال ہوتا ہے۔ * /}} else {سیریل.پرنٹ (("پوکس روک رہا ہے…"))؛ // Detele POX پڑھنے کا کام اگر (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld)؛ poxReadTaskHld = NULL؛ (// ایم کیوٹی ٹی پب ٹاسک کو حذف کریں اگر (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld)؛ mqttPubTaskHld = NULL؛ } اسٹاپ ریڈپاکس ()؛ }}}}/ * تخلیق کردہ ٹاسک کو ختم کرنے کے لئے استعمال ہوتا ہے۔ * /}} else {سیریل.پرنٹ (("پوکس روک رہا ہے…"))؛ // Detele POX پڑھنے کا کام اگر (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld)؛ poxReadTaskHld = NULL؛ (// ایم کیوٹی ٹی پب ٹاسک کو حذف کریں اگر (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld)؛ mqttPubTaskHld = NULL؛ } اسٹاپ ریڈپاکس ()؛ }}}}/ * تخلیق کردہ ٹاسک کو ختم کرنے کے لئے استعمال ہوتا ہے۔ * /}} else {سیریل.پرنٹ (("پوکس روک رہا ہے…"))؛ // Detele POX پڑھنے کا کام اگر (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld)؛ poxReadTaskHld = NULL؛ (// ایم کیوٹی ٹی پب ٹاسک کو حذف کریں اگر (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld)؛ mqttPubTaskHld = NULL؛ } اسٹاپ ریڈپاکس ()؛ }}}}
آئی او ٹی پر مبنی پلس آکسیمیٹر مظاہرہ
سرکٹ بریڈ بورڈ میں ٹھیک طرح سے جڑا ہوا ہے اور ذیل میں دیا گیا پروگرام ESP32 پر اپ لوڈ کیا گیا ہے۔ اس بات کو یقینی بنائیں کہ آپ کوڈ میں اس کے مطابق وائی فائی اور اڈفریٹ کی اسناد کو تبدیل کریں تاکہ آپ کے کام آئیں۔
وائی فائی اور اڈفریٹ IO سرور کے ساتھ رابطے کے بعد ، اس نے توقع کے مطابق کام کرنا شروع کردیا۔
جیسا کہ ہم دیکھ سکتے ہیں کہ ایس پی او 2 کی سطح 96٪ اور دل کی دھڑکن 78 سے 81 بٹس فی منٹ دکھا رہی ہے۔ یہ وقت فراہم کرتا ہے جب اعداد و شمار کو پکڑا جاتا ہے۔
جیسا کہ ہم مذکورہ تصویر میں دیکھ سکتے ہیں ، سوئچ آف کر دیا گیا ہے اور ڈیٹا 0 ہے۔ اس منصوبے کا مکمل کام کرنے والا ویڈیو بھی اس صفحے کے نیچے پایا جاسکتا ہے۔
امید ہے کہ آپ نے آرٹیکل سے لطف اندوز ہوئے اور کچھ مفید سیکھا ، اگر آپ کے ذہن میں کوئی سوالات ہیں تو ، براہ کرم انہیں نیچے تبصرہ سیکشن میں چھوڑ دیں یا ہمارے فورمز پر پوسٹ کریں ۔