LINUX.ORG.RU

Определение температуры в бане

 , ,


0

2

Хочу измерять температуру в бане, пока что просто воздуха, а в дальнейшем хотелось бы в самой топке, чтобы можно было бы узнать когда подкидывать дрова, ну типа топка остыла, подан звуковой сигнал, пошел подкинул

Сейчас хочу просто получить температуру воздуха, с помощью термистора (NTC MF52 10K). Подключаю в аналоговый порт arduino (verba), делаю как написано тут. Подключаю по схеме делителя напряжения

Фото схема (желтый +5, корич. - GRN, зеленый - анал. вход)
https://ibb.co/1ZCS6kK

// к какому аналоговому пину мы подключены
#define THERMISTORPIN A0
// сопротивление при 25 градусах по Цельсию
#define THERMISTORNOMINAL 10000
// temp. для номинального сопротивления (практически всегда равна 25 C)
#define TEMPERATURENOMINAL 25
// сколько показаний используем для определения среднего значения
#define NUMSAMPLES 5
// бета коэффициент термистора (обычно 3000-4000)
#define BCOEFFICIENT 3950
// сопротивление второго резистора
#define SERIESRESISTOR 10000
int samples[NUMSAMPLES];

void setup(void) {

  Serial.begin(9600);
  analogReference(EXTERNAL);

}

void loop(void) {

uint8_t i;
float average;

// сводим показания в вектор с небольшой задержкой между снятием показаний

for (i=0; i< NUMSAMPLES; i++) {

  samples[i] = analogRead(THERMISTORPIN);
  delay(10);

}

// рассчитываем среднее значение

average = 0;

for (i=0; i< NUMSAMPLES; i++) {
  average += samples[i];

}

average /= NUMSAMPLES;
Serial.print("Average analog reading ");
Serial.println(average);
// конвертируем значение в сопротивление
average = 1023 / average - 1;
average = SERIESRESISTOR / average;
Serial.print("Thermistor resistance ");
Serial.println(average);
float steinhart;

steinhart = average / THERMISTORNOMINAL; // (R/Ro)

steinhart = log(steinhart); // ln(R/Ro)
steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // инвертируем
steinhart -= 273.15; // конвертируем в градусы по Цельсию
Serial.print("Temperature ");
Serial.print(steinhart);
Serial.println(" *C");
delay(1000);

}


Первый баг - температура определялась минусовая, то есть -27..-23 и при нагревании росла к 0, о есть -20..-10. Исправил я это скобочками

вместо
average = 1023 / average - 1;

написал
average = 1023.0f / (average -  1.0);


Не где ошибка, но температура стала положительная и корректная

Большая погрешность в температуре, больше на 4 градуса, чем показания спиртового термометра и термопары (почти совпадают). Резистор выпаял со схемы старой, замерял прибор показывает 9.7K, ну номинал 10K. С теристором тоже вроде все ясно 10K. До платы тянется провод метровый, но он не должен влиять на рассчеты вроде как, сопротивления килоомные а провод по замерам 0.5 ома. Подлючал и через 3 вольта AREF(типа убрать шумы от USB питания) и через 5 на результат никак не влияет.

Можно конечно тупо сгладить, вычитанием из результата - 4 градусов, но возможно это не линейно все и вообще...хз

Такими делами впервые занимаюсь, даже не знаю куда копать. Может сам теристор плохого качества, может резистор не тот, провода, сам АЦП, либо в рассчетах ошибка. Вообще может погрешность в 4 гр. это норма? Помогите понять

★★★★

Последнее исправление: gobot (всего исправлений: 1)

теристора

Ничего, что это термистор (терморезистор)?

Во-первых, какой именно резистор? Даташит говорит, что их там куча с допусками от 1 до 10%.

Во-вторых, у него может быть нелинейная зависимость сопротивления от температуры. И тут тебя спасёт только калибровочная таблица, как советовали выше.

https://www.tme.com/Document/0198c5dc0c1bf0e23b8e3b7440324e74/NTCM-5K-B3470.pdf - беглый гугл дал документацию с кривыми сопротивления от температуры. Зависимость нелинейная, так ещё и погрешность при удалении от 25С растёт.

В-третьих, при приближении к верхнему порогу измерений (повышении температуры) сопротивление этого терморезистора сильно падает, тут уже соединительные провода 0,5 Ом могут играть роль. Особенно если провод к термистору прикреплён зажимами.

