This shows you the differences between two versions of the page.
pm:prj2024:avaduva:adrian.dumitrache02 [2024/05/13 17:23] adrian.dumitrache02 [Introducere] |
pm:prj2024:avaduva:adrian.dumitrache02 [2024/05/24 23:09] (current) adrian.dumitrache02 [Download] |
||
---|---|---|---|
Line 13: | Line 13: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | La baza, avem un microcontroler cu Wifi ce preia informatii prin cereri de API pentru vreme si citeste valori de la hardware clock si senzorul de umiditate. Aceste informatii sunt afisate prin display-ul LCD, informatia afisata poate fi schimbata prin apasarea unui buton. | + | La baza, avem un **microcontroler cu Wifi** ce preia informatii prin **cereri de API** pentru vreme si citeste valori de la hardware clock si senzorul de umiditate. Aceste informatii sunt afisate prin display-ul LCD, informatia afisata poate fi schimbata prin apasarea unui buton. |
{{https://i.imgur.com/ONunQQt.png}} | {{https://i.imgur.com/ONunQQt.png}} | ||
- | Display-ul se afla in spatele unei bucati de sticla pe care este aplicata folie cu efect one way mirror ce permite lumina sa treaca prin spatele ei si pastreaza efectul de oglinda in fata. Fenomenul poate fi observat cel mai bine prin imagine: | + | Display-ul se afla in spatele unei **bucati de sticla** pe care este aplicata **folie cu efect one way mirror** ce permite lumina sa treaca prin spatele ei si pastreaza efectul de oglinda in fata. Fenomenul poate fi observat cel mai bine prin imagine: |
{{https://s13emagst.akamaized.net/products/68466/68465870/images/res_16ff729f780af3754a87005091a8cb2f.jpg?width=720&height=720&hash=1DD132BFFC1BA377916820EC93E0130D}} | {{https://s13emagst.akamaized.net/products/68466/68465870/images/res_16ff729f780af3754a87005091a8cb2f.jpg?width=720&height=720&hash=1DD132BFFC1BA377916820EC93E0130D}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | Am ales o placuta de dezvoltare cu un modul ESP8266 ce are Wifi deja integrat, un display cat mai puternic care sa poate sa produca destula lumina cat sa treaca prin oglinda si componente standard pentru umiditate si ceas. | + | Am ales o placuta de dezvoltare cu un microcontroller ESP8266 ce are Wifi deja integrat, un display cat mai puternic care sa poate sa produca destula lumina cat sa treaca prin oglinda si componente standard pentru umiditate si ceas. |
==Lista componente== | ==Lista componente== | ||
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 | ||
- | * **DHT Sensor Library** 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) | ||
- | ===== Rezultate Obţinute ===== | + | 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}} | ||
- | <note tip> | + | In starea **loading screen** se realizeaza: |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | * setupul tuturor obiectelor din diversele biblioteci folosite |
- | </note> | + | * conectarea la Wifi |
+ | * citirea unor valori initiale de la senzori | ||
- | ===== Concluzii ===== | + | 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}} | ||
- | ===== Download ===== | + | Dupa setup-ul initial, oglinda se va conecta automat reteaua aleasa in urma unui restart. |
- | <note warning> | + | 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. |
- | 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**. | + | 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. |
- | </note> | + | |
+ | Starea **time and date** prezinta ora si data actuala, acestea se actualizeaza la fiecare minut. | ||
+ | |||
+ | Am abordat urmatoarele subiecte de laborator: | ||
+ | * **intreruperi** | ||
+ | * **SPI** pentru display | ||
+ | * **I2C** pentru RTC | ||
+ | * **GPIO** pentru buton | ||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Demo software: https://youtu.be/XXP2upEUx5Y | ||
+ | |||
+ | Demo produs final: https://youtu.be/awK3mPZTxls | ||
+ | ===== 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 ===== | ||
+ | [[https://www.dropbox.com/scl/fi/yp7gtr9v38cguhgycn2e4/proiect_pm.ino?rlkey=rnyrvutzbl0itycblg8nvhmec&st=at5926zz&dl=0|Cod sursa]] | ||
===== 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 ===== | ||
Line 91: | Line 118: | ||
<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">Export to PDF</a></html> | ||
+ | === Resurse hardware === | ||
+ | * [[https://www.makershop.de/download/d1-wifi-esp8266-board.pdf|Wemos D1 R2 datasheet]] | ||
+ | * [[http://www.nihamkin.com/2016/03/04/connecting-esp8266-with-ili9341-tft-display/|Tutorial conectare display la ESP8266]] |