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 13:45]
vladimir.bucur1504
pm:prj2024:sseverin:vladimir.bucur1504 [2024/05/28 22:00] (current)
vladimir.bucur1504
Line 1: Line 1:
 ====== Sistem de climatizare ====== ====== Sistem de climatizare ======
 ===== Introducere ===== ===== Introducere =====
-Sistemul de climatizare implementat este un sistem care menține temperatura sub o anumită valoare. Acesta este asemănător unui termostat, care, în funcție de temperatura înregistrată,​ știe când să pornească ​racirea ​pentru a aduce temperatura la valoarea setată. ​+Sistemul de climatizare implementat este un sistem care menține temperatura sub o anumită valoare. Acesta este asemănător unui termostat, care, în funcție de temperatura înregistrată,​ știe când să pornească ​răcirea ​pentru a aduce temperatura la valoarea setată.
  
-Ideea acestui proiect a pornit de la faptul că fiecare dintre noi avem în casele noastre câte un termostat pentru centrală, util în iarnă pentru a ști când să pornim centrala, dar foarte puțini dintre noi au un sistem de climatizare complet și pentru vară. În general, noi doar dăm drumul la aerul condiționat să meargă când ne este cald și când nu ne mai este il oprim. Însă toate acestea se fac manual. Astfel, am considerat că este util un astfel de sistem automat pentru ​racirea ​încăperii. De asemenea, acest sistem poate fi implementat nu doar pentru încăperile noastre, ci și pentru locuințele animalelor noastre de companie și menținerea temperaturii acestora.+Ideea acestui proiect a pornit de la faptul că fiecare dintre noi avem în casele noastre câte un termostat pentru centrală, util în iarnă pentru a ști când să pornim centrala, dar foarte puțini dintre noi au un sistem de climatizare complet și pentru vară. În general, noi doar dăm drumul la aerul condiționat să meargă când ne este cald și când nu ne mai este il oprim. Însă toate acestea se fac manual. Astfel, am considerat că este util un astfel de sistem automat pentru ​răcirea ​încăperii. De asemenea, acest sistem poate fi implementat nu doar pentru încăperile noastre, ci și pentru locuințele animalelor noastre de companie și menținerea temperaturii acestora.
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 13: Line 13:
 ===== Hardware Design ===== ===== Hardware Design =====
 === Lista pieselor utilizate === === Lista pieselor utilizate ===
-  * platuca ​Arduino UNO ATmega328p+  * plăcuța ​Arduino UNO ATmega328p
   * breadboard   * breadboard
   * LCD cu modul I2C   * LCD cu modul I2C
-  * senzor de temperatura si umiditate DHT11+  * senzor de temperatură și umiditate DHT11
   * ventilator 12V   * ventilator 12V
-  * potentiometru+  * potențiometru
   * MOSFET   * MOSFET
-  * fotodioda +  * fotodiodă
-  * rezistente de 1KOhm si 10KOhm +
-  * fire dupont tata-tata si mama-tata+
  
-=== Schema ​electrica ​(realizata in Autodesk Fusion) ===+=== Schema ​electrică ​(realizată în Autodesk Fusion) ===
 {{ :​pm:​prj2024:​sseverin:​sistem_climatizare_schematic.png?​750 |}} {{ :​pm:​prj2024:​sseverin:​sistem_climatizare_schematic.png?​750 |}}
  
 === Conexiune intre piese === === Conexiune intre piese ===
  
- **LCD + Modul I2C**: acestea au venit deja lipite ​si astfel am folosit doar pinii modulului pentru a-i conecta la placuta ​Arduino ​in pinii analogici A4 si A5 si de asemenea VCC ul si GND ul pe breadboard ​in locul special pentru aceste ​coneziuni. Acesta are rolul de a afisa temperatura ​curenta si cea setata ​de utilizator.+ **LCD + Modul I2C**: acestea au venit deja lipite ​și astfel am folosit doar pinii modulului pentru a-i conecta la plăcuța ​Arduino ​în pinii analogici A4 și A5 și de asemenea VCC-ul și GND-ul pe breadboard ​în locul special pentru aceste ​conexiuni. Acesta are rolul de a afișa ​temperatura ​curentă și cea setată ​de utilizator.
  
- ​**Potentiometrul**:​ este legat la VCC si GND si la pinul A1 de pe placuta. Are rolul de a seta temperatura de prag dorita.+ ​**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 foloseste. 2 dintre ei sunt pentru alimentare ​si masa iar al 3 lea pentru conectarea la pinul digital 7 de pe placutas-a folosit de asemenea o rezistenta ​de 10KOhm. Are rolul de a masura ​temperatura din incapere.+ **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 conectata ​la alimentare ​si la masa si de asemenea pe placuta arduino ​pe pinul analogic A1. Rolul ei este de a detecta ​daca afara este intuneric ​sau lumina ​pentru a se hotari daca este zi sau noapte ​si sti daca aerul conditionat ​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 ști dacă aerul condiționat ​va merge sau nu.
    
