This shows you the differences between two versions of the page.
pm:prj2022:cristip:temperaturecontrol [2022/06/01 13:47] ioan.cioraneanu [Hardware Design] |
pm:prj2022:cristip:temperaturecontrol [2022/06/01 16:06] (current) ioan.cioraneanu [Download] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Temperature Control ====== | ====== Temperature Control ====== | ||
- | Ioan Cioraneanu, 332CB | + | Student: Ioan Cioraneanu |
+ | Grupa: 332CB | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 10: | Line 12: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
+ | |||
+ | Proiectul isi propune cotrolarea temperaturii intr-o incinta. Acesta se foloseste de un senzor pentru a masura temperatura, iar in cazul in care aceasta nu este in parametrii de confort va actiona incalzitorul sau ventilatorul pentru a redresa diferenta. | ||
+ | Aplicabilitate: pentru a printa 3D se folosesc diferite materiale. Unele dintre aceastea, precum abs sau nilon, au nevoie ca temperatura ambientala sa fie una ridica si constanta. Astfel proiectul meu poate fi scalat, in functie de dimensiunile camerei necesare pentru a mentine aceasta temperatura ridicata. | ||
=== Schema bloc === | === Schema bloc === | ||
Line 22: | Line 27: | ||
* breadboard | * breadboard | ||
* ventilator | * ventilator | ||
- | * heater | + | * heater + bloc aluminiu + radiator |
* placa 4 relee 5V | * placa 4 relee 5V | ||
* senzor temperatura + umiditate DHT22 | * senzor temperatura + umiditate DHT22 | ||
Line 34: | Line 39: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Dupa ce este setata temperatura de referinta circuitul functioneaza idependent. | ||
- | <note tip> | + | ► **pre-setup** |
- | Descrierea codului aplicaţiei (firmware): | + | * bibliotecile |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | <code cpp> |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | #include <LiquidCrystal_I2C.h> |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | #include <DHT_U.h> |
- | * (etapa 3) surse şi funcţii implementate | + | </code> |
- | </note> | + | * se defineste senzorul de temperatura si se seteaza referinta(ref_temp) |
+ | <code cpp> | ||
+ | #define DHTPIN 12 | ||
+ | #define DHTTYPE DHT22 | ||
+ | #define ref_temp 28.0 | ||
+ | </code> | ||
+ | * se initializeaza senzorul si lcd-ul | ||
+ | <code cpp> | ||
+ | DHT dht(DHTPIN, DHTTYPE); | ||
+ | LiquidCrystal_I2C lcd(0x27, 20, 4); | ||
+ | </code> | ||
+ | * se definesc 2 variabile ce vor fi folosite pentru a temporiza heaterul | ||
+ | <code cpp> | ||
+ | unsigned long startTime; | ||
+ | unsigned long currentTime; | ||
+ | </code> | ||
+ | |||
+ | ► **setup** | ||
+ | * se inițializează senzorul si lcd-ul | ||
+ | <code cpp> | ||
+ | dht.begin(); | ||
+ | |||
+ | lcd.init(); // initialize the lcd | ||
+ | lcd.backlight(); | ||
+ | lcd.setCursor(2,0); | ||
+ | lcd.print("Proiect PM 2022"); | ||
+ | lcd.setCursor(0, 3); | ||
+ | lcd.print("Ioan Cioraneanu WOW"); | ||
+ | delay(5000); | ||
+ | </code> | ||
+ | * se seteaza pinii de output | ||
+ | <code cpp> | ||
+ | DDRD |= B00000000; | ||
+ | PORTD |= B00000100; // heater pin 2 | ||
+ | PORTD |= B00010000; // fan pin 4 | ||
+ | |||
+ | pinMode(2, OUTPUT); | ||
+ | pinMode(4, OUTPUT); | ||
+ | </code> | ||
+ | * se salveaza timpul de inceput ce va fi updatat de fiecare data cand heaterul porneste | ||
+ | <code cpp> | ||
+ | startTime = millis(); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ► **loop** | ||
+ | * se citesc temperatura si umiditatea | ||
+ | <code cpp> | ||
+ | float hum = dht.readHumidity(); | ||
+ | float temp = dht.readTemperature(); | ||
+ | if (isnan(hum) || isnan(temp)) { | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Read failed!"); | ||
+ | lcd.setCursor(0, 1); | ||
+ | lcd.print("Please reset"); | ||
+ | return; | ||
+ | } | ||
+ | </code> | ||
+ | * se afiseaza temperatura, umiditatea si temperatura de referinta | ||
+ | <code cpp> | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Tmp: Hum: REF_TMP:"); | ||
+ | lcd.setCursor(0,1); | ||
+ | lcd.print(temp); | ||
+ | lcd.setCursor(6,1); | ||
+ | lcd.print(hum); | ||
+ | lcd.setCursor(13, 1); | ||
+ | lcd.print(ref_temp); | ||
+ | </code> | ||
+ | * daca temperatura este mai mare se porneste ventilatorul | ||
+ | <code cpp> | ||
+ | if (temp > ref_temp) { | ||
+ | PORTD &= B11101111; | ||
+ | } | ||
+ | else { | ||
+ | PORTD |= B00010000; | ||
+ | } | ||
+ | </code> | ||
+ | * daca temperatura este mai mica si au trecut 10 secunde de la ultima alimentare se porneste incalzitorul | ||
+ | <code cpp> | ||
+ | currentTime = millis(); | ||
+ | |||
+ | if (temp < ref_temp && currentTime - startTime > 10000) { | ||
+ | PORTD &= B11111011; // start the heater | ||
+ | delay(500); // keep the heater on for 0.5 seconds | ||
+ | startTime = millis(); // measure the time to pause the heater | ||
+ | PORTD |= B00000100; // stop the heater | ||
+ | |||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Bibliotecile ==== | ||
+ | * //DHT.h// ⇒ folosirea senzorului DHT22 pentru înregistrarea temperaturii și umidității | ||
+ | * //LiquidCrystal_I2C.h// ⇒ folosirea display-ului LCD cu modul I2C | ||
+ | |||
+ | ==== Mediu de Dezvoltare ==== | ||
+ | Mediul de dezvoltare folosit în realizarea proiectului: **Arduino IDE**. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Am realizat 2 incinte. In una din ele se afla arduino, releele de control si sursa si in cea de-a doua termometrul, ventilatorul si incalzitorul. |
+ | Pe incalzitor am prins si un bloc de aluminiu pe care am lipit un radiator pentru a disipa mai bine caldura in incinta. | ||
</note> | </note> | ||
- | ===== Concluzii ===== | ||
===== Download ===== | ===== Download ===== | ||
<note warning> | <note warning> | ||
- | 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**. | + | {{:pm:prj2022:cristip:temperature_control_cioraneanu_ioan.zip|}} |
</note> | </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> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |