Датчик температуры не выдает правильных значений

В моем текущем проекте я считываю температуру с помощью датчика, у которого всего два провода.

Temperature Sensor

Для считывания значений датчиков я использовал приведенную ниже схему, которую я нашел на сайте Arduino Project Hub.

ds1820b connection

В своем проекте я использую приведенную ниже программу Arduino.

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices 
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}


void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  Serial.print("Temperature is: ");
  Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? 
    // You can have more than one IC on the same bus. 
    // 0 refers to the first IC on the wire
    delay(1000);
}

После всего этого я получаю этот вывод на последовательный монитор.

Result

На каком этапе я поступаю неправильно?

, 👍1

Обсуждение

Не могли бы вы внести изменения в "схему", чтобы показать свою связь? Как вы на самом деле соединяете 2 провода? (Ваша текущая схема имеет 3 соединения между датчиком и Arduino, а датчик на вашем рисунке имеет только 2 провода.) Знаете ли вы о том, что хотите использовать "режим питания паразита"? В этом случае вы должны обеспечить сильное подтягивание для времени преобразования температуры. Взгляните на https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf страница 11, абзац "Преобразовать T [44h]"..., @smajli

Каким типом или названием модели является ваш датчик температуры? Похоже, вы пытаетесь подключить аналоговый датчик. Но вы используете схему подключения и код для цифрового датчика., @AltAir

Какую модель датчика температуры вы используете? Если вы используете датчик температуры lm35, Serial.print(sensors.getTempCByIndex(0)/9,31); вам нужно добавить /9.31 к вашему коду, датчики не измеряют температуру напрямую, датчики просто имеют переменный резистор внутри, значение резистора изменяется по температуре после изменения напряжения arduino просто измеряет напряжение, значение напряжения делим на 9.31 этот результат дает температуру типа Цельсия. Кроме того, вы должны отключить резистор 4,7 К, это излишне., @Buturlin

О, в самом деле. karanrp: Я предположил, что вы используете DS18B20. Сначала проверьте свой датчик., @smajli

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


1 ответ


1

Значение -127 для ваших показаний температуры на самом деле является кодом ошибки для DEVICE_DISCONNECTED_C.

В примере кода библиотеки они помещают if, который проверяет наличие этого кода ошибки перед печатью температуры:

if(tempC != DEVICE_DISCONNECTED_C) 
{
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(tempC);
} 

Поскольку у вашего датчика всего 2 провода, согласно Википедии, вам нужен конденсатор для питания датчика:

Одной из отличительных особенностей шины является возможность использования только двух проводов — передачи данных и заземления. Для достижения этой цели 1-проводные устройства включают конденсатор емкостью 800 пФ для хранения заряда и питания устройства в периоды, когда линия передачи данных активна.

Надеюсь, это должно решить ваши проблемы.

,