Medicine reminder project using Arduino

0 35919 Medium

Medicine alarm for Patient

 

Medicine reminder project using Arduino

Things used in this project

 

Hardware components

HARDWARE LIST
1 DFRobot Gravity:Digital Push Button (Yellow)
1 Arduino UNO
1 Real Time Clock (RTC)
1 Jumper wires (generic)
1 Solderless Breadboard Half Size
1 Rotary potentiometer (generic)
1 Adafruit RGB Backlight LCD - 16x2

Software apps and online services

 

Arduino IDE

 

Hand tools and fabrication machines

 

Soldering iron (generic)

Story

 

In this new article, we are going to make a very useful project which is known as the medicine reminder project. This project can help people who are taking medicine. This is basically a box with some drawers. there are 3 drawers which can open and close.

 

These days many individuals have medication that is endorsed for requiring some investment and it is vital. thus, we have made this marvelous medication update project with the assistance of Arduino. We need to set the medication update once then it will naturally remind the medication by opening and shutting the cabinet of medication likewise a ringer is there.

 

 

 

The medicine reminder project is very important for a patient who is having regular and timely prescribed medicine. Our Automatic medicine reminder using Arduino project is similar to the alarm system. which additionally shows you the medication name. commonly we neglected to take the medication which isn't really great for a portion of the illnesses so, this kind of project can help a lot in that case. Medicine reminder has an LCD that shows you the name of the medicine to be taken at which time and also.

 

 

 

Working of Medicine Reminder

 

There are 4 push buttons in the Medicine reminder Arduino project one is for + in time like in hours and minutes. the second button will shift the cursor to the next option. if you are adding in an hour then after pressing the second button the cursor will shift to the next digit which is the minute.

 

I have completed this project with PCB which is easy. PCBWAY help me to complete my project.

presently the third button will save the progressions and begin the update. Presently, when we start the framework the Presentation of the task will incite and request "Set update ". there are four buttons when you press the main button it will begin the time setting. presently when it will arrive at the client's characterized time the ringer will begin for 30 seconds.

For full detail visit our website

Code

 

medicine reminder

C/C++

medicine alarm

CODE
//Medicine Reminder using Arduino Uno

// Reminds to take medicine at 8am, 2pm, 8pm 

/*  The circuit:

   LCD RS pin to digital pin 12

   LCD Enable pin to digital pin 11

   LCD D4 pin to digital pin 5

   LCD D5 pin to digital pin 4

   LCD D6 pin to digital pin 3

   LCD D7 pin to digital pin 2

   LCD R/W pin to ground

   LCD VSS pin to ground

   LCD VCC pin to 5V

   10K resistor:

   ends to +5V and ground

   wiper to LCD VO pin (pin 3)*/


#include <LiquidCrystal.h>

#include <Wire.h>

#include <RTClib.h>

#include <EEPROM.h>


int pushVal = 0;                           

int val;

int val2;

int addr = 0;


RTC_DS3231 rtc;


const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;                 // lcd pins

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


#define getWellsoon 0                                           

#define HELP_SCREEN 1

#define TIME_SCREEN 2


//bool pushPressed;                               //flag to keep track of push button state 

int pushpressed = 0;

const int ledPin =  13;                       // buzzer and led pin

int ledState = LOW;

int Signal = 0;



int buzz = 13;                                      

int push1state, push2state, push3state, stopinState = 0;     // 

int push1Flag, push2Flag, Push3Flag = false;              // push button flags 

int push1pin = 9;

int push2pin = 8;

int push3pin = 7;

int stopPin = A0;

int screens = 0;              // screen to show

int maxScreen = 2;            // screen count

bool isScreenChanged = true;


long previousMillis = 0;           

long interval = 500;                   // buzzing interval

unsigned long currentMillis;


long previousMillisLCD = 0;    // for LCD screen update

long intervalLCD = 2000;          // Screen cycling interval

unsigned long currentMillisLCD;


//   Set Reminder Change Time

int buzz8amHH = 8;          //    HH - hours         ##Set these for reminder time in 24hr Format 

int buzz8amMM = 00;          //    MM - Minute

int buzz8amSS = 00;          //    SS - Seconds


int buzz2pmHH = 14;          //    HH - hours

int buzz2pmMM = 00;          //    MM - Minute

int buzz2pmSS = 00;          //    SS - Seconds


int buzz8pmHH = 20;          //    HH - hours

int buzz8pmMM = 00;          //    MM - Minute

int buzz8pmSS = 00;          //    SS - Seconds


 


int nowHr, nowMin, nowSec;                     // to show current mm,hh,ss


// All messeges

void gwsMessege(){               // print get well soon messege

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Stay Healthy :)");     // Give some cheers

    lcd.setCursor(0, 1);

    lcd.print("Get Well Soon :)");    // wish 

}


void helpScreen() {              // function to display 1st screen in LCD

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Press Buttons");

    lcd.setCursor(0, 1);

    lcd.print("for Reminder...!");

    

 }


void timeScreen() {              // function to display Date and time in LCD screen

  DateTime now = rtc.now();             // take rtc time and print in display

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Time:");

    lcd.setCursor(6, 0);

    lcd.print(nowHr = now.hour(), DEC);

    lcd.print(":");

    lcd.print(nowMin = now.minute(), DEC);

    lcd.print(":");

    lcd.print(nowSec = now.second(), DEC);

    lcd.setCursor(0, 1);

    lcd.print("Date: ");

    lcd.print(now.day(), DEC);

    lcd.print("/");

    lcd.print(now.month(), DEC);

    lcd.print("/");

    lcd.print(now.year(), DEC);

}



