Differences

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

Link to this comparison view

pm:prj2024:sseverin:vladimir.bucur1504 [2024/05/26 16:12]
vladimir.bucur1504
pm:prj2024:sseverin:vladimir.bucur1504 [2024/05/28 22:00] (current)
vladimir.bucur1504
Line 31: Line 31:
  ​**Potentiometrul**:​ este legat la VCC și GND și la pinul A1 de pe plăcuță. Are rolul de a seta temperatura de prag dorită.  ​**Potentiometrul**:​ este legat la VCC și GND și la pinul A1 de pe plăcuță. Are rolul de a seta temperatura de prag dorită.
  
- **Senzotul ​de temperatuea**: acesta are 4 pini dintre care unul nu se folosește. 2 dintre ei sunt pentru alimentare și masă iar al 3-lea pentru conectarea la pinul digital 7 de pe plăcuță. S-a folosit de asemenea o rezistență de 10KOhm. Are rolul de a măsura temperatura din încăpere.+ **Senzorul ​de temperatură**: acesta are 4 pini dintre care unul nu se folosește. 2 dintre ei sunt pentru alimentare și masă iar al 3-lea pentru conectarea la pinul digital 7 de pe plăcuță. S-a folosit de asemenea o rezistență de 10KOhm. Are rolul de a măsura temperatura din încăpere.
  
- **Fotodioda**: este conectată la alimentare și la masă și de asemenea pe plăcuța Arduino pe pinul analogic A1. Rolul ei este de a detecta dacă afară este întuneric sau lumină pentru a se hotărî dacă este zi sau noapte și a ști dacă aerul condiționat va merge sau nu.+ **Fotodiodă**: este conectată la alimentare și la masă și de asemenea pe plăcuța Arduino pe pinul analogic A1. Rolul ei este de a detecta dacă afară este întuneric sau lumină pentru a se hotărî dacă este zi sau noapte și a ști dacă aerul condiționat va merge sau nu.
    
  ​**Ventilator**:​ ventilatorul folosit este unul cu 3 pini (unul și pentru senzorul de viteză). Pentru conectarea ventilatorului și posibilitatea de a controla turațiile lui s-a folosit un MOSFET. Ventilatorul este conectat cu ajutorul său la întreg circuitul și astfel și la plăcuța Arduino prin pinul digital 10. Deși ventilatorul are un senzor special pentru controlul turațiilor (firul galben), eu nu l-am folosit preferând să folosesc proprietățile MOSFET-ului pentru a se putea folosi orice fel de ventilator nu doar unul mai scump. Are rolul de a răci încăperea până temperatura actuală să ajungă mai mică sau egală cu cea setată.  ​**Ventilator**:​ ventilatorul folosit este unul cu 3 pini (unul și pentru senzorul de viteză). Pentru conectarea ventilatorului și posibilitatea de a controla turațiile lui s-a folosit un MOSFET. Ventilatorul este conectat cu ajutorul său la întreg circuitul și astfel și la plăcuța Arduino prin pinul digital 10. Deși ventilatorul are un senzor special pentru controlul turațiilor (firul galben), eu nu l-am folosit preferând să folosesc proprietățile MOSFET-ului pentru a se putea folosi orice fel de ventilator nu doar unul mai scump. Are rolul de a răci încăperea până temperatura actuală să ajungă mai mică sau egală cu cea setată.
- 
- 
-<note tip> 
-Aici puneţi tot ce ţine de hardware design: 
-  * listă de piese 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) 
-  * diagrame de semnal ​ 
-  * rezultatele simulării 
-</​note>​ 
  
 ===== Software Design ===== ===== Software Design =====
