ds18b20 не правильно показывает температуру.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

Есть такой датчик температуры ds18b20, подключаю его по трем контактам с резисттором 4.7. Пробовал разные варианты скетча и разные платы ардуино, и всё время мне комнатную температуру показывает 92-93 градуса С. Рукой греть начинаешь изменяет сразу показания, температура растёт. Убираешь руку падает.

Короче комнатную температуру завышает примерно на 70 грудусов, вот думаю толи что то не так делаю. Толи датчик не рабочий. Ну и может быть просто эти 70 градусов отнять и будет работать правильно???

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Или просто - показать свой код и увидеть, что скорее всего, в коде ошибка пересчёта показаний.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

толи в фаренгейтах:)

bwn
Offline
Зарегистрирован: 25.08.2014

Для начала, взять пример из OneWire и с ним запустить.

Dart.sh
Offline
Зарегистрирован: 21.02.2016
#include <OneWire.h>
OneWire ds(9);
 
void setup() {
Serial.begin(9600); 
}
 
void loop() {
 
byte data[2];
ds.reset(); 
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read(); 
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
Serial.println(Temp);
}
Dart.sh
Offline
Зарегистрирован: 21.02.2016

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

Dart.sh
Offline
Зарегистрирован: 21.02.2016

неее, брал код где показывает и цельсиа и фаренгейты и всё равно там не правильно

Гриша
Offline
Зарегистрирован: 27.04.2014

у меня другая библиотека... вот кусок кода для работы с ней

  LowByte = data[0];
  HighByte = data[1];

   TReading = (HighByte << 8) + LowByte;
   
   // Проверяем дубак там или нет
   SignBit = TReading & 0x8000; 
   
   // Если на улице дубак :)
   if (SignBit) 
   { 
       TReading = (TReading ^ 0xffff) + 1; 
   }
   
   // Умножаем на (100 * 0.0625) или 6.25
   Tc_100 = (6 * TReading) + TReading / 4;

   // Отделяем целые от дробных чисел
   Whole = Tc_100 / 100;
   Fract = Tc_100 % 100;

 

Dart.sh
Offline
Зарегистрирован: 21.02.2016

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

bwn
Offline
Зарегистрирован: 25.08.2014

Dart.sh пишет:

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

Датчик то есть второй? Иначе действительно до бесконечности гадать можно.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

