Pet Feeder

Author: Perian Bianca-Luminita | Group: 331CB

Introduction

We all love our pets, but remembering to fill the bowl at the exact same time every day is just another task on a never-ending to-do list. So, here I am with the solution: an Automatic Pet Feeder. But what is it, exactly? It's a smart solution for a common problem. The device is designed to automate the feeding routine while keeping you in control. It features two main modes: an 'on-demand' option where your pet can trigger a snack using an IR sensor, and a manual option that lets you dispense food via a custom web interface from your phone. Beyond just dispensing food, the system monitors storage levels so you always know when it's time for a refill. It also tracks feeding history, letting you see exactly when the last meals were served. Most importantly, you have full control: if your pet is getting a bit too hungry, you can remotely disable the IR sensor through the interface to prevent overfeeding. So, now you have more time to play with your furry friend!

General Description

System Modules

  • ESP32 Microcontroller: The “brain” that connects to Wi-Fi, processes sensor data, and coordinates the feeding schedule.
  • SG90 Servo Motor: The mechanical actuator that opens the dispensing lid to release a precise portion of pet food.
  • IR Obstacle Sensor: Allows the pet to “ask” for food; when the pet is near, the sensor triggers an automated snack.
  • Ultrasonic Sensor: Measures the distance to the food inside the hopper to calculate the remaining percentage.
  • LCD Display: Provides real-time status updates (e.g., “Feeding…”).
  • Buzzer: Emits a sound notification to alert the pet that the meal has been served.
  • Smart Status LEDs: A visual signaling system for food levels:
    • Green: Sufficient food storage.
    • Yellow: Medium level (refill soon).
    • Red: Critical level (storage almost empty).

Hardware Design

Components List

  • ESP32 DevKit V1 Board
  • SG90 Servo Motor
  • IR Obstacle Avoidance Sensor
  • HC-SR04 Ultrasonic Distance Sensor
  • 16×2 LCD with I2C Module
  • Active Buzzer
  • LEDs (Red, Yellow, Green)
  • Resistors (220 Ohm)
  • Breadboard
  • Jumper Wires (M-M, M-F)
  • Power Bank

Pin Mapping

This table describes the physical connections made on the breadboard between the ESP32 microcontroller and the system's peripherals:

Component ESP32 Pin Interface
Ultrasonic Sensor (TRIG) D5 GPIO / Output
Ultrasonic Sensor (ECHO) D18 GPIO / Input
IR Sensor D4 GPIO / Input (Pull-up)
SG90 Servomotor D13 PWM / Output
Active Buzzer D26 GPIO / Output
Red LED D32 GPIO / Output
Yellow LED D33 GPIO / Output
Green LED D25 GPIO / Output
LCD1602 SDA D21 I2C (Data)
LCD1602 SCL D22 I2C (Clock)
Power Supply VIN (5V) Power Input

Wokwi Simulation

I've developed this ESP32 project using the Wokwi simulator. Since the platform doesn't offer a dedicated IR proximity sensor, I used a push button to simulate the pet's arrival. This allowed me to fully test and perfect the logic for the LCD, LEDs, buzzer, and servo, ensuring the system is ready for a quick swap with a real IR sensor once I move to the physical build.

Pet feeder update: Hardware is officially finalized! Next step: building the actual housing for it.

Software Design

The software is designed to bridge the gap between the physical feeder and the user's smartphone. While this stage of the project is still in the planning phase, the goal of the future application or web interface is to provide users with real-time updates on food levels and a detailed meal history. Additionally, the app will offer the ability to trigger a feeding or disable the IR sensor remotely via WiFi, ensuring the pet is always cared for, even when the owner isn't home.

Environment and Libraries

The project firmware is developed using Arduino IDE / PlatformIO (C++), while the responsive user interface is built using HTML5, CSS3, and JavaScript.

The main libraries used to connect the hardware with the web interface are:

  • `WiFi.h` & `WebServer.h`: Connect the ESP32 to the local network and host the web dashboard.
  • `ArduinoJson.h`: Handles data transmission between the phone interface and the microcontroler.
  • `ESP32Servo.h`: Controls the SG90 servo motor for the dispensing mechanism.
  • `LiquidCrystal_I2C.h`: Manages the 16×2 LCD display to show real-time status updates.
  • `time.h`: Synchronizes the internal clock via NTP internet servers to track accurate feeding times.

Core Logic and System Behavior

The system is designed to run asynchronously, ensuring that the web interface stays responsive even while the mechanical feeding parts are active.

  • Food Level Tracking: The ultrasonic sensor measures the container's depth and converts the data into an easy-to-read percentage.
  • Pet Sensor Cooldown: To prevent overfeeding, a 30-second cooldown logic is applied. If the pet stays in front of the IR sensor, successive automated feeds are blocked.
  • Safety Alerts: If the food level drops below $30\%$, the automated feeding is locked, and the buzzer triggers a rapid 4-beep alarm to notify the owner that the reservoir is empty.

App Communication and REST API

The communication between the interface and the ESP32 happens asynchronously through a REST API. This allows the pet feeder to receive commands and send telemetry data back instantly without disrupting the device's main operations.

  • Real-Time Web Dashboard: The mobile application runs in browser, using background polling every 1.5 seconds to pull fresh status updates from the feeder.
  • Remote & Automated Triggers: When a user taps the “Feed Now” button or modifies the automated feeding schedule on their phone, the app sends a direct HTTP request to the ESP32.
  • Time-Based Synchronization: While the user sets scheduling preferences via the interface, the actual time tracking happens directly on the microcontroller. By constantly cross-referencing its internal NTP network clock with the saved alarms, the feeder dispenses meals fully autonomously, even if the phone goes offline.

Lab Functionalities Justification

Functionality Project Implementation & Justification
Laboratorul 0: GPIO Used as Digital Input for the IR Sensor and Digital Output for the status LEDs and Buzzer.
Laboratorul 1: UART Used for Serial debugging (`Serial.print`) to monitor sensor data and network status.
Laboratorul 3: Timere. PWM Timere: Used via `millis()` for non-blocking sensor polling and schedule checks.
PWM: Used to control the SG90 Servo Motor angle for food dispensing.
Laboratorul 6: I2C Used for data communication with the 16×2 LCD display using only two pins (SDA/SCL).
app1.jpeg app2.jpeg

  • Pet Profile & Manual Feeding: Displays the pet's profile and a prominent “Hrănește Acum” button for immediate dispensing.
  • Real-Time Telemetry: Monitors the exact food storage level, live pet detection alerts, and physical LED diagnostics.
  • System Toggles: Allows the user to remotely enable or disable the active buzzer sounds and the automatic IR sensor.
  • Schedules & Logs: Features a clean setup to program automated daily meal times and tracks a history log of all past feedings.
  • Device Parameters: Shows diagnostic data including the ESP32 IP address, total feed count, uptime, and synchronized network time.

Results Obtained

Bibliography/Resources

Hardware Reference

Software and Tools

Libraries Used

  • LiquidCrystal_I2C Library:
  • ESP32Servo Library:
pm/prj2026/jan.vaduva/bianca.perian.txt · Last modified: 2026/05/19 22:45 by bianca.perian
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0