void setup() {


  Serial.begin(9600);                      // start serial debugging

  if (! rtc.begin()) {                      // check if rtc is connected 

    Serial.println("Couldn't find RTC");

    while (1);

  }

  if (rtc.lostPower()) {

    Serial.println("RTC lost power, lets set the time!");

  }


//    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));            // uncomment this to set the current time and then comment in next upload when u set the time

  rtc.adjust(DateTime(2019, 1, 10, 7, 59, 30));                // manual time set


  lcd.begin(16, 2);

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("Welcome To");                                      // print a messege at startup

  lcd.setCursor(0, 1);

  lcd.print("Circuit Digest");

  delay(1000);

  pinMode(push1pin, INPUT_PULLUP);                                    // define push button pins type

  pinMode(push2pin, INPUT_PULLUP);

  pinMode(push3pin, INPUT_PULLUP);

  pinMode(stopPin, INPUT_PULLUP);

  pinMode(ledPin, OUTPUT);

  delay(200);

  Serial.println(EEPROM.read(addr));

  val2 = EEPROM.read(addr);                         // read previosuly saved value of push button to start from where it was left previously

  switch (val2) {

    case 1:

      Serial.println("Set for 1/day");

      push1state = 1;

      push2state = 0;

      push3state = 0;

      pushVal = 1;

      break;

    case 2:

      Serial.println("Set for 2/day");

      push1state = 0;

      push2state = 1;

      push3state = 0;

      pushVal = 2;


      break;

    case 3:

      Serial.println("Set for 3/day");

      push1state = 0;

      push2state = 0;

      push3state = 1;

      pushVal = 3;


      break;

  }



}


void loop() {

  push1();                                             //call to set once/day 

  push2();                                             //call to set twice/day 

  push3();                                             //call to set thrice/day 

    if (pushVal == 1) {                                // if push button 1 pressed then remind at 8am

    at8am();                                           //function to start uzzing at 8am 

  }

  else if (pushVal == 2) {                             // if push button 2 pressed then remind at 8am and 8pm

    at8am();                                            

    at8pm();                                           //function to start uzzing at 8mm

  }

  else if (pushVal == 3) {                             // if push button 3 pressed then remind at 8am and 8pm

    at8am();

    at2pm();                                            //function to start uzzing at 8mm

    at8pm();

  }

  

  currentMillisLCD = millis();                         // start millis for LCD screen switching at defined interval of time

  push1state = digitalRead(push1pin);                  // start reading all push button pins

  push2state = digitalRead(push2pin);

  push3state = digitalRead(push3pin);

  stopinState = digitalRead(stopPin);

  

  stopPins();                                            // call to stop buzzing

  changeScreen();                                        // screen cycle function



}


// push buttons

void push1() {                   // function to set reminder once/day 

  if (push1state == 1) {

    push1state = 0;

    push2state = 0;

    push3state = 0;

//    pushPressed = true;

    EEPROM.write(addr, 1);

    Serial.print("Push1 Written : "); Serial.println(EEPROM.read(addr));  // for debugging

    pushVal = 1;                                             //save the state of push button-1 

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Reminder set ");

    lcd.setCursor(0, 1);

    lcd.print("for Once/day !");

    delay(1200);

    lcd.clear();

  }

}


void push2() {                      //function to set reminder twice/day

  if (push2state == 1) {

    push2state = 0;

    push1state = 0;

    push3state = 0;

//    pushPressed = true;

    EEPROM.write(addr, 2);

    Serial.print("Push2 Written : "); Serial.println(EEPROM.read(addr));

    pushVal = 2;

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Reminder set ");

    lcd.setCursor(0, 1);

    lcd.print("for Twice/day !");

    delay(1200);

    lcd.clear();

  }

}


void push3() {                    //function to set reminder thrice/day

  if (push3state == 1) {

    push3state = 0;

    push1state = 0;

    push2state = 0;

//    pushPressed = true;

    EEPROM.write(addr, 3);

    Serial.print("Push3 Written : "); Serial.println(EEPROM.read(addr));

    pushVal = 3;

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Reminder set ");

    lcd.setCursor(0, 1);

    lcd.print("for Thrice/day !");

    delay(1200);

    lcd.clear();

  }

}


void stopPins() {                   //function to stop buzzing when user pushes stop push button

  if (stopinState == 1) {

//    stopinState = 0;

//    pushPressed = true;

    pushpressed = 1;

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("Take Medicine  ");

    lcd.setCursor(0, 1);

    lcd.print("with Warm Water");

    delay(1200);

    lcd.clear();

  }

}



void startBuzz() {                    // function to start buzzing when time reaches to defined interval


//  if (pushPressed == false) {

 if (pushpressed == 0) {

    Serial.println("pushpressed is false in blink");

    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) {

      previousMillis = currentMillis;         // save the last time you blinked the LED

      Serial.println("Start Buzzing");

      if (ledState == LOW) {                  // if the LED is off turn it on and vice-versa:

        ledState = HIGH;

      }  else {

        ledState = LOW;

      }

      digitalWrite(ledPin, ledState);

    }

  }

  else if (pushpressed == 1) {

    Serial.println("pushpressed is true");

    ledState = LOW;

    digitalWrite(ledPin, ledState);

  }

}


void at8am() {                      // function to start buzzing at 8am

  DateTime now = rtc.now();

  if (int(now.hour()) >= buzz8amHH) {

    if (int(now.minute()) >= buzz8amMM) {

      if (int(now.second()) > buzz8amSS) {

        /////////////////////////////////////////////////////


        startBuzz();

        /////////////////////////////////////////////////////

      }

    }

  }

}

The article was first published in hackster, January 4, 2023

cr: https://www.hackster.io/Techatronic/medicine-reminder-project-using-arduino-1a1060

author: Techatronic

License
All Rights
Reserved
licensBg
0