This shows you the differences between two versions of the page.
pm:prj2025:fstancu:mihai.niculici [2025/05/27 19:07] 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}} | ||
- | Aceasta schema electrica poate fi descarcata din sectiunea Downloads. | ||
==== 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 (tranziție animată, PWM + easing):** | + | * **Feedback vizual prin LED RGB (tranzitie animata, PWM + easing):** |
- | Culorile se schimbă progresiv î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 animată albastru → verde | + | * 20–25°C → tranzitie animata albastru → verde |
- | * 25–30°C → tranziție animată verde → roșu | + | * 25–30°C → tranzitie animata verde → rosu |
- | * Peste 30°C → roșu complet + alarmă | + | * Peste 30°C → rosu complet + alarma |
- | Tranzițiile sunt realizate **doar dacă temperatura s-a modificat**, prin interpolare între valorile anterioare și cele noi. Funcția `interPolateColor()` face această animație cu pași intermediari calculați prin `for()`, folosind o funcție de easing (`smoothstep`) și un boost de intensitate pentru efect vizual. | + | 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()` – realizează tranziția animată între temperaturi | + | - `interPolateColor()` – realizeaza tranzitia animata intre temperaturi |
- | - `applyColorForTemp()` – calculează culoarea pentru o temperatură dată | + | - `applyColorForTemp()` – calculeaza culoarea pentru o temperatura data |
- | - `playRickRoll()` – declanșare alarmă sonoră | + | - `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 limitarea valorilor PWM în intervalul [0–255]. | + | * Se foloseste `constrain()` pentru limitarea valorilor PWM in intervalul [0–255]. |
- | * Tranzițiile vizuale folosesc funcția de easing `smoothstep` pentru efect natural. | + | * Tranzitiile vizuale folosesc functia de easing `smoothstep` pentru efect natural. |
- | * Animația de culoare este executată doar când temperatura se modifică semnificativ. | + | * Animatia de culoare este executata doar cand temperatura se modifica semnificativ. |
- | * Sistemul are un delay de 2 secunde între citiri pentru stabilitate și evitare congestie. | + | * 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 animat și auditiv, comunicare serială și control prin întreruperi. Codul este clar, modular și extensibil pentru funcționalități ulterioare, oferind în același timp o experiență vizuală plăcută și interactivă. | + | 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 ==== | ==== Concluzii ==== | ||
Line 163: | Line 186: | ||
===== 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> | ||
- |