Добрый день. Прошу помощи, сделал метеостанцию. Возникла проблема при подключении датчиков Dallas DS18B20. При падении температуры ниже -15 градусов показывает значение этого датчика -127, у комнатного в этот момент температура корректная: Sensor2 21.75 Sensor1 -127.00 Код (C++): #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 7 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometer1 = { 0x28, 0xC0, 0x77, 0xE3, 0x05, 0x00, 0x00, 0x49 }; DeviceAddress Thermometer2 = { 0x28, 0xFA, 0x1C, 0xE3, 0x05, 0x00, 0x00, 0x0A }; void setup() { sensors.begin(); sensors.setResolution(Thermometer1, 10); sensors.setResolution(Thermometer2, 10); Serial.begin(9600); } void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.println(tempC); } void loop() { sensors.requestTemperatures(); Serial.print("Sensor1 "); printTemperature(Thermometer1); Serial.print("Sensor2 "); printTemperature(Thermometer2); } Если попробовать загрузить скетч-пример из библиотеки OneWire, то тут температура выводится корректно: ROM = 28 C0 77 E3 5 0 0 49 Chip = DS18B20 Data = 1 AC FE 4B 46 3F FF 4 10 60 CRC=60 Temperature = -21.25 Celsius, -6.25 Fahrenheit ROM = 28 FA 1C E3 5 0 0 A Chip = DS18B20 Data = 1 60 1 4B 46 3F FF 10 10 55 CRC=55 Temperature = 22.00 Celsius, 71.60 Fahrenheit Но проблема в том, что мне нужно использовать две переменные, как в первом коде, чтобы выводить в разных местах дисплея значения. А опыта переделать код не хватает. Встречал еще другие варианты кода в интернете, с ними такая же проблема.
Как подключены датчики? с питанием или без? Какой резистор подтяжки OneWire на питание? А если в loop delay на секунду поставить, поле запроса температуры и каждого опроса датчика? По крайней мере, для теста.
Пытаюсь включить интерфейс 1-wire в моей плате BB-Black для подключения термодатчика DS18B20. Делал в основном по инструкциям 1.http://www.bonebrews.com/temperature-monitoring-with-the-ds18b20-on-a-beaglebone-black/ 2.http://mkaczanowski.com/one-wire-ds1820-thermometer-with-beaglebone-black-libmicrohttpd/ По первой инструкции у меня синтаксическая ошибка при выполнении команды dtc -O dtb -o w1-00A0.dtbo -b 0 -@ w1.dts По второй - не найден путь при выполнении команд echo BB-W1:00A0 > /sys/devices/bone_capemgr.9/slots cat /sys/bus/w1/devices/DEVICE_ID/w1_slave Кто подключал по 1-wire, подскажите, что я делаю не так и как правильно ?
Даташит это прекрасно, но, к слову... ни в оригинальном даташите, ни в русском переводе нет прямого ответа на вопрос ТС - на каком собственно принципе работает датчик температуры
Вообще оригинальный даташит, даром что от производителя - вместо обьяснения принципов работы датчика кормит пользователя рекламной мурой. Секция "Измерение температуры" начинается с гордой фразы "Ключевой элемент DS18B20 - датчик прямого преобразование температуры в цифру" (англ: The core functionality of the DS18B20 is its direct-to-digital temperature sensor."). А буквально через пару строк начинается обьяснение режимов работы банального АЦП... Ребята. вы уж там договорились бы - это "analog-to-digital" или "direct" ?
Судя по тому, что где-то было написано о лазерной коррекции сопротивления, то там банальный терморезистор на полупроводнике (так же, как обычный). За эти деньги никто не будет напылять медь или еще что-то там. Температурная стабилизация на резисторе с низким ТКС. Здесь тоже ничего нового. А автору для чего знать потроха? У датчика точность 2 градуса. Это вообще ни о чем. Но для дома и побаловаться хватает.
откуда эти данные? В даташите погрешность не более 0.5 гр в диапазоне 10-85 С. Да и за пределаит этого диапазона не сильно хуже, судя по линиям на графике
Добрый день! Имеется такой датчик: https://ru.aliexpress.com/item/50CM...32736684107.html?spm=a2g0s.9042311.0.0.q9ZqPE Вроде бы DS18B20, но всего два контакта. Можно ли его подключить к arduino? Как понять какой контакт где? Я так понимаю, если и можно, то будет идти не значение температуры, а какие-то аналоговые данные (0-1023). Можно ли будет их преобразовать в значения температуры?
Какой же это DS18B20 - там же в заголовке ясно сказано - NTC термистор. Это совсем другой тип датчика, с библиотеками DS18B20 он работать не будет, но подключить к ардуине можно, ищите в гугле.
Это не цифровой датчик, а аналоговый - обычный термистор NTC. Подключить можно - вам понадобится резистор на 10кОм и немного проводов. Из резистора и термистора формируете делитель напряжение и подключаете к аналоговому порту. Опорное напряжение для АЦП желательно брать 3.3В Для преобразования напряжения в температуру вам нужно вооружится формулой Штейнхарта-Харта https://en.m.wikipedia.org/wiki/Steinhart–Hart_equation и даташитом на ваш термистор. Даташита я боюсь вы не найдёте и придётся составлять график самому при помощи обычного термометра, термистора и Wolfram Alpha