This shows you the differences between two versions of the page.
|
pm:prj2026:jan.vaduva:bianca.perian [2026/05/09 10:29] bianca.perian |
pm:prj2026:jan.vaduva:bianca.perian [2026/05/19 22:45] (current) bianca.perian |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| ===== General Description ===== | ===== General Description ===== | ||
| - | {{ :pm:prj2026:jan.vaduva:perianbianca.png?500 |}} | + | {{ :pm:prj2026:jan.vaduva:perianbianca.png?600 |}} |
| === System Modules === | === System Modules === | ||
| Line 38: | Line 39: | ||
| * **Power Bank** | * **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 === | ||
| + | |||
| + | {{ :pm:prj2026:jan.vaduva:wokwisim.png?500 |}} | ||
| + | |||
| + | 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. | ||
| + | |||
| + | {{ :pm:prj2026:jan.vaduva:whatsapp_image_2026-05-19_at_22.06.54.jpeg?300 |}} | ||
| + | |||
| + | <html><center></html> | ||
| + | **Pet feeder update:** Hardware is officially finalized! Next step: building the actual housing for it. | ||
| + | <html></center></html> | ||
| + | |||
| + | ===== 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 16x2 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 16x2 LCD display using only two pins (SDA/SCL). | | ||
| + | |||
| + | | {{ :pm:prj2026:jan.vaduva:app1.jpeg?450 }} | {{ :pm:prj2026:jan.vaduva:app2.jpeg?450 }} | | ||
| + | |||
| + | <html><center></html> | ||
| + | * **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. | ||
| + | <html></center></html> | ||
| + | |||
| + | ===== Results Obtained ===== | ||
| + | ===== Bibliography/Resources ===== | ||
| + | ** Hardware Reference ** | ||
| + | * **ESP32 Pinout:** [[https://randomnerdtutorials.com/esp32-pinout-reference-gpios/|ESP32 Pinout Reference (GPIOs)]] | ||
| + | ** Software and Tools ** | ||
| + | * **Simulator:** [[https://wokwi.com/|Wokwi Online Simulator]] | ||
| + | * **Development Documentation:** [[https://wokwi.com/pricing?ref=builds|Wokwi Pricing and Features]]. | ||
| + | ** Libraries Used ** | ||
| + | * **LiquidCrystal_I2C Library:** | ||
| + | * **ESP32Servo Library:** | ||