This shows you the differences between two versions of the page.
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]] | ||
| | ||
- | Rol: transmite valorile masurate catre un telefon sau alt dispozitiv, prin 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 o 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 o 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șaj, câ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 afisaj, cat 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ă o î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 o 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ă o întrerupere (`attachInterrupt()`), schimbând ciclic unitatea de măsură afișată pe LCD (Celsius → Kelvin → Fahrenheit). | + | Un buton conectat la pinul D2 activeaza o 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> | ||
- |