Line 70: Line 61:
  
 PWM a fost utilizat pentru a ajusta turațiile motorului ventilatorului. Aceasta permite controlul precis al vitezei motorului în funcție de temperatura curentă și nivelul de lumină, asigurând un răspuns adaptativ al sistemului la condițiile de mediu. Utilizarea PWM este o metodă eficientă și flexibilă pentru controlul motoarelor în proiectele cu Arduino. În acest proiect s-a folosit pentru 2 lucruri: PWM a fost utilizat pentru a ajusta turațiile motorului ventilatorului. Aceasta permite controlul precis al vitezei motorului în funcție de temperatura curentă și nivelul de lumină, asigurând un răspuns adaptativ al sistemului la condițiile de mediu. Utilizarea PWM este o metodă eficientă și flexibilă pentru controlul motoarelor în proiectele cu Arduino. În acest proiect s-a folosit pentru 2 lucruri:
-  * Controlul Vitezei Motorului - funcția analogWrite() generează un semnal PWM pe pinul specificat. În cazul proiectului meu, analogWrite(GATE,​ ventilator_speed) ajustează viteza motorului prin modificarea ciclicității semnalului PWM aplicat pe pinul GATE. Valoarea ventilator_speed determină ciclicitatea semnalului PWM, variind între 0 (0% ciclicitate,​ motor oprit) și 255 (100% ciclicitate,​ motor la viteză maximă).+  * Controlul Vitezei Motorului - funcția analogWrite() generează un semnal PWM pe pinul specificat. În cazul proiectului meu, analogWrite(GATE,​ ventilator_speed) ajustează viteza motorului prin modificarea ciclicității semnalului PWM aplicat pe pinul GATE. Valoarea ventilator_speed determină ciclicitatea semnalului PWM, variind între 0 (0% ciclicitate,​ motor oprit) și 1000(100% ciclicitate,​ motor la viteză maximă).
   * Calculul Vitezei Ventilatorului - Viteza ventilatorului este determinată pe baza diferenței dintre temperatura curentă și temperatura limită setată. Viteza ventilatorului este ajustată și în funcție de valoarea luminii citită de la fotodiodă (light_value > 100). Funcția constrain() asigură că valoarea vitezei ventilatorului se încadrează între MIN_SPEED_THRESHOLD și 255.   * Calculul Vitezei Ventilatorului - Viteza ventilatorului este determinată pe baza diferenței dintre temperatura curentă și temperatura limită setată. Viteza ventilatorului este ajustată și în funcție de valoarea luminii citită de la fotodiodă (light_value > 100). Funcția constrain() asigură că valoarea vitezei ventilatorului se încadrează între MIN_SPEED_THRESHOLD și 255.
  
-=== Explicati scheletul ​proiectului === +=== Explicația scheletului ​proiectului === 
-In aceasta sectiune ​sa explic scheletul, cum am realizat calibrarea elementelor de senzoristica, elementele de noutate ale proiectului ​si alte explicatii ​suplimentare.+În această secțiune ​să explic scheletul, cum am realizat calibrarea elementelor de senzorică, elementele de noutate ale proiectului ​și alte explicații ​suplimentare.
  
   * Definierea pinilor pentru diferite componente sau senzori   * Definierea pinilor pentru diferite componente sau senzori
Line 85: Line 76:
 </​code>​ </​code>​
  
-  * Declararea variabilelor globale pe care urmeaza sa le folosesc ​in intreg ​codul+  * Declararea variabilelor globale pe care urmează să le folosesc ​în întreg ​codul
 <code c> <code c>
 // Initialize the LCD with I2C address 0x27 and dimensions 16x2 // Initialize the LCD with I2C address 0x27 and dimensions 16x2
Line 99: Line 90:
 int light_value = 0; int light_value = 0;
  
-// Define ​a constant ​for the minimum speed threshold of the fan +// Define ​constants ​for the minimum ​and maximum ​speed threshold of the fan 
-const int MIN_SPEED_THRESHOLD = 65;+const int MIN_SPEED_THRESHOLD = 70; 
 +const int MAX_SPEED_THRESHOLD = 1000;
 </​code>​ </​code>​
  
-  * Functia ​setup()+  * Funcția ​setup()
 <code c> <code c>
 void setup() { void setup() {
Line 116: Line 108:
 } }
 </​code>​ </​code>​
