Фильтрация значений датчика DS18B20
Фильтрация значений датчика DS18B20
Всем привет.
Датчик измеряет температуру в аквариуме. Если выводить показания напрямую, то температура прыгает в пределах 0,5-0,7 градуса случайным образом (что вроде бы соответствует характеристикам). Вывод усреднённого значения вроде бы улучшил ситуацию. А вот пользовательский блок для вычисления медианы дал практически идеальный результат: значение вообще не прыгает. Но есть проблема: время от времени выводится ошибочное значение, которое ровно на 0,5 градуса меньше истинного. В принципе ерунда, но в будущем это будет обратная связь для термостата, поэтому хочется разобраться в чём дело.
Датчик герметичный в металлической гильзе, с АлиЭкспресса. Кабель наращен, общая длина около 2м, используется резистор на 4,7 кОм. Периодичность опроса 3 сек, других устройств на шине нет. Встроенный и пользовательский блоки датчика дают одинаковый результат.
Да, ещё оказалось что показания на 1,5 градуса ниже реальных (проверил ртутным лабораторным термометром).
Датчик измеряет температуру в аквариуме. Если выводить показания напрямую, то температура прыгает в пределах 0,5-0,7 градуса случайным образом (что вроде бы соответствует характеристикам). Вывод усреднённого значения вроде бы улучшил ситуацию. А вот пользовательский блок для вычисления медианы дал практически идеальный результат: значение вообще не прыгает. Но есть проблема: время от времени выводится ошибочное значение, которое ровно на 0,5 градуса меньше истинного. В принципе ерунда, но в будущем это будет обратная связь для термостата, поэтому хочется разобраться в чём дело.
Датчик герметичный в металлической гильзе, с АлиЭкспресса. Кабель наращен, общая длина около 2м, используется резистор на 4,7 кОм. Периодичность опроса 3 сек, других устройств на шине нет. Встроенный и пользовательский блоки датчика дают одинаковый результат.
Да, ещё оказалось что показания на 1,5 градуса ниже реальных (проверил ртутным лабораторным термометром).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Фильтрация значений датчика DS18B20
А если так усреднить? Можно массив и покрупнее задать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Фильтрация значений датчика DS18B20
Так это обычное среднеарифметическое. Всё равно есть "дрожание" значения, просто разброс меньше. А вот проверку CRC и ERROR добавлю.
Меня смущает, что "глючные" значения всегда строго на 0,5 меньше реальных.
Отправлено спустя 2 часа 26 минут 42 секунды:
Добавил проверку, не помогло. Добавил условие: если новое значение меньше текущего на 0.4, оно не учитывается. Вот такие костыли

