90PHỤ LỤCPhụ lục 1: Nguyên nhân và các khắc phục 10 sự cố Phụ lục 2: Bảng số liệu kiểm tra độ chính xác của cảm biếnPhụ lục 3: Công thức tính sai số của phép đo trực tiếpPhụ lục 4: Code
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT NHIỆT NGHIÊN CỨU CHẾ TẠO BỘ THU THẬP VÀ XỬ LÝ DỮ LIỆU NHIỆT ĐỘ, ÁP SUẤT CHO HỆ THỐNG LẠNH CÔNG NGHIỆP GVHD: TS ĐOÀN MINH HÙNG SVTH : ĐÀO TRƯỜNG GIANG TRẦN QUANG HÀO ĐỒN TRUNG HIẾU NGƠ ĐÌNH SƠN LÊ PHƯỚC TÀI SKL009161 Tp Hồ Chí Minh, tháng 8/2022 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCM KHOA CƠ KHÍ ĐỘNG LỰC ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU CHẾ TẠO BỘ THU THẬP VÀ XỬ LÝ DỮ LIỆU NHIỆT ĐỘ, ÁP SUẤT CHO HỆ THỐNG LẠNH CÔNG NGHIỆP GVHD: ĐOÀN MINH HÙNG SVTH MSSV ĐÀO TRƯỜNG GIANG 18147180 TRẦN QUANG HÀO 18147182 ĐOÀN TRUNG HIẾU 18147188 NGƠ ĐÌNH SƠN 18147232 LÊ PHƯỚC TÀI 18147235 Thành phố Hồ Chí Minh, tháng 08 năm 2022 T7 =fscanf(s,'%f'); T8 =fscanf(s,'%f'); T9 =fscanf(s,'%f'); P0 =fscanf(s,'%f'); PK =fscanf(s,'%f'); vt = [T1 T2 T3 T4 T5 T6 T7 T8 T9 P0 PK]'; data =[ data vt]; timenow =[timenow {datestr(now)}]; set(handles.t1,'string',num2str(T1)); set(handles.t2,'string',num2str(T2)); set(handles.t3,'string',num2str(T3)); set(handles.t4,'string',num2str(T4)); set(handles.t5,'string',num2str(T5)); set(handles.t6,'string',num2str(T6)); set(handles.t7,'string',num2str(T7)); set(handles.t8,'string',num2str(T8)); set(handles.t9,'string',num2str(T9)); set(handles.p0,'string',num2str(P0)); set(handles.pk,'string',num2str(PK)); pause(0.1); Hàm nhập tay Khi cảm biến gặp cố hư hỏng, ta tiến hành tác động để đưa giá trị ta đo thiết bị đo chuyên dùng vào vị trí cảm biến gặp cố, hệ thống tiếp tục hoạt động thời gian chờ thay sửa chữa if get(handles.checkbox15,'value')==1 T1 = str2double(get(handles.t1,'String')); end if get(handles.checkbox16,'value')==1 T2 = str2double(get(handles.t2,'String')); end if get(handles.checkbox17,'value')==1 T3 = str2double(get(handles.t3,'String')); end if get(handles.checkbox18,'value')==1 T4 = str2double(get(handles.t4,'String')); end if get(handles.checkbox19,'value')==1 T5 = str2double(get(handles.t5,'String')); end if get(handles.checkbox20,'value')==1 T6 = str2double(get(handles.t6,'String')); end if get(handles.checkbox21,'value')==1 T7 = str2double(get(handles.t7,'String')); end if get(handles.checkbox22,'value')==1 T8 = str2double(get(handles.t8,'String')); end if get(handles.checkbox23,'value')==1 T9 = str2double(get(handles.t9,'String')); end if get(handles.checkbox24,'value')==1 P0 = str2double(get(handles.p0,'String')); end if get(handles.checkbox25,'value')==1 PK = str2double(get(handles.pk,'String')); Nội suy nhiệt độ theo áp suất - Nội suy từ bảng thông số nhiệt động: - Môi chất đồng sôi: R22, R32, R134A, R717 - Môi chất không đồng sôi: R410A, R407C, R410A function y0 = noisuy(x1,x2,y1,y2,x0) % y = ax + b; y1 = ax1 +b, y2 =ax2 +b -> y1 -y2 = a(x1 -x2) a = (y1-y2)/(x1 -x2); b = y1 - a*x1 ; y0 = a*x0+b; end Nội suy P0: P0 =P0 +1; PK = PK +1; if P0 < ||PK < fclose(s); set(handles.capnhat,'Enable','on'); f = msgbox('error'); return end ind = find(S(:,2)>P0); ind2 = ind(1); ind1 = ind2 -1; t0 = noisuy(S(ind1,2),S(ind2,2),S(ind1,1),S(ind2,1),P0); set(handles.editt0,'string',num2str(t0)); Nội suy Pk: P0 =P0 +1; PK = PK +1; if P0 < ||PK < fclose(s); set(handles.capnhat,'Enable','on'); f = msgbox('error'); return end ind = find(S(:,2)>PK); ind2 = ind(1); ind1 = ind2 -1; tk = noisuy(S(ind1,4),S(ind2,4),S(ind1,3),S(ind2,3),PK); set(handles.edittk,'string',num2str(tk)); Vẽ đồ thị axes(handles.axes3); cla('reset'); grid on hold on if get(handles.checkbox1,'value')==1 plot(dt2,'r','DisplayName','dt2'); plot([1 length(dt2)],[tqn tqn],':','color',[0.7 0]) xlabel('Thoi gian'); ylabel('Do chech nhiet do'); end if get(handles.checkbox2,'value')==1 plot(dt4,'b','DisplayName','dt4'); plot([1 length(dt4)],[tql tql],':','color',[0 0.7]) xlabel('Thoi gian'); ylabel('Do chech nhiet do'); end if get(handles.checkbox3,'value')==1 plot(dt5,'color',[1 0.5490 0],'DisplayName','dt5'); plot([1 length(dt5)],[lc1 lc1],':','color','y') xlabel('Thoi gian'); ylabel('Do chech nhiet do'); end if get(handles.checkbox4,'value')==1 plot(dt6,'g','DisplayName','dt6'); plot([1 length(dt6)],[lc2 lc2],':','color',[0 0.8 0]) xlabel('Thoi gian'); ylabel('Do chech nhiet do'); end if get(handles.checkbox6,'value')==1 plot(dt7,'c','DisplayName','dt7'); plot([1 length(dt7)],[tbh tbh],':','color',[0 0.9 0.9]) xlabel('Thoi gian'); ylabel('Do chech nhiet do'); end if get(handles.checkbox7,'value')==1 plot(dt8,'m','DisplayName','dt8'); plot([1 length(dt8)],[tnt tnt],':','color',[0.9 0.9]) xlabel('Thoi gian'); ylabel('Do chech nhiet do'); Lưu liệu Việc lưu liệu nhằm mục đích nhận biết dấu hiệu bất thường, đánh giá tình trạng sức khỏe hệ thống fclose(s); save data\data.mat dt2 dt4 dt5 dt6 dt7 dt8 Đánh giá xu hướng lỗi hệ thống lên giao diện global t0 tk T2 T4 T5 T6 T7 T8 T9 kk1 =str2num(get(handles.kk1,'string')); kk2 =str2num(get(handles.kk2,'string')); tkk1 =str2num(get(handles.tkk1,'string')); tkk2 =str2num(get(handles.tkk2,'string')); tqn =str2num(get(handles.tqn,'string')); tql =str2num(get(handles.tql,'string')); avg =str2num(get(handles.avg,'string')); h =dubaoloi(t0,tk,T2,T4,T5,T6,T7,T8,T9,lc1,lc2,tqn,tql,tbh,tnt,avg) global savepath; global count; if savepath == if count < desEmail = get(handles.email,'String'); % desEmail = '18147188@student.hcmute.edu.vn'; email = Email(h,desEmail); count = count + 1; end end set(handles.text37,'string',h); minTnt = tnt - avg; maxTnt = tnt+ avg; minTbh = tkk1 - avg; maxTbh = tbh + avg; minTql = tql - avg; maxTql = tql + avg; minlc1 = lc1 - avg; maxlc1 = lc1 + avg; minTqn = tqn - avg; maxTqn = tqn + avg; minlc2 = lc2 - avg; maxlc2 = lc2 + avg; if minTbh < T6 - t0 && T6 - t0 < maxTbh h = 'He thong hoat dong on dinh'; else if T6 - t0 > maxTbh if T2 - t0 > maxTqn if tk -T4 < minTql h = 'He thong co xu huong thieu gas'; else if tk - T4 > maxTql if T4 - T5 > h = 'He thong co xu huong tiet luu som'; else if T4 - T5 < h = 'Van tiet luu qua be'; end end end end else if T2 - t0 < minTqn if T6 - T7 < minlc1 h = 'Thiet bi bay hoi co xu huong bam ban'; else if T6 -T7 > maxlc1 h = 'Thiet bi bay hoi thieu chat tai lanh'; end end end end else if T6 - t0 < minTbh if tk - T8 < minTnt h = 'May nen co xu huong qua be'; else if tk - T8 > maxTnt if tk - T4 < minTql choice = questdlg ('He thong co khong ngung hay khong?', 'choice menu ', 'co','khong','khong'); switch choice case 'co' h= ' He thong co xu huong co khong ngung'; case 'khong' h= 'He thong co xu huong nhieu gas'; end else if tk - T4 > maxTql if T9 - T8 > maxlc2 h= 'He thong co xu huong thieu luu luong nuoc/khong khi'; else if T9 - T8 < minlc2 h = 'Thiet bi bay hoi co xu huong bam ban'; end end end end end end end end end Load liệu giá trị lên đồ thị Giúp tải liệu thu thập lên lại giao diện, giúp người vận hành đánh giá tình trạng hệ thống thời điểm trước đó: global data timenow load('data\data.mat') [file,path,indx] = uiputfile('*.csv'); dt2 =dt2'; dt4 = dt4'; dt5 =dt5'; dt6 = dt6'; dt7 =dt7'; dt8 = dt8'; %T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 P0 PK] data =data'; T1 = data(:,1); T2 = data(:,2); T3 = data(:,3); T4 = data(:,4); T5 = data(:,5); T6 = data(:,6); T7 = data(:,7); T8 = data(:,8); T9 = data(:,9); P0 = data(:,10); PK = data(:,11); timenow = timenow' T = table(timenow,T1,T2,T3,T4,T5,T6,T7,T8,T9,P0,PK,dt2,dt4,dt5,dt6,dt7,dt8); if indx ==1 writetable(T,[path file]) end [file path ret] = uigetfile('*.csv'); if ret ==0 return end filename = [ path file]; global dt2 dt4 dt5 dt6 dt7 dt8 [timenow,T1,T2,T3,T4,T5,T6,T7,T8,T9,P0,PK,dt2,dt4,dt5,dt6,dt7,dt8] importfile(filename); axes(handles.axes3); cla('reset'); grid on hold on = Phụ lục 5: Code Arduino Khai báo thư viện cảm biến nhiệt độ #include #include #define ONE_WIRE_BUS #define TEMPERATURE_PRECISION Khai báo thư viện hình #includePCD8544 Static const byte lyph[]={B00010000,B00110100,B00110000,B00110100,B00010000}; staticPCD8544 lcd; Khai báo áp suất // Ap suat const int pressureZero0 = 0; const int pressureMax0 = 1024; // Ap suat const int pressureZero1 = 0; const int pressureMax1 = 1024; const int pressuretransducermaxPSI = 20; Khởi động thư viện One Wire OneWire oneWire(ONE_WIRE_BUS); Khởi động thư viện nhiệt độ DallasTemperature sensors(&oneWire); Địa cảm biến DeviceAddress CBNhietDo1={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x70, 0x62, 0x41} DeviceAddress CBNhietDo2={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x59, 0x34, 0x34 } DeviceAddress CBNhietDo3={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x7C, 0x46, 0x4E } DeviceAddress CBNhietDo4={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x59, 0x87, 0xE4 } DeviceAddress CBNhietDo5={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x76, 0x96, 0xFE } DeviceAddress CBNhietDo6={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x4F, 0x46, 0x36 } DeviceAddress CBNhietDo7={ 0x28, 0xFF, 0x64, 0x1E, 0x5E, 0x6A, 0xFD, 0xD0 } DeviceAddress CBNhietDo8={ 0x28, 0xFF, 0x64, 0x1E, 0x5F, 0x9B, 0x90, 0xBE } DeviceAddress CBNhietDo9={ 0x28, 0xFF, 0x64, 0x1E, 0x26, 0x58, 0x42, 0xD5} Cài đặt hệ thống void setup(void) { Serial.begin(9600); sensors.begin(); sensors.setResolution(12); } Chạy hệ thống void loop(void) { float tempC1 = sensors.getTempC(CBNhietDo1); float tempC2 = sensors.getTempC(CBNhietDo2); float tempC3 = sensors.getTempC(CBNhietDo3); float tempC4 = sensors.getTempC(CBNhietDo4); float tempC5 = sensors.getTempC(CBNhietDo5); float tempC6 = sensors.getTempC(CBNhietDo6); float tempC7 = sensors.getTempC(CBNhietDo7); float tempC8 = sensors.getTempC(CBNhietDo8); float tempC9 = sensors.getTempC(CBNhietDo9); static int counter = 0; float pressureValue0 = 0; float pressureValue1 = 0; float pressureValue0K = 0; float pressureValue1K = 0; pressureValue0 = analogRead(A0); pressureValue1 = analogRead(A2); pressureValue0K=((pressureValue0-pressureZero0)*pressuretransducermaxPSI)/ (pressureMax0-pressureZero0); pressureValue1K=((pressureValue1pressureZero1)*pressuretransducermaxPSI)/(pressure Max1-pressureZero1); } Xuất nhiệt độ áp suất sensors.requestTemperatures(); Serial.println( tempC1 ); Serial.println( tempC2); Serial.println( tempC3 ); Serial.println( tempC4); Serial.println( tempC5 ); Serial.println( tempC6); Serial.println( tempC7 ); Serial.println( tempC8); Serial.println( tempC9 ); Serial.println(pressureValue0K); Serial.println(pressureValue1K); ; delay(2000); } S K L 0