-In aceasta seciune ​se realizeaza ​set up ul si starea ​initiala ​pentru ventilator ​si LCD. Ne asiguram ca ventilatorul la inceput ​este oprit prin digitalWrite(GATE,​ LOW) si se seteaza ​pinul GATE ca fiind de tip OUTPUT. LCD ului i se da lumina de fundal ​si se sterge ​tot ce ar fi putut fi scris inainte ​pe el pentru a ne asigura ​ca ulterior se afiseaza ​doar ce noi dorim.+În această secțiune ​se realizează ​set-up-ul și starea ​inițială ​pentru ventilator ​și LCD. Ne asigurăm că ventilatorulla început, ​este oprit prin `digitalWrite(GATE,​ LOW)` și se setează ​pinul GATE ca fiind de tip OUTPUT. LCD-ului i se dă lumina de fundal ​și se șterge ​tot ce ar fi putut fi scris înainte ​pe el pentru a ne asigura ​că, ulteriorse afișează ​doar ce noi dorim.
  
-  * Functia ​loop()+  * Funcția ​loop()
 <code c> <code c>
 // Set cursor to the beginning of the first line and display "Set Temp: " // Set cursor to the beginning of the first line and display "Set Temp: "
Line 128: Line 120:
 lcd.print("​Current Temp: "); lcd.print("​Current Temp: ");
 </​code>​ </​code>​
-Se seteaza ​cursorul astfel ​incat pe prima linie a LCD ului sa se afiseze ​"Set Temp: ", iar pe a 2 a "​Current Temp: ". Acestea se fac la inceput ​pentru ​ca ele sunt afisate pereu pe ecran si doar valorile care urmeaza ​a fi scrise se modifica.+Se setează ​cursorul astfel ​încât ​pe prima linie a LCD-ului să se afișeze ​"Set Temp: ", iar pe a doua "​Current Temp: ". Acestea se fac la început ​pentru ​că ele sunt afișate mereu pe ecran și doar valorile care urmează ​a fi scrise se modifică.
  
 <code c> <code c>
Line 151: Line 143:
 int ventilator_speed = 0; int ventilator_speed = 0;
 if (temperature_difference > 0 && light_value > 100) { if (temperature_difference > 0 && light_value > 100) {
-  ventilator_speed = MIN_SPEED_THRESHOLD + pow(temperature_difference,​ 1.5) * (255 - MIN_SPEED_THRESHOLD) / pow(50, 1.5); +  ventilator_speed = MIN_SPEED_THRESHOLD + pow(temperature_difference,​ 1.5) * (MAX_SPEED_THRESHOLD ​- MIN_SPEED_THRESHOLD) / pow(50, 1.5); 
-  ventilator_speed = constrain(ventilator_speed,​ MIN_SPEED_THRESHOLD, ​255);+  ventilator_speed = constrain(ventilator_speed,​ MIN_SPEED_THRESHOLD, ​MAX_SPEED_THRESHOLD);
 } }
  
Line 159: Line 151:
  </​code>​  </​code>​
  
