当涉及到我们的亲人时,我们始终希望保持他们的健康和健康。但是,如果他们生病而忘记按时吃药会怎样。我们会担心,对吗?在医院里,有很多病人,很难提醒每个病人准时吃药。传统方式需要人工来提醒他们按时服药。数字时代并没有随之而来,我们可以使用机器来做到这一点。Smart Medicine Reminder的应用范围非常广泛,可以被家庭患者,医院的医生以及许多其他地方使用。关于提醒,可以有多种提醒方法:
- 在显示器上显示
- 通过电子邮件或电话发送通知
- 使用行动应用程式
- 蜂鸣警报
- 使用蓝牙/ Wi-Fi
- 接电话
- 在提醒当前时间的同时提醒下一次服药时间
我们可以根据需要组合方式。为了使事情变得简单,我们使用Arduino创建了一个简单的医学提醒,提醒我们每天服用1或2或3次药物。可以使用按钮选择时隙。此外,它还显示当前的日期和时间。我们将其进一步扩展到IoT项目传入的文章,在该文章中,电子邮件或SMS通知将发送给用户。该用药提醒也可以与患者监护系统集成。
使用Arduino的自动药物提醒所需的组件
- Arduino Uno(我们也可以使用其他Arduino开发板,例如Pro mini,Nano)
- RTC DS3231模块
- 16x2 LCD显示屏
- 蜂鸣器
- LED(任何颜色)
- 面包板
- 按按钮
- 10K电位器
- 10K,1K电阻
- 跳线
使用Arduino Circuit的Arduino Medicine提醒
下图显示了 使用Arduino构建智能药箱的完整电路图
以下是Arduino与不同外设的引脚连接
Arduino引脚外围引脚
- 2 -----------------------------> D7的16x2 LCD显示屏
- 3 -----------------------------> D6的16x2 LCD显示屏
- 4 -----------------------------> D5的16x2 LCD显示屏
- 5 -----------------------------> D4的16x2 LCD显示屏
- 7 ----------------------------->第三个按钮
- 8 ----------------------------->第二个按钮
- 9 ----------------------------->第一个按钮
- 11 -----------------------------> 16x2 LCD显示屏的EN引脚
- 12 -----------------------------> 16x2 LCD显示屏的RS引脚
- 13 -----------------------------> +蜂鸣器和LED的Ve引脚
- A0 ----------------------------->停止按钮
- A4 -----------------------------> DS3231的SDA
- A5 -----------------------------> DS3231的SCL
- 3.3V -----------------------------> DS3231的Vcc
- 地精----------------------------->
在此医学提醒项目中,RTC DS3231通过I2C协议与Arduino Uno接口。您也可以使用RTC IC DS1307与Arduino读取时间。 RTC DS3231还具有内置的32k存储器,可用于存储其他数据。 RTC模块通过Arduino uno的3.3V引脚供电。 16x2 LCD显示屏使用SPI连接。一个buzze R用于警示和提醒,它的时间服药。使用四个按钮,每个按钮具有不同的选择功能。第一个按钮用于提醒每天服药一次。第二个按钮每天提醒两次,第三个按钮每天提醒三次。当用户听到警报时,第四个按钮用于停止蜂鸣器。
自动药品提示系统的工作
该丸提醒警报使用5V电源供电。第一次启动时,它会显示一个欢迎信息,如“ Welcome to Circuit Digest ”。LCD屏幕设置为在三个屏幕之间循环。1个ST屏幕显示按摩为“ 保持健康,早日康复 ”。第二个屏幕是帮助屏幕,告诉您按选择按钮以选择要提醒的任何一个时隙(一天一次/两次/三次)。该时隙可在程序中更改,并可进行相应配置。现在,我们将其固定为三个时段,即上午8点,下午2点和晚上8点。
我们将时隙分为三种模式。当用户按下第一个按钮时,模式1选择每天上午8点服药一次。当用户按下第二个按钮时,模式2选择每天两次在上午8点和晚上8点服药。如果用户按下第三个按钮,则模式3选择每天上午8点,下午2点和晚上8点三次服药。
我们还可以添加一项功能,使蜂鸣器暂停10分钟(此项目不包括在内)。当用户通过按下按钮选择所需的插槽时,将记录用户输入,并从RTC中获取时间。当时间与选定的时隙匹配时,蜂鸣器开始蜂鸣。用户可以通过按停止按钮来停止蜂鸣器。下一个插槽提醒将继续相同的过程。本文章末尾的视频中显示了完整的过程。
编程Arduino UNO进行医学提醒
一旦您想到了提醒服药的方法,编写程序就非常容易。此处将在显示屏上显示提醒,对蜂鸣器进行蜂鸣并使用LED进行指示。它还具有选择三个时隙(每天一次/两次/三次)的选项,并且当时间到时将开始通过蜂鸣器蜂鸣来提醒患者。然后整个系统将如下所示:
用户在显示屏上获得帮助说明>用户选择时隙(一次/天,两次/天,三次/天)>在显示屏上显示确认消息>计时开始>当时间与用户选择的时隙匹配时蜂鸣器和LED响起>用户停止按下停止按钮>结束
如果要添加更多功能,我们可以更改程序和硬件。为了以更简单的方式理解,我们将程序分解为小功能。这些功能易于理解和实现。完整的程序在该项目的末尾给出。让我们从程序开始。
由于我们使用了其他外围设备,例如16x2 LCD显示器,RTC DS3231,因此我们首先必须包含库f或那个库。所需的库如下:
如果未打开Arduino,则EEPROM库用于跟踪用户选择输入。当用户打开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));
此switch语句用于读取按钮的先前保存状态,并在适当和准确的提醒时间恢复该状态。
val2 = EEPROM.read(addr); //读取以前保存的按钮值,从先前保留的位置开始进行 切换(val2){ 情况1: Serial.println(“设置为1 / day”); 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 = millis(); //在定义的时间间隔内启动毫秒以进行LCD屏幕切换
开始读取连接到按钮的数字引脚。
push1state = digitalRead(push1pin); push2state = digitalRead(push2pin); push3state = digitalRead(push3pin); stopinState = digitalRead(stopPin);
以下功能用于读取按钮状态并将其写入EEPROM。每当按下按钮时,状态就会写入EEPROM。它还在所选用户输入选项的LCD显示屏上打印消息。类似地,使用函数 push2() 和 push3() 。
void push1(){// 如果(push1state == 1){ push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write(addr,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 = true; 推压= 1; lcd.clear(); lcd.setCursor(0,0); lcd.print(“ Take Medicine”); lcd.setCursor(0,1); lcd.print(“带温水”); 延迟(1200); lcd.clear(); } }
以下功能与计时无关,但始终在三个屏幕上循环,这对用户有帮助。由于我们一直在照顾患者,因此请打印问候语,因为我们知道情感支持对于更快地治愈患者非常有帮助。您可以选择自己的创意信息。让我们打印一条消息,“保持健康,早日康复”。
第二个屏幕用于向患者发出指示,例如“按提醒按钮..”。 第三个屏幕仅用于显示当前日期和时间。
void changeScreen(){//屏幕循环功能 // 如果(currentMillisLCD-previousMillisLCD> intervalLCD)// 开始在每个已定义的intervalLCD上切换屏幕//保存最后一次更改显示的时间{ previousMillisLCD = currentMillisLCD; 屏幕++; if(屏幕> maxScreen){ 屏幕= 0; //所有屏幕->从1st开始 } isScreenChanged = true; } // 如果(isScreenChanged)仅在屏幕更改时更新屏幕,才 开始显示当前屏幕。{ isScreenChanged = false; //重置下一个迭代 开关(屏幕) { case getWellsoon: gwsMessege(); //早日康复消息 打破; 案例HELP_SCREEN: helpScreen(); //指令屏幕 中断; 情况TIME_SCREEN:timeScreen (); //打印日期和时间 间隔; 默认值: //未设置。 打破; } } }
如果已达到所选时间,则此功能用于同时开始蜂鸣和LED闪烁。
void startBuzz(){//函数在时间达到定义的间隔时开始蜂鸣 // // if(pushPressed == false){ if(pushpressed == 0){ Serial.println(“ pushpressed在眨眼时为false”); unsigned long currentMillis = millis(); if(currentMillis-previousMillis> = interval){ previousMillis = currentMillis; //保存上次您使LED闪烁的时间 Serial.println(“ Start Buzzing”); if(ledState == LOW){//如果LED熄灭,则将其打开,反之亦然: ledState = HIGH; }其他{ ledState = LOW; } digitalWrite(ledPin,ledState); } } else if(pushpressed == 1){ Serial.println(“ pushpressed为true”); ledState = LOW; digitalWrite(ledPin,ledState); } }
此功能用于比较用户在上午8点选择的时隙,并开始蜂鸣蜂鸣器并闪烁LED,直到用户按下停止按钮为止。类似地, void at2pm() 和 void at8pm 函数用于启动蜂鸣器,并在2pm和8pm处启动。
void at8am(){//函数从上午8点开始蜂鸣 DateTime now = rtc.now(); if(int(now.hour())> = buzz8amHH){ if(int(now.minute())> = buzz8amMM){ if(int(now.second())> buzz8amSS){ ////// ////////////////////////////////// startBuzz(); //////////////////////////////////////////////////// /// } } } }
这就是您可以使用Arduino简单地制作自己的自动药品提醒的方法。您还可以将ESP8266与Arduino结合使用,使其成为一个IoT项目,该项目将能够向用户发送电子邮件警报。
完整的代码和演示视频如下。