У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Фильтрация значений датчика DS18B20
Я бы ушел от таких тяжелых типов переменных. Вот Вам мечта перфекциониста:
Каждый такт - в данном случае ежесекундно - считываем показания с датчика и, если нет ошибки, заносим в стек, сравнивая разницу между двумя соседними по времени измерениями и, если разница между ними не больше двух десятых, заносим новое показание датчика в переменную.
Имхо.
Не забудьте - значения в переменной 10х, то есть с десятыми, но без "запятой"
Каждый такт - в данном случае ежесекундно - считываем показания с датчика и, если нет ошибки, заносим в стек, сравнивая разницу между двумя соседними по времени измерениями и, если разница между ними не больше двух десятых, заносим новое показание датчика в переменную.
Имхо.
Не забудьте - значения в переменной 10х, то есть с десятыми, но без "запятой"

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Фильтрация значений датчика DS18B20
Сдаётся мне, такая конструкция работать не будет. Нефильтрованные показания прыгают в бОльшем диапазоне, чем 0,4 градуса. Если такое случайное значение выпрыгнет за диапазон, а потом температура продолжит меняться в том же направлении, то показания просто "зависнут". Во-вторых как быть при включении (свет мигнул)? Ну и в третьих на экране будет хаотичное дрожание в разрешённом диапазоне.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Фильтрация значений датчика DS18B20
Она не может меняться бесконечно и пропуски в несколько секунд для аквариума категорически не фатальны. Данные будут доступны для системы после того, как значения устаканятся, что нам и нужно, ведь, очевидно, что температура воды не может меняться быстро.
Свет мигнул? Получили 85С и отсеяли, максимум несколько секунд - и показания в тренде.
Дрожание? У меня куча датчиков, не сталкивался с таким поведением. Но, опять же, соберите стек для среднего и забудьте, что там дрожало.
Можно вообще не выводить десятые на экран, пусть автоматика отслеживает запятые, но наблюдателю что зачем цветомузыка? Да и термостат, даже если и будет пытаться ловить эти десятые, на поведение системы никак не повлияет, тк теплоемкость и масса воды - колоссальная интегрирующая цепь.
Впрочем, проект Ваш и я все, что мог прокомментировать исходя из скупости описания проекта, прокомментировал.
Свет мигнул? Получили 85С и отсеяли, максимум несколько секунд - и показания в тренде.
Дрожание? У меня куча датчиков, не сталкивался с таким поведением. Но, опять же, соберите стек для среднего и забудьте, что там дрожало.
Можно вообще не выводить десятые на экран, пусть автоматика отслеживает запятые, но наблюдателю что зачем цветомузыка? Да и термостат, даже если и будет пытаться ловить эти десятые, на поведение системы никак не повлияет, тк теплоемкость и масса воды - колоссальная интегрирующая цепь.
Впрочем, проект Ваш и я все, что мог прокомментировать исходя из скупости описания проекта, прокомментировал.
- nalnik
- Подполковник
- Сообщения: 1320
- Зарегистрирован: 14 май 2016, 17:12
- Откуда: Кисловодск
- Имя: Александр
Фильтрация значений датчика DS18B20
У DS18B20 разрядность 0,06 градуса.
Так и работайте с сотыми (выводите на экран) - заметите разницу. Прыгать будит только на 0,06.
А уставку ставьте к примеру в 0,1 градуса и дельту в 0,1.
У меня так управление двухконтурным котлом на отопление дома работает, но я еще добавил - реле не может переключатся чаще одного раза за три секунды.
Зимой температура не превышает уставку на +- 0,3 градуса.
Так и работайте с сотыми (выводите на экран) - заметите разницу. Прыгать будит только на 0,06.
А уставку ставьте к примеру в 0,1 градуса и дельту в 0,1.
У меня так управление двухконтурным котлом на отопление дома работает, но я еще добавил - реле не может переключатся чаще одного раза за три секунды.
Зимой температура не превышает уставку на +- 0,3 градуса.
Я хочу быть добрее, но люди сами нарываются.
Фильтрация значений датчика DS18B20
И у меня по такому датчику прыгает 0.05-0.06{немогу понять розрядность)
- nalnik
- Подполковник
- Сообщения: 1320
- Зарегистрирован: 14 май 2016, 17:12
- Откуда: Кисловодск
- Имя: Александр
Фильтрация значений датчика DS18B20
dizzyy
Это потому что округление через одно место работает, поэтому при десятых прыгает по 0,5 градуса.
Это потому что округление через одно место работает, поэтому при десятых прыгает по 0,5 градуса.
Я хочу быть добрее, но люди сами нарываются.
Фильтрация значений датчика DS18B20
Пожалуй что да, зависания будут только в случае очень быстрого изменения температуры, что для 150л аквариума вряд ли возможно.Свет мигнул? Получили 85С и отсеяли, максимум несколько секунд - и показания в тренде.
Вот это странно, может с моим датчиком что-то не то? Мало того, что показания прыгают, так ещё и статическая ошибка в 1,5 градусаAlias писал(а): 30 июл 2018, 21:06Дрожание? У меня куча датчиков, не сталкивался с таким поведением.
Я правильно понял, что если вывести на экран не 26,8 а 26,81 то колебания уменьшатся?nalnik писал(а): 30 июл 2018, 22:29Это потому что округление через одно место работает, поэтому при десятых прыгает по 0,5 градуса.
- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Фильтрация значений датчика DS18B20
Не думаю, что датчик изменит показания, если на него будут в мелкоспоп смотреть
Слышал, что есть разные версии DS18, какие-то грубые, иные - с тонкой душевной организацией, но и их тоже можно как-то заставить работать грубо. Но так и не понял, как это задать. Ни в одном пользовательском блоке нет такого параметра, чтобы управлять разрядностью датчика. Или не нашел. У Вас не с паразитным питанием, кстати?
Если честно, то аквариум не тот случай, чтобы гнаться за долями. У меня сейчас вообще вода за 26,7, и ничего, только кормить не забывай
Рыбы ничего не знают о научных изысканиях ихтиологов и живут в тех условиях, которые им предоставлены, остальное - от лукавого. Про морской не скажу.

Если честно, то аквариум не тот случай, чтобы гнаться за долями. У меня сейчас вообще вода за 26,7, и ничего, только кормить не забывай

Фильтрация значений датчика DS18B20
Схема из первого сообщения работает практически идеально, за исключением небольшого глюка. Но этот глюк настолько странный, что прям не даёт мне покоя


- Alias
- Лейтенант
- Сообщения: 481
- Зарегистрирован: 27 ноя 2017, 13:15
- Откуда: Rus44
- Имя: Michael
- Контактная информация:
Фильтрация значений датчика DS18B20
Ну, это другой разговор ))) Странностей хватает на каждом шагу. Я, когда макетирую отдельные элементы своих проектов, часто с этим сталкиваюсь, и можно было бы костылями подпереть, но душа не лежит и начинаешь копать глубже. Вижу в этом только перспективы - как решения проблемы, так и углубление знаний и расширение кругозора.
Что же по датчику, то я бы попробовал другой. Нет, не сразу в воду, а на стенде посмотреть, как кто себя ведет и какие пользовательские блоки что показывают. И оставить ту погрешность, что есть, ведь если Вы промерите температуру воды в разных точках объема, то озадачитесь совсем другими вопросами )))
Что же по датчику, то я бы попробовал другой. Нет, не сразу в воду, а на стенде посмотреть, как кто себя ведет и какие пользовательские блоки что показывают. И оставить ту погрешность, что есть, ведь если Вы промерите температуру воды в разных точках объема, то озадачитесь совсем другими вопросами )))
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя