Датчик температуры даллас. Arduino и цифровой датчик температуры DS18B20. Общая характеристика, названия и маркировка выводов моделей DS18B20

В статье приводится подробное описание интегрального датчика температуры DS18B20 на русском языке. Информация переведена на русский из официальной документации производителя датчика – компании Dallas Semiconductor.

Общее описание.

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

DS18B20 обменивается данными с микроконтроллером по однопроводной линии связи, используя протокол интерфейса 1-Wire.

Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.

У каждой микросхемы DS18B20 есть уникальный серийный код длиной 64 разряда, который позволяет нескольким датчикам подключаться на одну общую линию связи. Т.е. через один порт микроконтроллера можно обмениваться данными с несколькими датчиками, распределенными на значительном расстоянии. Режим крайне удобен для использования в системах экологического контроля, мониторинга температуры в зданиях, узлах оборудования.

Коротко об особенностях DS18B20.

  • Для однопроводного интерфейса 1-Wire достаточно одного порта связи с контроллером.
  • Каждое устройство имеет уникальный серийный код длиной 64 разряда.
  • Возможность подключения нескольких датчиков через одну линию связи.
  • Нет необходимости во внешних компонентах.
  • Возможность получать питание непосредственно от линии связи. Напряжение питания в пределах 3,0 В … 5,5 В.
  • Диапазон измерения температуры -55 ... +125 °C.
  • Погрешность не превышает 0,5 °C в диапазоне -10 ... +85 °C.
  • Разрешение преобразования 9 … 12 бит. Задается пользователем.
  • Время измерения, не превышает 750 мс, при максимально возможном разрешении 12 бит.
  • Возможность программирования параметров тревожного сигнала.
  • Тревожный сигнал передает данные об адресе датчика, у которого температуры вышла за заданные пределы.
  • Совместимость программного обеспечения с DS1822.
  • Крайне широкие области применения.

Назначение выводов.

Обзор датчика DS18B20.

На рисунке 1 блок-схема датчика DS18B20. 64-битное ПЗУ (ROM) хранит уникальный серийный код устройства. Оперативная память содержит:

  • значение измеренной температуры (2 байта);
  • верхний и нижний пороговые значения срабатывания тревожного сигнала (Th, Tl);
  • регистр конфигурации (1 байт).

Через регистр конфигурации можно установить разрешение преобразования термодатчика. Разрешение может быть задано 9, 10, 11 или 12 бит. Регистр конфигурации и пороги тревожного сигнала содержатся в энергонезависимой памяти (EEPROM).

Режим – измерение температуры.

Основная функция DS18B20 – преобразование температуры датчика в цифровой код. Разрешение преобразования задается 9, 10, 11 или 12 бит. Это соответствует разрешающей способность - 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C и 0,0625 (1/16) °C. При включении питания, состояние регистра конфигурации устанавливается на разрешение 12 бит.

После включения питания DS18B20 находится в низко-потребляющем состоянии покоя. Чтобы инициировать измерение температуры мастер (микроконтроллер) должен выполнить команду ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ . После завершения преобразования, результат измерения температуры будет находиться в 2 байтах регистра температуры, и датчик опять перейдет в состояние покоя.

Если DS18B20 включен по схеме с внешним питанием, то мастер может контролировать состояние команды конвертации. Для этого он должен читать состояние линии (выполнять временной слот чтения), по завершению команды, линия перейдет в высокое состояние. Во время выполнения команды конвертации линия удерживается в низком состоянии.

DS18B20 измеряет температуру в градусах по шкале Цельсия. Результат измерения представляется как 16-разрядное, знаковое число в дополнительном коде (рис. 2.) . Бит знака (S) равен 0 для положительных чисел и равен 1 для отрицательных. При разрешении 12 бит, у регистра температуры все биты значащие, т.е. имеют достоверные значения. Для разрешения 11 бит, не определен бит 0. Для 10-битного разрешения не определены биты 0, 1. При разрешении 9 бит, не достоверное значение имеют биты 0, 1 и 2. В таблице 2 показаны примеры соответствия цифровых кодов значению температуры.

Для людей не искушенных в двоичной математике, напишу, что для вычисления температуры надо:

  • При положительном значении (S=0) код перевести в десятичный и умножить на 0,0625 °C.
  • При отрицательном значении (S=1) сначала необходимо перевести дополнительный код в прямой. Для этого надо инвертировать каждый разряд двоичного кода и прибавить 1. А затем перевести в десятичный и умножить на 0,0625 °C.

Режим – передача тревожного сигнала.

После выполнения команды преобразования температуры, измеренное значение сравнивается с верхним и нижним порогами из регистров Th, Tl (формат на рисунке 3). Это байтовые значения, знаковые, в дополнительном коде, S =0 означает, что число положительное, а S=1 – отрицательное. Хранятся пороговые значения в энергонезависимой памяти (EEPROM). Th и Tl доступны для чтения и записи через байты 2, 3 оперативной памяти. Подробно об этом в разделе .

Из-за разной длины регистров TH, TL и температуры, они сравниваются только с битами 11 по 4 регистра температуры. Если значение измеренной температуры превышает TH или ниже, чем TL, то формируется признак аварии в DS18B20. Признак перезаписывается с каждым измерением температуры, и если температура возвращается в заданные пределы, то он сбрасывается.

Ведущее устройство может проверить состояние признака аварии с помощью команды ПОИСК ТРЕВОЖНОГО СИГНАЛА . Любой датчик с активным признаком ответит на команду поиска. Таким образом, мастер точно определит, какой DS18B20 вырабатывает сигнал тревоги. После изменения значений регистров TH и TL, только следующее преобразование температуры сформирует достоверный признак тревоги.

Питание термодатчика DS18B20.

