DS18B20

Тема в разделе "Arduino & Shields", создана пользователем Perun61, 15 ноя 2012.

  1. Sadesign

    Sadesign Нерд

    Блин. (( Ну как так-то?!
    Спасибо! )
     
  2. Classic383

    Classic383 Нуб

    Добрый день. Прошу помощи, сделал метеостанцию. Возникла проблема при подключении датчиков 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

    Но проблема в том, что мне нужно использовать две переменные, как в первом коде, чтобы выводить в разных местах дисплея значения. А опыта переделать код не хватает. Встречал еще другие варианты кода в интернете, с ними такая же проблема.
     
  3. Slaiterx

    Slaiterx Гик

    Меняйте библиотеку
     
  4. SergeiL

    SergeiL Оракул Модератор

    Как подключены датчики? с питанием или без? Какой резистор подтяжки OneWire на питание?
    А если в loop delay на секунду поставить, поле запроса температуры и каждого опроса датчика? По крайней мере, для теста.
     
    Последнее редактирование: 14 янв 2018
  5. posehn

    posehn Нуб

    Пытаюсь включить интерфейс 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, подскажите, что я делаю не так и как правильно ?
     
  6. Именно как он получает данные о температуре, а не как с ним взаимодействовать.
     
  7. в даташите же есть структурная схема и описание работы.
     
    Последнее редактирование: 29 янв 2018
  8. a1000

    a1000 Гуру

  9. b707

    b707 Гуру

    Даташит это прекрасно, но, к слову... ни в оригинальном даташите, ни в русском переводе нет прямого ответа на вопрос ТС - на каком собственно принципе работает датчик температуры
     
  10. b707

    b707 Гуру

    Вообще оригинальный даташит, даром что от производителя - вместо обьяснения принципов работы датчика кормит пользователя рекламной мурой. Секция "Измерение температуры" начинается с гордой фразы "Ключевой элемент DS18B20 - датчик прямого преобразование температуры в цифру" (англ: The core functionality of the DS18B20 is its direct-to-digital temperature sensor."). А буквально через пару строк начинается обьяснение режимов работы банального АЦП...
    Ребята. вы уж там договорились бы - это "analog-to-digital" или "direct" ? :)
     
  11. DetSimen

    DetSimen Guest

    их почитать, дак там целый БЭСМ-6 в один кристалл утоптан.
     
  12. parovoZZ

    parovoZZ Гуру

    Судя по тому, что где-то было написано о лазерной коррекции сопротивления, то там банальный терморезистор на полупроводнике (так же, как обычный). За эти деньги никто не будет напылять медь или еще что-то там. Температурная стабилизация на резисторе с низким ТКС. Здесь тоже ничего нового. А автору для чего знать потроха? У датчика точность 2 градуса. Это вообще ни о чем. Но для дома и побаловаться хватает.
     
  13. b707

    b707 Гуру

    откуда эти данные? В даташите погрешность не более 0.5 гр в диапазоне 10-85 С. Да и за пределаит этого диапазона не сильно хуже, судя по линиям на графике
    [​IMG]
     
  14. parovoZZ

    parovoZZ Гуру

    Ага, одна вторая. Это я что-то попутал.
     
  15. ORLENOK

    ORLENOK Гик

    Добрый день!

    Имеется такой датчик: https://ru.aliexpress.com/item/50CM...32736684107.html?spm=a2g0s.9042311.0.0.q9ZqPE
    Вроде бы DS18B20, но всего два контакта. Можно ли его подключить к arduino? Как понять какой контакт где? Я так понимаю, если и можно, то будет идти не значение температуры, а какие-то аналоговые данные (0-1023). Можно ли будет их преобразовать в значения температуры?
     
  16. b707

    b707 Гуру

    Какой же это DS18B20 - там же в заголовке ясно сказано - NTC термистор. Это совсем другой тип датчика, с библиотеками DS18B20 он работать не будет, но подключить к ардуине можно, ищите в гугле.
     
    ORLENOK нравится это.
  17. DIYMan

    DIYMan Guest

    Это не DS18B20, это термистор.
     
    ORLENOK нравится это.
  18. ZAZ-965

    ZAZ-965 Гуру

    Это NTC термистор.
     
    ORLENOK нравится это.
  19. arssev1

    arssev1 Гик

    Это не цифровой датчик, а аналоговый - обычный термистор NTC.
    Подключить можно - вам понадобится резистор на 10кОм и немного проводов. Из резистора и термистора формируете делитель напряжение и подключаете к аналоговому порту. Опорное напряжение для АЦП желательно брать 3.3В
    Для преобразования напряжения в температуру вам нужно вооружится формулой Штейнхарта-Харта https://en.m.wikipedia.org/wiki/Steinhart–Hart_equation и даташитом на ваш термистор.
    Даташита я боюсь вы не найдёте и придётся составлять график самому при помощи обычного термометра, термистора и Wolfram Alpha