Фильтрация значений датчика DS18B20

в сотый раз про DS18B20

Использование датчиков и обсуждение пользовательских блоков к ним
Ответить
tarakanov
Рядовой
Сообщения: 8
Зарегистрирован: 10.06.2018{, 20:48}
Репутация: 0

Фильтрация значений датчика DS18B20

#1

Сообщение tarakanov » 30.07.2018{, 13:31}

Всем привет.
Датчик измеряет температуру в аквариуме. Если выводить показания напрямую, то температура прыгает в пределах 0,5-0,7 градуса случайным образом (что вроде бы соответствует характеристикам). Вывод усреднённого значения вроде бы улучшил ситуацию. А вот пользовательский блок для вычисления медианы дал практически идеальный результат: значение вообще не прыгает. Но есть проблема: время от времени выводится ошибочное значение, которое ровно на 0,5 градуса меньше истинного. В принципе ерунда, но в будущем это будет обратная связь для термостата, поэтому хочется разобраться в чём дело.
Датчик герметичный в металлической гильзе, с АлиЭкспресса. Кабель наращен, общая длина около 2м, используется резистор на 4,7 кОм. Периодичность опроса 3 сек, других устройств на шине нет. Встроенный и пользовательский блоки датчика дают одинаковый результат.
Да, ещё оказалось что показания на 1,5 градуса ниже реальных (проверил ртутным лабораторным термометром).
Вложения
temp.png

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Фильтрация значений датчика DS18B20

#2

Сообщение Alias » 30.07.2018{, 14:22}

А если так усреднить? Можно массив и покрупнее задать.
Вложения
Aqua.flp
(190.81 КБ) 137 скачиваний

tarakanov
Рядовой
Сообщения: 8
Зарегистрирован: 10.06.2018{, 20:48}
Репутация: 0

Фильтрация значений датчика DS18B20

#3

Сообщение tarakanov » 30.07.2018{, 15:55}

Alias писал(а):
30.07.2018{, 14:22}
А если так усреднить? Можно массив и покрупнее задать.
Так это обычное среднеарифметическое. Всё равно есть "дрожание" значения, просто разброс меньше. А вот проверку CRC и ERROR добавлю.
Меня смущает, что "глючные" значения всегда строго на 0,5 меньше реальных.

Отправлено спустя 2 часа 26 минут 42 секунды:
Добавил проверку, не помогло. Добавил условие: если новое значение меньше текущего на 0.4, оно не учитывается. Вот такие костыли :smile44:
Вложения
temp.png

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Фильтрация значений датчика DS18B20

#4

Сообщение Alias » 30.07.2018{, 19:55}

Я бы ушел от таких тяжелых типов переменных. Вот Вам мечта перфекциониста:
Каждый такт - в данном случае ежесекундно - считываем показания с датчика и, если нет ошибки, заносим в стек, сравнивая разницу между двумя соседними по времени измерениями и, если разница между ними не больше двух десятых, заносим новое показание датчика в переменную.
Имхо.
Не забудьте - значения в переменной 10х, то есть с десятыми, но без "запятой" :smile44:
Вложения
aqua_2.flp
(224.17 КБ) 139 скачиваний

tarakanov
Рядовой
Сообщения: 8
Зарегистрирован: 10.06.2018{, 20:48}
Репутация: 0

Фильтрация значений датчика DS18B20

#5

Сообщение tarakanov » 30.07.2018{, 20:44}

Сдаётся мне, такая конструкция работать не будет. Нефильтрованные показания прыгают в бОльшем диапазоне, чем 0,4 градуса. Если такое случайное значение выпрыгнет за диапазон, а потом температура продолжит меняться в том же направлении, то показания просто "зависнут". Во-вторых как быть при включении (свет мигнул)? Ну и в третьих на экране будет хаотичное дрожание в разрешённом диапазоне.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Фильтрация значений датчика DS18B20

#6

Сообщение Alias » 30.07.2018{, 21:06}

Она не может меняться бесконечно и пропуски в несколько секунд для аквариума категорически не фатальны. Данные будут доступны для системы после того, как значения устаканятся, что нам и нужно, ведь, очевидно, что температура воды не может меняться быстро.
Свет мигнул? Получили 85С и отсеяли, максимум несколько секунд - и показания в тренде.
Дрожание? У меня куча датчиков, не сталкивался с таким поведением. Но, опять же, соберите стек для среднего и забудьте, что там дрожало.
Можно вообще не выводить десятые на экран, пусть автоматика отслеживает запятые, но наблюдателю что зачем цветомузыка? Да и термостат, даже если и будет пытаться ловить эти десятые, на поведение системы никак не повлияет, тк теплоемкость и масса воды - колоссальная интегрирующая цепь.
Впрочем, проект Ваш и я все, что мог прокомментировать исходя из скупости описания проекта, прокомментировал.

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Фильтрация значений датчика DS18B20

