Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Тестирование термодатчиков

Немного опережая основную тему (с кучей фотографий) поделюсь тем, что уже получено.

Код и все прочее — на гитхабе. Позже добавлю туда еще и табличку с полученными данными.
Логгер опрашивает все термодатчики каждые 30 секунд. До обеда я залил дюралевую плиту, к которой приклеены датчики, жидким азотом, но, несмотря на многослойную теплоизоляцию, щель для вороха проводов оказалась слишком большой, и на плите есть существенный температурный градиент. Поэтому отбор датчиков можно будет сделать лишь после того, как плита дойдет до комнатной температуры. А пока пишу, как изменяются показания датчиков со временем.
Для обработки данных (интерполяция пропущенных значений, определение номеров работающих датчиков и вычисление разницы между медианной температурой в данный момент времени) набросал такой скриптец для octave:
function [tm T goodrecs diffs] = readtemp(name)
% return arrays of unix time & temperatures from file `name`
% substitute missed values by interpolation
    T = dlmread(name);
    nrecs = size(T, 1);
    nsensors = size(T, 2) - 1;
    if(nrecs < 2 || nsensors < 2) return; endif
    tm = T(:, 1);
    tm -= tm(1);
    T(:,1) = [];
    goodrecs = [];
    % interpolate missing values
    for N = 1:nsensors
        term = T(:, N);
        badidxs = find(term < -275.);
        bads = size(badidxs, 1);
        if(bads > nrecs/2)
            printf("%d: all (or almost all) data records are bad\n", N);
            continue;
        elseif(bads) % some records are bad, try to make interpolation
            printf("%d: %d bad records\n", N, bads);
            tmx = tm; Tx = term;
            tmx(badidxs) = [];
            Tx(badidxs) = [];
            T(:, N) = interp1(tmx, Tx, tm, "spline");
        endif
        goodrecs = [goodrecs N];
    endfor
    % remove strings with NANs
    ii = find(isnan(T));
    s = size(T, 1);
    idxs = ii - s*floor((ii-1)/s);
    T(idxs, :) = [];
    tm(idxs) = [];
    diffs = T - median(T,2);
    % now remove bad records
    for N = goodrecs
        term = abs(diffs(:, N));
        badidxs = find(term > 3.);
        bads = size(badidxs, 1);
        if(bads)
            tmx = tm; Tx = T(:, N);
            tmx(badidxs) = [];
            Tx(badidxs) = [];
            T(:, N) = interp1(tmx, Tx, tm);
        endif
    endfor
    diffs = T - median(T,2);
endfunction

Все равно наблюдается несколько выбросов. Видимо, придется еще и скользящую медиану хотя бы точкам по пяти строить (опрашивать датчики не раз в 15 минут, а раз в 3 минуты, а на выход раз в 15 минут давать медиану).
Вот как выглядят разности между показаниями каждого датчика и медианной температурой в данный момент времени:
graph1

graph2

Как я уже говорил, градиент температуры на плите очень существенный, поэтому-то так сильно разнятся показания датчиков. В центре плиты и по ее углам я разместил платиновые терморезисторы. Судя по их сопротивлениям, в начале эксперимента, когда азот только бурлил, между центром и краями перепад составлял аж 2°C (-32.8°C на самом холодном краю супротив -28°C в центре)! Далее самый холодный край стал самым теплым (из-за близости дыры для кабелей + моего ИК-излучения), на момент написания этих строк перепад составил 0.6°C (-6.7°C в углу супротив -7.3°C в центре) и оба теплых края уже почти сравнялись по температуре (разница лишь в 0.1°C). Судя по термодатчикам, наклеенным с этой же стороны, брешут они на минусовых температурах очень прилично (правда, и производитель гарантирует точность в 0.1°C только от -5 до +50): температуры отличаются от показаний терморезисторов до 0.5°C (правда, не факт, что сами терморезисторы при этом не имеют разброса, отбирал-то я их по примерному равенству сопротивлений при комнатной температуре, и калибровки, как при работе с ИК-спектрографом, не делал).
Tags: octave, термодатчики
Subscribe

  • Чем бы таким заменить STM32F072C8T6?

    Полез сейчас на али цены посмотреть, а там… В среднем уже по 600-700 рублей за штучку просят! Вообще охамели. И это - гарантированно БУшные ведь!.. А…

  • Понаблюдал, блин!

    Опять у нас что-то с сетью поломали. Хотел было протестировать, как наша подвесная часть оптоволоконного спектрографа работает, а из дома связь с…

  • Липовые STM32F303CBT6

    Купили недавно на али на работу десяток вышеупомянутых МК (причем, недешево: около 600р за штучку при красной цене в 200р!). И вот, сижу, на своей…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments