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)
Ответ на: комментарий от mky

Попробую выпаять другой, а что он точно должен показывать 10К при ~20 градусов? Прибор нормальный вроде DT9208A. Бета из таблицы к этому термистору https://robototehnika.ru/file/MF52.pdf

Я там все коэф. перепробовал, все равно на 4 градуса выше показывает

gobot ★★★★
() автор топика

Что выводит прошивка при 0 °C (тающий лед), при 100 °C (кипяток) и при комнатной температуре? Нужен полный вывод: значение АЦП, вычисленное сопротивление и температура.

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

Спасибо за развернутый ответ. Я не делал ни разу эти усилители для термопары, но гугление «термопара усилитель» вывела меня вот сюда https://www.joyta.ru/7449-usilitel-termopary/

Я уже и lm358 купил 3 штуки по 16 руб.

Да понятно драйвер...пятое десятое...потом еще еще куча всего, втенешься и не вылезешь из этой темы )

Вообще изначально нужно было тупо обогреватель включать в 4 утра, купил ардуину-верба за 800р, реле навешал, результат ошеломил, потом прогу на андроиде сделал для управления, прокладку на с++, которая через юсб обменивается инфой с платой. Вообще супер стало ) Дальше купил ультразвуковой датчик за 200р., который отключал насос в бочке по мере наполнения. Круто!

Вообще автоматика за копейки меня воодушевила и вот сейчас...температура в бане. Да супер, было бы, ну датчик в топку и воздуха это тривиально по сути, ну откалибровать, коэф. ввести пятое десяое, решаемо. Но вот как эти данные вывести? Да, можно по проводу в 30 метров передавать в плату, а там в андроид по интернету. Но охота почему то, чего то более крутого. Табло огромное поставить, желательно метр на два, чтобы за 20 метров светилось и видно было. И гудок такой как у паравоза.

Ну купил я табло 5461AG циферное, 4 цифры, там 12 ножек...это мне нужно 3 провода тянуть 4 жильных по 30 метров. Может есть тпбло, которые по битовому протоколу работают? Ну 2 провода питание и 1 данные? Зачем 12 проводов для кодирования 4 цифр?

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

Да, пирометр вещь хорошая, пригодился он мне на пиролизной печи. Но ломать его не охота. Возможно ли есть датчики копеечные?

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

Не обязательно 10к, но около. А главное, физическое сопротивление второго резистора должно совпадать с тем, что задано в программе:

// сопротивление второго резистора
#define SERIESRESISTOR 10000
Так как часто не очень доверяют домашнему мультиметру, да и забывают перед измерением покрутить щупы, покрутить переключатель туда-сюда, чтобы снять окислы, то обычно покупают 1% или 0.5% резистор. Если выпаивать, то искать с 5 полосками.

Я там все коэф. перепробовал, все равно на 4 градуса выше показывает

Если речь про 25 градусов, то бетта и не влияет. Расхождение будет при других температурах. Измерьте мультиметром сопротивление термистора при 25 градусах.

Вы термистор покупали или выпаяли? По даташиту у него длинное обозначение, там и бетта и точность зашифрованы, а на корпусе это не пишут, не хватает места. Если покупали, дайте полное обозначение.

В вашей ссылке оптимистично пишут про +/- 0,25 градуса при 1% терморезистре, хотя на деле все погрешности сложатся и хорошо, если будет +/- 1 градус. Но, если у вас терморезистор 5%, так погрешность будет значительно больше.

Ну, а ещё, температуры в соседних точках легко могут на градус различаться. Если сравнивать показания терморезистора и термопары их надо бы друг к другу прижать, допустим кусочном кембрика (трубочка ПВХ).

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

https://www.joyta.ru/7449-usilitel-termopary/

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

там 12 ножек…это мне нужно 3 провода тянуть 4 жильных по 30 метров.

Есть всякие MAX7219, которые позволяют работать с индикаторами через SPI. Правда для SPI 30 метров - перебор.

Есть сдвиговые регистры.

Можно беспроводной интерфейс использовать: на ESP8266 есть Wemos D1 Mini, который без возни запускается (в отличии от всяких ESP-01) и шьется из arduino-ide.

Можешь собрать ESP+MAX7219+Табло и получишь табло, которым можно через wifi управлять.

Зачем 12 проводов для кодирования 4 цифр?

Ты там не цифры передаешь, а каждый отдельный сегмент включаешь. Никто не заставляет его напрямую к МК подключать. А для ардуины можно покупать готовые модули из индикатора + MAX7219 к нему.

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

Возможно ли есть датчики копеечные?

Должны быть по идее. Если даже для цо2 есть датчики.

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

Есть всякие MAX7219

Мм класс, то что надо! 30 метров перебор, а 20 потянет? 10?

