Здравствуйте! У меня вопрос по датчиками DS18B20. У меня подключены два датчика DS18B20 один изменяет показания дискретно по 0.5 градуса, а другой на разные величины то 0.16 градуса, то по 0,05 и друге значения? Показания датчиков расходятся на 0,5 градуса (это согласно даташиту правильно). Но почему один сразу на 0,5 градуса, а второй может расти по 0,05? Подключал датчики по отдельности и вместе.
Вот код, который использую для одновременной работы нескольких датчиков
004 | #include <DS1307RTC.h> |
006 | #include <DallasTemperature.h> |
009 | #define ONE_WIRE_BUS 3 |
013 | OneWire oneWire(ONE_WIRE_BUS); |
016 | DallasTemperature sensors(&oneWire); |
022 | U8GLIB_ST7920_128X64 u8g(22, 23, 24, U8G_PIN_NONE); |
025 | const char *monthName[12] = { |
026 | "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , |
027 | "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" |
034 | u8g.setFont(u8g_font_unifont); |
036 | u8g.setPrintPos( 10, 12); u8g.print(tm.Hour); |
037 | u8g.setPrintPos( 30, 12); u8g.print(tm.Minute); |
038 | u8g.setPrintPos( 50, 12); u8g.print(tm.Second); |
039 | u8g.drawLine(0, 15, 128, 15); |
040 | u8g.setFont(u8g_font_6x12); |
041 | u8g.setPrintPos( 10, 25); u8g.print(sensors.getTempCByIndex(0)); |
042 | u8g.setPrintPos( 50, 25); u8g.print(sensors.getTempCByIndex(1)); |
043 | u8g.setColorIndex(1); |
044 | u8g.drawBox(0, 35, 128, 20); |
045 | u8g.setFont(u8g_font_unifont); |
046 | u8g.setColorIndex(0); |
047 | u8g.drawStr(35, 50, "ARDUINO" ); |
048 | u8g.setColorIndex(1); |
049 | u8g.setFont(u8g_font_unifont); |
050 | u8g.drawStr(45, 64, "HELLO" ); |
059 | if (getDate(__DATE__) && getTime(__TIME__)) { |
070 | if (parse && config) { |
071 | Serial .print( "DS1307 configured Time=" ); |
072 | Serial .print(__TIME__); |
073 | Serial .print( ", Date=" ); |
074 | Serial .println(__DATE__); |
076 | Serial .println( "DS1307 Communication Error :-{" ); |
077 | Serial .println( "Please check your circuitry" ); |
079 | Serial .print( "Could not parse info from the compiler, Time=\"" ); |
080 | Serial .print(__TIME__); |
081 | Serial .print( "\", Date=\"" ); |
082 | Serial .print(__DATE__); |
083 | Serial .println( "\"" ); |
087 | Serial .println( "DS1307RTC Read Test" ); |
088 | Serial .println( "-------------------" ); |
096 | } while ( u8g.nextPage() ); |
100 | Serial .print( "Ok, Time = " ); |
101 | print2digits(tm.Hour); |
103 | print2digits(tm.Minute); |
105 | print2digits(tm.Second); |
106 | Serial .print( ", Date (D/M/Y) = " ); |
107 | Serial .print(tm.Day); |
109 | Serial .print(tm.Month); |
111 | Serial .print(tmYearToCalendar(tm.Year)); |
114 | if (RTC.chipPresent()) { |
115 | Serial .println( "The DS1307 is stopped. Please run the SetTime" ); |
116 | Serial .println( "example to initialize the time and begin running." ); |
119 | Serial .println( "DS1307 read error! Please check the circuitry." ); |
126 | Serial .print( " Requesting temperatures..." ); |
127 | sensors.requestTemperatures(); |
128 | Serial .println( "DONE" ); |
130 | Serial .print( "Temperature is: " ); |
131 | Serial .print(sensors.getTempCByIndex(0)); |
134 | Serial .print( " Requesting temperatures..." ); |
136 | Serial .println( "DONE" ); |
138 | Serial .print( "Temperature is: " ); |
139 | Serial .print(sensors.getTempCByIndex(1)); |
142 | void print2digits( int number) { |
143 | if (number >= 0 && number < 10) { |
146 | Serial .print(number); |
149 | bool getTime( const char *str) |
153 | if (sscanf(str, "%d:%d:%d" , &Hour, &Min, &Sec) != 3) return false ; |
160 | bool getDate( const char *str) |
166 | if (sscanf(str, "%s %d %d" , Month, &Day, &Year) != 3) return false ; |
167 | for (monthIndex = 0; monthIndex < 12; monthIndex++) { |
168 | if (strcmp(Month, monthName[monthIndex]) == 0) break ; |
170 | if (monthIndex >= 12) return false ; |
172 | tm.Month = monthIndex + 1; |
173 | tm.Year = CalendarYrToTm(Year); |
Вот лог.
1 | Temperature is : 24.50 Ok, Time = 10:58:50, Date (D/M/Y) = 10/10/2022 |
2 | Requesting temperatures...DONE |
3 | Temperature is : 24.87 Requesting temperatures...DONE |
4 | Temperature is : 24.50 Ok, Time = 10:58:51, Date (D/M/Y) = 10/10/2022 |
5 | Requesting temperatures...DONE |
6 | Temperature is : 24.87 Requesting temperatures...DONE |
7 | Temperature is : 24.50 Ok, Time = 10:58:52, |
Для подключения датчиков использовал резистор 4.7 кОм
Ты не настроил датчики.
У датчиков есть параметр Resolution. Может быть от 9 до 12
Попробуйте установить одинаковое разрешение для всех датчиков
Например
sensors.begin();
sensors.setResolution(9); // Разрешение можно указывать от 9 до 12
один изменяет показания дискретно по 0.5 градуса, а другой на разные величины то 0.16 градуса, то по 0,05 и друге значения?
Этот датчик не умеет "по 0,05". Может "по 0.5, по 0.25, по 0.125 и по 0.0625". Смотрите преобразование чисел в коде.
Разрешение может быть настроено, см #2#3
У датчиков есть параметр Resolution. Может быть от 9 до 12
Попробуйте установить одинаковое разрешение для всех датчиков
Например
sensors.begin();
sensors.setResolution(9); // Разрешение можно указывать от 9 до 12
Лучшее решение.
Спасибо, ваш ответ решил мою ошибку.
Не лучшее, а единственное - настроить датчик, выставив нужное разрешение
Посмотрите ещё вот эту тему просто для общего развития - https://arduino.ru/forum/obshchii/ne-pokupaite-ds18b20-na-ali-ili-ebay
вот так скачет , снимаю каждый 2 минуты. С ночи и до 9 утра в кабинете никого не было.
а этот на радиаторе закреплен и дерганий таких уже нет.
а этот на радиаторе закреплен и дерганий таких уже нет.
Ну да, конечно нету. Особенно если на шкалы глянуть. Растяните второй график до тех же значений что и на первом - очень удивитесь.
у меня тоже скачет и тоже никого нету:
nik182,
все уже растянуто . и первый и второй график 2час и показания каждые 2 минут.
графики эти проcто с разных транспортов, один с Esp, второй с sim800, но это к делу отношения не имеет
20.63-20.83 - колебания в 0,2 градуса. Это что, очень много? У вас кабинет - термоизолированное помещение? Почему вы так уверены, что это косяк датчика, а не реальные локальные колебания температуры?
так я и склоняюсь к тому что это реальные колебания, потому и привел в пример второй график с датчиком, который установлен на радиаторе.
Это не "реальные колебания" и не "косяк датчика", это нормальная работа.
По этому поводу вспоминаются слова Гаусса: "Недостатки математического образования с наибольшей отчётливостью проявляются в чрезмерной точности численных расчётов".
Вот то же самое можно сказать о точности измерений.
когда отопления нет четко видно как один скачет а второй плавно показывает практически одну и ту же Т.
ua6em, что за сервис, самописаный? Php?
когда отопления нет четко видно как один скачет а второй плавно показывает практически одну и ту же Т.
Вы сами ответили на свой вопрос - "датчик закреплен на радиаторе". А висящий свободно реагирует на любой сквознячек.
ua6em, что за сервис, самописаный? Php?
громко сказано, ESP8266 льёт с 3-х датчиков в базу sql, через скрипт на php ну и отображение странички еще один, все самописное, самое сложное было придумать механизм шифрации, чтобы базу не взломали, аптайм - годы
И как «шифруешь»? Токены?
И как «шифруешь»? Токены?
ключевая пара
если курлом
http://esp.orviss.ru/forhour.php
брать, то вот это получается.
У меня тоже самое только пока без шифрования.
ну да, скипт отрисовывает картинки )))
шифрация не тут, шифрация на стадии передачи данных в теле запроса
вот оно чем Михалыч
ну я по простецки в Гугл Chart массивы скидываю
вот оно чем Михалыч
ну я по простецки в Гугл Chart массивы скидываю
ничего не помню, написал и забыл, даже скетч не знаю где искать )))
библиотека помоему хайчарт использовалась, но это не точно, мне главное раза два в день пилу посмотреть ...
https://www.highcharts.com/
нормальная тема, надо взять на заметку.
https://www.highcharts.com/
нормальная тема, надо взять на заметку.
да, это она )))
Здравствуйте, столкнулся с проблемой, датчики ds18b20 12 шт,работают в пром холодильнике 3 года, в один прекрасный момент показания у половины подскакивают на 6 градусов, то есть было 0,25 стало 6,25, меняю сопртивление на подтягивающем резисторе - все выравнивается, через три дня снова +6, кто нибудь сталкивался с такой проблемой?
проблему нашел - окислившаяся смотка, но причина мне не понятна, получается первый датчик завышает показания на 6 градусо, второй занижает на 0,25 и так все 12 датчиков через один