Differences

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

Link to this comparison view

pm:prj2023:apredescu:jewelguard_proximity_defender [2023/05/30 04:13]
dragos_cosmin.ion [Concluzii]
pm:prj2023:apredescu:jewelguard_proximity_defender [2023/05/30 09:18] (current)
dragos_cosmin.ion [Bibliografie/Resurse]
Line 8: Line 8:
 Am pornit de la ideea că in camin la o petrecere organizata la mine in camera cineva a furat una din bijuteriile mele. Soluțiile tradiționale de securitate nu sunt tocmai accesibile, asa ca un astfel de mecanism simplu ar fi fost util pentru a ma atentiona si a afla cine a comis fapta. Am pornit de la ideea că in camin la o petrecere organizata la mine in camera cineva a furat una din bijuteriile mele. Soluțiile tradiționale de securitate nu sunt tocmai accesibile, asa ca un astfel de mecanism simplu ar fi fost util pentru a ma atentiona si a afla cine a comis fapta.
  
-Proiectul este util si pentru altii deoarece poate fi adaptat pentru a proteja o varietate de obiecte valoroase sau importante, nu numai bijuterii. Acesta combină tehnologia de detectare a mișcării cu funcții avansate precum alertele în cascada, mecanismul de panică ​și blocarea fizică a obiectului ​pentru a asigura o protecție robustă și eficientă.+Proiectul este util si pentru altii deoarece poate fi adaptat pentru a proteja o varietate de obiecte valoroase sau importante, nu numai bijuterii. Acesta combină tehnologia de detectare a mișcării cu funcții avansate precum alertele în cascada, mecanismul de panică ​si camera de supraveghere ​pentru a asigura o protecție robustă și eficientă.
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 56: Line 56:
 ===== Software Design ===== ===== Software Design =====
  
 +Pentru dezvoltarea proiectului am folosit Arduino IDE si librariile:
 +  * LiquidCrystal.h - display-ului LCD 
 +  * Adafruit_NeoPixel.h - banda LED RGB
 +  * WiFi.h - conectarea placutei ESP32Cam la Wifi-ul personal
 +  * UniversalTelegramBot.h - folosirea API-ului oferit de Telegram
 +  * ArduinoJson.h - https://​github.com/​witnessmenow/​Universal-Arduino-Telegram-Bot
 +
 +În cadrul funcției loop(), codul verifică mai întâi starea comutatorului conectat la switchPin. Dacă acesta se află în starea LOW, înseamnă că sistemul este oprit. În acest caz, ecranul LCD afișează un mesaj care indică faptul că sistemul este oprit.
 +
 +Dacă comutatorul se află în starea HIGH, ceea ce indică faptul că sistemul este pornit, codul continuă cu logica de măsurare a distanței și de afișare.
 +
 +În primul rând, banda de LED-uri este pornită secvențial pentru fiecare LED, creând un efect de defilare.
 +
 +<​code>​
 +int sine[] = {0, 1, 2, 3, 4, 5, 6, 7};
 +for(int i = 0; i < 8; i++) {
 +  strip.setPixelColor(sine[i],​ 0);
 +  strip.setPixelColor(sine[(i + 7) % 8], color);
 +  strip.show();​
 +  delay(150);
 +}
 +</​code>​
 +
 +Aceasta stabilește culoarea a doi pixeli adiacenți la un moment dat. Funcția setPixelColor() este apelată cu sine[i] pentru a dezactiva un pixel și cu sine[(i + 7) % 8] pentru a seta culoarea pe următorul pixel din secvență. Acest lucru creează efectul de defilare a culorii prin banda de LED-uri. Funcția strip.show() este apelată pentru a actualiza banda de LED-uri cu noua configurație de culoare, iar apoi există o întârziere de 150 de milisecunde înainte de a trece la următoarea iterație.
 +
 +Apoi, senzorul cu ultrasunete este declanșat prin setarea trigPin-ului la LOW, întârzierea pentru o perioadă scurtă de timp și apoi setarea acestuia la HIGH timp de 10 microsecunde înainte de a-l seta din nou la LOW.
 +
 +Durata impulsului de ecou se măsoară cu ajutorul funcției pulseIn() și se stochează în variabila duration. Distanța se calculează folosind durata și viteza sunetului în aer și se stochează în variabila distance.
 +
 +Ecranul LCD este apoi actualizat cu măsurarea distanței prin imprimarea valorii distanței și a unității de măsură.
 +
 +În continuare, codul verifică valoarea distanței pentru a determina culoarea corespunzătoare pentru banda LED și mesajul corespunzător care trebuie afișat pe LCD. Dacă distanța este mai mică de 50 cm, culoarea LED-ului devine roșie, iar pe LCD se afișează "​DANGER"​. Buzzer-ul este pornit mai galagios pentru a oferi o alertă. Dacă distanța este cuprinsă între 50 cm și 100 cm, culoarea LED devine galbenă, iar pe ecranul LCD se afișează "​SOMEONE"​. De asemenea, se activeaza ceva mai incet buzzer-ul. Dacă distanța este mai mare de 100 cm, culoarea LED-ului devine verde, iar pe ecranul LCD se afișează "​NOBODY"​.
 +
 +Bucla se repetă apoi, măsurând continuu distanța și actualizând afișajul pe baza valorii măsurate până când sistemul este oprit prin setarea comutatorului în starea LOW.
 +
 +=== ESP32 CAM + Telegram ===
 +
 +Pentru partea de configurare a placutei ESP32Cam am urmat pasii urmatori:
 +  - Crearea botului Telegram: Înainte de a utiliza codul, trebuie să creați un bot Telegram folosind botul BotFather pe Telegram. BotFather vă va furniza un token unic pentru botul dumneavoastră,​ pe care va trebui să îl includeți în cod ca variabilă BOTtoken.
 +  - Inițializarea rețelei: Codul stabilește o conexiune la rețeaua Wi-Fi folosind SSID-ul și parola furnizate. Odată conectat, acesta inițializează obiectul WiFiClientSecure,​ care este utilizat pentru a comunica în siguranță cu serverul Telegram API.
 +  - Recuperarea și manipularea mesajelor: Codul include o subrutină numită handleNewMessages,​ care este responsabilă pentru verificarea mesajelor noi primite de către Telegram bot. Aceasta interoghează periodic serverul Telegram API pentru a prelua orice mesaj nou. Dacă sunt găsite mesaje noi, codul le procesează în mod corespunzător.
 +  - Procesarea mesajelor: Atunci când se primește un mesaj nou, codul verifică conținutul mesajului. În acest cod, acesta verifică în mod specific dacă mesajul este "/​photo"​ (indicând o cerere de trimitere a unei fotografii). Dacă mesajul se potrivește cu această comandă, codul apelează subrutina sendPhotoTelegram pentru a captura o fotografie cu ajutorul ESP32-CAM și a o trimite pe chat-ul specificat.
 +  - Trimiterea fotografiei:​ Cererea HTTP construită este trimisă către serverul Telegram API folosind metoda POST. Serverul procesează cererea și livrează fotografia către chat-ul specificat. Dacă fotografia este trimisă cu succes, se afișează un mesaj de succes. Dacă apare o eroare în timpul procesului de trimitere, se afișează un mesaj de eroare.
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 +=== Prima iteratie a proiectului ===
 {{ :​pm:​prj2023:​apredescu:​fizic.jpg?​700 |}} {{ :​pm:​prj2023:​apredescu:​fizic.jpg?​700 |}}
 +
 +=== Comenzi Chat Telegram === 
 +{{ :​pm:​prj2023:​apredescu:​telegramchat.jpg?​700 |}}
 +
 +=== Poze ESP32 Cam ===
 +{{ :​pm:​prj2023:​apredescu:​telegramphoto.jpg?​700 |}}
 +
 +=== Forma finala ====
 +{{ :​pm:​prj2023:​apredescu:​final_form.jpg?​700 |}}
  
 ===== Concluzii ===== ===== Concluzii =====
Line 75: Line 121:
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Ion Dragos-Cosmin336CC -> {{:​pm:​prj2023:​apredescu:​proiect_pm_ion_dragos.zip|}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ sursescheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. 
-</​note>​ 
  
-===== Jurnal ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
Line 98: Line 137:
  
 https://​ocw.cs.pub.ro/​courses/​pm/​prj2023/​apredescu/​jewelguard_proximity_defender https://​ocw.cs.pub.ro/​courses/​pm/​prj2023/​apredescu/​jewelguard_proximity_defender
 +
 +Export to PDF -> {{:​pm:​prj2023:​apredescu:​jewelguard_proximity_defender_cs_open_courseware_.pdf|}}
  
pm/prj2023/apredescu/jewelguard_proximity_defender.1685409185.txt.gz · Last modified: 2023/05/30 04:13 by dragos_cosmin.ion
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