Посмотрел цены...вот такой вариант подойдет мне? https://www.chipdip.ru/product/max7219cng

В нашем местном сельпо нет такой микры., может аналог какой есть?

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

30 метров перебор, а 20 потянет? 10?

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

Посмотрел цены…вот такой вариант подойдет мне? https://www.chipdip.ru/product/max7219cng

У чипдипа наценка в несколько десятков раз. На aliexpress можно купить 8ми символьный индикатор вместе с max7219 за $1 с учетом доставки до почты.

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

Не пробовал

Будем пробовать

У чипдипа наценка в несколько десятков раз. На aliexpress можно купить 8ми символьный индикатор вместе с max7219 за $1 с учетом доставки до почты.

Ну да, 650 р., за микруху... видимо популярна. На али месяц идет...пока дойдет уже пройдет азарт...хотя и из чипдик тоже дней 10

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

Вопрос в том зачем в бане +- 0,5 градуса)

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

формула для ntc - https://ibb.co/3SW1YTB

ЗЫ на дешманских чипах делал апроксимацию прямой, при перепаде 50-90 градусов, получал отклонение не более 2ух градусов. если заморочиться полиномом 2ого 3его порядка можно получить совсем красивую картинку. Вопрос в том - А ОНО НАДО? решение практических задач обычно начинается с границ применения

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

Ммм первая ссылка класс. Микра и целых два индикатора за 350р.

Кстати нестыковка...тпи 3 дата провода, и два питание, получается 5. А у меня кабель 4жильный. Возможно ли один провод отрубить, который передедает данные от слэйв к мастеру? То есть от индикатора

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

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

зы, а можно все буковки от твоего термистора

Morin ★★★★★
()
Последнее исправление: Morin (всего исправлений: 1)
Ответ на: комментарий от gobot
  1. SPI: https://www.youtube.com/watch?v=85Lhi_824ks

  2. MAX7219 Datasheet: https://pdf1.alldatasheet.com/datasheet-pdf/view/73745/MAXIM/MAX7219.html

MISO там не нужен, однако его там и нет. 3 провода - CLOCK, MOSI, LOAD
Ещё 2 - питание.

Насколько я понял, Опускаешь LOAD, передаешь 8 бит адреса сегмента, затем 8 бит состояния сегмента. Затем поднимаешь LOAD и только в этот момент переданные данные применяются.

А если притянуть LOAD на GND - ничего работать не будет.

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

Ну не знаю, 55 и 60 градусов чувствуется весьма ))


Последних цифр нет. Только mf52, даже продавец их не пишет

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

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

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

Выходит минимум 5 проводов? Кстати, у меня протянут уже кабель двужильный на 220 вольт. Можно ли задействовать этот провод для +5 питания или данных?

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

Кстати, у меня протянут уже кабель двужильный на 220 вольт.

Под напряжением? Или неиспользуемый? В принципе ты можешь использовать отдельный БП для питания табло - тогда можно VCC не тянуть. Тянуть GND, MOSI, CLK, LOAD. От БП для табло взять - (на GND) и + на VCC.

Но вначале на коротком расстоянии поиграйся.

Тебе точно хочется тянуть провод так далеко? Через wifi же проще будет.

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

Не, если температуру выводить на

Табло огромное поставить, желательно метр на два

то никак нельзя на 5 градусов ошибаться, соседи не поймут :) Особенно ложное срабатывание паровозного гудка...

mky ★★★★★
()

Короче я все попутал, термистор не на 10К, а на 100К у меня. Внес изменения в рассчеты, сейчас вроде сходится. Температура по приборам:

резистор - 28гр
термометр спиртовой 27гр
пирометр - 28гр
термопара 31гр!

НОРМ! В итоге термопара самая неточная. Мерял на улице ей, показывает +3-4 гр., хотя на термометре 0 (чуть тает снег)

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

Да, под напряжением конечно, иначе зачем бы я его тянул ) Про блок что то не понял. Две цепи будут что ли? GNG от ардуины соединять с GND блока?

Через wifi же проще будет

блок тащить, вайфай уже накладно... Хотелось бы все по 4 проводам

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

Теперь столкнулся с другой проблемой, протянул провод 35 метров в баню (2 провода на термистор), все спаял. Скачет напряжение на аналоговом входе 3.3-3.9 вольта, соотстветственно температура дико пляшет от от -1 до 8 градусов. Померял сопротивление провода, прибор показывает 11 ом. Ну 11 ом ведь не может внести такие существенные помехи, если термистор 100К? Как исправить?

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

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

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

Эх, ладно, пущу по этому кабелю тогда реле какое нибудь

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

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

