DS18B20 работает ненадежно.
как описано в заголовке, мой датчик температуры достигает значения -127 через несколько минут работы, он снова работает после перезапуска, я уже заменил датчик и использую тот же код для температуры, который у меня был использовался раньше и работает безупречно уже почти 6 месяцев, я действительно понятия не имею, что я сделал не так, надеюсь, кто-нибудь догадался.
Спасибо!
@Dennis, 👍0
Обсуждение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
- Как инициализировать сброс на цифровом термометре sht30?
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- Неверные показания PT100 и MAX31865
- Датчик температуры не выдает правильных значений
- Датчик температуры MKR1000 и DS18B20
- Погрешность измерения датчика температуры LMT 84
- нужно сравнить, если байт меньше 80 шестнадцатеричных
- Проблема с условием if
Там не так много информации, чтобы понять, что произошло. Замена датчика устранила проблему или она продолжилась с новым датчиком? Помогло бы предоставление схемы подключения вашего датчика к Arduino(?). То же самое можно сказать и о минимальном наброске, который все еще воспроизводит проблему. Оба из них отредактированы в вашем вопросе, пожалуйста., @JRobert
Спасибо за ваш ответ, но сейчас я использовал другую библиотеку., @Dennis
десятичное
-127
— это двоичное11111111
... чтение всех битов1
обычно является проблемой подключения, @jsotolaЧтение «0xFF» может быть вызвано плохим заземлением или недостаточным питанием, неправильным значением подтягивающего резистора или просто неисправным/поддельным чипом. Если код, который вы разместили ниже в качестве «ответа», является кодом, который вы используете, вы также вызываете самонагрев датчика, постоянно зацикливая его. DS18B20 должен считываться каждую секунду, чтобы избежать самонагрева., @hcheung