Sunteți pe pagina 1din 8

UNIVERSITATEA “IOAN SLAVICI” TIMIȘOARA

FACULTATEA DE INGINERIE

ANUL IV

PROIECT SISTEME I/O

Studenti:

Daniel Tănasie

Răzvan Cojerean

Ciprian Ianăși

Costin-Alin Miron

TIMIȘOARA

2022
Sistem de control centrală termică pe peleți

1. Principiu de functionare al unei central termice pe peleți

Centralele funcționează pe bază de peleți, care sunt obținuți prin presarea deșeului lemnos
rezultat în urma prelucrării. Peleții au o putere calorică mai mare decât cea a lemnului obișnuit, iar
costurile de achizitie, transport și stocare sunt și ele reduse față de cele ale lemnului. Fiind o soluție
de încălzire a locuinței ecologică, este eligibilă pentru programul de subvenții Casa Verde.

Printre avantajele centralei pe peleți se mai numără autonomia ridicată, de până la o


săptămână. Aceasta este posibilă datorită faptului că, pentru o funcționare optimă, centrala trebuie
alimentată cu peleți cel mai frecvent la două zile. Alte avantaje sunt: emisiile de fun reduse și faptul
ca cenușa rezultată în urma arderii peleților poate fi utilizată ca îngrășământ natural, datorită
conținutului de minerale ridicat. De asemenea, costul peleților este unul redus comparativ cu cel al
combustibililor fosili.

Printre dezavantajele centralelor termice pe peleți se numără spațiul tehnic mare de care
acestea au nevoie, costul ridicat al achiziției, fiind de două ori mai mare decât al unei centrale pe
lemne, și sensibilitatea ridicată a sistemului de alimentare cu peleți a centralei termice, care trebuie
verificat și curățat constant, pentru a evita înfundarea. De asemenea, un alt dezavantaj este
necesitatea unui coș de fum, care are nevoie de mentenanță și curățare constantă pentru a funcționa
optim.

2. Prezentam mai jos un model de central termica pe peleti.

1 = buncar de stocare peleti cu sertar de încărcare (16)

2 = șnec pentru transportul peleților din buncar la


focar
3 = motoreductor care gestioneaza functionarea
șnecului
4 = creuzetul, unde are loc arderea peletilor
5 = rezistenta electrica pentru aprinderea peleților
6 = ventilator centrifugal de evacuare a gazelor
arse
7 = ventilator pentru difuzarea aerului cald produs
8 = racord de evacuare fum pentru conectarea la
coșul de fum
9 = grila frontala pentru distributia aerului cald în
camera de instalare
10 = racord pentru priza de aer exterior necesar
arderii
11 = panou sinoptic pentru gestionarea și
vizualizarea tuturor fazelor de operare
12 = uși duble suprapuse, din sticlă ceramică
rezistenta și la șoc termic de 800°C.
13 = manta dubla de apa care inconjoara focarul
14 = bloc focar care se deschide în ușă pentru a
facilita accesul la dispozitivele din spatele ei
(pentru curățenie și întreținere ușoară)
15 = kit hidraulic integrat pentru a asigura
maximum de siguranță și pentru a facilita
instalarea
3. CONEXIUNI ELECTRICE

Cable tie – brățară cablu, boiler water temp. probe – sondă temp. apă cazan, bar water pressure
switch – presostat apă, door switch – întrerupător ușă, ambient temp. probe – sondă temp.
ambientală, flue temp. probe – sondă temp. fum, control panel – panou de comandă, igniter –
aprinzător, opened-closed – deschis-închis, chimney fan – ventilator coș, encoder – codificator, pelet
tank over temp. sensor – senzor temp. rezervor peleți peste 110°, presostat of smoke – presostat fum,
pelets loading motor – motor încărcare peleți, boiler water over temp. sensor – senzor temp. prea
mare apă în cazan, blow fan – ventilator, flowmeter – debitmetru, room thermostat connection –
conexiune termostat de ambient.

4. Exemplu de cod:

1. #include <LiquidCrystal.h>
2.
3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
4.
5. int presetInput, airControl, tempDiff1, tempDiff2, motorDrive,
motorPosition, positionError, wwMode, power, counter_d, counter_w,
main_display;
6. double preset_T, actual_T, exhaust_T, warmWater_T1, warmWater_T2,
forward_T, forward_h, forward_w, return_T;
7.
8. void setup() {
9. lcd.begin (20, 4);
10. airControl = 0;
11. motorDrive = 127;
12. counter_d = 512;
13. counter_w = 127;
14. pinMode[0, OUTPUT];
15. pinMode(1, OUTPUT);
//COMANDA TREAPTA POMPA APA CALDA.
16. pinMode(8, OUTPUT);
//COMANDA ALIMENTARII CU TENSIUNE CONTROLLER MOTOR CLAPETA.
17. pinMode(9, OUTPUT);
//COMANDA PORNIRE ARZATOR MOTORINA.
18. pinMode(13, OUTPUT);
//COMANDA RELEU POMPA RECIRCULARE.
19. pinMode(7, INPUT);
//INTRARE SELECTARE MOD APA CALDA.
20. pinMode(10, INPUT_PULLUP);
21. digitalWrite[0, LOW];
22. digitalWrite(1, LOW);
23. digitalWrite(8, LOW);
24. digitalWrite(9, LOW);
25. digitalWrite(13, HIGH);
26. }
27.
28. void loop() {
29.
30. //CITIRE DATE
31.
32. presetInput = analogRead(A0);
//POTENTIOMETRU PRESET LEMNE.
33. actual_T = analogRead(A1);
//SENZOR TEMPERATURA LEMNE.
34. actual_T = actual_T * 1.05 - 55;
35. actual_T = constrain(actual_T, 0, 1023);
//COMPENSAREA ABATERII.
36. exhaust_T = analogRead(A2);
//SENZOR TEMPERATURA GAZE EVACUARE.
37. exhaust_T = exhaust_T - 2;
38. exhaust_T = constrain(exhaust_T, 0, 1023);
39. forward_h = analogRead(A4);
//SENZOR TEMP TUR APA CALDA
40. forward_h = forward_h * 1.02 - 50;
41. forward_h = constrain(forward_h, 0, 1023);
42. forward_w = analogRead(A7);
//SENZOR TEMP TUR INCALZIRE
43. forward_w = forward_w * 1.01 - 48;
44. forward_w = constrain(forward_w, 0, 1023);
45. warmWater_T2 = analogRead(A3);
//SENZOR TEMPERATURA APA CALDA.
46. warmWater_T2 = warmWater_T2 * 1.03 - 50;
47. warmWater_T2 = constrain(warmWater_T2, 0, 1023);
//COMPENSAREA ABATERII.
48. return_T = analogRead(A5);
//SENZOR TEMPERATURA RETUR.
49. return_T = return_T * 1.045 - 50;
50. return_T = constrain(return_T, 0, 1023);
//COMPENSAREA ABATERII
51. motorPosition = analogRead(A6);
//SENZOR POZITIE CLAPETA AER.
52. wwMode = digitalRead(7);
53.
54. //PRELUCRARE DATE
55.
56. presetInput = map(presetInput, 0, 1023, 450, 750);
//LIMITARE DOMENIU REGLAJ LA 45-75C
57. power = actual_T - return_T;
58.
59. if (wwMode == LOW) {
60. warmWater_T1 = ((forward_w + return_T) / 1.94 - 70);
61. preset_T = warmWater_T1 + 140;
//COMUTARE IN MOD APA CALDA.
62. forward_T = forward_w;}
//SENZOR TEMPERATURA TUR INCARCARE.
63. else{
64. preset_T = presetInput;
//CITIRE POTENTIOMETRU PRESET.
65. warmWater_T1 = warmWater_T2;
66. forward_T = forward_h;}
//SENZOR TEMPERATURA TUR INCALZIRE.
67.
68. tempDiff1 = preset_T - actual_T;
69. tempDiff2 = forward_T - return_T;
70. airControl = tempDiff1 * 4;
71. airControl = constrain(airControl, 0, 255);
//SEMNAL CANTITATE NECESARA DE AER.
72.
73. if((actual_T < 420) && (exhaust_T < 90)) {
74. airControl = min(32, airControl);}
75. if(power < 30 || (actual_T < 360 && exhaust_T < 90)) {
//OPRESTE AERUL DACA SE TERMINA JARUL SI
76. airControl = 0;}
77.
//DACA VATRA S-A RACIT ASTFEL SE REDUC
78.
//PIERDERILE DE CALDURA PE COS.
79. if ((power > 65 || actual_T > 430) && (forward_T <
actual_T)) {
80. counter_d--;}
81. else if (((power <= 60) || (forward_T < 400) || (actual_T <
forward_T)) && (exhaust_T < 90)) {
82. counter_d++;}
83. counter_d = constrain(counter_d, 0, 1023);
//TEMPORIZAREA COMUTARII ARZATOR
84.
85. if (counter_d == 0) {
86. digitalWrite(9, LOW);}
87. else if(counter_d == 1023) {
88. digitalWrite(9, HIGH);}
//PORNESTE ARZATORUL PE MOTORINA.
89.
90. positionError = (airControl * 4) - motorPosition;
91. if((positionError < 32) && (positionError > -32)) {
92. digitalWrite(8, LOW);}
//NEGLIJEAZA JOCURILE MECANICE SI
93. else{
94. digitalWrite(8, HIGH);}
//ALIMENTEAZA MOTORUL CLAPETEI DOAR
95.
//DACA E NEVOIE DE SUFICIENTA CORECTIE.
96. motorDrive = 128 + positionError;
97. motorDrive = constrain(motorDrive, 0, 255);
98. analogWrite(6, motorDrive);
//CONTROL PROPORTIONAL MOTOR CLAPETA.
99. //analogWrite(10, 255 - motorDrive);
100.
101. if(wwMode == HIGH) {
102. if((actual_T > 390) || (forward_T > 390)) {
103. digitalWrite(13, HIGH);}
//OPRESTE POMPA DE RECIRCULARE
104. else if((actual_T < 360) && (forward_T < 360)) {
//DACA TEMPERATURA APEI SCADE SUB PRAG
105. digitalWrite(13, LOW);}}
106. else {
107. digitalWrite(13, LOW);}
//SAU DACA PORNESTE POMPA DE INCARCARE.
108.
109. int wwCase = map(tempDiff2, 0, 180, 0, 9);
110. switch (wwCase) {
111. case 0: counter_w--;
112. break;
113. case 1: counter_w--;
114. break;
115. case 2:
116. if(counter_w > 127) {counter_w--;
117. if(counter_w < 127) {counter_w =
127;}}
118. else if(counter_w < 127) {counter_w++;
119. if (counter_w > 127)
{counter_w = 127;} }
120. break;
121. default: counter_w++;
122. break;
//CITIRE ABSORBTIE CALDURA IN BOILER.
123. }
124.
125. counter_w = constrain(counter_w, 0, 255);
126.
127. if(counter_w > 254) {
128. digitalWrite(0, LOW);
129. digitalWrite(1, LOW);}
130. if (counter_w <= 127 && counter_w > 0) {
131. digitalWrite(0, LOW);
132. digitalWrite(1, HIGH);}
133. if (counter_w == 0) {
134. digitalWrite(0, HIGH);
135. digitalWrite(1, HIGH);}
//SE COMUTA TREPTELE POMPA INCARCARE
136.
137.
138. //AFISARE DATE
139.
140. main_display = digitalRead(10);
141.
142. if(main_display) {
143. lcd.setCursor(0, 0);
144. lcd.print("ARDUINO HEAT CONTROL");
145. lcd.setCursor(0, 1);
146. lcd.print("PR:");
147. if(preset_T <= 999) {lcd.print(" "); }
148. if(preset_T <= 99.9) {lcd.print(" "); }
149. lcd.print(preset_T / 10, 1);
150. lcd.print("C ");
151. lcd.setCursor(10, 1);
152. lcd.print("EG:");
153. if(exhaust_T <= 199) {lcd.print(" "); }
154. if(exhaust_T <= 19.9) {lcd.print(" "); }
155. lcd.print(exhaust_T / 2, 1);
156. lcd.print("C");
157. lcd.setCursor(0, 2);
158. lcd.print("IS:");
159. if(actual_T <= 999) {lcd.print(" "); }
160. if(actual_T <= 99.9) {lcd.print(" "); }
161. lcd.print(actual_T / 10, 1);
162. lcd.print("C ");
163. lcd.setCursor(10, 2);
164. lcd.print("FW:");
165. if(forward_T <= 999) {lcd.print(" "); }
166. if(forward_T <= 99.9) {lcd.print(" "); }
167. lcd.print(forward_T / 10, 1);
168. lcd.print("C");
169. lcd.setCursor(0, 3);
170. lcd.print("WW:");
171. if(warmWater_T1 <= 999) {lcd.print(" "); }
172. if(warmWater_T1 <= 99.9) {lcd.print(" "); }
173. lcd.print(warmWater_T1 / 10, 1);
174. lcd.print("C ");
175. lcd.setCursor(10, 3);
176. lcd.print("RE:");
177. if(return_T <= 999) {lcd.print(" "); }
178. if(return_T <= 99.9) {lcd.print(" "); }
179. lcd.print(return_T / 10, 1);
180. lcd.print("C");
181. }
182. else {
183. lcd.setCursor(0, 0);
184. lcd.print("INTERNAL VARIABLES: ");
185. lcd.setCursor(0,1);
186. lcd.print("COUNTER_D ");
187. if(counter_d <= 999) {lcd.print(" "); }
188. if(counter_d <= 99.9) {lcd.print(" "); }
189. if(counter_d <= 9.9) {lcd.print(" "); }
190. lcd.print(counter_d);
191. lcd.print(" ");
192. lcd.setCursor(0, 2);
193. lcd.print("COUNTER_W ");
194. if(counter_w <= 999) {lcd.print(" "); }
195. if(counter_w <= 99.9) {lcd.print(" "); }
196. if(counter_w <= 9.9) {lcd.print(" "); }
197. lcd.print(counter_w);
198. lcd.print(" ");
199. lcd.setCursor(0, 3);
200. lcd.print("AIRCONTROL ");
201. if(airControl <= 999) {lcd.print(" "); }
202. if(airControl <= 99.9) {lcd.print(" "); }
203. if(airControl <= 9.9) {lcd.print(" "); }
204. lcd.print(airControl);
205. lcd.print(" ");
206. }
207.
208. delay(200);
209. }
Automatizarea comută între încălzire şi apă caldă funcţie de temperatura din boiler, aşa că se
pot monta câţiva senzori de temperatură în punctele vitale ale instalaţiei, pentru ca logica
controllerului să primească suficiente informaţii pentru o comandă corectă.

Funcţiile automatizării sunt următoarele:

-asigură o temperatură a cazanului pe lemne cât mai apropiată de cea reglată din potenţiometrul de
PRESET, prin controlul aerului de admisie;

-la răcirea sobei cu lemne, când nu se mai poate asigura suficientă căldură, se comandă pornirea
cazanului pe motorină şi se închide complet clapeta de aer pentru a preveni pierderile termice din
sobă prin curentul de aer de ventilaţie;

-în cazul în care se produce apă caldă menajeră folosind soba cu lemne, se opreşte pompa de
recirculare şi temperatura sobei este reglată automat la o valoare de 14C peste cea instantanee a apei
calde din boiler, pentru un transfer maxim de energie;

-în funcţie de diferenţa de temperatură de la intrarea şi ieşirea agentului termic în boiler se reglează
treptele pompei de încărcare pentru adaptarea debitului necesar;

-opreşte pompa de recirculare dacă temperatura agentului termic scade sub o valoare la care nu mai
are rost să funcţioneze, de exemplu primăvara şi toamna când încălzirea funcţionează cu întreruperi;

- pentru comanda clapetei de admisie aer la soba cu lemne se poate construi un servomotor cu un
cabestan, care ridică şi coboară clapeta. Poziţia cabestanului este citită cu un potenţiometru, astfel se
poate realiza o comandă proporţională a poziţiei.

În momentul în care comanda cazanului pe motorină cere apă caldă şi pompa de încărcare
porneşte, tensiunea de alimentare locală de 12V comandă un optocuplor care informează Arduino că
tocmai s-a intrat în regim de producere de apă caldă menajeră şi acesta ia deciziile de rigoare.

Senzorii de temperatură sunt conectaţi pe post de generator de curent variabil, în loc de


tensiune variabilă. Acest lucru oferă mai multe avantaje, se folosesc doar 2 fire între controller şi
senzor, se obţine imunitate foarte mare la zgomot şi prin alegerea corespunzătoare a rezistenţei de
sarcină din controller se adaptează domeniul de temperaturi necesar la rezoluţia ADC-ului din
Arduino. De ex. pt. domeniul de temperaturi 0-100C se aleg 200 ohmi la LM45 şi 1k la Arduino,
astfel avem variaţie de tensiune de 0-5V pe intrarea analogică.

Citirea temperaturii gazelor de evacuare se face cu un termocuplu tip K legat la un circuit


specializat AD595, care oferă 10mV/C, astfel la intrarea Arduino se pot citi direct temperaturi de
până la 1000C.

S-ar putea să vă placă și