DS18B20 работает ненадежно.

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

Спасибо!

, 👍0

Обсуждение

Там не так много информации, чтобы понять, что произошло. Замена датчика устранила проблему или она продолжилась с новым датчиком? Помогло бы предоставление схемы подключения вашего датчика к Arduino(?). То же самое можно сказать и о минимальном наброске, который все еще воспроизводит проблему. Оба из них отредактированы в вашем вопросе, пожалуйста., @JRobert

Спасибо за ваш ответ, но сейчас я использовал другую библиотеку., @Dennis

десятичное -127 — это двоичное 11111111... чтение всех битов 1 обычно является проблемой подключения, @jsotola

Чтение «0xFF» может быть вызвано плохим заземлением или недостаточным питанием, неправильным значением подтягивающего резистора или просто неисправным/поддельным чипом. Если код, который вы разместили ниже в качестве «ответа», является кодом, который вы используете, вы также вызываете самонагрев датчика, постоянно зацикливая его. DS18B20 должен считываться каждую секунду, чтобы избежать самонагрева., @hcheung


1 ответ


Лучший ответ:

-1

Возникает проблема с одновременным использованием OneWire и Wire/I2C в одном скетче.

Я думаю, это связано с тем, что OneWire занимает слишком много времени, не знаю, но, вероятно, именно поэтому показания температуры через некоторое время упали до -127, чтобы это исправить.

Я использовал NTC 10K при температуре 20°C. Ниже вы можете увидеть код для работы NTC и способы его подключения!

Надеюсь, это поможет!

Код:

#include <math.h>
const int thermistor_output = A1;

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

void loop() {
  int thermistor_adc_val;
  float output_voltage, thermistor_resistance, therm_res_ln, temperature; 
  thermistor_adc_val = analogRead(thermistor_output);
  output_voltage = ( (thermistor_adc_val * 5.0) / 1023.0 );
  thermistor_resistance = ((5 * (10.0 / output_voltage)) - 10); 
  thermistor_resistance = thermistor_resistance * 1000 ; 
  therm_res_ln = log(thermistor_resistance);
  temperature = (1 / (0.001129148 + (0.000234125 * therm_res_ln) + (0.0000000876741 * therm_res_ln * therm_res_ln * therm_res_ln)));
  temperature = temperature - 273.15;
  Serial.print("Temperature in degree Celsius = ");
  Serial.print(temperature);
  Serial.print("\n");
  delay(1000);
} 

Проводка:

,

Привет @Деннис, цель этого и многих других веб-сайтов по обмену стеками состоит в том, чтобы накопить четкие, краткие и хорошо сформулированные вопросы и ответы, чтобы помочь другим с похожими проблемами. Нет абсолютно ничего плохого в ответе на ваш собственный вопрос. Рассмотрите возможность редактирования заголовка, вопроса и ответа, чтобы было понятно, что не работает и как вы это исправили. Скопируйте всю важную информацию из комментариев и интегрируйте ее в вопросы и ответы. Спасибо., @st2000

Это решение вашего же вопроса или это дополнение. -- Если второе, то вам срочно нужно совершить [экскурсию], чтобы узнать, как работает этот сайт, это не форум. Затем отредактируйте свой вопрос и добавьте к нему этот контент, а затем удалите этот ответ без ответа., @the busybee

-127 — код по умолчанию для обрыва провода., @Gil