MARS, Medication Alarm Reminder System
Created by
Genesis Team
Created:
7/29/15
Submitted:
3/6/23
Published:
3/6/23
Select an image below to view
Category
Description
This design is for a pillbox that automatically opens and closes 3 boxes based on a user input timer system. There is also an interrupt button that closes the boxes, a buzzer to alert users, and an LCD to display extra information to the user. The full arduino code is as follows :
#include <Servo.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 8);
Servo myservo1;
Servo myservo2;
Servo myservo3;
const int beeper = 13;
int buttonState = 0;
int opn = 40;
int closed = 130;
int pos1 = closed;
int pos2 = closed;
int pos3 = closed;
int delay1=0;
int delay2=0;
int delay3=0;
int delay4=0;
int delay5=0;
void setup() {
myservo1.attach(10);
myservo2.attach(9);
myservo3.attach(6);
lcd.begin(16, 2);
lcd.clear();
myservo1.write(pos1);
delay(1000);
myservo2.write(pos2);
delay(1000);
myservo3.write(pos3);
attachInterrupt(0, blink, CHANGE);
pinMode(beeper, OUTPUT);
Serial.begin(9600);
Serial.println(" ");
Serial.print("How many seconds from the start until Box 1 opens: ");
delay(3000);
if (Serial.available()) {delay1= Serial.parseInt(); }
Serial.println(delay1);
Serial.print("How many seconds between Box 1 and Box 2 opening: ");
delay(3000);
if (Serial.available()) {delay2= Serial.parseInt(); }
Serial.println(delay2);
Serial.print("How many seconds between Box 2 and Box 3 opening: ");
delay(3000);
if (Serial.available()) {delay3= Serial.parseInt(); }
Serial.println(delay3);
Serial.print("How many seconds between Box 3 opening and refilling pills: ");
delay(3000);
if (Serial.available()) {delay4= Serial.parseInt(); }
Serial.println(delay4);
Serial.print("How many seconds between refilling pills and Box 1 opening: ");
delay(3000);
if (Serial.available()) {delay5= Serial.parseInt();}
Serial.println(delay5);
delay1=delay1*1000;
delay2=delay2*1000;
delay3=delay3*1000;
delay4=delay4*1000;
delay5=delay5*1000;
delay(delay1);
}
void loop() {
if (pos1==closed){
for (int i=500; i>0; i--)
{
digitalWrite(beeper, HIGH);
delayMicroseconds(i);
digitalWrite(beeper, LOW);
delayMicroseconds(i);
}
}
pos1=opn;
myservo1.write(opn);
lcd.clear();
lcd.print("Take pills from");
lcd.setCursor(0,1);
lcd.print("box ");
if (pos1==opn){
lcd.print("1 ");
}
if (pos2==opn){
lcd.print("2 ");
}
if (pos3==opn){
lcd.print("3 ");
}
delay(delay2);
if (pos2==closed){
for (int i=500; i>0; i--)
{
digitalWrite(beeper, HIGH);
delayMicroseconds(i);
digitalWrite(beeper, LOW);
delayMicroseconds(i);
}
}
pos2=opn;
myservo2.write(pos2);
lcd.clear();
lcd.print("Take pills from");
lcd.setCursor(0,1);
lcd.print("box ");
if (pos1==opn){
lcd.print("1 ");
}
if (pos2==opn){
lcd.print("2 ");
}
if (pos3==opn){
lcd.print("3 ");
}
delay(delay3);
if (pos3==closed){
for (int i=500; i>0; i--)
{
digitalWrite(beeper, HIGH);
delayMicroseconds(i);
digitalWrite(beeper, LOW);
delayMicroseconds(i);
}
}
pos3=opn;
myservo3.write(pos3);
lcd.clear();
lcd.print("Take pills from");
lcd.setCursor(0,1);
lcd.print("box ");
if (pos1==opn){
lcd.print("1 ");
}
if (pos2==opn){
lcd.print("2 ");
}
if (pos3==opn){
lcd.print("3 ");
}
delay(delay4);
pos1=opn;
pos2=opn;
pos3=opn;
for (int i=500; i>0; i--)
{
digitalWrite(beeper, HIGH);
delayMicroseconds(i);
digitalWrite(beeper, LOW);
delayMicroseconds(i);
}
myservo1.write(pos1);
myservo2.write(pos2);
myservo3.write(pos3);
lcd.clear();
lcd.print("Refill the pills!");
delay(5000);
pos1=closed;
pos2=closed;
pos3=closed;
lcd.clear();
myservo1.write(pos1);
myservo2.write(pos2);
myservo3.write(pos3);
delay(delay5);
}
void blink()
{
if (pos1==opn){
pos1=closed;
myservo1.write(pos1);
}
if (pos2==opn){
pos2=closed;
myservo2.write(pos2);
}
if (pos3==opn){
pos3=closed;
myservo3.write(pos3);
}
lcd.clear();
for (int i=0; i<500; i++)
{
digitalWrite(beeper, HIGH);
delayMicroseconds(i);
digitalWrite(beeper, LOW);
delayMicroseconds(i);
}
}