#7

Сообщение nalnik » 30.07.2018{, 21:53}

У DS18B20 разрядность 0,06 градуса.
Так и работайте с сотыми (выводите на экран) - заметите разницу. Прыгать будит только на 0,06.
А уставку ставьте к примеру в 0,1 градуса и дельту в 0,1.
У меня так управление двухконтурным котлом на отопление дома работает, но я еще добавил - реле не может переключатся чаще одного раза за три секунды.
Зимой температура не превышает уставку на +- 0,3 градуса.
Я хочу быть добрее, но люди сами нарываются.

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Фильтрация значений датчика DS18B20

#8

Сообщение dizzyy » 30.07.2018{, 22:24}

И у меня по такому датчику прыгает 0.05-0.06{немогу понять розрядность)

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Фильтрация значений датчика DS18B20

#9

Сообщение nalnik » 30.07.2018{, 22:29}

dizzyy
Это потому что округление через одно место работает, поэтому при десятых прыгает по 0,5 градуса.
Я хочу быть добрее, но люди сами нарываются.

tarakanov
Рядовой
Сообщения: 8
Зарегистрирован: 10.06.2018{, 20:48}
Репутация: 0

Фильтрация значений датчика DS18B20

#10

Сообщение tarakanov » 30.07.2018{, 23:03}

Свет мигнул? Получили 85С и отсеяли, максимум несколько секунд - и показания в тренде.
Пожалуй что да, зависания будут только в случае очень быстрого изменения температуры, что для 150л аквариума вряд ли возможно.
Alias писал(а):
30.07.2018{, 21:06}
Дрожание? У меня куча датчиков, не сталкивался с таким поведением.
Вот это странно, может с моим датчиком что-то не то? Мало того, что показания прыгают, так ещё и статическая ошибка в 1,5 градуса
nalnik писал(а):
30.07.2018{, 22:29}
Это потому что округление через одно место работает, поэтому при десятых прыгает по 0,5 градуса.
Я правильно понял, что если вывести на экран не 26,8 а 26,81 то колебания уменьшатся?

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Фильтрация значений датчика DS18B20

#11

Сообщение Alias » 30.07.2018{, 23:33}

Не думаю, что датчик изменит показания, если на него будут в мелкоспоп смотреть :) Слышал, что есть разные версии DS18, какие-то грубые, иные - с тонкой душевной организацией, но и их тоже можно как-то заставить работать грубо. Но так и не понял, как это задать. Ни в одном пользовательском блоке нет такого параметра, чтобы управлять разрядностью датчика. Или не нашел. У Вас не с паразитным питанием, кстати?
Если честно, то аквариум не тот случай, чтобы гнаться за долями. У меня сейчас вообще вода за 26,7, и ничего, только кормить не забывай :) Рыбы ничего не знают о научных изысканиях ихтиологов и живут в тех условиях, которые им предоставлены, остальное - от лукавого. Про морской не скажу.

tarakanov
Рядовой
Сообщения: 8
Зарегистрирован: 10.06.2018{, 20:48}
Репутация: 0

Фильтрация значений датчика DS18B20

#12

Сообщение tarakanov » 30.07.2018{, 23:37}

Alias писал(а):
30.07.2018{, 23:33}
Если честно, то аквариум не тот случай, чтобы гнаться за долями.
Схема из первого сообщения работает практически идеально, за исключением небольшого глюка. Но этот глюк настолько странный, что прям не даёт мне покоя :yes: :smile14:

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Фильтрация значений датчика DS18B20

#13

Сообщение Alias » 30.07.2018{, 23:54}

Ну, это другой разговор ))) Странностей хватает на каждом шагу. Я, когда макетирую отдельные элементы своих проектов, часто с этим сталкиваюсь, и можно было бы костылями подпереть, но душа не лежит и начинаешь копать глубже. Вижу в этом только перспективы - как решения проблемы, так и углубление знаний и расширение кругозора.
Что же по датчику, то я бы попробовал другой. Нет, не сразу в воду, а на стенде посмотреть, как кто себя ведет и какие пользовательские блоки что показывают. И оставить ту погрешность, что есть, ведь если Вы промерите температуру воды в разных точках объема, то озадачитесь совсем другими вопросами )))

Ответить

Вернуться в «Датчики температуры, влажности и давления»