agentgoblin
()
Ответ на: комментарий от agentgoblin

В-третьих, при приближении к верхнему порогу измерений (повышении температуры) сопротивление этого терморезистора сильно падает, тут уже соединительные провода 0,5 Ом могут играть роль. Особенно если провод к термистору прикреплён зажимами.

вот так люди доходят до 4 проводной схемы, входного усилителя ацп с диф.входами и всего прочего… :)

pfg ★★★★★
()

Сейчас хочу просто получить температуру воздуха, с помощью теристора (NTC MF52 10K).

Это не наш путь. Берешь обычный термометр спиртовый, красный и вебку. Дальше не хитрым алгоритмом ищешь верхушку спиртового столба на картинке и высчитываешь по координатам температуру. Чтобы камера не навернулась от жары и влажности сделай в бане окошко и подглядывай в него. Или сделай отверстие, просунь туда градусник и смотри с другой стороны стены.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)

#define THERMISTORNOMINAL 10000 // temp. для номинального сопротивления (практически всегда равна 25 C)

#define TEMPERATURENOMINAL 25

ты сам термистор проверял? это типа 10k при 25 градусах? вот померь при 25 градусах, что это 10k. там могут быть значительные отклонения на самом деле.

опять же не бери для индекса uint8_t. бери int и не парь себе мозг.

Serial.begin(9600);

не знаю что за порт там, бери скорость пока минимальной, типа 1200-2400.

и сравнить методику(и код) проведения измерений с другими статьями, типа такой https://www.circuitbasics.com/arduino-thermistor-temperature-sensor-tutorial/

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 3)
Ответ на: комментарий от agentgoblin

Да, термистор, попутал.

Во-первых, какой именно резистор?

NTC MF52. Я выше ссылку на него оставлял

Во-вторых, у него может быть нелинейная зависимость сопротивления от температуры

Ясно. Просто такого нюанса в примере не оговаривалось. Думал все проще

А что за таблицы, это же от другого термистора? В3470

gobot ★★★★
() автор топика
Ответ на: комментарий от alysnix

Пока еще не проверял. Надо бы.

не знаю что за порт там, бери скорость пока минимальной, типа 1200-2400

На что это влияет?

и сравнить методику(и код) проведения измерений с другими статьями, типа тако

Ок почитаю, спасибо

gobot ★★★★
() автор топика
Ответ на: комментарий от crutch_master

Вообще я термопару думал (которая идет в комплекте с мультиметром), с усилителем. Там провода метров 30 нужно еще тянуть для питания и обратной связи. А что за датчик, можно пример?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

На что это влияет?

если там два устройства соединенные соплями, и они обмениваются по послед.порту.. то в зависимости от длины соплей и их качества, а также кривости рук схемотехника, связь устойчива только до определенной скорости.

но я не знаю что тут за порт, может какой-то внутренний, тогда 9600 это даже мало. короче скорость надо брать минимальной, но все еще достаточной, для передачи инфы.

проблема скорей всего тут в формулах, а поскольку с помощью термистора температуру мерят все кому ни лень, то надо просто проверить формулы.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Ясно ) Да нет там устройств, ком порт используется доя передачи по usb проводу инфу в программу-прокладку, которая по http передает андроид приложению и принимает от него команды

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Вообще я термопару думал (которая идет в комплекте с мультиметром), с усилителем. Там провода метров 30 нужно еще тянуть для питания и обратной связи. А что за датчик, можно пример?

наводки будут аховые на такие провода. тут приличная схемотехника нужна.

датчик видимо предлагается - ИК детектор какой-нить, типа ИК фотодиода. будет ловить поток ИК излучения от печки твоей.

alysnix ★★★
()
Ответ на: комментарий от gobot

вполне верю и стоит чутка больше.
зато на выходе цифра и дальность чуть ли не до сотен метров.
но это только для самой бани, ибо ds1820 меряет до 120 градусов.

если есть желание смотреть температуру печи и есть подходящая термопара (в них тоже есть ограничение на температуры) то стоит поставить недалеко от датчиков какойнить pic или прочий подходящий дешевый процессор и мерять им, а дальше кидать цифру. аналоговая схемотехника получится дешовая ибо сигнал близко.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от alysnix

наводки будут аховые

