This shows you the differences between two versions of the page.
pm:prj2022:sionescu:petfeeder [2022/05/27 16:29] iuliana.mihaila [Hardware Design] |
pm:prj2022:sionescu:petfeeder [2022/06/01 23:40] (current) iuliana.mihaila [Software Design] |
||
---|---|---|---|
Line 25: | Line 25: | ||
=== Schema bloc: === | === Schema bloc: === | ||
- | {{:pm:prj2022:sionescu:image_2022-05-11_213416038.png?600|}} | + | {{:pm:prj2022:sionescu:image_2022-05-27_171307161.png?600|}} |
Line 57: | Line 57: | ||
Așadar, va fi necesar un router care se va conecta prin intermediul unui cablu de ethernet la modulul | Așadar, va fi necesar un router care se va conecta prin intermediul unui cablu de ethernet la modulul | ||
Wi-Fi, conexiunea cu laptopul fiind posibilă și prin wireless. | Wi-Fi, conexiunea cu laptopul fiind posibilă și prin wireless. | ||
+ | Totodată, codul de Arduino conține o funcție de reconectare automată, reconnect(), în cazul în care nu se mai face conexiunea la master server, prevenind astfel comportamentul imprevizibil generat de potențialele erori sau de fluctuații ale vitezei cu care se transmit datele prin internet. | ||
- | {{:pm:prj2022:sionescu:image_2022-05-11_093754394.png?600|}} | + | {{:pm:prj2022:sionescu:image_2022-05-27_164642205.png?500|}} |
- | === Conectarea shield-ului de ethernet === | + | Inițializare botului de Telegram se face prin intermediul unui BotFather cu comanda /newbot, astfel că, utilizatorul trimite niște comenzi pe această aplicație pentru a-și configura propriul chatbot care, va căpăta sens + utilitate practică in momentul in care va fi programat pe calculator. |
- | - Având în vedere faptul că shield-ul nu este original Arduino, se va folosi biblioteca | + | Odată ce botul de Telegram a fost inițializat, vom folosi biblioteca Telegraf împreună cu NodeJS care este un framework pentru siteuri, servicii și aplicații scrise in Javascript. |
- | UIPEthernet.h de pe github: https://github.com/UIPEthernet/UIPEthernet | + | |
- | - Pentru monatarea acestei componente se folosește schema urmatoare: | + | Comenzile trimise de pe Telegram acționeaza callback-uri lambda pe serverul realizat prin protocolul TCP. Comanda de hrănire, de exemplu, verifică dacă feederul este conectat la serverul |
+ | de control și ii trimite un byte pentru a determina actionarea servomotorului. Totodată, utilizatorul primește un mesaj pe telefon pentru a fi inștiințat dacă nu au fost erori. | ||
- | {{:pm:prj2022:sionescu:image_2022-05-11_094846601.png?400|}} | + | {{:pm:prj2022:sionescu:untitled1.png?400|}} |
+ | |||
+ | Atunci când feederul primește un byte, acționează servo motorul, iar când serverul primește un byte de la feeder, știm că pisica a apăsat pe butonul fizic, hrăndindu-se singură. | ||
+ | Pentru pornirea efectiva a serverului se dă comanda node index.js. | ||
+ | Codul de pe placa de dezvoltare Arduino presupune conectarea la server cu ajutorul IP-ului local al laptopului si al adresei MAC precum și implementarea celor două scenarii. | ||
+ | |||
+ | Pentru implementarea functionalitatii camerei ESP32 CAM, ce presupune conectarea acesteia la bot-ul de Telegram, am folosit biblioteca Universal Arduino-Telegram Bot. | ||
+ | |||
+ | {{:pm:prj2022:sionescu:surv2.jpg?400|}} | ||
+ | |||
+ | ==== Comenzile botului de Telegram ==== | ||
+ | |||
+ | * start - short intro (scurta descriere) | ||
+ | * help - show all the commands available (afișarea tuturor acestor comenzi) | ||
+ | * details - show all the components used | ||
+ | * feed - feed my Kara (hrănirea pisicii) | ||
+ | * credits - and the 1st prize goes to ... | ||
+ | * photo - take a photo of the current state of the feeder | ||
+ | * flash - toggles the flash of the camera | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Testarea solutiei s-a realizat prin intermediul robotului fizic conectat la calculator prin intermediul unui cablu de ethernet. Asigurându-ne de faptul că avem o conexiune Wi-Fi stabilă, am pornit serverul cu ajutorul comenzii node index.js. De mentionat este faptul ca ESP32 CAM dispune de un modul Wi-Fi, conectarea acesteia la bot-ul de Telegram realizându-se wireless. | ||
+ | |||
+ | {{:pm:prj2022:sionescu:image_2022-05-27_163300189.png?500|}} | ||
+ | |||
+ | În prima instanță, s-a verificat funcționalitatea de acționare prin apăsare pe buton, eveniment ce produce transmiterea unui anumit tip de date (un byte) către server, ca mai apoi să fie preluat si transformat într-o comandă ce prevede evacuarea mâncării. | ||
+ | |||
+ | {{:pm:prj2022:sionescu:image_2022-05-27_164350668.png?500|}} | ||
+ | |||
+ | Funcționalitatea ce are ca subiect conectarea la aplicația de Telegram prin intermediul API-ului open source, a fost testată, cu serverul pornit, comunicând cu botul pe care l-am creat. Astfel, după ce am setat lista de comenzi (/setcommands) prin BotFather si după ce le-am atribuit câte o semantică (primirea unui mesaj text ca raspuns), am testat comanda /feed ce acționează motorul în mod instant. | ||
+ | Codul ce presupune redarea pozei a fost implementat in fisierul TelegramCamera. Acesta primeste token-ul corespunzator bot-ului de Telegram, informatii despre conexiunea Wi-Fi si se foloseste de un client TCP pentru a transmite reda poza, respectiv pentru a porni flash-ul camerei. | ||
+ | |||
+ | |||
+ | |||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Proiectul a fost o experiență plăcută și interesantă în care am aprofundat mai bine anumite noțiuni, am întâmpinat probleme și am încercat să găsesc soluții. Printre problemele pe care le-am întâmpinat, montarea shieldului de Ethernet a prezentat dificultăți deoarece nu am putut folosi o bibliotecă standard. Având în vedere faptul că s-a folosit un shield care nu este original Arduino, am folosit biblioteca UIPEthernet.h de pe github: https://github.com/UIPEthernet/UIPEthernet. În ceea ce privește implementarea camerei ESP-32, nu am reușit să programez pe aceeași plăcuță și partea care ține de feeder și transmiterea pozei prin Telegram, motivul fiind insuficiența pinilor. | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2022:sionescu:feeder-bot.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
* 18.04.2022 - Alegerea temei proiectului | * 18.04.2022 - Alegerea temei proiectului | ||
+ | * 21.04.2022 - 20.05.2022 - Realizarea proiectului | ||
+ | * 26.06.2021 - Intocmirea documentatiei | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Control Servo motor with Arduino Uno and Pushbutton: | + | https://www.youtube.com/watch?v=5MHisFC-_dE |
- | https://create.arduino.cc/projecthub/akshayjoseph666/control-servo-motor-with-arduino-uno-and-pushbutton-18613f | + | https://how2electronics.com/interface-enc28j60-ethernet-module-with-arduino/ |
- | How to connect the ENC28J60 to an Arduino: | + | https://www.youtube.com/watch?v=hCvOzzDa1ms&t=124s |
- | https://www.youtube.com/watch?v=5MHisFC-_dE | + | https://www.youtube.com/watch?v=kEG8cd32fb0 |
- | Interface ENC28J60 Ethernet Module with Arduino Webserver: | + | https://www.chatcompose.com/ro/telegram.html |
- | https://how2electronics.com/interface-enc28j60-ethernet-module-with-arduino/ | + | https://randomnerdtutorials.com/telegram-esp32-cam-photo-arduino/ |
</note> | </note> | ||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">dispenser_de_mancare_pentru_animale.pdf</a></html> |