Я использую Maxim DS18x20 (у меня на самом деле более одного варианта) 1-проводные датчики температуры, чтобы регистрировать температуру в разных комнатах моего дома раз в минуту. Около одного чтения из тысячи я получаю что-то полностью поддельное. В середине последовательности, которая постепенно повышается с 65F до 70F, я получаю что-то вроде -32.1F или 15.64F.
У кого-нибудь еще была такая проблема, или это что-то не так с моей настройкой? Если это просто известная проблема с этими вещами, мне придется сделать что-то вроде трех чтений и выброса выброса.
Несколько слов о моей настройке:
- Я бегу на 3.3В
- Я проверяю контрольную сумму чтения, когда оно возвращается к arduino, и оно совпадает (или я думаю, что оно совпадает - в этом коде всегда может быть ошибка).
- Они убегают от нормальной силы, а не от паразитирующей.
- У меня есть подтягивающий резистор 4.7K.
- Я использую только один датчик на каждой сенсорной платформе.
- Датчик находится на печатной плате, подключенной к Arduino, который читает его.
- Я вижу ту же проблему чтения с разных ардуино (diecimilla, pro-mini, самодельный кастом)
arduino
temperature
1-wire
edebill
источник
источник
Если вы не можете найти источник ошибочных показаний, должно быть легко отфильтровать их и экстраполировать из предыдущих показаний , или интерполировать между показаниями, если задним числом важно. Поскольку вы производите выборку раз в минуту, вы можете просто скопировать последнее чтение; комнатная температура вряд ли изменится за одну минуту.
источник
Это может быть связано с неправильным считыванием контроллером одного или нескольких битов температурного отклика при определенных условиях высокой нагрузки или из-за электрических помех, повреждающих один или несколько битов.
Внимательно посмотрите лист данных здесь http://www.rentron.com/Files/ds18b20.pdf
На странице 5 показано, что точная двоичная последовательность для 85C:
+85°C 0000 0101 0101 0000
Аналогично, для 25C это:
+25.0625°C 0000 0001 1001 0001
В некоторых случаях, если контроллер пропускает бит, вы получите значение, которое является фактической температурой, выраженной в двоичном и сдвинутом битах. Часто это в 1/2 раза превышает целевое значение в C.
Иногда вы можете получить электрические помехи в линии, и контроллер читает целый клочок 1 с. В этом случае вы получите некоторое число, например 15,64, которое в двоичном виде на самом деле очень близко к числам между 65 и 70F, за исключением куча 1 с в начале.
источник
Что бы это ни стоило, я немного поработал с DS18B20 несколько месяцев назад. Я снял короткое видео и сделал запись в своем блоге, где есть ссылки на примеры и пример кода. Надеюсь, это может немного помочь! http://dailyduino.com/archives/552
источник
У меня 13 из них работает в моем доме уже около четырех лет. С базой данных сложно работать (я отслеживал все образцы). Но я не видел такого рода поведение. Вместо этого, каждый раз, когда один датчик замораживает и блокирует все остальные, единственным выходом из этого (который я обнаружил) было отключение напряжения питания на несколько секунд. Поэтому я добавил к своей плате крошечное реле, и всякий раз, когда микроконтроллер чувствует это, он сбрасывает всю цепочку датчиков. Это происходит несколько раз в неделю.
источник