Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE INGINERIE
ANUL IV
Studenti:
Daniel Tănasie
Răzvan Cojerean
Ciprian Ianăși
Costin-Alin Miron
TIMIȘOARA
2022
Sistem de control centrală termică 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 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.
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ă.
-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.