Однако когда DS18B20 выполняет операцию преобразования температуры или копирования данных памяти в EEPROM, потребляемый ток может достигать величины 1,5 мА. Такой ток может вызвать снижение напряжения питания устройства до недопустимого значения. Тока подтягивающего резистора и энергии, запасенной на Cpp, не достаточно для питания в этих двух режимах. Для того чтобы гарантировать достаточное питание устройства, необходимо обеспечить мощную подтяжку шины к высокому уровню в то время, когда происходит преобразование температуры или копирование данных памяти в EEPROM. Это можно сделать с помощью MOSFET транзистора, как показано на схеме (рисунок 4). Шина данных должна быть подключена к мощному питанию:

  • в течение 10 мкс после команд КОНВЕРТИРОВАНИЯ и КОПИРОВАНИЯ ПАМЯТИ ;
  • в течение времени преобразования (tconv) и передачи данных (не менее t WR =10мс).

Никаких других операций в это время на шине допускать нельзя.

Как правило, у современных микроконтроллеров выходного тока высокого уровня вполне достаточно для питания DS18B20. Тогда в MOSFET транзисторе необходимости нет.

Для питания DS18B20 может быть использован обычный метод – подключение внешнего питания через вывод V DD (рисунок 5). Очевидные преимущества этого метода в отсутствии необходимости в MOSFET транзисторе и в том, что во время преобразования шина остается свободной и может использоваться в других целях.

Я, в таких случаях, использую следующую схему подключения DS18B20.

В этой схеме термодатчик работает в режиме с внешним питанием, которое запасается на дополнительном конденсаторе через диод. В моих устройствах схема работает отлично.

64-разрядный серийный код устройства.

Память датчика.

Организация памяти DS18B20 показана на рисунке 7. Вся память включает в себя оперативную (SRAM) и энергонезависимую (EEPROM) память. В EEPROM хранятся регистры TH, TL и регистр конфигурации. Если функция тревожного сигнала не используется, то регистры TH и TL могут использоваться как регистры общего назначения. Все команды управления памятью подробно описаны в разделе .

В байтах с адресами 0 и 1 хранятся младший и старший байты регистра измеренной температуры. Эти байты доступны только для чтения. 2й и 3й байты – TH и TL регистры. Байт 4 – регистр конфигурации. Подробно об этом регистре в разделе РЕГИСТР КОНФИГУРАЦИИ. Байты 5, 6, 7 зарезервированы, не могут быть записаны и, при чтении, всегда возвращают 1.

Байт 8 доступен только для чтения. Он содержит циклический код (CRC) для первых восьми байтов. DS18B20 формирует этот код по способу, описанному в части .

Запись данных в байты 2, 3 и 4 происходит командой ЗАПИСЬ ПАМЯТИ . Данные должны передаваться, начиная с младшего бита байта 2. Для проверки записи данных можно прочитать память командой ЧТЕНИЕ ПАМЯТИ [код BEh]. При чтении данные передаются по шине, в последовательности начиная с младшего бита байта 0. Запись данных TH, TL и регистра конфигурации в EEPROM происходит по команде КОПИРОВАНИЕ ПАМЯТИ .

При включении питания, данные из энергонезависимой памяти EEPROM перегружаются в оперативную память (SRAM). Перезагрузку данных из EEPROM можно также сделать командой ПЕРЕЗАГРУЗКА E 2 . Мастер должен контролировать состояние шины, чтобы определить завершение перезагрузки. Слот чтения низкого уровня означает, что перезагрузка еще не закончилась. По завершению перезагрузки DS18B20 передает слот чтения 1.

Регистр конфигурации термодатчика.

Байт 4 памяти это регистр конфигурации (формат на рисунке 8). Битами R0, R1 можно установить разрешение преобразования (коды в таблице 3). При включении питания состояние битов R0, R1 = 11, что соответствует разрешению 12 бит. Надо помнить, что существует прямая зависимость времени преобразования от разрешающей способности. Биты 7 и 0…4 зарезервированы, не могут использоваться, при чтении возвращают 1.

Генерация циклического кода (CRC)

Байты циклического кода (CRC) расположены в 64-битовом ROM коде и в девятом байте памяти SRAM. Циклический код из ROM вычисляется для 56ти битов кода ROM и располагается в старшем байте ROM. Циклический код из SRAM вычисляется из байтов 0…7 SRAM. Циклический код позволяет контролировать правильность чтения данных из DS18B20. Мастер вычисляет циклический код для полученных данных и сравнивает с принятым кодом. На основании этого принимается решение о корректности данных.

Образующий полином циклического кода выглядит так:

C R C = X 8 + X 5 + X 4 + 1

Мастер может вычислить циклический код используя генератор полинома, по схеме на рисунке 9. Он состоит из регистра сдвига и логических элементов типа “исключающее ИЛИ”. Регистр сдвига изначально находится в состоянии 0. Биты поступают в регистр сдвига, начиная с младшего бита, кода из ROM или из SRAM, один бит в один такт сдвига. После сдвига 56го бита ROM или старшего бита 7го байта SRAM, в регистре сдвига будет вычисленный циклический код. Если сдвинуть в генератор 8 бит ROM или SRAM, принятые из DS18B20, то в случае правильных данных, регистр сдвига будет содержать все 0.

Однопроводной интерфейс 1-Wire

Система с шиной 1-Wire состоит из одного ведущего устройства (МАСТЕР), которое управляет одним или несколькими ведомыми устройствами (СЛЕЙВ). DS18B20 может быть только ведомым. Система, в которой одно ведомое устройство, называется одноточечной. Система с несколькими ведомыми – многоточечной. Все команды и данные обмена передаются по шине младшим битом вперед. В дальнейшей информации об интерфейсе 1-Wire выделены три раздела: аппаратная конфигурация, последовательность операций и сигналы (типы и временные требования).

Аппаратная конфигурация.

