Я тем временем решил-таки сравнить показания тех термодатчиков, что у меня оставались, чтобы хотя бы по одной точке привести их к единой шкале.
Для начала просто замотал пучок из 28 датчиков тряпкой, поверх обмотал фольгой и снова тряпкой.

Однако, такой метод не позволяет зафиксировать температуру: она постоянно плывет (в последней - самой длинной - серии за 3000 с лишним секунд температура поднялась аж на 0.12°C!). В результате данные получаются не очень...
Нужно будет прикупить побольше фольги и сделать более приличную теплоизоляцию. А по-хорошему, конечно, нужно бы еще и внутри термостат соорудить...
Для того, чтобы логгировать данные, пришлось написать небольшую утилиту (заодно еще раз воспользовался своей библиотечкой сниппетов). Она просто сохраняет в текстовый файл время начала измерений и измеренные величины. Дальше этот файл считывается:
function rdfile(infile, graph)
XX=dlmread(infile, '', 1, 0);
time = XX(:,1) - XX(1,1);
XX(:, 1)=[];
medval = median(XX,2);
Tcorr = XX - medval;
plot(time, Tcorr);
legend("0-10","0-11","0-20","0-21","0-30","0-31","0-40","0-41","0-50","0-51","0-60","0-61","0-70","0-71", ...
"1-10","1-11","1-20","1-21","1-30","1-31","1-40","1-41","1-50","1-51","1-60","1-61","1-70","1-71");
xlabel("time, s"); ylabel("T, {}^\\circ{}C");
plotgr(sprintf("%s_corrected", graph));
Corrections = median(Tcorr);
printf("Correction values:\n");
for x = 1:size(Corrections,2)
if(x != 1) printf(", "); endif;
printf("%g", Corrections(x));
endfor
printf("\n");
plot(time, Tcorr - Corrections);
legend("0-10","0-11","0-20","0-21","0-30","0-31","0-40","0-41","0-50","0-51","0-60","0-61","0-70","0-71", ...
"1-10","1-11","1-20","1-21","1-30","1-31","1-40","1-41","1-50","1-51","1-60","1-61","1-70","1-71");
xlabel("time, s"); ylabel("T, {}^\\circ{}C");
plotgr(sprintf("%s_zeroed", graph));
endfunction
а этот скрипт строит графики:
function plotgr(nm)
h = gcf();
TL = get(gca, 'ticklength');
set(gca, 'ticklength', TL*1.5);
set(gca, 'linewidth', 3);
H = 8; W = 12;
lg = findobj(h, "type","axes", "Tag","legend");
set(lg, "FontSize", 16);
set(gca, 'fontsize', 16);
set(get(gca(), "xlabel"), 'fontsize', 16);
set(get(gca(), "ylabel"), 'fontsize', 16);
set(h,'PaperUnits','inches')
set(h,'PaperOrientation','landscape');
set(h,'PaperSize',[W,H]);
set(h,'PaperPosition',[0,0,W,H]);
print(h, '-dpdf', sprintf("%s.pdf", nm));
print(h, '-dpng', sprintf("%s.png", nm));
endfunction
Вот такой кошмар получается:




Всего сделал четыре серии измерений. В каждой серии для каждого момента времени вычислялась медианная температура, которая вычиталась из показаний (это первый и третий графики). Далее вычислялись медианы для каждого термодатчика — это как бы и есть их "нуль-пункты", которые нужно вычитать из результатов измерения, чтобы получить правильные данные.
То, что в результате таких неправильных измерений, которые заставили бы плакать любого метролога, ничего не получилось, можно судить по RMS полученных данных:
0.03, 0.02, 0.01, 0.01, 0.02, 0.02, 0.02, 0.01, 0.00, 0.01, 0.03, 0.01, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.01, 0.02, 0.03, 0.01, 0.01, 0.02, 0.02, 0.01, 0.02 (а хотелось бы меньше единицы в третьем знаке!).
А вот — сами нуль-пункты:
0.08, -0.03, -0.10, -0.03, -0.05, 0.01, -0.03, -0.08, 0.03, -0.01, 0.10, 0.03, 0.08, 0.06, -0.01, 0.04, 0.07, 0.04, -0.01, -0.03, 0.04, -0.03, 0.02, -0.04, -0.01, 0.00, 0.03, -0.02.
Если под "точность 0.1°C" понимать ±0.1°C, то все датчики честно это условие выполняют (правда, только на одной точке — замерить хотя бы в двух-трех точках я не смогу — полноценного термостата нет). В принципе, будь датчиков сотни три, из них вполне бы можно было отобрать 80-100 штук, имеющих расхождение меньше ±0.05°C и не париться с вводом калибровочных параметров в систему сбора.
Но все же нужно попробовать провести измерения с лучшей теплоизоляцией. Как вариант, можно расположиться с ноутбуком в пяте БТА, где температура в течение года меняется не больше, чем на ±2°C. Заодно и температура там ниже (в кабинете у меня 23°C, зеркало до такой температуры никогда не нагревалось, максимум был около 18°C).
Journal information