- ​**Ventilator**:​ ventilatorul folosit este unul cu 3 pini (unul si pentru senzorul de viteza). Pentru conectarea ventilatorului ​si posibilitatea de a controla ​turatiile ​lui s-a folosit un MOSFET. Ventilatorul este conectat cu ajutorul ​sau la intreg ​circuitul ​si astfel ​si la placuta ​Arduino prin pinul digital 10. Desi ventilatorul are un senzor special ​ppentru ​controlul ​turatiilor ​(firul galben), eu nu l-am folosit ​preferand sa folosesc ​proprietatile ​MOSFET ului pentru a se putea folosi orice fel de ventilator nu doar unul mai scump. Are rolul de a raci incaperea pana temperatura ​actuala sa ajunga ​mai mica sau egala cu cea setata. + ​**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 54: Line 43:
 === Motivația alegerii bibliotecilor folosite === === Motivația alegerii bibliotecilor folosite ===
 Bibliotecile folosite: Bibliotecile folosite:
-  * Wire.h - este folosită pentru comunicația I2C. Este necesară pentru funcționarea corectă a ecranelor LCD care utilizeaza ​interfața I2C, astfel gestionează detaliile de nivel scazut ​ale comunicării I2C, cum ar fi inițializarea și transferul de date intre dispozitive. +  * Wire.h - este folosită pentru comunicația I2C. Este necesară pentru funcționarea corectă a ecranelor LCD care utilizează ​interfața I2C, astfel gestionează detaliile de nivel scăzut ​ale comunicării I2C, cum ar fi inițializarea și transferul de date între ​dispozitive. 
-  * LiquidCrystal_I2C.h - o bibliotecă ​specializata ​pentru controlul ecranelor LCD care folosesc interfața I2C. Biblioteca ​simplifica ​utilizarea LCD-urilor, oferind funcții pentru inițializare,​ scriere de text, controlul ​iluminarii ​de fundal și poziționarea cursorului. +  * LiquidCrystal_I2C.h - o bibliotecă ​specializată ​pentru controlul ecranelor LCD care folosesc interfața I2C. Biblioteca ​simplifică ​utilizarea LCD-urilor, oferind funcții pentru inițializare,​ scriere de text, controlul ​iluminării ​de fundal și poziționarea cursorului. 
-  * dht.h - Aceasta este biblioteca pentru senzorul DHT (Digital Humidity and Temperature),​ care este folosit pentru a citi temperatura și umiditatea din mediul ​înconjurator. Biblioteca conține funcții specializate pentru inițializarea senzorului și pentru citirea datelor de temperatură și umiditate.+  * dht.h - Aceasta este biblioteca pentru senzorul DHT (Digital Humidity and Temperature),​ care este folosit pentru a citi temperatura și umiditatea din mediul ​înconjurător. Biblioteca conține funcții specializate pentru inițializarea senzorului și pentru citirea datelor de temperatură și umiditate.
  
 === Justificarea utilizării funcționalităților din laborator === === Justificarea utilizării funcționalităților din laborator ===
-<note tip> +** I2C (Inter-Integrated Circuit)**
-** I2C **+
  
-I2C a fost utilizat ​în proiectul meu pentru a simplifica conexiunea între Arduino și LCD, reducând numărul de fire necesare și facilitând adăugarea altor dispozitive I2C în viitor. Acest protocol asigură o comunicare eficientă și fiabilă, oferind un control precis asupra afișării informațiilor pe LCD și permițând o gestionare flexibilă a componentelor conectate.+I2C a fost utilizat pentru a simplifica conexiunea între Arduino și LCD, reducând numărul de fire necesare și facilitând adăugarea altor dispozitive I2C în viitor. Acest protocol asigură o comunicare eficientă și fiabilă, oferind un control precis asupra afișării informațiilor pe LCD și permițând o gestionare flexibilă a componentelor conectate.
  
-** ADC **+** ADC (Analog-to-Digital Converter)**
  