Интерфейс 1-Wire имеет одну линию связи. Каждое устройство (ведущее или ведомое) подключено к шине данных портом с выходом типа открытый коллектор или с тремя состояниями. Такая конфигурация позволяет каждому устройству системы не занимать линию связи, когда оно не активно, и держать шину свободной для других устройств. В микросхеме DS18B20 выход (DQ) – открытый сток. Его эквивалентная схема приведена на рисунке 10. Шина 1-Wire требует применения внешнего подтягивающего резистора сопротивлением приблизительно 5 кОм, для обеспечения высокого уровня сигнала при неактивном состоянии устройств. Если операция должна быть приостановлена, шина должна быть установлена в неактивное состояние до следующей операции. Шина может находиться в состоянии высокого уровня сколь угодно долгое время. Перевод шины в состояние низкого уровня на время более чем 480 мкс приведет к тому, что все компоненты системы будут сброшены.

Последовательность операций.

Очередность операций для доступа к термодатчику DS18B20 выглядит так.

  • Инициализация.
  • Команда ROM (необходима для любого обмена данными).
  • Функциональная команда (необходима для любого обмена данными).

Такая последовательность должна строго соблюдаться. В противном случае DS18B20 не будет реагировать на команды. Исключением являются команды ПОИСК ПЗУ [код F0h] и ПОИСК АВАРИИ [код ECh]. После формирования этих двух команд, ведущее устройство (мастер) должно вернуться к первому шагу (инициализация).

Инициализация.

Обмен по шине всегда начинается с операции ИНИЦИАЛИЗАЦИИ. Для инициализации ведущее устройство вырабатывает импульс сброса, за ним должен последовать импульс присутствия от ведомого устройства. Импульс присутствия сообщает ведущему устройству, что ведомое устройство присутствует в системе и готово к выполнению операции. Временные параметры импульсов сброса и присутствия описаны в разделе .

Команды ROM кодов.

После того как ведущее устройство получит импульс присутствия, оно может оперировать командами ROM. Это команды для операций с 64-битными индивидуальными кодами каждого ведомого устройства. Они позволяют ведущему устройству выбрать конкретное ведомое устройство среди многих других. Также, используя эти команды, можно узнать, сколько ведомых устройств подключено к шине, их типы, выделить устройства в состоянии тревоги. Существует 5 команд ROM, длиной 8 бит каждая. Ведущее устройство должно послать команду ROM перед выполнением функциональных команд DS18B20. Блок-схема выполнения ROM команд изображена на рисунке 11.

Поиск ROM

После включения питания, ведущее устройство должно считать ROM коды всех ведомых устройств, подключенных к шине. Это позволит определить число ведомых устройств и их типы. Ведущее устройство изучает ROM коды через процесс идентификации кодов каждого устройства на шине. Оно должно выполнить команду поиска ROM столько раз, сколько необходимо для идентификации всех ведомых устройств. При одном ведомом устройстве в системе проще использовать команду ЧТЕНИЕ ROM. После поиска ROM, операции на шине должны опять начаться с инициализации.

Чтение ROM

Команда применяется в одноточечных системах, с одним ведомым устройством. Она дает возможность ведущему устройству прочитать 64-битный ROM код, без использования команды ПОИСК ROM. Применение команды ЧТЕНИЕ ROM в многоточечной системе приведет к конфликтам данных между ведомыми устройствами.

Совпадение ROM

Команда СОВПАДЕНИЕ ROM, после которой должен следовать 64-битный код ROM, позволяет мастеру обращаться к конкретному ведомому устройству. Только одно ведомое устройство, код которого совпадает с переданным кодом, прореагирует на функциональные команды. Другие ведомые устройства будут неактивными до следующего импульса сброса.

Пропуск ROM

Команда позволяет ведущему устройству обращаться ко всем устройствам шины одновременно, без использования ROM кодов. Например, можно запустить на всех устройствах операцию преобразования температуры, выполнив команду ПРОПУСК ROM, а затем КОНВЕРТАЦИЯ ТЕМПЕРАТУРЫ. Команда ЧТЕНИЕ ПАМЯТИ может следовать за командой ПРОПУСК ROM только при одном ведомом устройстве, подключенным к линии связи. Такая последовательность команд значительно экономит время обмена с датчиками. Особенно она эффективна при использовании в системе одного ведомого устройства.

Поиск тревожного сигнала

Команда действует идентично команде ПОИСК ROM. Отличается тем, что на нее ответят только ведомые устройства в состоянии тревоги. Команда позволяет ведомому устройству определить, какие термодатчики находятся в состоянии тревоги после последнего преобразования температуры. После каждого ПОИСКА ТРЕВОГИ необходимо возвращаться на ИНИЦИАЛИЗАЦИЮ.

Группа функциональных команд

После выполнения ROM команды для выбора DS18B20 с нужным кодом, ведущее устройство может посылать функциональные команды датчика. Они позволяют записать и прочитать данные из оперативной памяти DS18B20, инициировать преобразование температуры и определить режим питания. Функциональные команды DS18B20 описываются ниже, собраны в таблице 4, алгоритм работы с ними приведен на рисунке 12.

Преобразование температуры

Запись памяти

Команда позволяет загрузить 3 байта в оперативную память датчика. Первый байт записывается в регистр Th (2 байт памяти), второй байт в Th (байт 3 памяти) и третий байт в регистр конфигурации (байт 4). Ведущее устройство передает данные, начиная с младшего бита. Все три байта необходимо записать до того как ведущее устройство сформирует сигнал сброс.

Чтение памяти

Команда используется для чтения памяти устройства. Передача данных происходит начиная с младшего бита байта 0 памяти, и продолжается до тех пор, пока все 9 байтов будут считаны. Если требуется только часть данных, ведущее устройство может прервать передачу, сформировав импульс сброса.

Копирование памяти

Команда перезагружает значения регистров Th, Tl и регистра конфигурации из EEPROM в оперативную память. После посылки команды ПЕРЕЗАГРУЗКА, ведущее устройство может выполнить слот чтения, и DS18B20 сообщит состояние перезагрузки. Передача 0 будет означать, что операция еще выполняется, 1 – операция завершена. Операция перезагрузки автоматически происходит при включении питания. Поэтому в оперативной памяти содержатся достоверные данные сразу после подачи питания.

Чтение режима питания