под рукой нету, надо взять(((

Гриша
Offline
Зарегистрирован: 27.04.2014

Dart.sh пишет:

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

если есть проблема, то можно немного дольше подождать, пока АЦП закончит  т.е. увеличить до 1 сек.

Я код кидал выше, там формула  - обратите на нее внимание. какой результат?

 у меня, по той формуле, получилось 6 градусов на датчике.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

Dart.sh пишет:

под рукой нету, надо взять(((

я сразу толпой беру и в проверенных магазинах

http://ru.aliexpress.com/item/5pcs-DS18B20-TO92-Sensor-18B20-TO-92-Digital-Thermometer/32380378618.html

Гриша
Offline
Зарегистрирован: 27.04.2014

Valera19701 пишет:

я сразу толпой беру и в проверенных магазинах

ссылка это хорошо, а брака сколько было????

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

пока не было

Гриша
Offline
Зарегистрирован: 27.04.2014

Valera19701 пишет:

пока не было

вот и мне сильно кривые не попадались, ну если только +-2С врут на улице, и то, сомневаюсь, скорее прибора более точного нет... пока собрал 5 датчиков - вроде норм, без брака.

UPD сколько времени на конвертацию выделяете?

Dart.sh
Offline
Зарегистрирован: 21.02.2016

Гриша пишет:

Valera19701 пишет:

пока не было

вот и мне сильно кривые не попадались, ну если только +-2С врут на улице, и то, сомневаюсь, скорее прибора более точного нет... пока собрал 5 датчиков - вроде норм, без брака.

UPD сколько времени на конвертацию выделяете?

 

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

#include <OneWire.h>
OneWire ds(9);
 
void setup() {
Serial.begin(9600); 
}
 
void loop() {
 
byte data[2];
ds.reset(); 
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read(); 
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
Serial.println(Temp);
}
bwn
Offline
Зарегистрирован: 25.08.2014
        float celsius;
        celsius =  (ds.read() | (ds.read()<<8))/16.0;
        Serial.print("  Temperature = ");
        Serial.println(celsius);

Попробуйте так вместо нижних пяти строк.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Примеры попробуйте вот отсюда..... https://github.com/milesburton/Arduino-Temperature-Control-Library

Вдруг у вас с проводами проблемма....

Dart.sh
Offline
Зарегистрирован: 21.02.2016

bwn пишет:

        float celsius;
        celsius =  (ds.read() | (ds.read()<<8))/16.0;
        Serial.print("  Temperature = ");
        Serial.println(celsius);

Попробуйте так вместо нижних пяти строк.

 

попробовал, те же 90 градусов с копейками, буду искать другой датчик

Гриша
Offline
Зарегистрирован: 27.04.2014

Dart.sh пишет:

bwn пишет:

        float celsius;
        celsius =  (ds.read() | (ds.read()<<8))/16.0;
        Serial.print("  Temperature = ");
        Serial.println(celsius);

Попробуйте так вместо нижних пяти строк.

попробовал, те же 90 градусов с копейками, буду искать другой датчик

а оно нуобходимо? если датчик стабилен, сделать ему калибровку, если присутствует линейность - экстраполировать...

 

Dart.sh
Offline
Зарегистрирован: 21.02.2016

можно и попробовать. мне надо что бы он между 24-25 градусами правильно показывал, желательно с погрешностью меньше 0,5 за этими приделами +- локоть по карте

Гриша
Offline
Зарегистрирован: 27.04.2014

Dart.sh пишет:

можно и попробовать. мне надо что бы он между 24-25 градусами правильно показывал, желательно с погрешностью меньше 0,5 за этими приделами +- локоть по карте

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

bwn
Offline
Зарегистрирован: 25.08.2014

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

Dart.sh
Offline
Зарегистрирован: 21.02.2016

пересобирал, менял местами до резистора и после + и сигнальный не чего не менялось. 

bwn
Offline
Зарегистрирован: 25.08.2014

Если хочеться поэкспериментировать, собираем маломощный нагреватель в теплоизолированной коробочке, медленно нагреваем и в диапазоне 20-30 смотрим на монотонное прибавление по 0,0625 градуса. Если нигде не перескакивает, пытаемся обнаружить наш паленый бит, вычитаем его и пользуемся. Где и как такая неисправность выстрелит дальше, предсказать невозможно, это 100% хитрый брак.
По поводу точности, 0,5 это крайнее значение, прошло штук 30 через руки, из разных партий. При колхозной поверке, разброс максимум 0,2 и там половину можно на колхозность списать. Отгораживал только от сквозняков.
При контактном измерении температуры, необходим хороший контакт с объектом. Добрался наконец до своего ректификатора, пока не намазал КТП-8, прыгала как бешеная. После пасты, часами стоит на месте, даже младший разряд не шевелится. Разрядность ток маловата(((. Всего три шага до аварийного отклонения.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

bwn пишет:

Если хочеться поэкспериментировать, собираем маломощный нагреватель в теплоизолированной коробочке, медленно нагреваем и в диапазоне 20-30 смотрим на монотонное прибавление по 0,0625 градуса. Если нигде не перескакивает, пытаемся обнаружить наш паленый бит, вычитаем его и пользуемся. Где и как такая неисправность выстрелит дальше, предсказать невозможно, это 100% хитрый брак.
По поводу точности, 0,5 это крайнее значение, прошло штук 30 через руки, из разных партий. При колхозной поверке, разброс максимум 0,2 и там половину можно на колхозность списать. Отгораживал только от сквозняков.
При контактном измерении температуры, необходим хороший контакт с объектом. Добрался наконец до своего ректификатора, пока не намазал КТП-8, прыгала как бешеная. После пасты, часами стоит на месте, даже младший разряд не шевелится. Разрядность ток маловата(((. Всего три шага до аварийного отклонения.

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

Гриша
Offline
Зарегистрирован: 27.04.2014

bwn, возможно БИТ есть кривой (разряд АЦП), а может источник тока завышен в самом приборе. Т.е. брак сопротивления обратной связи по току - вот с ними (с сопротивлениями), относительно часто встречались проблемы.

 По поводу бита (93 – 24)*16 = примерно 1024 -11 й разряд (инвертируйте 11й бит)

кто сколько времени дает на конвертацию АЦП ?????

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Гриша пишет:

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

От ваших слов у меня рухнули основы мироздания:
Никому нельзя верить  и даже ds18b20

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Dart.sh пишет:

можно и попробовать. мне надо что бы он между 24-25 градусами правильно показывал, желательно с погрешностью меньше 0,5 за этими приделами +- локоть по карте

0.5 ?   Читайте даташит.
Это он делает по паспорту, а обычно 0.1 - 0.2 именно в этом диапазоне

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

bwn пишет:

...... необходим хороший контакт с объектом. Добрался наконец до своего ректификатора, пока не намазал КТП-8, прыгала как бешеная. После пасты, часами стоит на месте, даже младший разряд не шевелится.

Я бы синей изолентой  обмотал всё многослойно.
Она и сквозняк держит хорошо, и прижимает....

bwn
Offline
Зарегистрирован: 25.08.2014

trembo пишет:

bwn пишет:

...... необходим хороший контакт с объектом. Добрался наконец до своего ректификатора, пока не намазал КТП-8, прыгала как бешеная. После пасты, часами стоит на месте, даже младший разряд не шевелится.

Я бы синей изолентой  обмотал всё многослойно.
Она и сквозняк держит хорошо, и прижимает....

Издеваешься? )))), там глухое отверстие в болтах, примерно 2,5см глубиной. Датчик обтачивать пришлось, в итоге сидел довольно туго, а вот тепловой контакт паршивый оказался. После КТП, температура градуса на 4 поднялась+ прыгать перестала.
А сквозняк тоже из личного опыта, поначалу проверял - ставим гирляндой в макетку, смотрим, а там и 0,6 и 0,7 разница бегает. Кладем ту же макетку в коробочку, даем полчасика вылежаться. Чудо, 0,1, максимум 0,2.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

И так что имеем, на всех скечах и примерах одна картина около 93-94 градуса при комнатной температуре. Пробовал менять местами плюс минус, отрубается ардуино, перепаял еще раз схему, итог один. Сегодня взял в магазине другой датчик, та же картина, маркировка на датчике Dallas 18B20    0411B7        115AE

может датчики не те?))

последний используемый код:

#include <OneWire.h>
OneWire ds(10);

void setup() {
Serial.begin(9600); 
}

void loop() {

byte data[2];
ds.reset(); 
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read(); 
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
Serial.println(Temp);
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

Не знаю, откуда у тебя этот код, давай проще. Разбираем полностью схему, повторно собираем. + к +, - к -, средний контакт на 10 пин и к нему резистор 4к7 второй вывод резюка на плюс.
Открываем "Примеры", "OneWire", "DS18x20 Temperature". Запускаем и читаем, что пишет на экране. Все пункты выполняем последовательно, не пропуская.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

Как обычно)) сначала показывает 93, потом пальцами взял начал изменять температуру

 

ROM = 28 D6 72 5D 0 0 0 C3
  Chip = DS18B20
  Data = 1 D8 5 0 0 1F FF 8 10 F7  CRC=F7
  Temperature = 93.50 Celsius, 200.30 Fahrenheit
No more addresses.

ROM = 28 D6 72 5D 0 0 0 C3
  Chip = DS18B20
  Data = 1 F0 5 0 0 1F FF 10 10 EF  CRC=EF
  Temperature = 95.00 Celsius, 203.00 Fahrenheit
No more addresses.
 

bwn
Offline
Зарегистрирован: 25.08.2014

Короче, я не знаю, что вы делаете не так, но датчик отдает температуры правильно.

float celsius;
byte data1 = 0x01;
byte data2 = 0xd8;

byte data3 = 0xf0;

void setup(){
  Serial.begin(9600);
  
  int16_t raw = (data1<<8) | data2;
  celsius = (float)raw / 16.0;
  
  Serial.println(celsius);
  
  raw = (data1<<8) | data3;
  celsius = (float)raw / 16.0;
  Serial.println(celsius);
  
}
void loop(){}
  

Это 0 и 1 байты в вашем "Data". У меня получается 29,5 и 31 градус. Такая высокая, возможно перед измерением в руках крутили.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Мрак полный, не верю! И примеры тоже?

Если-бы 85  показывало тогда понятно было-бы, первое считывание
*The power-on reset value of the temperature register is +85°C.

 

 

bwn
Offline
Зарегистрирован: 25.08.2014

trembo пишет:

Мрак полный, не верю! И примеры тоже?

Если-бы 85  показывало тогда понятно было-бы, первое считывание
*The power-on reset value of the temperature register is +85°C.

Ощущение, что нас либо откровенно троллят, либо что то не договаривают. В иначе считающий МК, не верю.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

Про МК у меня подозрений нет, считал на Pro Micro тот же результат

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

https://cloud.mail.ru/public/BKvS/vhjDAHBcE

 

фотки МК, датчика и разводки проводов скину завтра

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Data = 1 F0 5 0 0 1F FF 10 10 EF  CRC=EF

bwn, тут первый слева - булевый байт наличия датчика.  Второй младший байт темп-ры, третий -старший. Значит  температура в хексе = 0x05F0 , что разделить на 16 и будет 95 градусов. Я бы как и уже говорили старшие колллеги тоже предположил что датчик битый, но тс как я понял купил второй... видимо битая партия, я в чудеса не верю :)

bwn
Offline
Зарегистрирован: 25.08.2014

dimax,  признаю, обсчитался, да еще и результат сошелся.(((( ТС тоже извинения. Первый раз про такое слышу. Берите датчики у дядюшки Вынь Сунь, а не импортозамещенные в отечественных магазинах.))))
А можно и вернуть попытаться. Внимания ни разу не обращал, но согласно описания 5,6,7 байты резервные и имеют константные значения FF OC 10, а здесь 6 принимает какие то произвольные значения.
Буду ковыряться, подключу гирлянду, посмотрю, что там пишет.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

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

А так у меня осталось не замененным только резистор поменять(хотя цешка показывает его правильным) ну и на XP попробовать 

Dart.sh
Offline
Зарегистрирован: 21.02.2016

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

https://cloud.mail.ru/public/5hLT/j77GxtX5R

Гриша
Offline
Зарегистрирован: 27.04.2014

осень плохо, нет конденсатора, маленького такого, с ним надежнее.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

Гриша пишет:

осень плохо, нет конденсатора, маленького такого, с ним надежнее.

 

надежней да, но когда работает через раз, у меня пока не работает даже через раз))

Гриша
Offline
Зарегистрирован: 27.04.2014

Dart.sh пишет:

надежней да, но когда работает через раз, у меня пока не работает даже через раз))