Даже после усилителя? 30 метров имелось ввиду после того как напмяжение на термопаре будет усилено

датчик видимо предлагается - ИК детектор какой-нить, типа ИК фотодиода. будет ловить поток ИК излучения от печки твоей

Ммм, это хорошо, над этим надо подумать

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

хех, заранее неизвестно. шум зависит от условий.
древний вентилятор с развалившимся коллектором может шуметь как истребитель в широком диапазоне.

pfg ★★★★★
()

У меня духовкa, хоть и фирмы Constructa, но без показаний реальной температуры.
Взял на али max6675 за 4$ (платa + термопара с гайкой и провод с металлической оплеткой)

The MAX6675 performs cold-junction compensation and digitizes the signal from a type-K thermocouple.
The data is output in a 12-bit resolution, SPI-compatible, read-only format.

This converter resolves temperatures to 0.25°C, allows readings as high as +1024°C, and exhibits
thermocouple accuracy of 8LSBs for temperatures ranging from 0°C to +700°C.

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 2)

теристором

Такого не существует. Есть терморезисторы (термисторы). Есть тиристоры (вообще не то).

и термопары

А как термопарой измеряешь? Она же показывает только относительную температуру. Для того чтобы показывать абсолютную, нужно знать температуру внутри измерительного прибора к которому термопара подключена.

В топке только термопарой измерять.

__

Резистор выпаял со схемы старой, замерял прибор показывает 9.7K, ну номинал 10K

Вот уже погрешность. Тебе по любому поправочный коэффициент нужен. Либо, как выше советовали, используй готовый копеечный ds1820.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

А как термопарой измеряешь

Да пока еще никак ) Пока только иду к этому ) усилитель надо собирать, нашел схему на lm358, нужно за деталями ехать 20 км (

Понял. Ладно, введу пока коэф., буду делать замеры и сверять со спиртовым градусником

gobot ★★★★
() автор топика
Последнее исправление: gobot (всего исправлений: 1)
Ответ на: комментарий от gobot

первая попавшаяся пдфка http://datasheet.elcodis.com/pdf2/73/36/733632/ds1820.pdf

Measures temperatures from –55°C to +125°C in 0.5°C increments.

т.е. от -55 до +125 градусов с шагом в полградуса.

точность измерения +- 1 градус в пределах -15 до +85 градусов. есть график в конце пдф.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 3)

Можно конечно тупо сгладить, вычитанием из результата - 4 градусов, но возможно это не линейно все и вообще…хз

Нужна эталонная термопара, калиброванная. Нагреваете её вместе со своим термометром и записываете показания. Их в таблицу. И по таблице потом приводите показания к эталону. Скажем каждые 10 градусов – запись в таблицу.

Линейность не линейность. Это всё зависит от прибора, который мерит. Ошибку будет видно на дистанции и кривизну. Но т.к. сравнение идёт с эталоном, то имеет смысл кривизна отклонения от эталона.

Если говорить по большому счёту, то эталон желательно д. иметь такую же природу, чтобы у них не было отличий. Но для бани наверное не так критично, там же небольшой диапазон.

P.S.: а, уже всё предложили и рассказали, (написал, не читая тред)

thegoldone
()
Последнее исправление: thegoldone (всего исправлений: 3)
Ответ на: комментарий от gobot

нашел схему на lm358

У меня есть сомнения что схема на lm358. Кажется он для этого не подходит.

Может готовый драйвер поискать под твою термопару, чтобы он по цифровому протоколу тебе температуру отдавал?

Если хочешь делать сам на аналоговых схемах, будь готов к тому что надо будет это всё долго отлаживать, использовать поправочные коэффициенты. Соберешь схему и поймешь что ОУ не работает как ожидается и нужен другой.

Я вот игрался в компараторы и проигнорировал рабочую температуру. В итоге у меня как-то посреди ночи, когда температура за 0 опустилась, на балконе ВНЕЗАПНО пылесос завелся.

Интересно, то есть 360 значений цифровых. Как их декодировать?

ЕМНИП, там протокол 1-wire. Для ардуины либы есть для ds1820 которые тебе в градусах все отдадут.

Tanger ★★★★★
()
Ответ на: комментарий от gobot

опрашиваешь ds1820 по протоколу 1wire - получаешь значение температуры в цифрах.
в пдфке есть описание протокола, а также табличка с тестовыми ответами. 1wire известный протокол - готовых библиотек хватает.