Таблица 4. Функциональные команды DS18B20.

КОМАНДА ОПИСАНИЕ КОД ОПЕРАЦИИ НА ШИНЕ ПРИМЕЧАН.
КОМАНДА КОНВЕРТИРОВАНИЯ ТЕМПЕРАТУРЫ
Измерение температуры Инициализирует измерение температуры 44h DS18B20 передает мастеру состояние операции преобразования температуры 1
КОМАНДЫ РАБОТЫ С ПАМЯТЬЮ
Чтение памяти Читает всю оперативную память, включая циклический код CRC BEh DS18B20 передает мастеру до 9 байт 2
Запись памяти Записывает в оперативную память байты 2, 3 и 4
(TH, TL и регистр конфигурации)
4Eh Мастер передает 3 байта на DS18B20. 3
Копирование памяти Копирует TH, TL, и регистр конфигурации из оперативной памяти в EEPROM 48h 1
Перегружает TH, TL, и регистр конфигурации из EEPROM в оперативную память. B8h DS18B20 передает состояние перезагрузки мастеру
Чтение режима питания Информирует мастера о режиме питания DS18B20. B4h DS18B20 передает мастеру режим питания

Примечания.

Интерфейс 1-Wire

Для обмена данными DS18B20 использует протокол интерфейса 1-Wire, обеспечивающий контроль целостности данных. Этот протокол определяет сигналы:

  • импульс сброса,
  • импульс присутствия,
  • запись бита со значением 0,
  • запись бита со значением 1,
  • чтения бита со значением 0,
  • чтения бита со значением 1.

Все эти сигналы, кроме импульса присутствия, формирует ведущее устройство.

Инициализация – импульсы сброса и присутствия

Любые коммуникационные операции DS18B20 начинаются с последовательности инициализации, которая состоит из импульса сброса от ведущего устройства ведомому, и ответного импульса присутствия из DS18B20. Этот процесс показан на рисунке 13. Термодатчик посылает импульс присутствия в ответ на импульс сброса, чтобы сообщить ведущему устройству, что он подключен к шине и готов к использованию.

Во время последовательности инициализации ведущее устройство передает импульс сброса (Tx), формируя на шине сигнал низкого уровня в течение времени не менее 480 мкс. Далее, ведущее устройство освобождает шину и переходит в режим приема (Rx). Когда шина освобождается, она подтягивается к высокому логическому уровню резистором 5 кОм. Датчик выделяет положительный фронт, ждет 15-60 мкс и передает импульс присутствия, удерживая низкий уровень линии на время 60-240 мкс.

Временные слоты чтения и записи.

Обмен данными по шине 1-Wire происходит временными слотами (тайм-слотами). Один временной слот передает один бит информации.

Временные слоты записи.

Протокол определяет два типа тайм-слотов записи данных в DS18B20: для записи значения 1 и записи значения 0. Длительность слота записи - не менее 60 мкс с паузой на восстановление между слотами 1,0 мкс, как минимум. Инициируется любой слот записи отрицательным фронтом сигнала шины (рис. 14).

Для формирования слота записи 1, после перевода шины в низкое состояние, ведущее устройство должно освободить шину на время 15 мкс. Подтягивающий резистор 5 кОм создаст на шине напряжение высокого уровня.

Для формирования слота записи 0, после перевода шины в низкое состояние, ведущее устройство должно продолжать удерживать шину в низком состоянии в продолжение всего времени слота (как минимум 60 мкс).

DS18B20 проверяет состояние сигнала в отрезке времени между 15 и 60 мкс, отсчитывая его от начала слота записи. Состояние шины на этом отрезке соответствует значению бита для записи в датчик.

Временные слоты чтения.

Длительность слота чтения, как и слота записи, должна быть не менее 60 мкс с паузой на восстановление между слотами 1 мкс, как минимум. Инициируется любой слот чтения отрицательным фронтом сигнала шины (рисунок 14).

После того как ведущее устройство инициализировало слот чтения, DS18B20 передает бит данных. Для передачи 1 датчик оставляет шину свободной (в высоком состоянии), а для передачи 0 – формирует на шине низкий уровень.

При передаче 0, DS18B20 должен освободить шину в конце слота. Подтягивающий резистор сформирует на ней высокий уровень. Выходные данные DS18B20 достоверны в течение 15 мкс, от начала слота чтения.

На рис. 15 показано, что общая сумма временных интервалов слота чтения Tinit , TRC и TSAMPLE должна быть не более 15 мкс.

Рис. 16 показано, что для максимальной надежности приема данных необходимо уменьшить Tinit и TRC и читать состояние шины в конце отрезка 15 мкс.

Пример 1 работы с DS18B20.

РЕЖИМ МАСТЕРА

ДАННЫЕ ШИНЫ

ПОЯСНЕНИЯ

TX Reset RX Presence TX 55h TX 64-бит ROM код TX 44h Мастер посылает команду конвертирования температуры. TX TX Reset Мастер формирует импульс сброса. RX Presence DS18B20 отвечают импульсом присутствия. TX 55h Мастер выполняет команду соответствия ROM кода. TX 64-бит ROM код Мастер посылает ROM код DS18B20. TX BEh RX 9 байтов данных

Пример 2 работы с DS18B20.

РЕЖИМ МАСТЕРА

ДАННЫЕ ШИНЫ

ПОЯСНЕНИЯ

TX Reset Мастер формирует импульс сброса.
RX Presence
TX CCh
TX 4Eh Мастер выполняет команду записи памяти.
TX 9 байта данных Мастер посылает три байта (TH, TL, и регистр конфигурации).
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX BEh Мастер посылает команду чтения памяти.
RX 9 байтов данных Мастер читает всю оперативную память, включая циклический код CRC. Затем вычисляет CRC для первых восьми байтов и сравнивает с принятым кодом. Если коды не равны, мастер повторяет операцию чтения.
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX 48h Мастер выполняет команду копирования памяти.
TX DQ линия подключена к шине питания Мастер подключает DQ к шине питания на время преобразования.

