Differences

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

Link to this comparison view

pm:prj2025:fstancu:mihai.niculici [2025/05/27 16:43]
mihai.niculici [Software Design]
pm:prj2025:fstancu:mihai.niculici [2025/05/28 02:06] (current)
mihai.niculici [Rezultate Obţinute]
Line 17: Line 17:
  
 Este un proiect educativ si practic – oricine vrea sa urmareasca confortul termic dintr-un spatiu inchis poate beneficia de el. Pentru mine, este o ocazie buna sa exersez integrarea senzorilor cu microcontrollerul si sa aplic in mod concret cunostintele din curs si laboratoare. Este un proiect educativ si practic – oricine vrea sa urmareasca confortul termic dintr-un spatiu inchis poate beneficia de el. Pentru mine, este o ocazie buna sa exersez integrarea senzorilor cu microcontrollerul si sa aplic in mod concret cunostintele din curs si laboratoare.
-</​note>​ 
 ===== Descriere generala ===== ===== Descriere generala =====
  
Line 33: Line 32:
  
 Ca functionalitati,​ proiectul foloseste urmatoarele concepte studiate in cadrul laboratoarelor:​ Ca functionalitati,​ proiectul foloseste urmatoarele concepte studiate in cadrul laboratoarelor:​
-  * **ADC** – pentru citirea datelor de la senzorul de temperatura (DHT22). 
   * **PWM** – pentru reglarea intensitatii si a culorii LED-ului RGB, in functie de temperatura.   * **PWM** – pentru reglarea intensitatii si a culorii LED-ului RGB, in functie de temperatura.
-  * **UART** – pentru ​trimiterea datelor catre un terminal serial ​pe laptop.+  * **Intreruperi externe** – pentru ​comutarea unitatilor de masura afisate ​pe ecran, folosind un buton conectat la un pin digital.
   * **I2C** – pentru comunicarea cu ecranul LCD 16x2.   * **I2C** – pentru comunicarea cu ecranul LCD 16x2.
  
Line 43: Line 41:
     Rol: unitatea centrala care gestioneaza senzorii, afisajul, LED-ul RGB si buzzerul. De asemenea, transmite informatii prin UART catre un monitor serial.     Rol: unitatea centrala care gestioneaza senzorii, afisajul, LED-ul RGB si buzzerul. De asemenea, transmite informatii prin UART catre un monitor serial.
  
-  * **Modul LED RGB**   +  * **LED RGB**   
-    [[https://​www.optimusdigital.ro/​ro/​optoelectronice-led-uri/​737-modul-cu-led-rgb.html?​search_query=led+rgb&​results=109|Modul cu LED RGB – OptimusDigital]]  ​+    [[https://​www.optimusdigital.ro/​ro/​optoelectronice-led-uri/​483-led-rgb-catod-comun.html?​search_query=RGB+LED&​results=108|LED RGB – OptimusDigital]]  ​
     ​     ​
     Rol: semnalizare vizuala a temperaturii (albastru – rece, verde – optim, rosu – cald).     Rol: semnalizare vizuala a temperaturii (albastru – rece, verde – optim, rosu – cald).
Line 67: Line 65:
     ​     ​
     Rol: organizarea componentelor hardware intr-un mod curat si stabil.     Rol: organizarea componentelor hardware intr-un mod curat si stabil.
- 
-  * **Modul WiFi ESP-03**  ​ 
-    [[https://​www.optimusdigital.ro/​ro/​wireless-wifi/​79-modul-wifi-esp-03.html?​search_query=modul+wifi&​results=90|Modul WiFi ESP-03 – OptimusDigital]]  ​ 
     ​     ​
-    ​Roltransmite valorile masurate catre un telefon sau alt dispozitivprin WiFi.+=== Bill of Materials (BOM) === 
 + 
 +^ Componenta ​               ^ Cant. ^ Link produs ​                                                                                  ^ Datasheet ​                                                                ^ Pret (RON) ^ 
 +| Arduino UNO R3           | 1     ​| [[https://​www.optimusdigital.ro/​ro/​placi-avr/​4561-placa-de-dezvoltare-compatibila-cu-arduino-uno-r3-atmega328p-atmega16u2-cablu-50-cm.html|OptimusDigital]] | [[https://​octopart.com/​datasheet/​arduino+uno+rev3-arduino-27999717|Arduino UNO Rev3]] ​                       | 54.37 | 
 +| Senzor DHT22             | 1     | [[https://​www.optimusdigital.ro/​ro/​senzori-senzori-de-temperatura/​1449-modul-senzor-de-temperatura-i-umiditate-dht22.html|OptimusDigital]] | [[https://​www.alldatasheet.com/​datasheet-pdf/​download/​1132459/​ETC2/​DHT22.html|DHT22 Datasheet]] ​                 | 23.12 | 
 +| LED RGB (catod comun) ​   | 1     | [[https://​www.optimusdigital.ro/​en/​leds/​483-rgb-led-common-cathode.html|OptimusDigital]] ​                      | [[https://​arabsmakers.com/​wp-content/​uploads/​2017/​05/​upload-5mm_RGB_led_common_cathode.pdf|RGB LED Common Cathode]] ​    | 1.00  | 
 +| LCD 16x2 + I2C           | 1     | [[https://​www.optimusdigital.ro/​en/​lcds/​2894-1602-lcd-with-i2c-interface-and-blue-backlight.html|OptimusDigital]] ​        | [[https://​www.vishay.com/​docs/​37484/​lcd016n002bcfhet.pdf|LCD 1602]] ​                                      | 16.34 | 
 +| Buzzer pasiv 5V          | 1     | [[https://​www.optimusdigital.ro/​ro/​audio-buzzere/​634-buzzer-pasiv-de-5-v.html|OptimusDigital]] ​                      | [[https://​components101.com/​sites/​default/​files/​component_datasheet/​Buzzer%20Datasheet.pdf|Buzzer]] ​        | 1.00  | 
 +| Buton 6x6 mm             | 1     | [[https://​www.optimusdigital.ro/​ro/​butoane-i-comutatoare/​1119-buton-6x6x6.html|OptimusDigital]] ​                    | [[https://​www.schurter.com/​en/​datasheet/​typ_6x6_mm_tact_switches.pdf|Tact Switch 6x6]]                          | 0.36  | 
 +| PCB 10x10 cm             | 1     | [[https://​www.optimusdigital.ro/​ro/​prototipare-altele/​12526-placa-pcb-pentru-prototipare-10x10cm-pas-de-254-mm.html|OptimusDigital]] | -                                                                       | 5.00  | 
 +| Rezistente (220Ω10kΩ) ​ | 3–4   | [[https://​www.optimusdigital.ro/​en/​resistors/​1088-025w-10k-resistor.html|OptimusDigital]] ​                        | [[https://​www.yageo.com/​upload/​media/​product/​app/​datasheet/​lr/​yageo-cfr_datasheet.pdf|Yageo CFR]]                   | 0.50  | 
 + 
 +**Pret total estimativ:​** **101.69 RON**
  
 ===== Schema electrica ===== ===== Schema electrica =====
Line 84: Line 91:
   * LED-ul RGB (catod comun) este controlat prin pinii D9, D10 si D11 folosind semnale PWM.   * LED-ul RGB (catod comun) este controlat prin pinii D9, D10 si D11 folosind semnale PWM.
  
- ​{{:​pm:​prj2025:​fstancu:​beep_heat_schema_electrica.png?​750|Schema electrica - BEEP & Heat}}+ ​{{:​pm:​prj2025:​fstancu:​schema_electrica_niculici.png?​750|Schema electrica - BEEP & Heat}} 
 + 
 +Aceasta schema electrica (Fisierul EAGLE 9.X Compatible Schematic File .sch) poate fi descarcata din sectiunea Downloads. 
 + 
 +Acestea sunt cateva imagini diferite componente ale proiectului:​ 
 +  * Ecranul LCD 1602: 
 + ​{{:​pm:​prj2025:​fstancu:​lcd_niculici.jpeg?​400|Schema electrica - BEEP & Heat}} 
 +  * Senzorul de Temperatura si Umiditate DHT22: 
 + ​{{:​pm:​prj2025:​fstancu:​dht22_niculici.jpeg?​400|Schema electrica - BEEP & Heat}} 
 +  * Placa de dezvoltare Arduino UNO R3: 
 + ​{{:​pm:​prj2025:​fstancu:​arduino_uno_r3_cabluri_niculici.jpeg?​400|Schema electrica - BEEP & Heat}} 
 ==== Software Design ==== ==== Software Design ====
  
-Pentru implementarea software a proiectului **BEEP & Heat – Stația ​meteo cu alertă sonoră și vizuală**, s-a utilizat mediul de dezvoltare **Arduino IDE**, ​împreună ​cu mai multe biblioteci externe pentru controlul senzorilor ​și perifericelor. Codul este structurat modular ​și urmărește ​logică clară ​de prelucrare ​și afișare ​a datelor, precum ​și de generare a alertelor.+Pentru implementarea software a proiectului **BEEP & Heat – Statia ​meteo cu alerta sonora si vizuala**, s-a utilizat mediul de dezvoltare **Arduino IDE**, ​impreuna ​cu mai multe biblioteci externe pentru controlul senzorilor ​si perifericelor. Codul este structurat modular ​si urmareste ​logica clara de prelucrare ​si afisare ​a datelor, precum ​si de generare a alertelor.
  
-=== Funcționalități ​implementate ===+=== Functionalitati ​implementate ===
  
-  * **Citirea temperaturii ​și umidității ​(DHT22):​** +  * **Citirea temperaturii ​si umiditatii ​(DHT22):​** 
-    Se folosește ​biblioteca `DHT.h` pentru a citi valorile senzorului DHT22 conectat la pinul D7. Valorile sunt utilizate ​atât pentru ​afișajcât și pentru logica de alertă.+    Se foloseste ​biblioteca `DHT.h` pentru a citi valorile senzorului DHT22 conectat la pinul D7. Valorile sunt utilizate ​atat pentru ​afisajcat si pentru logica de alerta.
  
-  * **Afișarea ​datelor pe LCD (16x2, I2C):** +  * **Afisarea ​datelor pe LCD (16x2, I2C):** 
-    Se utilizează ​biblioteca `LiquidCrystal_I2C`. Datele sunt afișate ​pe un ecran LCD conectat prin I2C (pinii A4 – SDA, A5 – SCL). Este inclusă și comutarea ​între unități ​de măsură: Celsius, Kelvin ​și Fahrenheit, printr-un buton extern care generează ​întrerupere.+    Se utilizeaza ​biblioteca `LiquidCrystal_I2C`. Datele sunt afisate ​pe un ecran LCD conectat prin I2C (pinii A4 – SDA, A5 – SCL). Este inclusa si comutarea ​intre unitati ​de masura: Celsius, Kelvin ​si Fahrenheit, printr-un buton extern care genereaza ​intrerupere.
  
-  * **Feedback vizual prin LED RGB (PWM + interpolare cu easing):​** +  * **Feedback vizual prin LED RGB (tranzitie animata, ​PWM + easing):​** 
-    Culorile se schimbă în funcție ​de temperatură:+    Culorile se schimba progresiv in functie ​de temperatura:
       * Sub 20°C → albastru       * Sub 20°C → albastru
-      * 20–25°C → tranziție interpolată ​albastru → verde +      * 20–25°C → tranzitie animata ​albastru → verde 
-      * 25–30°C → tranziție interpolată ​verde → roșu +      * 25–30°C → tranzitie animata ​verde → rosu 
-      * Peste 30°C → roșu complet + alarmă+      * Peste 30°C → rosu complet + alarma
  
-    ​Tranziția este realizată cu funcția ​`interPolateColor(temp)`, care folosește funcția ​`smoothstep` ​pentru easing și aplică ​un boost de intensitate pentru ​un efect vizual ​accentuat.+    ​Tranzitiile sunt realizate **doar daca temperatura s-a modificat**,​ prin interpolare intre valorile anterioare si cele noi. Functia ​`interPolateColor()` face aceasta animatie cu pasi intermediari calculati prin `for()`, folosind o functie de easing (`smoothstep`) si un boost de intensitate pentru efect vizual.
  
-  * **Alertă sonoră ​(RickRoll):​** +  * **Alerta sonora ​(RickRoll):​** 
-    La temperaturi peste 30°C se declanșează ​melodia ​Never Gonna Give You Up” prin buzzer (funcția ​`playRickRoll()`),​ ca metodă ​de alertă amuzantă. Un flag `alreadyRickRolled` previne repetarea ​inutilă ​a melodiei.+    La temperaturi peste 30°C se declanseaza ​melodia ​"Never Gonna Give You Up" ​prin buzzer (functia ​`playRickRoll()`),​ ca metoda ​de alerta amuzanta. Un flag `alreadyRickRolled` previne repetarea ​inutila ​a melodiei.
  
   * **Comunicare UART:**   * **Comunicare UART:**
-    Valorile ​măsurate ​sunt trimise continuu la monitorul serial din Arduino IDE prin `Serial.print()`.+    Valorile ​masurate ​sunt trimise continuu la monitorul serial din Arduino IDE prin `Serial.print()`.
  
-  * **Tratarea ​întreruperilor ​externe:​** +  * **Tratarea ​intreruperilor ​externe:​** 
-    Un buton conectat la pinul D2 activează ​întrerupere ​(`attachInterrupt()`), ​schimbând ​ciclic unitatea de măsură afișată ​pe LCD (Celsius → Kelvin → Fahrenheit).+    Un buton conectat la pinul D2 activeaza ​intrerupere ​(`attachInterrupt()`), ​schimband ​ciclic unitatea de masura afisata ​pe LCD (Celsius → Kelvin → Fahrenheit).
  
-=== Librării ​utilizate ===+=== Biblioteci ​utilizate ===
  
-Bibliotecă ​           ^ Scop                                      +Biblioteca ​           ^ Scop                                     ​
-| `LiquidCrystal_I2C` ​  | Control LCD 16x2 prin interfață ​I2C       ​+| `LiquidCrystal_I2C` ​  | Control LCD 16x2 prin interfata ​I2C      
-| `Wire.h` ​             | Comunicare I2C cu LCD                     ​+| `Wire.h` ​             | Comunicare I2C cu LCD                    
-| `DHT.h` ​              | Citire ​temperatură și umiditate (DHT22) ​ |+| `DHT.h` ​              | Citire ​temperatura si umiditate (DHT22) |
  
-=== Principii de proiectare ​și optimizări ​===+=== Principii de proiectare ​si optimizari ​===
  
-  * Codul este modular, fiecare ​funcționalitate ​fiind separată ​logic: +  * Codul este modular, fiecare ​functionalitate ​fiind separata ​logic: 
-    - `interPolateColor()` – control LED RGB în funcție de temperatură +    - `interPolateColor()` – realizeaza tranzitia animata intre temperaturi 
-    - `playRickRoll()` – declanșare alarmă sonoră+    - `applyColorForTemp()` – calculeaza culoarea pentru o temperatura data 
 +    - `playRickRoll()` – declansare alarma sonora
     - `setColor()` – scriere valori PWM pentru LED     - `setColor()` – scriere valori PWM pentru LED
-    - `ISR_BUTTON()` – tratarea ​întreruperii ​externe +    - `ISR_BUTTON()` – tratarea ​intreruperii ​externe 
-  * Se folosește ​`constrain()` pentru ​siguranță la generarea ​valorilor PWM. +  * Se foloseste ​`constrain()` pentru ​limitarea ​valorilor PWM in intervalul [0–255]
-  * `smoothstep` ​este utilizat ​pentru ​interpolare non-liniară între culori+  * Tranzitiile vizuale folosesc functia de easing ​`smoothstep` pentru ​efect natural. 
-  * Sistemul are un delay de 2 secunde ​între cicluri ​pentru ​a evita congestia de date și a permite răspunsul la întreruperi.+  * Animatia de culoare este executata doar cand temperatura se modifica semnificativ
 +  * Sistemul are un delay de 2 secunde ​intre citiri ​pentru ​stabilitate si evitare congestie.
  
 === Concluzie === === Concluzie ===
  
-Partea software a proiectului ​integrează funcționalități ​de citire ​senzorială, feedback vizual ​și auditiv, comunicare ​serială și control prin întreruperi. Codul este clar, modular ​și extensibil pentru ​funcționalități ​ulterioare.+Partea software a proiectului ​integreaza functionalitati ​de citire ​senzoriala, feedback vizual ​animat si auditiv, comunicare ​seriala si control prin intreruperi. Codul este clar, modular ​si extensibil pentru ​functionalitati ​ulterioare, oferind in acelasi timp o experienta vizuala placuta si interactiva.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-Care au fost rezultatele obţinute ​în urma realizării proiectului ​vostru. +Functionalitatile Proiectului pot fi urmarite pe Youtube: https://​youtu.be/​yKRfma8m8SQ 
-</​note>​+ 
 +Proiectul a fost implementat cu succes, integrand toate componentele hardware si functionalitatile software. Sistemul afiseaza temperatura si umiditatea in timp real, ofera feedback vizual si sonor, iar comutarea unitatilor functioneaza corect. 
 + 
 +  * Proiect Final: 
 + 
 + ​{{:​pm:​prj2025:​fstancu:​proiect_final_niculici.jpeg?​500|BEEP & Heat}} 
 + ​{{:​pm:​prj2025:​fstancu:​proiect_final_spate_niculici.jpeg?​500|BEEP & Heat}} 
 + 
 + 
 +==== Concluzii ==== 
 + 
 +Proiectul **BEEP & Heat** reprezintă o aplicație practică și educativă, care integrează concepte esențiale din proiectarea cu microprocesoare:​ senzori, comunicare serială, afișare I2C, control PWM și întreruperi externe. Sistemul a fost conceput pentru a monitoriza ​în timp real temperatura și umiditatea dintr-un spațiu închis și pentru a oferi feedback instant prin LED RGB și buzzer. 
 + 
 +Prin implementarea tranzițiilor de culoare cu interpolare și easing, proiectul oferă un feedback vizual elegant și intuitiv. De asemenea, alerta sonoră de tip RickRoll adaugă o notă creativă și unică, transformând o simplă notificare într-o experiență interactivă și memorabilă. 
 + 
 +Pe parcursul ​realizării proiectului ​am reușit: 
 +  * să înțeleg mai bine modul în care se interacționează cu senzori digitali și analogici;​ 
 +  * să aplic conceptele de control PWM și semnalizare prin LED-uri RGB; 
 +  * să lucrez cu protocoale de comunicare precum I2C și UART; 
 +  * să gestionez evenimente asincrone prin întreruperi externe; 
 +  * să aplic tehnici de interpolare și optimizare vizuală.
  
-===== Concluzii =====+Proiectul este ușor de replicat, util în contexte educaționale și poate fi extins ușor pentru aplicații IoT (de exemplu, integrarea cu un server web prin modulul WiFi). Pentru mine, acest proiect a fost o oportunitate excelentă de a integra în mod creativ mai multe noțiuni studiate și de a construi un sistem funcțional și util.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Mai jos se regasesc fisierele rezultate in urma realizarii ​proiectului ​BEEP & Heat – Statia meteo cu alerta sonora si vizuala:
-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**. +Schema electrica (.sch): {{pm:prj2025:fstancu:schematic.zip}}
-</​note>​+
  
-===== Jurnal =====+Cod sursa Arduino (.ino): {{pm:​prj2025:​fstancu:​source_code.zip}}
  
-<note tip> +==== Jurnal ==== 
-Puteți avea și o secțiune de jurnal ​în care să poată urmări asistentul ​de proiect progresul ​proiectului. + 
-</​note>​+Acest jurnal ​documenteaza etapele ​de dezvoltare ale proiectului ​**BEEP & Heat – Statia meteo cu alerta sonora si vizuala**, evidentiind progresul, problemele intalnite si solutiile aplicate
 + 
 +=== Ziua 1 – 3 mai 2025 === 
 +  * Definirea ideii de proiect: statie meteo cu alerta sonora si vizuala. 
 +  * Selectarea componentelor hardware. 
 +  * Schitarea functionalitatilor si a structurii bloc. 
 + 
 +=== Ziua 2 – 5 mai 2025 === 
 +  * Testare senzor DHT22 – valori corecte afisate si transmise prin serial. 
 +  * Testare LCD 16x2 – mesajele apar corect si clar. 
 +  * Afisarea temperaturii in grade Celsius pe LCD I2C. 
 + 
 +=== Ziua 3 – 8 mai 2025 === 
 +  * Adaugarea unui buton pentru comutarea unitatilor de masura (Celsius, Kelvin, Fahrenheit). 
 +  * Implementarea intreruperii externe cu `attachInterrupt()` – testare cu succes. 
 + 
 +=== Ziua 4 – 10 mai 2025 === 
 +  * Testare LED RGB cu PWM pentru fiecare culoare. 
 +  * Primele tranzitii brute in functie de temperatura – functionale,​ dar neoptimizate vizual. 
 + 
 +=== Ziua 5 – 13 mai 2025 === 
 +  * Implementarea functiei `interPolateColor()` cu easing (`smoothstep`) si boost de intensitate. 
 +  * Rezultate vizuale mult imbunatatite fata de varianta cu tranzitie liniara simpla. 
 + 
 +=== Ziua 6 – 15 mai 2025 === 
 +  * Implementarea functiei `playRickRoll()` cu refrenul melodiei "Never Gonna Give You Up". 
 +  * Testarea buzzerului pe diferite frecvente cu `tone()` – validare corecta a secventei muzicale. 
 + 
 +=== Ziua 7 – 19 mai 2025 === 
 +  * Integrarea tuturor componentelor in schema completa. 
 +  * Afisarea temperaturii si umiditatii pe doua randuri ale LCD-ului. 
 +  * Ultimele testari de stabilitate si functionalitate combinata. 
 + 
 +=== Ziua 8 – 24 mai 2025 === 
 +  * Realizarea demonstratiei video pentru proiect. 
 +  * Testare finala a functionalitatilor integrate: senzor, LCD, LED RGB, buzzer si UART. 
 +  * Verificarea functionarii pe placa de prototipare alimentata prin USB. 
 + 
 +=== Ziua 9 – 27 mai 2025 === 
 +  * Actualizarea paginii de documentatie in OCW cu toate sectiunile finale (Jurnal, Concluzii, Rezultate). 
 +  * Incarcarea videoclipului de prezentare pe YouTube. 
 +  * Verificare finala a structurii si formatarea corecta in stil DokuWiki pentru predare.
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * Articol despre interpolare smoothstep – https://​en.wikipedia.org/​wiki/​Smoothstep 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  Rick Roll folosind Buzzer – https://www.youtube.com/​watch?​v=NL-KFLt1ifY 
-</note>+  * Senzor de DHT22 – https://​arduinogetstarted.com/​tutorials/​arduino-dht22
  
 <​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>​
- 
pm/prj2025/fstancu/mihai.niculici.1748353399.txt.gz · Last modified: 2025/05/27 16:43 by mihai.niculici
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