-ADC (Analog-to-Digital Converter) ​este un convertor care transformă un semnal analogic continuu într-un semnal digital discret. În cazul Arduino, ADC-ul integrat poate citi tensiuni de la 0V la 5V și le convertește într-o valoare digitală între 0 și 1023. Acesta a fost folosit pentru 2 componente:+ADC este un convertor care transformă un semnal analogic continuu într-un semnal digital discret. În cazul Arduino, ADC-ul integrat poate citi tensiuni de la 0V la 5V și le convertește într-o valoare digitală între 0 și 1023. Acesta a fost folosit pentru 2 componente:
   * fotorezistor - Citirea valorii analogice de la fotodiodă se face folosind funcția analogRead(PHOTODIODE_PIN),​ care convertește nivelul de lumină într-o valoare digitală între 0 și 1023. Această valoare este folosită pentru a determina nivelul de lumină ambientală. Valoarea de lumină este utilizată pentru a ajusta viteza ventilatorului,​ permițând un control adaptativ în funcție de condițiile de iluminare.   * fotorezistor - Citirea valorii analogice de la fotodiodă se face folosind funcția analogRead(PHOTODIODE_PIN),​ care convertește nivelul de lumină într-o valoare digitală între 0 și 1023. Această valoare este folosită pentru a determina nivelul de lumină ambientală. Valoarea de lumină este utilizată pentru a ajusta viteza ventilatorului,​ permițând un control adaptativ în funcție de condițiile de iluminare.
-  * potentiometru ​- Citirea valorii analogice de la potentiometru ​se face folosind funcția analogRead(POTENTIOMETER_PIN),​ care convertește poziția potențiometrului într-o valoare digitală între 0 și 1023. Această valoare este mapată la un interval de temperaturi folosind funcția map(). Valoarea obținută de la potentiometru ​este utilizată pentru a seta temperatura limită, care este comparată cu temperatura curentă pentru a controla viteza ventilatorului.+  * potențiometru ​- Citirea valorii analogice de la potențiometru ​se face folosind funcția analogRead(POTENTIOMETER_PIN),​ care convertește poziția potențiometrului într-o valoare digitală între 0 și 1023. Această valoare este mapată la un interval de temperaturi folosind funcția map(). Valoarea obținută de la potențiometru ​este utilizată pentru a seta temperatura limită, care este comparată cu temperatura curentă pentru a controla viteza ventilatorului.
  
-** PVM **+** PVM (Pulse Width Modulation) ​**
  
-PWM (Pulse Width Modulation) ​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. ​In 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 viteza ​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 - Diferența de Temperatură: ​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.
-</​note>​ +
-<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 =====+=== Explicația scheletului proiectului ​=== 
 +În această secțiune o să explic scheletul, cum am realizat calibrarea elementelor de senzorică, elementele de noutate ale proiectului și alte explicații suplimentare.
  
-<note tip+  * Definierea pinilor pentru diferite componente sau senzori 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +<code c
-</note>+#define TEMPERATURE_SENSOR_PIN 7 
 +#define GATE 10 
 +#define POTENTIOMETER_PIN A1 
 +#define PHOTODIODE_PIN A2 
 +#define DELAY 500 // Delay in milliseconds 
 +</code>
  
-===== Concluzii =====+  * Declararea variabilelor globale pe care urmează să le folosesc în întreg codul 
 +<code c> 
 +// Initialize the LCD with I2C address 0x27 and dimensions 16x2 
 +LiquidCrystal_I2C lcd(0x27, 16, 2); 
 +dht DHT;
  
-===== Download =====+// Declare variables to store sensor values and states 
 +int potentiometer_value;​ 
 +int limit_temperature ​-1; 
 +int current_temperature ​-1; 
 +int previous_limit_temperature ​-1; 
 +int previous_current_temperature ​-1; 
 +int light_value ​0;
  
-<note warning> +// Define constants for the minimum and maximum speed threshold of the fan 
-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ă ;-).+const int MIN_SPEED_THRESHOLD = 70; 
 +const int MAX_SPEED_THRESHOLD = 1000; 
 +</​code>​
  
-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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +  ​Funcția setup() 
-</​note>​+<​code ​c
 +void setup() 
 +  // Set the GATE pin as an output and initialize it to LOW 
 +  pinMode(GATEOUTPUT); 
 +  ​digitalWrite(GATE,​ LOW);
  
-===== Jurnal =====+  // Initialize the LCD and clear any previous display 
 +  lcd.init();​ 
 +  lcd.backlight();​ 
 +  lcd.clear();​ 
 +
 +</​code>​ 
 +În această secțiune se realizează set-up-ul și starea inițială pentru ventilator și LCD. Ne asigurăm că ventilatorul,​ la î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ă, ulterior, se afișează doar ce noi dorim.
  
