- المكونات المطلوبة للتذكير التلقائي بالطب باستخدام Arduino
- تذكير طب اردوينو باستخدام حلبة اردوينو
- عمل نظام التنبيه الطبي التلقائي
- برمجة اردوينو UNO للتذكير بالطب
عندما يتعلق الأمر بأحبائنا ، فإننا نريد دائمًا أن نحافظ على صحتهم ولياقتهم. لكن ماذا سيحدث إذا مرضوا ونسوا تناول الدواء في الوقت المحدد. سنكون قلقين ، صحيح؟ يوجد في المستشفيات العديد من المرضى ومن الصعب تذكير كل مريض بتناول الدواء في الوقت المحدد. تتطلب الطرق التقليدية جهودًا بشرية لتذكيرهم بتناول الأدوية في الوقت المحدد. لا يتبع العصر الرقمي ذلك ويمكننا استخدام الآلات للقيام بذلك. تطبيق Smart Medicine Reminder واسع جدًا ويمكن استخدامه من قبل المرضى في المنزل والأطباء في المستشفيات وفي العديد من الأماكن الأخرى. عندما يتعلق الأمر بالتذكير ، يمكن أن يكون هناك العديد من الطرق لتذكيره:
- اعرضها على الشاشة
- إرسال إشعار على البريد الإلكتروني أو الهاتف
- استخدام تطبيقات الجوال
- إنذار الطنين
- باستخدام Bluetooth / Wi-Fi
- الحصول على دعوة
- تذكير بوقت العلاج التالي مع تذكير الوقت الحالي
يمكننا الجمع بين الطرق حسب الحاجة. لتبسيط الأمور هنا ، قمنا بعمل تذكير بسيط بالطب باستخدام Arduino والذي يذكرنا بتناول الأدوية مرة أو مرتين أو ثلاث مرات في اليوم. يمكن تحديد الفترة الزمنية باستخدام أزرار الضغط. كما أنه يعرض التاريخ والوقت الحاليين. سنقوم بتوسيعه ليشمل المقالات الواردة لمشروع إنترنت الأشياء حيث سيتم إرسال إشعار بالبريد الإلكتروني أو الرسائل القصيرة إلى المستخدم. يمكن أيضًا دمج تذكير الدواء هذا مع نظام مراقبة المريض.
المكونات المطلوبة للتذكير التلقائي بالطب باستخدام Arduino
- Arduino Uno (يمكننا استخدام لوحات Arduino الأخرى أيضًا ، مثل Pro mini و Nano)
- وحدة RTC DS3231
- شاشة LCD مقاس 16 × 2
- صفارة
- قاد (أي لون)
- اللوح
- أزرار الدفع
- 10 كيلو الجهد
- 10 كيلو ، 1 كيلو مقاومات
- أسلاك توصيل
تذكير طب اردوينو باستخدام حلبة اردوينو
يظهر أدناه مخطط الدائرة الكاملة لبناء صندوق دواء ذكي باستخدام Arduino
فيما يلي وصلات دبوس Arduino مع ملحقات مختلفة
دبابيس اردوينو دبابيس محيطية
- 2 -----------------------------> D7 بشاشة عرض LCD مقاس 16 × 2
- 3 -----------------------------> D6 من شاشة LCD مقاس 16x2
- 4 -----------------------------> D5 بشاشة عرض LCD مقاس 16 × 2
- 5 -----------------------------> D4 بشاشة عرض LCD مقاس 16 × 2
- 7 -----------------------------> زر الضغط الثالث
- 8 -----------------------------> زر الضغط الثاني
- 9 -----------------------------> زر الضغط الأول
- 11 -----------------------------> EN دبوس لشاشة LCD مقاس 16x2
- 12 -----------------------------> دبوس RS لشاشة عرض LCD مقاس 16 × 2
- 13 -----------------------------> + Ve Pin of Buzzer و Led
- A0 -----------------------------> زر إيقاف الضغط
- A4 -----------------------------> SDA لـ DS3231
- A5 -----------------------------> SCL لـ DS3231
- 3.3 فولت -----------------------------> Vcc لـ DS3231
- Gnd -----------------------------> Gnd
في مشروع التذكير بالطب هذا ، تم ربط RTC DS3231 عبر بروتوكول I2C مع Arduino Uno. يمكنك أيضًا استخدام RTC IC DS1307 لقراءة الوقت باستخدام Arduino. يحتوي RTC DS3231 أيضًا على ذاكرة 32k مضمنة يمكن استخدامها لتخزين بيانات إضافية. يتم تشغيل وحدة RTC من خلال دبوس 3.3 فولت من Arduino uno. يتم توصيل شاشة عرض LCD مقاس 16 × 2 باستخدام SPI. A buzze يستخدم r لتنبيه وتذكير بأن الوقت قد حان لتناول الدواء. يتم استخدام أربعة أزرار ضغط حيث يكون لكل منها ميزة تحديد مميزة. يُستخدم زر الضغط الأول للتذكير بتناول الدواء مرة واحدة يوميًا. يتم استخدام زر الضغط الثاني للتذكير مرتين يوميًا ، ويتم استخدام زر الضغط الثالث للتذكير ثلاث مرات يوميًا. يتم استخدام زر الضغط الرابع لإيقاف الجرس عندما يسمع المستخدم التنبيه.
عمل نظام التنبيه الطبي التلقائي
على إنذار حبوب منع الحمل تذكير هو مدعوم من استخدام 5V العرض. عند بدء تشغيله لأول مرة ، فإنه يُظهر تدليكًا ترحيبيًا باسم " مرحبًا بك في Circuit Digest ". تم ضبط شاشة LCD على ثلاث شاشات. 1 شارع المعارض الشاشة تدليك باسم " حافظ على صحتك، سلامتك ". الشاشة الثانية عبارة عن شاشة مساعدة تخبر الضغط على زر الضغط لتحديد أي فترة زمنية واحدة للتذكير (مرة / مرتين / ثلاث مرات في اليوم). الفترة الزمنية قابلة للتغيير في البرنامج ويمكن تهيئتها وفقًا لذلك. لقد أصلحنا هذا الآن إلى ثلاث فترات ، أي 8 صباحًا و 2 مساءً و 8 مساءً.
لقد قسمنا الفترات الزمنية إلى ثلاثة أوضاع. وضع 1 يختار لتناول الدواء مرة واحدة / يوم في 08:00 عندما يضغط المستخدم 1 الحادي و ضغط على زر. يحدد الوضع 2 تناول الدواء مرتين / يوم في الساعة 8 صباحًا و 8 مساءً عندما يضغط المستخدم على زر الضغط الثاني. يحدد الوضع 3 تناول الدواء ثلاث مرات / يوم في الساعة 8 صباحًا و 2 مساءً و 8 مساءً إذا ضغط المستخدم على زر الضغط الثالث.
يمكننا أيضًا إضافة ميزة لتأجيل الجرس لمدة 10 دقائق (غير مدرجة في هذا المشروع). عندما يختار المستخدم الفتحات المرغوبة بالضغط على أزرار الضغط ، يتم تسجيل إدخال المستخدم ويتم أخذ الوقت من RTC. عندما يتطابق الوقت مع الفترة الزمنية المحددة ، يبدأ الجرس بالرنين. يمكن للمستخدم إيقاف الجرس بالضغط على زر STOP. تستمر نفس العملية للتذكير بالفتحة التالية. يتم عرض العملية الكاملة في الفيديو الوارد في نهاية هذه المقالة.
برمجة اردوينو UNO للتذكير بالطب
من السهل جدًا كتابة البرنامج بمجرد التفكير في طرق تذكيرك بتناول الحبوب. هنا سيُظهر التذكير على الشاشة ، ويطلق الجرس ويشير إليه باستخدام LED. كما أن لديها خيار تحديد ثلاث فترات زمنية (مرة / مرتين / ثلاث مرات في اليوم) وعندما يصل الوقت ، تبدأ في تنبيه المريض عن طريق رنين الجرس. ثم سيبدو النظام بأكمله كما يلي:
يحصل المستخدم على تعليمات المساعدة على الشاشة> يختار المستخدم فترات زمنية (مرة / يوم ، مرتين / يوم ، ثلاث مرات / يوم)> طباعة رسالة التأكيد على الشاشة> بدء تشغيل الوقت> يبدأ الجرس ومؤشر LED عندما يتطابق الوقت مع الفتحة التي حددها المستخدم> يتوقف المستخدم عند الضغط على زر إيقاف الضغط> إنهاء
يمكننا تغيير البرنامج والأجهزة إذا أردنا إضافة المزيد من الميزات. لفهم طريقة أبسط بكثير ، قمنا بتقسيم البرنامج إلى وظائف صغيرة. الوظائف سهلة الفهم والتنفيذ. يتم تقديم البرنامج الكامل في نهاية هذا المشروع. لنبدأ بالبرنامج.
منذ ذلك الحين ، استخدمنا أجهزة طرفية أخرى مثل شاشة عرض LCD مقاس 16 × 2 ، RTC DS3231 ، لذلك يتعين علينا أولاً تضمين مكتبات f أو تلك. المكتبة المطلوبة هي كالتالي:
تُستخدم مكتبة EEPROM لتتبع مدخلات تحديد المستخدم إذا لم يتم تشغيل Arduino. وعندما يقوم المستخدم بتشغيل Arduino ، فإنه يحصل على الحالة السابقة لأزرار الضغط باستخدام مكتبة EEPROM. تُستخدم مكتبة Wire.h منذ توصيل وحدة RTC DS3231 باستخدام I2C.
تحقق دائمًا مما إذا كان RTC موصلاً بشكل صحيح أم أنه غير تالف ، حيث ستلعب RTC دورًا مهمًا في الحفاظ على الوقت لنظام التذكير بأكمله.
if (! rtc.begin ()) {// تحقق مما إذا كان rtc متصلًا Serial.println ("تعذر العثور على RTC") ؛ بينما (1) ؛ } إذا (rtc.lostPower ()) { Serial.println ("RTC فقد الطاقة ، لنضع الوقت!")؛ }
يمكن ضبط الوقت بطريقتين ، إما تلقائيًا باستخدام وقت ترجمة النظام أو عن طريق إدخاله يدويًا. بمجرد تحديد الوقت ، قم بالتعليق على الأسطر أدناه إلا إذا كنت تريد تغيير وقت RTC مرة أخرى.
rtc.adjust (DateTime (F (__ DATE__)، F (__ TIME__))) ؛ //rtc.adjust(DateTime (2019، 1، 10، 7، 59، 52)) ؛
يتم استخدام بيان التبديل هذا لقراءة الحالة المحفوظة مسبقًا لزر الضغط واستئناف الحالة لوقت التذكير المناسب والدقيق.
val2 = EEPROM.read (addr) ، // قراءة القيمة المحفوظة مسبقًا لزر الضغط للبدء من حيث تم تركه مسبقًا (val2) { الحالة 1: Serial.println ("تعيين لـ 1 / يوم") ؛ push1state = 1 ؛ push2state = 0 ؛ push3state = 0 ؛ pushVal = 01 ؛ استراحة؛ الحالة 2: Serial.println ("Set for 2 / day") ؛ push1state = 0 ؛ push2state = 1 ؛ push3state = 0 ؛ pushVal = 10 ؛ استراحة؛ الحالة 3: Serial.println ("Set for 3 / day") ؛ push1state = 0 ؛ push2state = 0 ؛ push3state = 1 ؛ pushVal = 11 ؛ استراحة؛ }
تُستخدم هذه العبارة للحصول على الميلي لاستخدامها للتوقيت والتحكم في دورة شاشة الفاصل المحددة.
CurrentMillisLCD = ميلي () ؛ // ابدأ بالمللي لتبديل شاشة LCD في فترة زمنية محددة
ابدأ بقراءة المسامير الرقمية المتصلة بأزرار الضغط.
push1state = digitalRead (push1pin) ؛ push2state = digitalRead (push2pin) ؛ push3state = digitalRead (push3pin) ؛ stopinState = digitalRead (stopPin) ،
تُستخدم الوظيفة أدناه لقراءة حالة زر الضغط وكتابتها إلى EEPROM. عندما يتم الضغط على زر الضغط ، تتم كتابة الحالة على EEPROM. كما يقوم بطباعة الرسالة على شاشة LCD لاختيار إدخال المستخدم المحدد. وبالمثل ، يتم استخدام الوظائف push2 () و push3 () .
باطل push1 () {// وظيفة لتعيين التذكير مرة واحدة في اليوم إذا (push1state == 1) { push1state = 0 ؛ push2state = 0 ؛ push3state = 0 ؛ // pushPressed = صحيح ؛ EEPROM.write (العنوان ، 1) ؛ Serial.print ("Push1 Written:") ؛ Serial.println (EEPROM.read (addr)) ؛ / / لتصحيح pushVal = 1 ؛ // حفظ حالة الضغط على الزر 1 lcd.clear () ؛ lcd.setCursor (0 ، 0) ؛ lcd.print ("مجموعة التذكير") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("مرة في اليوم!") ؛ تأخير (1200) ؛ lcd.clear () ؛ } }
يتم استخدام الوظيفة أدناه لإيقاف الجرس والصمام. من الجيد دائمًا تقديم الاقتراحات. اطبع رسالة اقتراح على الشاشة "تناول الدواء بالماء الدافئ".
void stopPins () {// وظيفة لإيقاف الطنين عندما يضغط المستخدم على زر إيقاف الضغط إذا (stopinState == 1) { // stopinState = 0 ؛ // pushPressed = صحيح ؛ الضغط = 1 ؛ lcd.clear () ؛ lcd.setCursor (0 ، 0) ؛ lcd.print ("تناول الدواء") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("بالماء الدافئ") ؛ تأخير (1200) ؛ lcd.clear () ؛ } }
الوظيفة أدناه مستقلة عن حفظ الوقت ولكنها تدور دائمًا في ثلاث شاشات مما يساعد المستخدم. نظرًا لأننا نعتني بالمرضى ، يتيح لنا طباعة رسالة ترحيب لأننا نعلم أن الدعم العاطفي مفيد جدًا في شفاء المرضى في وقت أسرع. يمكنك اختيار رسالتك الإبداعية الخاصة. دعنا نطبع رسالة مثل "ابق بصحة جيدة ، وتمتع بالشفاء العاجل".
الشاشة الثانية لإعطاء تعليمات للمرضى "اضغط على الأزرار للتذكير..". تُستخدم الشاشة الثالثة لإظهار التاريخ والوقت الحاليين.
void changeScreen () {// function for Screen Cycling // بدء تبديل الشاشة كل فاصل زمني محدد LCD إذا (currentMillisLCD - previousMillisLCD> periodLCD) // حفظ آخر مرة قمت فيها بتغيير العرض { previousMillisLCD = currentMillisLCD ؛ شاشات ++ ؛ إذا (الشاشات> maxScreen) { الشاشات = 0 ؛ // انتهت جميع الشاشات -> البدء من الأول } isScreenChanged = true ؛ } // ابدأ في عرض الشاشة الحالية إذا (isScreenChanged) // قم بتحديث الشاشة فقط إذا تم تغيير الشاشة. { isScreenChanged = خطأ ، // إعادة تعيين مفتاح التكرار التالي (الشاشات) { case getWellsoon: gwsMessege ()؛ // تعافى قريبا رسالة استراحة؛ حالة HELP_SCREEN: helpScreen () ؛ // كسر شاشة التعليمات ؛ الحالة TIME_SCREEN: timeScreen () ، // لطباعة فاصل التاريخ والوقت ؛ الافتراضي: // NOT SET. استراحة؛ } } }
تُستخدم هذه الوظيفة لبدء تشغيل وميض مؤشر LED في وقت واحد في حالة وصول الوقت المحدد.
void startBuzz () {// وظيفة لبدء الطنين عندما يصل الوقت إلى الفاصل الزمني المحدد // if (pushPressed == false) { if (pushpressed == 0) { Serial.println ("pushpressed is false in blink") ؛ تيار طويل بدون توقيع ميليس = ميلي () ؛ إذا (currentMillis - previousMillis> = الفاصل الزمني) { previousMillis = currentMillis ؛ // احفظ آخر مرة تومض فيها مؤشر LED Serial.println ("Start Buzzing") ؛ if (ledState == LOW) {// إذا كان LED مطفأ ، فقم بتشغيله والعكس صحيح: ledState = HIGH؛ } else { ledState = LOW ؛ } digitalWrite (ledPin ، ledState) ؛ } } else if (pushpressed == 1) { Serial.println ("pushpressed is true")؛ ledState = منخفض ؛ digitalWrite (ledPin ، ledState) ؛ } }
تُستخدم هذه الوظيفة لمقارنة الفترة الزمنية التي حددها المستخدم في الساعة 8 صباحًا وتبدأ في إصدار صوت صفير وميض مؤشر LED حتى يضغط المستخدم على زر إيقاف التشغيل. وبالمثل، فإن وظائف at2pm الفراغ () و at8pm الفراغ يستخدم لبدء الجرس، وأدت في 14:00 و08:00.
void at8am () {// وظيفة لبدء الطنين في الساعة 8 صباحًا DateTime الآن = rtc.now () ؛ if (int (now.hour ())> = buzz8amHH) { if (int (now.minute ())> = buzz8amMM) { if (int (now.second ())> buzz8amSS) { ////// /////////////////////////////////////////////////// startBuzz () ؛ ////////////////////////////////////////////////////// /// } } } }
هذه هي الطريقة التي يمكنك بها ببساطة إنشاء تذكير تلقائي للطب باستخدام Arduino. يمكنك أيضًا استخدام ESP8266 مع Arduino لجعله مشروع إنترنت الأشياء والذي سيكون قادرًا على إرسال تنبيه عبر البريد الإلكتروني إلى المستخدم.
يتم إعطاء الرمز الكامل والفيديو التوضيحي أدناه.