-Folosind senzorul de temperatura si functiile ​bibliotecii dht.h se inregistreaza ​temperatura ​curenta ​din incapereIntrucat ​ventilatorul are o tiratie diferita in functie ​de diferenta ​de temperatura intre cea curenta si cea setata, se calculeaza aceasta diferentaIn cazul in care diferenta ​este > 0, iar valoarea fotodiodei este mai mare de 100 (aceasta ​valoare de comparatie ​a fost aleasa ​ca prag pentru a se stabili ​daca este zi sau noapte ​in functie ​de lumina ​inregistrata) se calculeaza turatiile ​cu care va functiona ​ventilatorul. +Folosind senzorul de temperatură și funcțiile ​bibliotecii dht.hse înregistrează ​temperatura ​curentă ​din încăpereÎntrucât ​ventilatorul are o turație diferită în funcție ​de diferența ​de temperatură între ​cea curentă și cea setată, se calculează această diferențăÎn cazul în care diferența ​este > 0, iar valoarea fotodiodei este mai mare de 100 (această ​valoare de comparație ​a fost aleasă ​ca prag pentru a se stabili ​dacă este zi sau noapte ​în funcție ​de lumina ​înregistrată)se calculează turațiile ​cu care va funcționa ​ventilatorul. 
-Explicatii ​pentru calcularea vitezei ventilatorului ​intrucat:+ 
 +Explicații ​pentru calcularea vitezei ventilatorului:​
   * MIN_SPEED_THRESHOLD - Reprezintă valoarea minimă a vitezei ventilatorului. Indică viteza minimă la care ventilatorul ar trebui să funcționeze.   * MIN_SPEED_THRESHOLD - Reprezintă valoarea minimă a vitezei ventilatorului. Indică viteza minimă la care ventilatorul ar trebui să funcționeze.
   * pow(temperature_difference,​ 1.5) - Această parte a formulei calculează o putere a diferenței de temperatură (înălțimea). Ridicând diferența de temperatură la puterea 1.5, asigurăm o relație neliniară între diferența de temperatură și viteza ventilatorului. Acest lucru înseamnă că ventilatorul va reacționa mai rapid la variațiile mari de temperatură și mai lent la variații mici.   * pow(temperature_difference,​ 1.5) - Această parte a formulei calculează o putere a diferenței de temperatură (înălțimea). Ridicând diferența de temperatură la puterea 1.5, asigurăm o relație neliniară între diferența de temperatură și viteza ventilatorului. Acest lucru înseamnă că ventilatorul va reacționa mai rapid la variațiile mari de temperatură și mai lent la variații mici.
-  * (255 - MIN_SPEED_THRESHOLD) - Aceasta reprezintă intervalul de viteză maximă pe care îl poate avea ventilatorul,​ minus viteza minimă. Practic, este diferența dintre viteza maximă și viteza minimă a ventilatorului.+  * (1000 - MIN_SPEED_THRESHOLD) - Aceasta reprezintă intervalul de viteză maximă pe care îl poate avea ventilatorul,​ minus viteza minimă. Practic, este diferența dintre viteza maximă și viteza minimă a ventilatorului.
   * pow(50, 1.5) - Această parte a formulei reprezintă un factor de scalare. 50 este diferența de temperatură la care vrem ca formula să ofere o viteză maximă a ventilatorului.   * pow(50, 1.5) - Această parte a formulei reprezintă un factor de scalare. 50 este diferența de temperatură la care vrem ca formula să ofere o viteză maximă a ventilatorului.
-In cocluzie, ezultatul acestei expresii este viteza pe care o vom atribui ventilatorului în funcție de diferența de temperatură. Cu cât diferența de temperatură este mai mare, cu atât viteza ventilatorului va fi mai mare. De asemenea, utilizarea funcției pow pentru ridicarea la putere a diferenței de temperatură permite o reglare neliniară a vitezei ventilatorului,​ astfel încât să fie mai reactiv la schimbările de temperatură. 
  
-Apoi, folosind ​functia ​constrain(),​ ne asiguram ​că viteza ventilatorului (ventilator_speed) rămâne între o valoare minimă (MIN_SPEED_THRESHOLD) și o valoare maximă (255). Aceasta este importantă pentru a evita situațiile extreme, cum ar fi o viteză prea mică care ar opri ventilatorul sau o viteză prea mare care ar fi inutilă sau ar crea zgomot excesiv.+În concluzie, rezultatul acestei expresii este viteza pe care o vom atribui ventilatorului în funcție de diferența de temperatură. Cu cât diferența de temperatură este mai mare, cu atât viteza ventilatorului va fi mai mare. De asemenea, utilizarea funcției pow pentru ridicarea la putere a diferenței de temperatură permite o reglare neliniară a vitezei ventilatorului,​ astfel încât să fie mai reactiv la schimbările de temperatură. 
 + 
 +Apoi, folosind ​funcția ​constrain(),​ ne asigurăm ​că viteza ventilatorului (ventilator_speed) rămâne între o valoare minimă (MIN_SPEED_THRESHOLD) și o valoare maximă (1000). Aceasta este importantă pentru a evita situațiile extreme, cum ar fi o viteză prea micăcare ar opri ventilatorulsau o viteză prea marecare ar fi inutilă sau ar crea zgomot excesiv.
  
 <code c> <code c>
