Table of Contents

Pet Feeder

Introducere

Ai fost vreodata întrerupt de animalul de companie fiindcă voia să fie hrănit? Sau a trebuit să lipsești mai mult de acasa însa nu ai putut pentru că trebuia să îi oferi de mâncare animaluțului tău? Dacă răspunsul este pozitiv, nu ești singurul. Și eu mă aflu în această situație. Din acest motiv, m-am gândit ca pentru acest proiect să încerc să construiesc un automat ce îi oferă animaluțului porția necesară de mâncare la ore prestabilite. Astfel, tot ce mai rămâne de făcut este să setezi orele, să umpli recipientul de unde va cădea mâncarea și totul este pregatit. In plus, dispozitivul va trimite o notificare pe e-mail dacă masa a fost servită.

Acest proiect își propune să automatizeze puțin viața unui posesor de animale de companie prin eliminarea grijilor în ceea ce privește hrănirea lor.

Descriere generală

Utilizatorul va seta ora la care trebuie sa fie hranit animalul cu ajutoarul tastaturii si al ecranului LCD. Cand este timpul ca mancarea sa fie eliberata, utilizatorul o sa primeasca pe e-mail o notificare trimisa cu ajutorul modulului WiFi de pe ESP32.

Servomotorul este utilizat pentru a inchide si a deschide recipientul unde se afla depozitata mancarea. Modulul RTC este folositor pentru a tine cont de timp.

Hardware Design

Lista de piese:

Componente folosite:

Schema electrica:

Am realizat un divizor de tensiune cu 3 rezistente de 10kohmi pentru legatura UART dintre Arduino si ESP32, fiindca ESP32 functioneaza la 3.3V, iar Arduino la 5V. Este nevoie doar la ESP32 (RX) - Arduino (TX).

Deocamdata am niste probleme la alimentarea de la o baterie de 9V fiindca am observat ca ESP32 nu reuseste sa se conecteze la WiFi, insa de la laptop nu exista probleme.

Update - o sa folosesc un power bank.

Pini folositi Arduino UNO:

Pini folositi ESP32:

Functionalitate hardware:

Functionalitate Servo cu modul RTC + LCD

Functionalitate keypad cu afisare pe ecran LCD

Stadiul actual:

Software Design

Mediul de dezvoltare: PlatformIO

Bibliotecile folosite in cadrul proiectului:

Pentru Arduino Uno R3:

Pentru ESP32:

Elementul de noutate:

Justificare functionalitati din laboratoare:

Descrierea codului aplicatiei:

Pentru Arduino:

  1. In functia setup() sunt pregatite componentele.
  2. In functia loop(), daca programul doar ce a fost pornit, setup_done o sa fie false pana cand utilizatorul face setupul.
  3. Cand se realizeaza intreruperea, se apeleaza functia get_nr_meals() unde se va selecta numarul de mese.
  4. Se apeleaza functia set_times() care va astepta ca userul sa scrie timpii doriti si ii va adauga in vectorul meals.
  5. Functia sort_times() va sorta timpii dati de user, pentru a afla urmatorul timp la care trebuie servita masa. Acest lucru se va realiza convertind ora la minute si adaugand minutul, aflandu-se minutul din zi corespunzator.
  6. Pe parcurs se verifica daca timpul curent este acelasi cu timpul la care trebuie eliberata mancarea. Pe ecran se afiseaza constant cat timp a ramas, in functie de ore si/sau minute. Daca este, se misca servo-ul, se schimba indexul din vectorul meals pentru urmatoarea masa si se trimite mesaj catre ESP32.

Pentru ESP32:

  1. Sunt declarate datele necesare (id si parola WiFi, mail-ul sender-ului si cel al receiver-ului).
  2. In setup() se va realiza conectarea la WiFi.
  3. In loop() ESP32 asteapta pana cand primeste mesaj de la Arduino, iar apoi ii trimite un mesaj de “ACK” si trimite mail catre owner.

Demo video:

Demo pet feeder

Am setat primul timp de masa la 20:09. Mail-ul l-am primit la 20:10 (timpul setat pe modulul RTC este putin inapoi fata de laptop). Am taiat putin din video pana am primit mail-ul.

Optimizari:

Am implementat o intrerupere la apasarea butonului rosu, moment in care se poate folosi keypad-ul pentru selectarea planului de mese. Astfel, nu se va testa la fiecare loop daca a fost apasata o tasta de pe keypad.

Algoritmi si structuri folosite:

Pentru stocarea timpilor la care trebuie sa se elibereze mancarea, am folosit un array de structuri. Structura de baza este alcatuita din 2 int-uri ce vor stoca ora si minutul. Timpii introdusi vor fi sortati imediat dupa introducerea tuturor pentru a fi mai usor de stiut care este urmatoarea masa si a nu fi nevoie sa cauti la fiecare pas care e cel mai apropiat timp.

Rezultate Obţinute

Am reusit sa imi construiesc propriul pet feeder care elibereaza mancarea la ore fixe, alese de tine. Ca utilizator poti seta numarul de mese/zi (daca gresesti, poti sterge si rescrie), apoi orele si gata. Cand mancarea este eliberata, Arduino trimite mesaj catre ESP32 care trimite notificare catre utilizator pe mail. Pana cand este eliberata mancarea, pe LCD este afisat timpul ramas.

Concluzii

Proiectul a fost interesant, m-a ajutat sa inteleg mai bine conceptele studiate la PM si sa vad cum pot face debug pe hardware :). In plus, mi-a placut faptul ca am putut sa lucrez si la hardware, lucru pe care nu il mai facusem inainte.

Sper sa le placa:)

Download

GitHub Repo

Arhiva proiect: proiect_final.zip

In pet_feeder este codul pentru arduino, in esp_part pentru esp + README.

Jurnal

  • 10 Mai - am inceput sa conectez componentele
  • 16 Mai - am terminat hardware-ul
  • 20 Mai - am inceput sa scriu software-ul
  • 29 Mai - ultimele modificari

Bibliografie/Resurse

Export to PDF