Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:agrigore:home-monitoring [2021/05/30 19:25]
andrei.barbieru [Rezultate Obţinute]
pm:prj2021:agrigore:home-monitoring [2021/05/31 11:33] (current)
andrei.barbieru [Jurnal]
Line 7: Line 7:
 Proiectul consta in crearea unui server web accesibil printr-un browser, care monitorizeaza informatii despre camera in care este plasat si ofera acces si control asupra unui alt server care face stream la o camera video, amplasata in aceeasi incapere. De asemenea, o alarma poate sa fie activata din browser (de exemplu cand se vede ceva suspect pe camera), iar aceasta poate fi oprita doar prin introducerea unei parole folosind un keypad. Proiectul consta in crearea unui server web accesibil printr-un browser, care monitorizeaza informatii despre camera in care este plasat si ofera acces si control asupra unui alt server care face stream la o camera video, amplasata in aceeasi incapere. De asemenea, o alarma poate sa fie activata din browser (de exemplu cand se vede ceva suspect pe camera), iar aceasta poate fi oprita doar prin introducerea unei parole folosind un keypad.
  
-Scopul acestuia este supravegherea unei camere, iar ideea de la care am plecat a fost sa pun o camera video inspre ​usa de la intrarea casei, pe care am dus-o putin mai departe.+Scopul acestuia este supravegherea unei camere, iar ideea de la care am plecat a fost montarea unei camera video indreptate spre usa de la intrarea casei, pe care am dus-o putin mai departe.
  
 Proiectul este util pentru mine deoarece pot urmari cu usurinta temperatura si calitatea aerului din camera in care se afla dispozitivul si sa urmaresc camera video live, toate acestea ori de pe telefon, ori de pe calculator. Proiectul este util pentru mine deoarece pot urmari cu usurinta temperatura si calitatea aerului din camera in care se afla dispozitivul si sa urmaresc camera video live, toate acestea ori de pe telefon, ori de pe calculator.
 ===== Descriere generală ===== ===== Descriere generală =====
 === Schema bloc: === === Schema bloc: ===
-{{:​pm:​prj2021:​agrigore:​diagrama_schema.png?200|}}+{{:​pm:​prj2021:​agrigore:​home_monitoring_block.png?600|}}
 === Funcționalitate === === Funcționalitate ===
-Utilizatorul se conecteaza prin browser folosind adresa ip asignata. Acesta poate vedea informatile de temperatura,​ umiditate si miscare in timp real (acestea de updateaza la cateva secunde). De asemenea, are acces la stream-ul video si are diferite butoane care controleaza camera, inclusiv un buton care ii face o captura la video si o downloadeaza automat. ​+Utilizatorul se conecteaza prin browser folosind adresa ip asignata. Acesta poate vedea informatile de temperatura,​ umiditate si miscare in timp real (acestea de updateaza la cateva secunde). De asemenea, ​utilizatorul ​are acces la stream-ul video si are la dispozitie ​diferite butoane care controleaza camera, inclusiv un buton care face o captura la video si o downloadeaza automat. ​
  
 De asemenea, utilizatorul are in browser un buton de alarma, care porneste un buzzer care poate sa fie dezactivat doar in mod fizic, atunci cand se introduce parola corecta pe un keypad. De asemenea, utilizatorul are in browser un buton de alarma, care porneste un buzzer care poate sa fie dezactivat doar in mod fizic, atunci cand se introduce parola corecta pe un keypad.
