Калибровка датчика DS18b20
- Войдите на сайт для отправки комментариев
Добрый день форумчане!
Прошу подсказать сталкивался ли кто то с такими проблеммами с температурным датчиком DS18b20. Возникли у меня подозрения, что брешит у меня датчик температуры. Решил его проверить. Закипятил воду и опустил в кипящую воду датчик. При грубом приблежении считаю, что вода кипит при температуре 100 градусов (не учитываю погрешность на атмосферное давление, поскольку я нахожусь не в горах). Датчик показывает 93 градуса. На форуме встречал обсуждение, что эти датчики могут завышать немного температуру при измерениях, а у меня получается наоборот, температура занижается и причем значительно около 7%.
И вот сам вопрос. Как можно откалибровать датчик и вообще возможно ли это сделать?
Есть мысль провести простую калибровку по двум точкам 0 градусов и 100 градусов, составить уравнение прямой и записать это уравнение в скетч. Но возникло одно НО! Чобы построить график необходимо иметь 2 параметра один из которых будет температура и будет зависеть от второго параметра, но какой взять второй параметр не знаю. Поэтому и график не могу построить.
А вы провели хим. анализ воды? 100 градусов очень приблизительное значение для закипания и может сильно меняться в зависимости от состава воды (так же как и замерзание, где-то читал что при очень хороших условиях при нормальном давлении дистилированная вода превращается в лед аж при -20 градусов). При таких температурах если мне не изменяет память точность 18В20 составляет около 1 градуса в обе стороны.
Нет, хим анализ я не проводил. Я же сразу указал, что температуру кипения принимаем равной 100 градусов с большим приблежением. И даже погрешность около 1 градуса в обе стороны - это лучше чем 7 градусов как сейчас.
Берете лед кубиками, смешиваете с водой, ждете 10 мин, если лед еще остался в емкости температуру воды принимаем за 0 градусов
Про 100гр забудьте, их сможете проверить, только имея калиброванный термометр. Самая доступная в домашних условиях контрольная точка, это вы сами. Померили температуру ртутным термометром, потом на тоже место DS18 и следите по монитору, пока не перестала расти.
0 гр, вроде как получают при смешивании льда с водой, но не имея калиброванного термометра утверждать это не возьмусь.
Как то пытался экспериментировать на предмет погрешности, взял пять датчиков из разных партий, расположил на ткани рядом закрыв от сквозняков. Разброс температур оказался в 0,2гр от минимума до максимума. Так что датчики достаточно точные.
Ну и последний вопрос, зачем Вам такая точность?
Ну, о какой точности идет речь? Мне не нужна точность в 0,5 градусов, один градус туда сюда - это для меня нормально, а 7 градусов туда сюда - это уже не термометр. Я тоже с такой погрешностью могу температуру определять.
Где правда, Вы без соответствующих условий и инструментов понять никогда не сможете.
1. Вы не знаете точку кипения воды в Вашем случае (можем рассчитать по барометру).
2. Вы не знаете состав контролируемой воды. (можем взять дистиллированную).
3. Мы не знаем, как вы погружали датчик. (лапы, провода это все эффективные теплоотводы).
Для более - менее точной калибровки в домашних условиях могу предложить следующее: Сколачиваете ящик, четыре лампы по углам, собираете схему термостата на своем датчике, в середину ящика ртутный термометр (если есть и должен поместиться полностью равноудаленно от ламп) и рядом свой датчик, сравниваете (так можно за пару градусов ручаться).
Нет, как сравнить показатели датчика с поверенным термометром - это не проблемма. Я это сделаю, благо на работе куча поверенного оборудования. Меня больше интересует, как потом в скетче скорректировать показания датчика? Вот в чем вопрос!
Так как в математике не очень, то создал бы таблицу отклонений по всему диапазону и в зависимости от результата отнимал или прибавлял поправку на полученное значения. Если в состоянии написать функцию, то по ней.
Соберите термомтер в каком-никаком корпусе, чтобы "не сопли". Отнесите в ближайшую метрологическую лабораторию. За небольшу денюшку получите таблицу поправок в указанном Вами диапазоне температур.
По документам DS18b20 +-0,5градуса. В реале все приезжавшие мне в неё укладывались, кроме одного в трубке нержавейке, но я его точно не проверял пока, а предварительно (по сравнению с рядом лежащим другим) занижал на 2град. Калибровать по кипению неточно и неудобно. Кипение жидкости процесс неравномерны, динамичный, возникают холодные и горячие точки и перегрев воды выше 100 не такая уж и экзотика. Если сильно хочется - термоизолируйте стенки, толстое дно и медленное кипение чуть подсолив воду.
Начните с тающего льда, лед растолчите, чтоб получилась кашица и в пластиковой посуде (чтоб не таял быстро) дайте датчику полежать пару минут. провода от датчика на сантиметров 5 тоже должны быть в посуде. Это 0градусов. Для нормальной водопроводной воды отклонения до 0,1град. Для дистилированой еще меньше.
У меня датчик итак в алюминиевом корпусе и запян термоусадкой, так что соплей нет никаких. По поводу поправок, снова повторюсь, не проблемма их сделать. Я не понимаю как потом эти поправки применить на практике? Я думаю, что показанию датчика носят линейный характер, значит можно рассчитать уравнение кривой в формате:
у=kx+b,
где у-температура скорректированная, х-температрура показания датчика, а k и b поправочные коэффициенты.
Я не понимаю как это уравнение воткнуть в скетч, чтобы автоматически пересчитывать температуру. Вот в чем загвоздка.
Так вы сперва получите эти поправки по всему диапазону, а потом можно двигаться дальше. Пока, рассуждения ни о чем. В любом случае temp = temp+popr;. Вот получение popr уже зависит от полученных в эксперименте результатов.
Для табличного варианта будет упрощенно: if (temp > 20) {popr = 1;} if (temp > 30) {popr = 2;} -
Если Ваш датчик в трубке, то это уже говорит о термоинерционности. Измерьте кривую показаний датчика от времени его нахождения в точке измерения. Может нужно дольше ждать пока тепло дойдёт до него? Сделайте эксперимент всухую.
Подскажите, а можно ли от этого датчика получить какой либо другой сигнал, например в мВ?
Есть мысль провести простую калибровку по двум точкам 0 градусов и 100 градусов, составить уравнение прямой и записать это уравнение в скетч. Но возникло одно НО! Чобы построить график необходимо иметь 2 параметра один из которых будет температура и будет зависеть от второго параметра, но какой взять второй параметр не знаю. Поэтому и график не могу построить.
линейности у этого датчика нет. и ваша прямая даст погрешность в температурах.
7 градусов это многовато. возможно бракованый.
Сразу надо убедится что там есть эти 7градусов. При аккуратной калибровке вероятно там окажется до 0,5 и никаких поправок и урванений не потребуется.
Подскажите, а можно ли от этого датчика получить какой либо другой сигнал, например в мВ?
Нет, это цифровой датчик.
1. По поводу построения графика: по одной оси (абсцисса) откладываются показания датчика, а по другой (ордината) - истинная температура.
2. Датчик нелинеен по определению. Поэтому что будет больше - пользы или вреда - от попрытки перерастянуть шкалу по двум точкам - совершенно неочевидно. Вполне вероятно, что в наиболее употребительном диапазоне после этого погрешность сильтно возрастет.
3. Единственное, что можно пытаться сделать - калибровать по эталонному прибору (т.е. образцовому термометру). Первую калибровку, думаю, можно попытаться провести с шагом порядка 5 градусов, а потом, при необходимости, на некоторых участках шаг можно будет уменьшить.
4. Да, если с прибором возникают проблемы, следовало бы проверить еще и на равномерность шкалы, т.е. в диапазоне нескольких градусов снять максимально подробную кривую (шаг не более 0.5 градуса) и убедиться в ее линейности.
5. Если прибор показывает что-то невразумительное, и Вы уверены, что измерения проводите правильно, лучше заменить такой прибор исправным.
Спасибо большое всем за комментарии.
Уважаемые, кто-нибудь разобрался с возможностью корректировки показаний датчика DS18B20 в библиотеке OneWire. Датчики врут безбожно. Собрал три устройства контроля температуры, все при комнатной температуре 24 градуса показывают 29. Это не допустимо. Добился более менее корректных показаний по формуле пересчета температуры цельсия в кельвины в библиотеке DallasTemperature.h. А как это можно сделать в библиотеке OneWire.
А как это можно сделать в библиотеке OneWire.
Ручками, по формуле. Сама библиотека никаких пересчётов не содержит.
Если не сложно, подскажите формулу пересчета
Собрал три устройства контроля температуры, все при комнатной температуре 24 градуса показывают 29. Это не допустимо.
чем температуру меряли? Каким термометром?
Раз прикатил к нам в школу швед - физик. Собрал установку для проверки закона прямой зависимости давления от температуры. Налил в химстакан воды из под крана, сунул туда лабораторный термометр. Стакан на плитку... Вода закипела при 80 гр. С. Он чуть не упал....
электронным, точность 0.1 С. Сразу при включении показывает 26С и в течении 3-4 минут поднимается до 29 градусов.
Если не сложно, подскажите формулу пересчета
Какую формулу? Цельсия в Фаренгейт? Простите, ну вот, правда - сложно. Вам в лом набрать в гугле "Цельсий в фаренгейт", а я буду тут пальцы бить? Совсем уже наглость потеряли!
Добился более менее корректных показаний по формуле пересчета температуры цельсия в кельвины в библиотеке DallasTemperature.h. А как это можно сделать в библиотеке OneWire.
Кельвины не приемлемы, уже писал. Нужна формула пересчета в библиотеке OneWire.
Нужна формула пересчета в библиотеке OneWire.
Ну, нету её там :(
Можно купить кусок провода из безкислородной меди и повеситься. Нету :(
электронным, точность 0.1 С. Сразу при включении показывает 26С и в течении 3-4 минут поднимается до 29 градусов.
А электронный с точностью 0,1гр тоже из поднебесной? Суньте себе под мышку и подождите пока не стабилизируется, под другую ртутный медицинский на пять минут. После этого сравнения можно что то говорить.
Как проверка проводилась тоже ни слова. Сквозняки, поверхность, удаление от теплоемких объектов (вас в том числе), расположение всех термометров, частота считывания и т.д.
Вот вся формула пересчета, к OneWire она отношения не имеет:
celsius = (ds.read() | (ds.read()<<8))/16.0;
Ага...Частота опроса ds, точность отображения на дисплей... Эталонный термометр поверенный?
Пацаны, зачем мозг друг другу парить? Если знаете помогите, не знаете, не надо флудить. Неужели нечем заняться?
Пилять, мозк пока ты паришь. Возьми для начала поверенный термометр, обеспечь условия и с ним сравнивай. Где найти дома достаточно поверенный я тебе уже написал.
Вч ём именно Вам нужна помощь? Чего Вы ожидаете? Можете толково объяснитиь? Если Вы думаете, что фраза
Добился более менее корректных показаний по формуле пересчета температуры цельсия в кельвины в библиотеке DallasTemperature.h. А как это можно сделать в библиотеке OneWire.
в сочетании с другой фразой
Кельвины не приемлемы, уже писал. Нужна формула пересчета в библиотеке OneWire.
Датчик DS18B20 в библиотеке OneWire в теминал выводит показания 29 вместо 23. Что нужно сделать, что бы в терминале было сообщение "23".
celsius = celsius - 6.0; Или сколько душа просит.
электронным, точность 0.1 С. Сразу при включении показывает 26С и в течении 3-4 минут поднимается до 29 градусов.
ха-ха-ха.. :) он у вас греется, включайте правильно:)
Спасибо, проверю.
Может хоть схему включения покажете? Мы не украдём, честное пионерское.
электронным, точность 0.1 С. Сразу при включении показывает 26С и в течении 3-4 минут поднимается до 29 градусов.
ха-ха-ха.. :) он у вас греется, включайте правильно:)
Дело не в подключении. Он начинает грется, если его слишком часто опрашивать (например каждую секунду).
Может хоть схему включения покажете?
я запретил.
Дело не в подключении.
Блин, да ладно! Вот если бы не знал Вас, так подумал бы, что Вы на форуме первый день и ещё не в курсе как умеют подключать местные орлы! :)))
Я вот как-то встречал замечательную фразу - не точно по слуаю, но всё равно в тему: "Цифровую плату, в отличие от аналоговой, трудно развести так, чтобы она оказалась неработспособной из-за наводок, но специалисты имеются" :)
если его слишком часто опрашивать
Так скетч нам тоже не показывают :( Не удивлюсь, если опрашивается при каждом проходе loop
celsius = celsius - 6.0; Или сколько душа просит.
Простой и доступный ответ. Спасибо. Температуру подкорректировал, сейчас выводит как и нужно 23 градуса. Датчик температуры действительно греется в первые минуты включения и показания растут на 3-4 градуса. Ошибиться в подключении трудно, вроде бы все правильно.
celsius = celsius - 6.0; Или сколько душа просит.
Простой и доступный ответ. Спасибо. Температуру подкорректировал, сейчас выводит как и нужно 23
Пацталом :))))))))))))))))))))))) Тушите свет!!!! :)))))))))))))))))
Скетч стандартный ( с доработкой от bwn)
#include <OneWire.h>
mak64, та поймите вы, сей костыль - бред сивой кобылы в темную сентябрьскую ночь. Вы спросили как, я вам ответил, но с датчиками полная херня. Посмотрите 29 пост, я не шутил, вы весьма надежный термостат, а древний термометр измеритель.
Если DS-ки саморазогреваются на 4-5 градусов, это пипец.
Первое, что приходит на ум по вашей фотографии, идет разогрев от какого то элемента проминьки, избавляйтесь. Данная зависимость никогда не будет линейной, а девайс будет казать погоду в Тибете.
Первое, что приходит на ум по вашей фотографии, идет разогрев от какого то элемента проминьки
Ха, он же его прямо над LDO поставил :-D
Ну и опрос раз в 1.5 сек действительно так часто нужен?
Датчик ds18b20 действительно подвержен саморазогреву рабочими токами во время работы. Саморазогрев можно уменьшить снижением рабочего тока датчика до минимально возможного. Позже попробую. Опрос датчика возможен каждые 750 мс, но лучше 1500 мс.
Датчик ds18b20 действительно подвержен саморазогреву рабочими токами во время работы. Саморазогрев можно уменьшить снижением рабочего тока датчика до минимально возможного. Позже попробую.
Это будут десятые градуса, для целых надо очень постараться. Выносите отдельно.
Ну и опрос раз в 1.5 сек действительно так часто нужен?
У меня на ректификаторе каждые 0,75 сек. Но ошибка получается постоянная и на результат не влияет.
Блин, да ладно! Вот если бы не знал Вас, так подумал бы, что Вы на форуме первый день и ещё не в курсе как умеют подключать местные орлы! :)))
Экстрасенсорные навыки развиваю :-) . Если б неправильно подключил, он бы продолжал всё сильней разогреваться и со временем вышел из строя. А если нагрелся на 3 градуса и остановился, тут что-то другое.