Предельно-допустимые параметры DS18B20

Указаны предельные величины параметров. Превышение этих параметров недопустимо. Эксплуатация длительное время с предельными значениями параметров может уменьшить надежность устройства.

Примечания:

Электрические характеристики EEPROM переменного тока (- 55 … + 125 °C, V DD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ.
Время цикла записи t wr 2 10 мс
Число записей N EEWR -55°C - +55°C 50000 цикл
Время хранения t EEDR -55°C - +55°C 10 лет

Электрические характеристики переменного тока (- 55 … + 125 °C, V DD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ. ПРИМЕ
ЧАНИЕ
Время преобразования температуры t CONV разрешение 9 бит 93.75 мс 1
разрешение
10 бит
187.5 мс 1
разрешение
11 бит
375 мс 1
разрешение
12 бит
750 мс 1
Время подключения к мощному питанию t SPON Посылка команды конвертации температуры 10 мкс
Время слота t SLOT 60 120 мкс 1
Время восстановления t REC 1 мкс 1
Время записи 0 r LOW0 60 120 мкс 1
Время записи 1 t LOW1 1 15 мкс 1
Время чтения данных t RDV 15 мкс 1
Время высокого уровня сброса t RSTH 480 мкс 1
Время низкого уровня сброса t RSTL 480 мкс 1,2
Время высокого уровня присутствия t PDHIGH 15 60 мкс 1
Время низкого уровня присутствия t PDLOW 60 240 мкс 1
Емкость C IN/OUT 25 пкФ

Примечания:

Рисунок 18. Временные диаграммы.

Описание получилось большим. С датчиками работать не просто. Они требуют достаточно сложных программных функций, но с аппаратной точки зрения DS18B20 просто подключаются, точно измеряют, не требуют АЦП и т.д.

Как пример использования термодатчиков DS18B20, могу привести мою разработку - . Используются два термодатчика. Один измеряет температуру воздуха в , второй - температуру радиатора .

Рубрика: . Вы можете добавить в закладки.

DS18B20 - это цифровой датчик температуры. Датчик очень прост в использовании.

Во-первых, он цифровой, а во вторых - у него всего лишь один контакт, с которого мы получаем полезный сигнал. То есть, вы можете подключить к одному Arduino одновременно огромное количество этих сенсоров. Пинов будет более чем достаточно. Мало того, вы даже можете подключить несколько сенсоров к одному пину на Arduino! Но обо всем по порядку.

DS18B20 имеет различные форм-факторы. Так что выбор, какой именно использовать, остается за вами. Доступно три варианта: 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92. Серфинг по eBay или Aliexpress показывает, что китайцы предлагают версию TO-92 во влагозащищенном корпусе. То есть, вы можете смело окунать подобное чудо в воду, использовать под дождем и т.д. и т.п. Эти сенсоры изготавливаются с тремя выходными контактами (черный - GND, красный - Vdd и белый - Data).

Различные форм-факторы датчиков DS18B20 приведены на рисунке ниже.

Модель DS18B20 во влагозащищенном корпусе:


DS18B20 удобен в использовании. Запитать его можно через контакт data (в таком случае вы используете всего два контакта из трех для подключения!). Сенсор работает в диапазоне напряжений от 3.0 В до 5.5 В и измеряет температуру в диапазоне от -55°C до +125°C (от -67°F до +257°F) с точностью ±0.5°C (от -10°C до +85°C).

Еще одна крутая фича: вы можете подключить параллельно вплоть до 127 датчиков! и считывать показания температуры с каждого отдельно. Не совсем понятно, в каком проекте подобное может понадобится, но подключить два сенсора и контролировать температуру в холодильнике и морозильной камере можно. При этом вы оставите свободными кучу пинов на Arduino... В общем, фича приятная.

Что вам понадобится для контроля температуры с помощью Arduino и DS18B20

Программное обеспечение

  • Естественно, вам необходима Arduino IDE;
  • Библиотека OneWire library, которая значительно облегчает работу с Arduino и датчиком DS18B20;
  • Скетч...

Загружаем скетч на Arduino

Скетч, который представлен ниже, есть в библиотеке OneWire, в категории examples. Перейдите в “File” - “Examples” - “OneWire” и выберите пример “DS18x20_Temperature”. Код программы представлен ниже.

Данный пример использует библиотеку OneWire Library, для того, чтобы собрать данные со всех подключенных датчиков температуры DS28B20 (как подключить несколько сенсоров описано в конце статьи) и отобразить их в окне серийного монитора Arduino IDE.

В окне серийного монитора вы увидите примерно следующее:

ROM = 28 88 84 82 5 0 0 6A

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

Убедитесь, что вы указали корректные пины!

В строке 10, где указано “OneWire ds(2);” устанавливается пин, к которому подключен контакт data с сенсора.

В этом примере использован пин 2, но значения пина по умолчанию в примере OneWire стоит на 10. Можно использовать и его.

#include <OneWire.h>

// пример использования библиотеки OneWire DS18S20, DS18B20, DS1822

OneWire ds(2); // на пине 10 (нужен резистор 4.7 КОм)

void setup(void) {

Serial.begin(9600);

void loop(void) {

byte present = 0;

float celsius, fahrenheit;

if (!ds.search(addr)) {

Serial.println("No more addresses.");

Serial.println();

ds.reset_search();

Serial.print("ROM =");

Serial.write(" ");

Serial.print(addr[i], HEX);

if (OneWire::crc8(addr, 7) != addr) {

Serial.println("CRC is not valid!");

Serial.println();

// первый байт определяет чип

Serial.println(" Chip = DS18S20"); // или более старый DS1820

Serial.println(" Chip = DS18B20");

Serial.println(" Chip = DS1822");

Serial.println("Device is not a DS18x20 family device.");

ds.select(addr);

delay(1000); // 750 может быть достаточно, а может быть и не хватит

// мы могли бы использовать тут ds.depower(), но reset позаботится об этом

present = ds.reset();

ds.select(addr);

Serial.print(" Data = ");

Serial.print(present, HEX);

Serial.print(" ");

data[i] = ds.read();

Serial.print(data[i], HEX);

Serial.print(" ");

Serial.print(" CRC=");

Serial.print(OneWire::crc8(data, 8), HEX);

Serial.println();

// конвертируем данный в фактическую температуру

// так как результат является 16 битным целым, его надо хранить в

// переменной с типом данных "int16_t", которая всегда равна 16 битам,

// даже если мы проводим компиляцию на 32-х битном процессоре

int16_t raw = (data

if (data == 0x10) {

raw = (raw & 0xFFF0) + 12 - data;

byte cfg = (data & 0x60);

// при маленьких значениях, малые биты не определены, давайте их обнулим

if (cfg == 0x00) raw = raw & ~7; // разрешение 9 бит, 93.75 мс

else if (cfg == 0x20) raw = raw & ~3; // разрешение 10 бит, 187.5 мс

else if (cfg == 0x40) raw = raw & ~1; // разрешение 11 бит, 375 мс

//// разрешение по умолчанию равно 12 бит, время преобразования - 750 мс

celsius = (float)raw / 16.0;

fahrenheit = celsius * 1.8 + 32.0;

Serial.print(" Temperature = ");

Serial.print(celsius);

Serial.print(" Celsius, ");

Serial.print(fahrenheit);

Serial.println(" Fahrenheit");

Как подключить несколько сенсоров DS18B20 к Arduino?

Вы можете подключить несколько цифровых датчиков температуры DS18B20 параллельно. При этом библиотека OneWire library позволит вам считывать данные со всех датчиков одновременно.

Ниже описаны два метода подключения сенсоров.

Для большого количества сенсоров (больше 10), надо использовать резисторы с меньшим сопротивлением (например, 1.6 КОм или даже меньше).

Кроме того, если вы подключаете параллельно более 10 датчиков, могут возникнуть проблемы (погрешности при съеме показаний). Поэтому рекомендуется устанавливать дополнительный резистор сопротивлением 100...120 Ом между контактом data на Arduino и data на каждом сенсоре!

Результат работы предыдущего скетча с двумя подключенными сенсорами может выглядет примерно следующим образом:

ROM = 28 88 84 82 5 0 0 6A

Data = 1 51 1 4B 46 7F FF F 10 FE CRC=FE

Temperature = 21.06 Celsius, 69.91 Fahrenheit

ROM = 28 DA CA 27 5 0 0 49

Data = 1 4E 1 4B 46 7F FF 2 10 D9 CRC=D9

Temperature = 20.87 Celsius, 69.57 Fahrenheit

No more addresses.

Выбираем правильный сенсор

Было бы неплохо знать, с какого именно сенсора вы получаете данные, когда вы используете параллельно несколько датчиков. Как это сделать?

Серийный номер

Так как датчики цифровые, у каждого из них есть индивидуальный серийный номер, который можно использовать для опознавания того или иного сенсора. Вроде бы все просто. Но... нам ведь надо предварительно определить эти серийные номера, прежде чем использовать их для опознавания сенсора, правильно?

Вы могли обратить на примерах выше, что скетч выдает нам данные в виде 64-битного серийного номера - значение “ROM”. Например:

28 88 84 82 5 0 0 6A или 28 DA CA 27 5 0 0 49 в примере выше.

Не забывайте, если вы используете одновременно большое количество датчиков (10 и больше), надо добавить резисторы 100 … 120 Ом между контактами data с сенсора DS18B20 и пином data на Arduino (для каждого датчика!).

Ниже показана схема параллельного подключения нескольких сенсоров с использованием трех контактов.


Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Датчик температуры в Arduino – один из самых распространенных видов сенсоров. Разработчику проектов с термометрами на Arduino доступно множество разных вариантов, отличающихся по принципу действия, точности, конструктивному исполнению. Цифровой датчик DS18B20 является одним из наиболее популярных температурных датчиков, часто он используется в водонепроницаемом корпусе для измерения температуры воды или других жидкостей. В этой статье вы найдете описание датчика ds18b20 на русском, мы вместе рассмотрим особенности подключения к ардуино, принцип работы датчика, описание библиотек и скетчей.

DS18B20 – это цифровой температурный датчик, обладающий множеством полезных функций. По сути, DS18B20 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.

Температурный датчик DS18B20 имеет разнообразные виды корпуса. Можно выбрать один из трех – 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92. Последний является наиболее распространенным и изготавливается в специальном влагозащитном корпусе, так что его смело можно использовать под водой. У каждого датчика есть 3 контакта. Для корпуса TO-92 нужно смотреть на цвет проводов: черный – земля, красный – питание и белый/желтый/синий – сигнал. В интернет-магазинах можно купить готовый модуль DS18B20.

Где купить датчик

Естественно, что DS18B20 дешевле всего купить на Алиэкспрессе, хотя он продается и в любых специализированных российских интернет-магазинах с ардуино. Приведем несколько ссылок для примера:

Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.

Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.

Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.

Подключение DS18B20 к Arduino

DS18B20 является цифровым датчиком. Цифровые датчики передают значение измеряемой температуры в виде определенного двоичного кода, который поступает на цифровые или аналоговые пины ардуино и затем декодируется. Коды могут быть самыми разными, ds18b20 работает по протоколу данных 1-Wire. Мы не будем вдаваться в подробности этого цифрового протокола, укажем лишь необходимый минимум для понимания принципов взаимодействия.

Обмен информацией в 1-Wire происходит благодаря следующим операциям:

  • Инициализация – определение последовательности сигналов, с которых начинается измерение и другие операции. Ведущее устройство подает импульс сброса, после этого датчик должен подать импульс присутствия, сообщающий о готовности к выполнению операции.
  • Запись данных – происходит передача байта данных в датчик.
  • Чтение данных – происходит прием байта из датчика.

Для работы с датчиком нам понадобится программное обеспечение:

  • Arduino IDE;
  • Библиотека OneWire, если используется несколько датчиков на шине, можно использовать библиотеку DallasTemperature. Она будет работать поверх OneWire.

Из оборудования понадобятся:

  • Один или несколько датчиков DS18B20;
  • Микроконтроллер Ардуино;
  • Коннекторы;
  • Резистор на 4,7 кОм (в случае подключения одного датчика пойдет резистор номиналом от 4 до 10K);
  • Монтажная плата;
  • USB-кабель для подключения к компьютеру.

К плате Ардуино UNO датчик подключается просто: GND с термодатчика присоединяется к GND Ардуино, Vdd подключается к 5V, Data – к любому цифровому пину.

Простейшая схема подключения цифрового датчика DS18B20 представлена на рисунке.

Алгоритм получения информации о температуре в скетче состоит из следующих этапов:

  • Определение адреса датчика, проверка его подключения.
  • На датчик подается команда с требованием прочитать температуру и выложить измеренное значение в регистр. Процедура происходит дольше остальных, на нее необходимо примерно 750 мс.
  • Подается команда на чтение информации из регистра и отправка полученного значения в «монитор порта»,
  • Если требуется, то производится конвертация в градусы Цельсия/Фаренгейта.

Пример простого скетча для DS18B20

Самый простой скетч для работы с цифровым датчиком выглядит следующим образом. (в скетче мы используем библиотеку OneWire, о которой поговорим подробнее чуть позже).

#include /* * Описание взаимодействия с цифровым датчиком ds18b20 * Подключение ds18b20 к ардуино через пин 8 */ OneWire ds(8); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком void setup(){ Serial.begin(9600); } void loop(){ // Определяем температуру от датчика DS18b20 byte data; // Место для значения температуры ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память delay(1000); // Микросхема измеряет температуру, а мы ждем. ds.reset(); // Теперь готовимся получить значение измеренной температуры ds.write(0xCC); ds.write(0xBE); // Просим передать нам значение регистров со значением температуры // Получаем и считываем ответ data = ds.read(); // Читаем младший байт значения температуры data = ds.read(); // А теперь старший // Формируем итоговое значение: // - сперва "склеиваем" значение, // - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625) float temperature = ((data << 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Скетч для работы с датчиком ds18b20 без delay

Можно немного усложнить программу для ds18b20, чтобы избавиться от , тормозящей выполнение скетча.

#include OneWire ds(8); // Объект OneWire int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20 long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок void setup(){ Serial.begin(9600); } void loop(){ detectTemperature(); // Определяем температуру от датчика DS18b20 Serial.println(temperature); // Выводим полученное значение температуры // Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться } int detectTemperature(){ byte data; ds.reset(); ds.write(0xCC); ds.write(0x44); if (millis() - lastUpdateTime > TEMP_UPDATE_TIME) { lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); data = ds.read(); // Формируем значение temperature = (data << 8) + data; temperature = temperature >> 4; } }

Библиотека DallasTemperature и DS18b20

В своих скетчах мы можем использовать библиотеку DallasTemperature, упрощающую некоторые аспекты работы с датчиком ds18b20 по 1-Wire. Пример скетча:

#include // Номер пина Arduino с подключенным датчиком #define PIN_DS18B20 8 // Создаем объект OneWire OneWire oneWire(PIN_DS18B20); // Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire. DallasTemperature dallasSensors(&oneWire); // Специальный объект для хранения адреса устройства DeviceAddress sensorAddress; void loop(void){ // Запрос на измерения датчиком температуры Serial.print("Измеряем температуру..."); dallasSensors.requestTemperatures(); // Просим ds18b20 собрать данные Serial.println("Выполнено"); // Запрос на получение сохраненного значения температуры printTemperature(sensorAddress); // Задержка для того, чтобы можно было что-то разобрать на экране delay(1000); } // Вспомогательная функция печати значения температуры для устрйоства void printTemperature(DeviceAddress deviceAddress){ float tempC = dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); } // Вспомогательная функция для отображения адреса датчика ds18b20 void printAddress(DeviceAddress deviceAddress){ for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Библиотека OneWire для работы с DS18B20

DS18B20 использует для обмена информацией с ардуино протокол 1-Wire, для которого уже написана отличная библиотека. Можно и нужно использовать ее, чтобы не реализовывать все функции вручную. . Для установки библиотеки скачайте архив, распакуйте в папку library вашего каталога Arduino. Подключается библиотека с помощью команды #include

Все датчики DS18B20 подключаются параллельно, для них всех достаточно одного резистора. При помощи библиотеки OneWire можно одновременно считать все данные со всех датчиков. Если количество подключаемых датчиков более 10, нужно подобрать резистор с сопротивлением не более 1,6 кОм. Также для более точного измерения температуры нужно поставить дополнительный резистор на 100…120 Ом между выходом data на плате Ардуино и data на каждом датчике. Узнать, с какого датчика получено то или иное значение, можно с помощью уникального серийного 64-битного кода, который будет выдан в результате выполнения программы.

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

Выводы

Микросхема Dallas DS18B20 является очень интересным устройством. Датчики температуры и термометры, созданные на ее основе, обладают приемлемыми для большинства задач характеристиками, развитым функционалом, относительно не дороги. Особенную популярность датчик DS18B20 снискал как влагозащищенное устройство для измерения температуры жидкостей.

За дополнительные возможности приходится платить относительной сложностью работы с датчиком. Для подключения DS18B20 нам обязательно понадобится резистор с номиналом около 5К. Для работы с датчиком в скетчах ардуино нужно установить дополнительную библиотеку и получить определенные навыки для работы с ней – там все не совсем тривиально. Впрочем, можно купить уже готовый модуль, а для скетча в большинстве случаев хватит простых примеров, приведенных в этой статье.

DS18B20 — цифровой датчик температуры фирмы Dallas. Отправляет данные о температуре, используя только один цифровой вывод и специальный протокол, называемый 1-Wire. Вы можете подключить несколько датчиков к одному контакту. Датчик измеряет температуру в градусах Цельсия.

Технические характеристики DS18B20

  • Датчик можно питать напряжением от 3 до 5,5В
  • Датчик может измерять температуру от -55 до 125 °C
  • Датчик имеет цифровое разрешение от 9 до 12 бит
  • Точность измерения +/- 0,5 °C в диапазоне от -10 до 85 °C
  • Точность измерения: + /- 2 °C для диапазона от -55 до 125 °C
  • Дрейф измерения +/- 0,2 °C

Схема подключения DS18B20

Что такое разрешение?

В технических характеристиках сообщается, что датчик DS18B20 может измерять температуру с различным разрешением. Разрешение — это как у линейки: миллиметры между сантиметрами. Так же и c разрешением у DS18B20 — это шаг между последовательными ступенями градусов Цельсия.

Разрешение выбирается с помощью количества бит. Диапазон выбора от 9 до 12 бит. Выбор разрешения влечет за собой определенные последствия. Чем выше разрешение, тем дольше придется ждать результат измерений.

Для 9 битного разрешения есть 2 шага между последовательными уровнями:

  • 0,0 °C
  • 0,5 °C

Для 10 битного разрешения есть 4 шага между последовательными уровнями:

  • 0,0 °C
  • 0,25 °C
  • 0,5 °C
  • 0,75 °C

В этом случае мы считываем температуру с разрешением 0,25 °C. Время измерения для 10 битного разрешения составляет 187,5 мс, что позволяет выполнить 5,3 измерений в секунду.

Для 11 битного разрешения есть 8 шагов между последовательными уровнями:

  • 0,0 °C
  • 0,125 °C
  • 0,25 °C
  • 0,375 °C
  • 0,5 °C
  • 0,625 °C
  • 0,75 °C
  • 0,875 °C

То есть разрешение составляет 0,125 °C. Время измерения для 11 битного разрешения составляет 375 мс. Это позволяет выполнить 2,6 измерения в секунду.

Для 12 битного разрешения есть 16 шагов между последовательными уровнями:

  • 0,0 °C
  • 0,0625 °C
  • 0,125 °C
  • 0,1875 °C
  • 0,25 °C
  • 0,3125 °C
  • 0,375 °C
  • 0,4375 °C
  • 0,5 °C
  • 0,5625 °C
  • 0,625 °C
  • 0,6875 °C
  • 0,75 °C
  • 0,8125 °C
  • 0,875 °C
  • 0,9375 °C

Следовательно, разрешение составляет 0,0625 °C. Время измерения для 12 битного разрешения в районе 750 мс. То есть вы можете сделать 1,3 измерений в секунду.

Что такое точность измерения?

Ничто в мире, и особенно в электронике, не является совершенным. Можно только приближаться к совершенству, тратя все больше и больше денег и сил. Так же и с этим датчиком. Он имеет некоторые неточности, о которых вы должны знать.

В технических характеристиках сказано, что в диапазоне измерения от -10 до 85 °C датчик DS18B20 имеет точность на уровне +/- 0,5 °C. Это значит, что, когда в комнате у нас температура 22,5 °C, то датчик может вернуть нам результат измерения от 22 до 23 °C. То есть, может показать на 0,5 °C больше или меньше. Все это зависит от индивидуальной характеристики датчика.

В диапазоне от -55 до 125 °C погрешность измерения может возрасти до +/- 2 °C. То есть, когда вы измеряете что-то с температурой 100 °C, то датчик может показать температуру от 98 до 102 °C.

Все эти отклонения могут несколько отличаться для каждой температуры, но при измерении одной и той же температуры, отклонение всегда будет одинаковым.

Что такое дрейф измерения?

Дрейф измерения — это наиболее худшая форма неточности. Суть дрейфа измерения заключается в том, что при измерении постоянной температуры — при одном измерении датчик может показывать одну температуру, а при последующем другую (на величину дрейфа).

Дрейф датчика температуры DS18B20 +/- 0.2 °C. Например, когда в комнате постоянная температура составляет 24 °C, датчик может выдавать результат в диапазоне от 23,8 °C до 24,2 °C.

(379,0 Kb, скачано: 913)

Вам необходимо измерить температуру в неблагоприятной для микросхем среде?

Датчик DS18B20 поможет вам измерить температуру воды в аквариуме или в чайнике. Можно использовать его для измерения температуры на улице и при этом не бояться, что датчик зальёт дождём. Дачники оценят возможность измерять температуру почвы в теплице и на участке.

В постоянной памяти DS18B20 можно сохранить граничные значения температуры, при выходе из которых сенсор будет переходить в режим тревоги. На общей шине из многих сенсоров микроконтроллер может за раз узнать, какие из них перешли в этот режим. Таким образом становится легко определить проблемный участок в контролируемой среде.

Разрешение показаний настраивается и может составлять от 9 до 12 бит. Меньше разрешение - выше скорость преобразования.

Подключение

Герметичный датчик на основе микросхемы DS18B20 можно подключить двумя способами:

По трём проводам: питание (красный), земля (чёрный) и сигнал (белый).

По двум проводам: земля и сигнал. В этом случае датчик изредка может давать неверные показания, которые легко исключить из конечного результата фильтрацией.

Независимо от способа подключения, сигнальный провод необходимо соединить с питанием через резистор 4,7 кОм. При подключении только одного датчика, подойдёт и резистор на 10 кОм.

Для подключения датчика к Arduino или к макетной плате удобно будет использовать нажимной клеммник.

Для подключения 1-Wire устройств к Arduino существует готовая библиотека, а для работы именно с DS18B20 существует библиотека-надстройка от Майлса Бёртона.

Характеристики:
  • Напряжение питания: 3.0..5.5 В
  • Диапазон температур: -55°C..+125°C
  • Точность показаний температуры: 0.5 °С
  • Шаг показаний: 0.0625 °С
  • Интерфейс: 1-Wire
  • Длинна провода: 1 метр
  • Потребляемый ток: 1мА