как вариант один контроллер в бане меряет аналог и шлет данные в цифре другому контроллеру.
радио-канал для таких мелочей излишен имхо. хотя для уарта 35 метров думаю будет много, либо 232, либо «половинка» 485 в одну сторону (485 в таком вариант и километр пробьет).

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

Хм, так к вайфаю мне что еще одну плату покупать с ардуина?

ESP можно использовать как в паре с другим МК - в таком случае она связывается с МК по UART и общается через AT-команды.

Но можно и использовать в качестве самостоятельного МК. Писать код можно в той же arduino IDE / platformio с теми же функциями: https://arduino-esp8266.readthedocs.io/en/latest/

То на что ты приложил ссылку - плата ESP-01. Она весьма дурацкая - выведены порты под UART и два GPIO, причем для нормального запуска оба должны быть подтянуты куда нужно, иначе не в том режиме запустится. А для того чтобы её прошить как раз надо при включении gpio0 на землю повесить. Кроме того ей питание нужно 3.3v, а не 5.

ESP-01 как раз подходит для работы в режиме AT-команд.


Я же тебе предлагал такую плату. Правда купить её можно рублей за 120.

Она ардуиноподобна и имеет какое-то количество свободных GPIO к которым можно подключить твое табло. Питается и прошивается по usb.

DS18B20 к ней тоже прицепить можно. И один аналовый вход имеется.

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

радио-канал для таких мелочей излишен имхо.

Но он не дороже провода.

либо 232

И преобразовывать уровни в -5/+5?

либо «половинка» 485 в одну сторону

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

как вариант один контроллер в бане меряет аналог и шлет данные в цифре другому контроллеру.

ds18b20 через цифровой 1wire на 30м без проблем будет рабоатать.

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

уарт не дифпара, все наводки твои со всеми вытекающими, 35 метров это много для уарта. 485 правильно предложили

1wire все та же шляпа, без экранирования получим тыкву

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

должен убрать помехи, экран паять на стороне мк

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

52.5 - 57.5 при погрешности в 5 градусов. Погрешность которую ты казал 10 градусов.

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

Да забей ты на эту херню. Сделай обычный спиртовой термометр и вебку. Или засунь туда датчик от уличного и вебку. Или окошко в баню и вебку.

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

уарт не дифпара, все наводки твои со всеми вытекающими, 35 метров это много для уарта

Про uart я ничего и не писал. Писал когда-то про SPI и предположил что он сможет на низких скоростях работать на такое расстояние (возможно надо будет конденсаторов повесить), но я в этом не уверен.

485 правильно предложили

Не спорю, но для этого ТС надо будет ещё и преобразователи ttl - rs485 добывать и разбираться.

1wire все та же шляпа

Но она медленная. Заявляется работа на длине в 300м с использованием витой пары, а где-то утверждается что на 30м работает с обычным телефонным проводом.

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

ds18b20 через цифровой 1wire на 30м без проблем будет рабоатать.

Но этого мало, ТС еще же данные от термопары из топки хочет.

rs232 легко преобразовать в ИРПС, сразу с опторазвязкой. http://mypractic.ru/urok-52-interfejs-irps-cifrovaya-tokovaya-petlya-princip-...

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

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

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

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

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

Не спорю, но для этого ТС надо будет ещё и преобразователи ttl - rs485 добывать и разбираться.

зачем ?? adm485 на чипдипе стоит 130 рублев. и это просто ткнул пальтцем в интернет. если немного поковыряться и дешевле найдешь. плюс учитывая широкую распространенность 485 в пром.применении их навалом в любой конторе.
и даже можно не морочится диф.парой. взять текущий кабель и скрутить его. на 30 метрах хрен какая помеха проскочит.
хотя без развязки наводки возможно будут вешать процессор., но это возможно в любом случае без развязки что уарт/спи/1вире…

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

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

Мужик твой взял витуху в ЭКРАНЕ, нихрена умного он не сделал, пройди в вики уже, почитай за счет чего работает витуха в диф схемах

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

разве esp286 не для этого сделана?

ESP8266? Ее делали как приемник-передатчик вайфая, но теперь это достаточно толстый микроконтроллер с чем только можно. Но автору такое использовать явно неспортивно, я бы советовал что-то на 433 мегагерца - это и дешевле, и интереснее.

ruzisufaka
()

Предлагаю автору купить wiznet w5500 и соединить все эзернет-кабелем, раз он так кабели любит

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

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

ага, конечно, с разбегу. FTP кабель стоит раза в два дороже чем UTP. дык знаю теорию симметричного дфи.сигнала :) но даже несимметричный rs232 через 2 витые utp-пары работал лучше, чем просто через несимметричный кабель.

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

рука лицо, я пожалуй завяжу что-то разжевывать

Morin ★★★★★
()

ТС, ты школотрон?

burato ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.