-<note tip+  * Funcția loop() 
-Puteți avea și o secțiune de jurnal ​în care să poată ​urmări asistentul ​de proiect ​progresul proiectului.+<code c
 +// Set cursor to the beginning of the first line and display "Set Temp: " 
 +lcd.setCursor(0,​ 0); 
 +lcd.print("​Set Temp: "); 
 + 
 +// Set cursor to the beginning of the second line and display "​Current Temp: " 
 +lcd.setCursor(0,​ 1); 
 +lcd.print("​Current Temp: "); 
 +</​code>​ 
 +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> 
 +// Read the light value from the photodiode 
 +light_value = analogRead(PHOTODIODE_PIN);​ 
 + 
 +// Read the potentiometer value to determine the limit temperature 
 +potentiometer_value = analogRead(POTENTIOMETER_PIN);​ 
 +limit_temperature = map(potentiometer_value,​ 1023, 0, 50, 0); 
 +</​code>​ 
 +Folosind ADC pentru a transforma semnalul analog in unul digital, se citesc si se memoreaza valorile date de fotorezisotr si potentiometru. Funcția map() este folosită pentru a mapea o valoare dintr-un interval în altul. În acest caz, valoarea citită de la potențiometru care este în intervalul 0-1023 (datorită rezoluției ADC a plăcii Arduino) este mapeată într-un interval de temperaturi între 0 ș50 grade Celsius. Astfel, potențiometrul poate fi rotit pentru a selecta temperatura dorită, iar această valoare este utilizată ca temperatură limită pentru activarea ventilatorului în funcție de diferența de temperatură măsurată. 
 + 
 +<code c> 
 +// Read the temperature from the DHT11 sensor 
 +int input_temp = DHT.read11(TEMPERATURE_SENSOR_PIN);​ 
 +current_temperature = DHT.temperature;​ 
 + 
 +// Calculate the temperature difference between the current and limit temperatures 
 +int temperature_difference = current_temperature - limit_temperature;​ 
 + 
 +// Calculate the fan speed using a non-linear mapping based on temperature difference 
 +int ventilator_speed = 0; 
 +if (temperature_difference > 0 && light_value > 100) { 
 +  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,​ MAX_SPEED_THRESHOLD);​ 
 +
 + 
 +// Set the fan speed using PWM on the GATE pin 
 +analogWrite(GATE,​ ventilator_speed);​ 
 + </​code>​ 
 + 
 +Folosind senzorul de temperatură ​și funcțiile bibliotecii dht.h, se înregistrează temperatura curentă din încăpere. Întrucât ventilatorul are 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. 
 + 
 +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. 
 +  * 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. 
 +  * (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. 
 + 
 +Î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 ventilatorul,​ sau o viteză prea mare, care ar fi inutilă sau ar crea zgomot excesiv. 
 + 
 +<code c> 
 +// Update the LCD if the limit temperature has changed 
 +if (limit_temperature != previous_limit_temperature) { 
 +  lcd.setCursor(11,​ 0); // Set cursor after "Set Temp: " 
 +  lcd.print(" ​   "); // Clear old value 
 +  lcd.setCursor(11,​ 0); // Reset cursor position 
 +  lcd.print(limit_temperature);​ // Display new limit temperature 
 +  previous_limit_temperature = limit_temperature;​ // Update previous limit temperature 
 +
 + 
 +// Update the LCD if the current temperature has changed 
 +if (current_temperature != previous_current_temperature) { 
 +  lcd.setCursor(14,​ 1); // Set cursor after "​Current Temp: " 
 +  lcd.print(" ​   "); // Clear old value 
 +  lcd.setCursor(14,​ 1); // Reset cursor position 
 +  lcd.print(current_temperature);​ // Display new current temperature 
 +  previous_current_temperature = current_temperature;​ // Update previous current temperature 
 +
 + 
 +// Wait for the specified delay before the next loop iteration 
 +delay(DELAY);​ 
 +</​code>​ 
 + 
 +Acest cod se ocupă de actualizarea afișajului LCD în funcție de schimbările în temperatură. În primul bloc de cod, se verifică dacă temperatura limită setată a fost schimbată față de valoarea precedentă. Dacă da, se șterge vechea valoare de pe afișaj și se afișează noua valoare a temperaturii limită. 
 + 
 +În al doilea bloc de cod, se verifică dacă temperatura curentă a fost schimbată față de valoarea precedentă. Dacă da, se șterge vechea valoare de pe afișaj și se afișează noua valoare a temperaturii curente. 
 + 
 +În ambele cazuri, se actualizează variabilele previous_limit_temperature și previous_current_temperature pentru a reflecta valorile curente ale temperaturilor,​ astfel încât ​să se poată ​verifica schimbările ulterioare. 
 + 
 +Î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. 
 + 
 +===== Rezultate Obţinute ===== 
 + 
 +<​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>​ 
 +===== 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 ===== 
 + 
 +<​note>​ 
 +Arhiva cu implementarea și schema electrică se poate descărca de {{:​pm:​prj2024:​sseverin:​sistemdeclimatizare.zip|aici}}.
 </​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.1716720336.txt.gz · Last modified: 2024/05/26 13:45 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