Line 53: Line 53:
 [[https://​github.com/​adafruit/​DHT-sensor-library|DHT-sensor-library]] - Folosit pentru citirea valorilor de temperatura si umiditate. Aceasta are ca dependenta si [[https://​github.com/​adafruit/​Adafruit_Sensor|Adafruit Unified Sensor Driver]] [[https://​github.com/​adafruit/​DHT-sensor-library|DHT-sensor-library]] - Folosit pentru citirea valorilor de temperatura si umiditate. Aceasta are ca dependenta si [[https://​github.com/​adafruit/​Adafruit_Sensor|Adafruit Unified Sensor Driver]]
 ===Descriere implementare=== ===Descriere implementare===
-In functia setup() initial se defineste rolul asignat fiecarui pin, dupa care se incearca conexiunea la WiFi pana cand aceasta reuseste. Dupa ce s-a conectat la WiFi, se scrie pe monitorul serial adresa ip locala a server-ului pentru a putea fi accesat din browser. De asemenea, tot aici se defineste raspunsul care trebuie returnat in urma unui request, pentru fiecare ruta care folosita.+In functia setup() initial se defineste rolul asignat fiecarui pin, dupa care se incearca conexiunea la WiFi pana cand aceasta reuseste. Dupa ce s-a conectat la WiFi, se scrie pe monitorul serial adresa ip locala a server-ului pentru a putea fi accesat din browser. De asemenea, tot aici se defineste raspunsul care trebuie returnat in urma unui request, pentru fiecare ruta care este folosita.
  
-Am creat functile ​getMotion(),​ care citeste senzorul de miscare, si readDHT(String val), care citeste senzorul de umiditate si temperatura pentru a le putea lua usor cand am nevoie de acestea. ​+Am creat functia ​getMotion(),​ care citeste senzorul de miscare, si readDHT(String val), care citeste senzorul de umiditate si temperatura pentru a le putea lua usor cand am nevoie de acestea. ​
  
 Html-ul, css-ul si javascript-ul paginii este stocat in memoria flash, in PROGMEM (https://​www.arduino.cc/​reference/​en/​language/​variables/​utilities/​progmem/​). Aici se afla codul pentru styling-ul paginii, dar si pentru diferitele informatii oferite. Pentru updatarea valorilor pe site in timp real am creat cateva functii care se apeleaza la un anumit interval. In principiu, la un anumit numar de secunde se face un request de tip GET catre server-ul web care ii intoarce valorile cerute, in functie de calea request-ului. (am mentionat mai sus, sunt definite in setup). ​ Html-ul, css-ul si javascript-ul paginii este stocat in memoria flash, in PROGMEM (https://​www.arduino.cc/​reference/​en/​language/​variables/​utilities/​progmem/​). Aici se afla codul pentru styling-ul paginii, dar si pentru diferitele informatii oferite. Pentru updatarea valorilor pe site in timp real am creat cateva functii care se apeleaza la un anumit interval. In principiu, la un anumit numar de secunde se face un request de tip GET catre server-ul web care ii intoarce valorile cerute, in functie de calea request-ului. (am mentionat mai sus, sunt definite in setup). ​
  
-Stream-ul live care se poate vedea pe pagina este hostat pe un esp32-cam. Codul pentru camera este cel oferit in Examples->​CameraWebServer. Am urmarit codul si am adaugat butoane pentru controlul calitatii video si flip-ul imaginii video in ambele direcii. De asemenea, am adaugat un buton care face captura la imaginea video oferita si il downloadeaza automat. Toate acestea sunt facute prin intermediul unor requesturi catre esp32-cam. Desi server-ul principal este asincron si permite mai multi utilizatori simultan, camera web este mai limitata si permit ​un singur utilizator sa fie conectat la un anumit moment dat. Asadar, desi pot accesa server-ul de monitorizare de pe mai multe device-uri simultan, se poate viziona stream-ul propriu-zis doar de pe un singur device (primul venit). Toate celelalte functionalitati sunt inca disponibile indiferent de numarul de utilizatori. ​+Stream-ul live care se poate vedea pe pagina este hostat pe un esp32-cam. Codul pentru camera este cel oferit in Examples->​CameraWebServer. Am urmarit codul si am adaugat butoane pentru controlul calitatii video si flip-ul imaginii video in ambele direcii. De asemenea, am adaugat un buton care face captura la imaginea video oferita si downloadeaza automat. Toate acestea sunt facute prin intermediul unor requesturi catre esp32-cam. Desi server-ul principal este asincron si permite mai multi utilizatori simultan, camera web este mai limitata si permite ​un singur utilizator sa fie conectat la un anumit moment dat. Asadar, desi pot accesa server-ul de monitorizare de pe mai multe device-uri simultan, se poate viziona stream-ul propriu-zis doar de pe un singur device (primul venit). Toate celelalte functionalitati sunt inca disponibile indiferent de numarul de utilizatori. ​
  
-Intr-un final, mi s-a parut o idee buna sa pot sa dau drumu la o alarma din browser (de exemplu in caz ca se vede ceva suspect pe camera). Am creat un buton de alarma care face un request de tip get pe server. Acesta da drumul la buzzer care face zgomot pana cand aceasta este dezactivata. Singurul mod prin care alarma este dezactivata este prin introducerea parolei potrivite cu ajutorul unui keypad. Pentru realizarea acestui lucru, citesc mereu in loop valorile butoanelor de pe keypad. Retin mereu ultima valoare citita pentru a o lua in considerare o singura data (sa nu se puna aceeasi cifra de mai multe ori daca se tine apasat pe buton, etc). Deoarece butoanele de pe keypad sunt 1,2,3 si 4, am descis sa folosesc o parola de 5 cifre formata din acestea. De fiecare data cand se apasa pe un buton, se inmulteste o "​parola curenta"​ cu 10 si se adauga numarul apasat. Daca parola curenta si parola reala au acelasi numar de cifre, se compara, altfel se trece mai departe. Indiferent daca parolele au fost identice sau nu, se reseteaza parola curenta cu 0. Cand parola curenta este 0, se tine aprins un led, care reprezinta faptul ca buffer-ul parolei este gol. +Intr-un final, mi s-a parut o idee buna sa pot activa ​o alarma din browser (de exemplu in caz ca se vede ceva suspect pe camera). Am creat un buton de alarma care face un request de tip get pe server. Acesta da drumul la buzzer care face zgomot pana cand aceasta este dezactivata. Singurul mod prin care alarma este dezactivata este prin introducerea parolei potrivite cu ajutorul unui keypad. Pentru realizarea acestui lucru, citesc mereu in loop valorile butoanelor de pe keypad. Retin mereu ultima valoare citita pentru a o lua in considerare o singura data (sa nu se puna aceeasi cifra de mai multe ori daca se tine apasat pe buton, etc). Deoarece butoanele de pe keypad sunt 1,2,3 si 4, am descis sa folosesc o parola de 5 cifre formata din acestea. De fiecare data cand se apasa pe un buton, se inmulteste o "​parola curenta"​ cu 10 si se adauga numarul apasat. Daca parola curenta si parola reala au acelasi numar de cifre, se compara, altfel se trece mai departe. Indiferent daca parolele au fost identice sau nu, se reseteaza parola curenta cu 0. Cand parola curenta este 0, se tine aprins un led, care reprezinta faptul ca buffer-ul parolei este gol. 
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 {{:​pm:​prj2021:​agrigore:​screenshot_20210530-140551_chrome.jpg?​200|}} {{:​pm:​prj2021:​agrigore:​screenshot_20210530-140551_chrome.jpg?​200|}}
Line 73: Line 73:
   * Pot sa fie adaugati usor alti senzori si sa fie integrati in program ca functionalitati suplimentare.   * Pot sa fie adaugati usor alti senzori si sa fie integrati in program ca functionalitati suplimentare.
 ===== Download ===== ===== Download =====
-todo+Codul .ino si schema EAGLE 
 + 
 +{{:​pm:​prj2021:​agrigore:​proiect_pm_home_monitoring.zip|}} 
 + 
 + 
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
 ===== Jurnal ===== ===== Jurnal =====
 26 aprilie : alegerea temei proiectului 26 aprilie : alegerea temei proiectului
Line 82: Line 87:
  
 30 mai : finalizare wiki 30 mai : finalizare wiki
 +
 +luna mai: lucrat la proiect
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 https://​randomnerdtutorials.com/​program-upload-code-esp32-cam/​ https://​randomnerdtutorials.com/​program-upload-code-esp32-cam/​
pm/prj2021/agrigore/home-monitoring.1622391916.txt.gz · Last modified: 2021/05/30 19:25 by andrei.barbieru
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