Cat Feeder Project - 1.0
(Concept Design, Electrical Circuit Design, Programming, Testing )

The pet feeder (Cat Feeder) is an automated feeding system enables the user to set specific interval of time to control automatic portion control device in which the owner prescribes the amount of food and then there is the variety that ensures that there is a constant amount of food in the feeding cavity at any time.

I have drafted several changes to the product to improve it by either reducing failure or enhancing it with greater functionality.

Version 1.0 Include three different feeding times which can be defined by the user, error checking mechanism Arduino timer is used without any external time keeping mechanism

Arduino timer is used without any external time keeping mechanism

Figure 1: Top View

Figure 2: Front View

Figure 3: Front View

Figure 4: Top View

Figure 5: Front View

Figure 6: Front View

Figure 7: Front View

Figure 8: Front View

Code explanation

File Reference

#include <Wire.h>#include <LiquidCrystal_I2C.h>#include <Keypad.h>#include <elapsedMillis.h>

Functions

LiquidCrystal_I2C lcd (0x27, 16, 2)void setup ()void loop () void DisplayRemainingTime ()char sep ()void remainingTime (int &hour, int &minute)void Time_input (int &input_hr, int &input_min, int &input_sec) void GetRotation (int &data) void update_clock (int &hours, int &minutes, int &seconds)

Variables

int signalPin = 11String strconst byte ROWS = 4const byte COLS = 4char hexaKeys [ROWS][COLS]byte rowPins [ROWS] = {9, 8, 7, 6}byte colPins [COLS] = {5, 4, 3, 2}Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS)int flag_hrint flag_minint flag_secint flag_rotint flag_blinkString inputStringlong inputIntint Rotation_Valueint SecsCurrentint MinutesCurrentint HoursCurrentint rem_hrint rem_minint SecsFeeder_1int MinutesFeeder_1int HoursFeeder_1int SecsFeeder_2int MinutesFeeder_2int HoursFeeder_2int SecsFeeder_3int MinutesFeeder_3int HoursFeeder_3elapsedMillis TotalRuntimeelapsedMillis MotorRuntime

Function Documentation

DisplayRemainingTime()
void DisplayRemainingTime()

GetRotation()
void GetRotation(int & data)

lcd()
LiquidCrystal_I2C lcd(0x27 ,16,2)

loop()
void loop()


remainingTime()
void remainingTime(int & hour, int & minute)


sep()
char sep()


setup()
void setup()


Time_input()
void Time_input (int & input_hr, int & input_min, int & input_sec )


update_clock()
void update_clock(int & hours, int & minutes, int & seconds)


Variable Documentation

byte colPins[COLS] = {5, 4, 3, 2}
const byte COLS = 4
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS)
int flag_blink
int flag_hr
int flag_min
int flag_rot
int flag_sec
char hexaKeys[ROWS][COLS]
Initial value: = { {'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'*', '0', '#', 'D'}}
int HoursCurrent
int HoursFeeder_1
int HoursFeeder_2
int HoursFeeder_3
long inputInt
String inputString
int MinutesCurrent
int MinutesFeeder_1
int MinutesFeeder_2
int MinutesFeeder_3
elapsedMillis MotorRuntime
int rem_hr
int rem_min
int Rotation_Value
byte rowPins[ROWS] = {9, 8, 7, 6}
const byte ROWS = 4
int SecsCurrent
int SecsFeeder_1
int SecsFeeder_2
int SecsFeeder_3
int signalPin = 11
String str
elapsedMillis TotalRuntime