pfg ★★★★★
()

Работа с аналоговыми термопарами - это ад и Израиль. Важно все, от погрешности самой термопары, погрешности резисторов в схеме, заканчивая наводками самой платы, цепей питания и всего того, что прилетит по проводам.

Если есть возможность, бери копеечные цифровые термометры, вроде упомянутого выше ds18b20 или ему подобных. Если нет - обрезай все длинные провода, экранируй плату, фильтруй питание и главное - КАЛИБРУЙ то, что получилось: рядом ставишь эталонный термомерт (тот же ds18b20, который далеко не точный, но тебе хватит) и калибруешь относительно него по всей линейке температур.

Если надо на 30 метров передать сигнал, и именно с термопары, выше уже посоветовали драйвер от Максима с SPI-интерфейсом. Главное в таких драйверах - это стабилизированное референсное напряжение, свой АЦП (получше, чем в Пердуине) и цифровой выхлоп. А вместо 30 метров проводов, я бы прокинул вайфай или другой беспровод.

ruzisufaka
()
Ответ на: комментарий от pfg

угу, и на каждый датчик вешать вайфай интерфейс :) дороговато и геморновато.

Ну не на каждый, а скажем на гроздь датчиков - вполне можно. Если в роли Пердуины используется esp32 - это вообще бесплатно. Да и при ценах на esp32, даже теперешних, самое дорогое что будет - это разобраться с питанием оных.

Просто мы живем в уникальном мире, где 30 метров хороших проводов, стоят дороже wifi в микроконтроллере. А провода еще надо проложить, потратиться на кабель-канал, сам кабель-канал как-то прибить к стене… Короч, вайфай будет ДЕШЕВЛЕ.

ruzisufaka
()
Последнее исправление: ruzisufaka (всего исправлений: 1)
Ответ на: комментарий от ruzisufaka

и опять же провода от концентратора до конкретно датчика. :) плюс прикручивание udp|tcp|http интерфейса в прогу.
не уверен что %тс% имеет познания в онном…
ну сия уникальность получена в упорном труде разработчиков.
согласен, у меня телефон (причем уже считающийся достаточно древним) и быстрее и мощнее и памяти больше чем в первом x86-компутере. а в завалах и 580вм80 найдется

pfg ★★★★★
()
Ответ на: комментарий от pfg

плюс прикручивание udp|tcp|http интерфейса в прогу.

не уверен что %тс% имеет познания в онном…

Ты очень сильно удивишься, но в стандартных примерах к ESP32 чего только нет. С серверной стороны тоже ничего писать не надо, уже написана куча сервисов вроде «народного мониторинга» и тому подобного.

ruzisufaka
()

замерял прибор показывает 9.7K, ну номинал 10K.

Вы с таким резистором в длителе на что расчитываете? Если у вас прибор не полное Г, то нормальный резистор 10К и будет 10К при комнатной температуре. Когда резистор 1% и 0,5%, то это во всём температурном диапазоне, а около нуля отклонение совсем небольшое.

бета коэффициент термистора откуда взяли?

mky ★★★★★
()
Ответ на: комментарий от gobot

ермометр кстати уже висит. А как камеру от влажности защищать?

Так она же не обязательно должна быть в этом же помещении. Можно поставить за окошко. Тут, конечно, намекают на расширенный функционал, но мы же выше этого, ведь так?

crutch_master ★★★★★
()
Ответ на: комментарий от gobot

О, еще лушче придумал. Уличный термометр электронный покупаешь, там цифровой жк дисплей. Шнур в баню и смотришь в камеру за циферкой. Далее нехитрый алгоритм и всё готово. Херня? Херня. Зато прокачаешь скилы в CV сфере, там платят не плохо вроде.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

винт и пружинка :) меняешь нажим на биметал - меняешь температуру срабатывания.
первые электрические утюги с регулировкой температуры такие были :)

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pfg

Так это обычный термостат. Но в печку его не засунешь, кмк. Вообще, если не нужно получать цифру в градусах - вариант. НО можно же взять их несколько!

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

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

pfg ★★★★★
()
Ответ на: комментарий от gobot

можно попробовать обычный датчик на расстоянии нескольких сантиметров от горячей поверхности расположить чтобы не перегревался на максимуме, и посмотреть корреляцию с нагревом печи.

hzk
()