This shows you the differences between two versions of the page.
pm:prj2024:avaduva:adrian.dumitrache02 [2024/05/23 12:57] adrian.dumitrache02 [Rezultate Obţinute] |
pm:prj2024:avaduva:adrian.dumitrache02 [2024/05/24 23:09] (current) adrian.dumitrache02 [Download] |
||
---|---|---|---|
Line 48: | Line 48: | ||
{{https://i.imgur.com/Olv8iak.jpeg?600x450}} | {{https://i.imgur.com/Olv8iak.jpeg?600x450}} | ||
+ | |||
+ | Oglinda in sine: | ||
+ | {{https://i.imgur.com/auBRUlT.jpeg?768x1024}} | ||
+ | |||
==Schematic== | ==Schematic== | ||
Line 58: | Line 62: | ||
Am abuzat de faptul ca placuta mea este compatibila cu Arduino IDE din deplin. Astfel, folosesc **Arduino IDE** si urmatorele biblioteci pentru Arduino: | Am abuzat de faptul ca placuta mea este compatibila cu Arduino IDE din deplin. Astfel, folosesc **Arduino IDE** si urmatorele biblioteci pentru Arduino: | ||
* **ESP8266** pentru Wifi si cereri HTTP | * **ESP8266** pentru Wifi si cereri HTTP | ||
+ | * **WiFi Manager** pentru a servi o pagina web ce ajuta la setup-ul oglinzii | ||
* **Arduino JSON** pentru manipulare date primite de la API-uri | * **Arduino JSON** pentru manipulare date primite de la API-uri | ||
* **AdaFruit ILI9341** pentru display si **AdaFruit GFX** pentru a scrie la display | * **AdaFruit ILI9341** pentru display si **AdaFruit GFX** pentru a scrie la display | ||
* **Simple DHT** pentru comunicare cu senzorul de umiditate | * **Simple DHT** pentru comunicare cu senzorul de umiditate | ||
* **DS3231** pentru RTC | * **DS3231** pentru RTC | ||
+ | * **Clock** pentru a pastra evidenta timpului dupa citirea initiala de la RTC (mai simplu decat sa citim de o mie de ori de la ceas) | ||
- | Arhitectura de baza a software-ului este strans legata de ce trebuie afisat la ecran, astfel avem urmatoare masina de stari: | + | Arhitectura de baza a software-ului este strans legata de ce trebuie afisat la ecran, astfel avem urmatoare **masina de stari**: |
{{https://i.imgur.com/wk4upUl.png}} | {{https://i.imgur.com/wk4upUl.png}} | ||
- | In starea loading screen se realizeaza: | + | In starea **loading screen** se realizeaza: |
* setupul tuturor obiectelor din diversele biblioteci folosite | * setupul tuturor obiectelor din diversele biblioteci folosite | ||
* conectarea la Wifi | * conectarea la Wifi | ||
* citirea unor valori initiale de la senzori | * citirea unor valori initiale de la senzori | ||
- | Dupa acestea, se trece automat in starea de weather, apasarea unui buton cicleaza prin restul starilor posibile in cadrul unei intreruperi. | + | Prima data cand oglinda este folosita, aceasta are nevoie de un mic setup din partea utilizatorului, mai exact trebuie configurata **reteaua WiFi** la care se va conecta oglinda. Pentru acest lucru oglinda va deschide un access point numit **SmartMirrorAP** la care se pot care utilizatorul trebuie sa se conecteze de pe telefon/calculator, in aceasta retea este servita o pagina web la adresa IP **192.168.4.1** in care utilizatorul poate alege reteaua dorita: |
+ | {{https://i.imgur.com/q8CqUwX.png?800x500}} | ||
- | In plus, starea pentru umiditate are si o logica interna de loading, deoarece citirile de la senzorul meu de umiditate sunt lente si inconsistente, deci se intampla foarte des sa dureze cateva secunde de la pornire pana se face o citire cu succes. | + | Dupa setup-ul initial, oglinda se va conecta automat reteaua aleasa in urma unui restart. |
+ | |||
+ | Starea **weather** prezinta informatii despre vreme de pe **OpenWeatherMap** si un sfat pentru o vestimentatie adecvata. Pentru a determina **locatia** despre care sa preluam informatii este folosita **geolocatia IP-ului**. Evident, aici pot aparea erori daca geolocatia IP-ului este una eronata. Spre exemplu, cand conectezez oglinda la datele mele mobile am un IP cu geolocatie de Brasov. | ||
+ | |||
+ | Starea **humidity info** prezinta procentul de umiditate al camerei si determina daca acest procent este adecvat vremii de afara sau nu. In plus, exista si o logica interna de loading deoarece citirile de la senzorul de umiditate sunt lente si inconsistente, fiind posibil sa dureze peste 10 secunde de la pornire pana se face o citire cu succes. | ||
+ | |||
+ | Starea **time and date** prezinta ora si data actuala, acestea se actualizeaza la fiecare minut. | ||
Am abordat urmatoarele subiecte de laborator: | Am abordat urmatoarele subiecte de laborator: | ||
- | * intreruperi | + | * **intreruperi** |
- | * SPI pentru display | + | * **SPI** pentru display |
- | * I2C pentru RTC | + | * **I2C** pentru RTC |
- | * GPIO pentru buton | + | * **GPIO** pentru buton |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | Check it out: https://youtu.be/XXP2upEUx5Y | + | Demo software: https://youtu.be/XXP2upEUx5Y |
+ | |||
+ | Demo produs final: https://youtu.be/awK3mPZTxls | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost foarte distractiv si cred ca o sa folosesc aceasta oglinda in continuare. Ar merge extinsa si mai mult, eventual cu o metoda mai smart de a schimba intre ecrane (ma gandeam la un senzor de gesturi), double buffering la ecran si mai multe ecrane. | ||
===== Download ===== | ===== Download ===== | ||
- | + | [[https://www.dropbox.com/scl/fi/yp7gtr9v38cguhgycn2e4/proiect_pm.ino?rlkey=rnyrvutzbl0itycblg8nvhmec&st=at5926zz&dl=0|Cod sursa]] | |
- | <note warning> | + | |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, 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 ===== | ===== Jurnal ===== | ||
* 12 mai pe la ora 12: mi-au venit toate piesele, optimus digital mi-a trimis display-ul gresit, aia e ne descurcam | * 12 mai pe la ora 12: mi-au venit toate piesele, optimus digital mi-a trimis display-ul gresit, aia e ne descurcam | ||
* 12 mai pe la ora 23: am legat si am testat tot mai putin RTC-ul, pentru care nu am deocamdata o baterie CR2032 (ma voi duce in piata sa cumpar probabil) | * 12 mai pe la ora 23: am legat si am testat tot mai putin RTC-ul, pentru care nu am deocamdata o baterie CR2032 (ma voi duce in piata sa cumpar probabil) | ||
* 13 mai: am scris documentatia hardware, am actualizat putin schematic-ul pentru ca n-am legat lucrurile cum am crezut ca o sa le leg si am facut si un symbol dragut pentru placuta | * 13 mai: am scris documentatia hardware, am actualizat putin schematic-ul pentru ca n-am legat lucrurile cum am crezut ca o sa le leg si am facut si un symbol dragut pentru placuta | ||
+ | * 23 mai: am scris si documentat ideea de baza de software, ramane de lipit totul la oglinda si eventual imbunatatit codul pana la PM fair :) | ||
+ | * 24 mai: am atasat totul la oglinda si am facut niste imbunatatiri la partea de software (e.g: access point pentru configurare) | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||