Line 199: Line 193:
  
 În final, după ce afișajul LCD a fost actualizat sau nu, programul așteaptă un anumit timp (DELAY) înainte de a itera din nou prin bucla principală (loop()). Aceasta asigură o pauză între actualizările afișajului pentru a nu supraîncărca sistemul cu actualizări inutile. În final, după ce afișajul LCD a fost actualizat sau nu, programul așteaptă un anumit timp (DELAY) înainte de a itera din nou prin bucla principală (loop()). Aceasta asigură o pauză între actualizările afișajului pentru a nu supraîncărca sistemul cu actualizări inutile.
- 
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +<html<iframe width="​930"​ height="​523"​ src="​https://​www.youtube.com/​embed/​I8yQ7JCwFF0"​ title="​Sistem de climatizare"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ referrerpolicy="​strict-origin-when-cross-origin"​ allowfullscreen></​iframe> ​</html>
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note> +
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Acest proiect a fost o ocazie foarte buna de a aplica cunoștințele acumulate la PM și ED. In plus am utilizat Fusion pentru a crea schema electrică aplicand inca o data cunostintele de la TSC. A fost o provocare inginerească ce mi-a oferit o înțelegere mai profundă a interacțiunii dintre hardware și software. Am experimentat cu ADC și PWM, am lucrat cu senzori, am afișat date pe LCD folosind I2C și, cel mai important, am înțeles cu adevărat cum se utilizează un Arduino. Proiectul a ieșit exact cum mi-am dorit, iar in urma sa chiar mi-am descoperit o noua pasiune
  
 ===== Download ===== ===== Download =====
  
-<​note ​warning+<​note>​ 
-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 şcopiere automată pe uC crează întotdeauna o impresie bună ;-). +Arhiva ​cu implementarea șschema electrică se poate descărca de {{:pm:prj2024:sseverin:sistemdeclimatizare.zip|aici}}.
- +
-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 ===== +
- +
-<note tip> +
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.+
 </​note>​ </​note>​
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
-Resurse ​software:+Resurse ​hardware:
   * [[https://​www.snapeda.com/​parts/​ARDUINO%20UNO%20R3%20DIL/​Arduino/​view-part/?​welcome=home|Simbol si foorprint placuta Arduino]]   * [[https://​www.snapeda.com/​parts/​ARDUINO%20UNO%20R3%20DIL/​Arduino/​view-part/?​welcome=home|Simbol si foorprint placuta Arduino]]
   * [[https://​www.snapeda.com/​parts/​DHT11/​UNIVERSAL-SOLDER%20Electronics%20Ltd/​view-part/?​company=UPB+Bucharest&​ref=search&​t=DHT11|Simbol si foorprint senzor de temperatura]]   * [[https://​www.snapeda.com/​parts/​DHT11/​UNIVERSAL-SOLDER%20Electronics%20Ltd/​view-part/?​company=UPB+Bucharest&​ref=search&​t=DHT11|Simbol si foorprint senzor de temperatura]]
 +  * [[https://​projecthub.arduino.cc/​arduino_uno_guy/​i2c-liquid-crystal-displays-5eb615|LCD + I2C]]
 +  * [[https://​www.tinkercad.com|Simulari online pe Tinkercad]]
  
-<​note>​ +Resurse software: 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  [[https://​youtu.be/Pw1kSS_FIKk?si=g1XOPAoSJoEA2BTa|Cum sa controlezi turatiile ventilatorului]] 
-</note> +  * [[https://youtu.be/​dJJAQxyryoQ?​si=kQP7hxP2FgdCKuVW|Cum sa folosesti senzorul de temperatura DHT11]]
- +
-<​html><​a class="​media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</a></html>+
  
pm/prj2024/sseverin/vladimir.bucur1504.1716729149.txt.gz · Last modified: 2024/05/26 16:12 by vladimir.bucur1504
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