не работает и работает не правильно - разное (в этой теме). пот 34 ведь образовался. как уже решили - списать на брак партии. А конденсаторы (блокировка по питанию) я всегда на ноги леплю, для моих мелких проектов хватает монтажки под пайку или навесной…  

bwn
Offline
Зарегистрирован: 25.08.2014

Гриша пишет:

не работает и работает не правильно - разное (в этой теме). пот 34 ведь образовался. как уже решили - списать на брак партии. А конденсаторы (блокировка по питанию) я всегда на ноги леплю, для моих мелких проектов хватает монтажки под пайку или навесной…  

Самое прикольное, что с точки зрения датчика, все работает правильно((((.

bwn
Offline
Зарегистрирован: 25.08.2014

Dart.sh пишет:

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

https://cloud.mail.ru/public/5hLT/j77GxtX5R

Жестокий вы человек. Заведите макеточку с проводами. И переделывать быстрее и оловом над платой не трясти.

Dart.sh
Offline
Зарегистрирован: 21.02.2016

bwn пишет:

Dart.sh пишет:

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

https://cloud.mail.ru/public/5hLT/j77GxtX5R

Жестокий вы человек. Заведите макеточку с проводами. И переделывать быстрее и оловом над платой не трясти.

 

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

Гриша
Offline
Зарегистрирован: 27.04.2014

bwn пишет:

Самое прикольное, что с точки зрения датчика, все работает правильно((((.

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

bwn
Offline
Зарегистрирован: 25.08.2014

Гриша пишет:

bwn пишет:

Самое прикольное, что с точки зрения датчика, все работает правильно((((.

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

В принципе, да. Засунуть в морозилку и посмотреть на старший байт (05), если он изменяется, то скорее всего все работоспособно, по меньшей мере при комнатных температурах.

Если покажет ниже 80 (04) и ниже 64 (03), значит температурный регистр живой.