Ds18b20 датчик температуры схема подключения

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

Цифровой датчик DS18B20 измерит температуру в воде, на земле и даже в космосе.

Датчик способен считывать показания температуры в диапазоне от −55 до +125 °C и передавать данные на управляющую плату всего через один пин.

Примеры работы для Arduino

Датчик общается с управляющей платой по протоколу 1-wire . Но вы можете не загружать себе голову битами и байтами, а сразу сосредоточиться на проекте. Для этого скачайте и установите две библиотеки OneWire и DallasTemperature через менеджер модулей.

Один датчик

Рассмотрим простой пример — подключения одного датчика.

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

Сенсор подключается к управляющей плате через один сигнальный пин. При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.

Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.

При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.

Код программы

Выведем температуру сенсора в Serial-порт.

Серия датчиков

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

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

Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.

Код программы

Просканируем все устройства на шине 1-Wire и выведем температуру каждого сенсора отдельно в Serial-порт.

Примеры работы для Espruino

Один датчик

Рассмотрим простой пример — подключения одного датчика.

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

Сенсор подключается к управляющей плате через один сигнальный пин. При подключении к Iskra в компактном формфакторе, например Iskra JS Mini, воспользуйтесь макетной платой и парочкой нажимных клеммников.

Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.

При коммуникации сенсора с платой Iskra JS, используйте Troyka Slot Shield совместно с модулем подтяжки.

Код программы

Выведем температуру сенсора в консоль Espruino Web IDE.

Серия датчиков

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

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

Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.

Код программы

Найдём все устройства на шине 1-Wire и выведем температуру каждого сенсора отдельно в Serial-порт.

Примеры работы для Raspberry Pi

Один датчик

Считаем данные с датчика одноплатником Raspberry Pi. Подключите сенсор к 4 пину Raspberry через модуль подтяжки. Для избежания макеток и проводов используйте плату расширения Troyka Cap.

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

Код программы

Считаем данные с датчика одноплатником Raspberry Pi. Подключите сенсор к 4 пину Raspberry через модуль подтяжки. Для избежания макеток и проводов используйте плату расширения Troyka Cap.

Серия датчиков

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

Датчик температуры DS18B20. Описание, характеристики, подключение, распиновка, datasheet

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

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

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

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

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

То есть, вы можете прочитать температуру с разрешением 0,5 °C. Для 9 битного разрешения время измерения составляет 93,75 мс. То есть, вы можете выполнять 10,6 измерений в секунду.

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

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

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

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

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

Следовательно, разрешение составляет 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.

Скачать datasheet DS18B20 (379,0 Kb, скачано: 1 003)

Датчик температуры Arduino DS18B20

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

Описание датчика DS18B20 для Arduino

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

Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.

Читать еще:  Practyl ml cd49 120 отзывы

Виды корпусов DS18B20

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

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

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

Особенности цифрового датчика DS18B20

  • Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
  • Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
  • Датчик питается напряжением от 3,3В до 5В.
  • Можно программно задать максимальную разрешающую способность до 0,0625С, наибольшее разрешение 12 бит.
  • Присутствует функция тревожного сигнала.
  • Каждое устройство обладает своим уникальным серийным кодом.
  • Не требуются дополнительные внешние элементы.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу 1-Wire.
  • Для присоединения к микроконтроллеру нужны только 3 провода.
  • Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

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

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

Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.

Полученные температурные измерения сохраняются в 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 представлена на рисунке.

В режиме паразитного питания контакт Vdd с датчика подключается к GND на Ардуино – в этом случае пригодятся только два провода. Работу в паразитном режиме лучше не использовать без необходимости, так как могут ухудшиться быстродействие и стабильность.

Скетч для DS18B20

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

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

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

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

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

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

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

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

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

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

Основные команды библиотеки OneWire:

  • search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
  • reset_search() – производится поиск на первом приборе.
  • reset() – выполнение сброса шины перед тем, как связаться с устройством.
  • select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
  • write(byte) – производится запись байта информации на устройство.
  • write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
  • read() – чтение байта информации с устройства.
  • crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.

Важно правильно настроить режим питания в скетче. Для паразитного питания в строке 65 нужно записать ds.write(0x44, 1);. Для внешнего питания в строке 65 должно быть записано ds.write(0x44).

Write позволяет передать команду на термодатчик. Основные команды, подаваемые в виде битов:

  • 0x44 – измерить температуру, записать полученное значение в SRAM.
  • 0x4E – запись 3 байта в третий, четвертый и пятый байты SRAM.
  • 0xBE – последовательное считывание 9 байт SRAM.
  • 0х48 – копирование третьего и четвертого байтов SRAM в EEPROM.
  • 0xB8 – копирование информации из EEPROM в третий и четвертый байты SRAM.
  • 0xB4 – возвращает тип питания (0 – паразитное, 1 – внешнее).

Подключение нескольких датчиков температуры DS18B20 к Ардуино

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

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

Читать еще:  5 Ступенчатый фильтр для очистки воды

В режиме паразитного питания схема выглядит иначе. Контакт Vdd практически не задействован, питание идет через выход data.

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

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

arduinoLab

Датчик температуры DS18B20, подключение к Arduino.

Подробно про датчики температуры DS18B20 и работу с библиотекой DallasTemperature.

Характеристики датчика:

  • Диапазон температур: –55 … 125°C ±2.0, –10 … 85°C ±0.5
  • Разрешение: от 9 до 12 Бит, до 0.0625 °C
  • Напряжение питания: от 3.0 В до 5.5 В. Возможно фантомное питание (питание по линии данных)
  • Связь по 1-Wire. Каждый датчик имеет уникальный 64 битный серийный номер, по которому происходит общение с датчиком на шине.
  • Тревожный сигнал, передает адрес датчика, если температуры вышла за заданные пределы.

Схема подключения датчиков:

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

Также существует герметичная версия DS18B20, в таких датчиках смотрим на цвета проводов.

Подключение одного датчика:

Датчик (ногу DQ) можно подключать на любой свободный выход arduino, в данном случаи датчик подключен к аналоговому А1 (он же 15 цифровой). В коде, при необходимости, можно задать любой другой, на котором будет сконфигурирована шина 1-Wire.

Также необходимо притянуть линию данных к питанию резистором на 4,7к. Питание у датчика 5 вольт.

Подключение нескольких датчиков:

Дополнительные датчики подключаются параллельно.

Подключение датчика с фантомным питанием:

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

Для работы с датчиками необходима библиотека OneWire, скачать можно тут или тут, благодаря которой можно работать со всей линейкой устройств от Maxim/Dallas с однопроводной шиной (1-Wire), включая DS18B20.

Также, для удобства работы с датчиками DS18B20, рекомендуется использовать библиотеку DallasTemperature, особенно если датчиков на шине несколько, можно скачать тут или тут, она работает поверх библиотеки OneWire. Библиотека обширная, возможно будет тяжела для освоения начинающим, особенно по примерам из комплекта.

Пример работы с одним датчиком, без DallasTemperature:

Открываем пример DS18x20_Temperature.pde из библиотеки OneWire.

Далее в 10 строке указываем пин к которому подключен датчик, изначально там указан 10 пин, а в нашем случаи это A1, то есть, меняем «OneWire ds(10);» на «OneWire ds(A1);» и загружаем в arduino. Открываем «монитор порта» в мониторе каждую секунду приходят следующие данные.

ROM = 28 A8 3E F9 5 0 0 12 — Адрес датчика на шине в HEX формате.
Chip = DS18B20 — Тип датчика, вычисляется из адреса датчика.
Data = 1 C0 1 4B 46 3F FF 10 10 6F CRC=6F — Данные о температуре в HEX формате.
Temperature = 28.00 Celsius, 82.40 Fahrenheit — Температура в двух системах.

Алгоритм получения данных с датчика:

Получение температуры в примере DS18x20_Temperature.pde, происходит в три этапа.

Первым нужно узнать адрес датчика на шине и подключен ли он вообще,

за это отвечает код выше и функция ds.search(addr), которая, если найдет устройство, положит его адрес в массив addr. Можно эту процедуру опустить, если адрес датчика заранее известен.

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

на это датчику требуется относительно много времени, порядка 750мс.

Третьем даем команду на чтение данных из регистра и в цикле считываем ответ в массив

и попутно отправляем его в «монитор порта» для отладки, ниже конвертируем в привычные нам Цельсии или Фаренгейты.

Пример целиком, на всякий случай

Работа с библиотекой DallasTemperature:

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

Работа с датчиками по индексу:

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

Пример крайне упрощен и по сути не отличается от кода из примера «DS18x20_Temperature.pde» библиотеки OneWire.

При инициализации просиходит поиск устройств на шине и каждому устройству назначается свой «индекс» по номеру которого, функцией getTempCByIndex(0), можно достать температуру из датчика. Перед считыванием нужно вызвать функцию requestTemperatures() которая дает команды на подключенные датчики считать температуру и положить её в регистр для считвания.

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

Еще один пример работы с датчиками по индексу, этот пример использоватся в видео. Он отправляет в «монитор порта» температуру со всех подключенных датчиков. Для получения количества подключенных датчиков, вызывается функция getDeviceCount(), которая возвращает значение в переменную qty. В loop, также даем команду датчикам, вызывая функцию requestTemperatures(), а ниже, в цикле for, используя количество подключенных датчиков, отпраляем в монитор порта температуру со всех подключенных датчиков.

Работа с датчиками по ID:

В данном случаи обращаемся к датчику не по назначенному библиотекой «индексу», а по серийному номеру датчика, заданного в коде,

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

В коде объяевленны два массива sensor1 и sensor2 в которых хранятся 8 битный серийный номер датчика. В loop после вызова функции requestTemperatures() считываем температуру функцией getTempC(sensor1) передавая ей массив с серийным номером датчика, функция возвращает значение температуры с датчика, которую отправляем в «монитор порта», в случаи если датчика с таким серийным номером на шине не окажится, функция вернет -127.0

Еще один пример из видео, работающий по такому принципу ниже. Он отображает полученную температуру с датчика на LCD сшилде.

Работа с ID:

И заключительный простой пример, в данном случаи, при включении микроконтроллера и всего прочего, вызываем функцию getDeviceCount() которая возвращает количество найденых датчиков на шине, это количество отправляем в «монитор порта» но правельее сделать проверку на наличие датчиков и остановку устройства если датчики не найдены.

Следом вызываем функцию getAddress(sensor0, 0), в функцию передаем массив sensor0 который в нашем случаи объявлен в 7 строке кода и индекс датчика, адрес которого функция присвоит в sensor0.

Следом, в цикле for отправляем в монитор порта содержимое массива sensor0, в котором должен содержатся серийный номер датчика, если все прошло успешно

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

в loop, как и в примере выше, отправляем значение температуры с датчика в «монитор порта» по серийному номеру

Зачем нужен этот пример? если с таким же успехом, можно написать ds.getTempCByIndex(0), с одним датчиком так и нужно, а если их много? серийный номер датчика можно записать в EEPROM с привязкой к конкретной задачи, отслеживать получение верных данных с конкретного датчика, все это повышает надежность устройства.

Купить DS18B20:

можно на али, тут, в герметичном исполнении тут.

Читать еще:  220 Вольт чайковский официальный сайт

Мир микроконтроллеров

Популярное

  • Устройство и программирование микроконтроллеров AVR для начинающих — 143
  • Трехканальный термостат, терморегулятор, таймер на ATmega8 — 70
  • Двухканальный термостат, терморегулятор на ATmega8 — 67

Датчик температуры DS18B20: подключение, программирование

Подключение и программирование датчика DS18B20

Подключение датчика DS18B20 к микроконтроллеру
Программирование работы микроконтроллера с датчиком DS18B20

В двух предыдущих статьях мы рассмотрели устройство датчика температуры DS18B20 и систему команд датчика. В этой статье мы рассмотрим схему подключения одного или нескольких датчиков к микроконтроллеру и программирование работы МК с датчиком (датчиками) по шине 1-Wire с внешним питанием

Подключение датчика DS18B20 к микроконтроллеру

Типовая схема подключения датчиков DS18B20 к микроконтроллеру:

Как видно из схемы, датчик DS18B20 (или датчики) подключаются к микроконтроллеру, если они имеют общее питание, тремя проводниками:
— вывод №1 — общий провод (масса, земля)
— вывод №2 — он же DQ , по которому происходит общение между МК и DS18B20, подключается к любому выводу любого порта МК. Вывод DQ обязательно должен быть «подтянут» через резистор к плюсу питания
— вывод №3 — питание датчика — +5 вольт
Если в устройстве используется несколько датчиков температуры, то их можно подключить к разным выводам порта МК, но тогда увеличится объем программы. Датчики лучше подключать как показано на схеме — параллельно, к одному выводу порта МК.
Напомню о величине подтягивающего резистора:
«Сопротивление резистора надо выбирать из компромисса между сопротивлением используемого кабеля и внешними помехами. Сопротивление резистора может быть от 5,1 до 1 кОм. Для кабелей с высоким сопротивлением жил надо использовать более высокое сопротивление. А там где присутствуют промышленные помехи – выбирать более низкое сопротивление и использовать кабель с более большим сечением провода. Для телефонной лапши (4 жилы) для 100 метров необходим резистор 3,3 кОм. Если вы применяете «витую пару» даже 2 категории длина может быть увеличена да 300 метров»

Программирование работы микроконтроллера с датчиком DS18B20

Как происходит общение датчика DS18B20 с микроконтроллером мы рассмотрим используя даташит датчика и программу Algorithm Builder.

Последовательность операций общения
ОЧЕНЬ ВАЖНО следовать установленной последовательности (которая состоит из трех пунктов) каждый раз при обращении к DS18B20:
1. Инициализация
2. Команда ROM
3. Функциональная команда DS18B20
Только две команды выполняется в два шага: Поиск ROM и Поиск Аварии.

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

Последовательность выполнения инициализации состоит из двух частей:
— импульс сброса — который формирует микроконтроллер
— импульс присутствия — который формирует DS18B20
Исходное состояние шины DQ, по которой происходит общение МК и датчика, — логическая 1, так как шина DQ «подтянута» через резистор к питанию.
По состоянию шины DQ можно определить подключен ли датчик к микроконтроллеру:
— если на шине логическая 1 — значит датчик подключен
— если не логическая 1 — значит датчик не подключен (или забыли подключить, или обрыв линии DQ)
Поэтому, последовательность выполнения инициализации можно дополнить еще одним пунктом — проверка подключения датчика. Но учтите, что эту проверку можно провести только при одном датчике.

Проверяем подключение датчика DS18B20:

Где:
— INI_DS18B20 — подпрограмма инициализации
— DQ_Pin — имя, которое я присвоил, разряду порта к которому подключен датчик (если смотреть по схеме, то это вывод PB0 порта В)
— DQ_Pin=1 — проверка подключения датчика — если на выводе DQ_Pin логическая единица то переходим по стрелке, если нет, то:
— 1—> Term_Error, где Term_Error — переменная в которую записывается код ошибки, в данном случае «1»
— Show_Term_Error — переход к подпрограмме вывода ошибки на дисплей
К примеру, при использовании трехразрядного семисегментного дисплея, можно вывести такую строчку:
— Er1, что означает — возникла ошибка, код ошибки-1 (датчик не подключен)

Теперь заглянем в даташит датчика и посмотрим временной график процедуры инициализации:

Переводим график в слова:
1. Исходный уровень шины DQ — логическая единица (за счет подтягивающего резистора)
2. Микроконтроллер формирует импульс сброса:
— МК переводит шину DQ в состоянии логического нуля на время не менее 480 микросекунд
— МК отпускает шину (переводим вывод в режим приема), при этом шина DQ опять переходит в состоянии логической единицы
3. DS18B20 обнаружив перепад уровня на шине (с логического нуля на логическую единицу) через 15-60 микросекунд передает импульс присутствия — переводит шину DQ в состояние логического нуля на длительность 60-240 микросекунд
4. По завершению импульса присутствия DS18B20 возвращает шину DQ в уровень логической единицы (судя по графику — через 480 микросекунд, от окончания импульса сброса, шина должна стопроцентно вернуться в уровень логической единицы)

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


На графике указаны минимальные временные характеристики, поэтому в программе они несколько завышены или взяты максимальные (из минимальных) значения:
— импульс сброса от МК — не 480 а 500 микросекунд
— пауза от окончания импульса сброса до импульса присутствия — 60 микросекунд
— возврат шины в состояние логической единицы после импульса присутствия через 420 микросекунд
Я надеюсь с первым вопросом — ИНИЦИАЛИЗАЦИЯ, мы разобрались
Переходим к следующему шагу обязательной последовательности — «Команда ROM»

Команда ROM

Следующим шагом нашего общения с DS18B20 мы должны подать ему нужную команду ROM
Напоминаю, что команд ROM всего пять:
1. Поиск ROM — может применяется (а может и не применяться, я, к примеру, ее в большинстве случаев не использую) в случае применения нескольких датчиков или других устройств общающихся с МК по шине 1-Wire
2. Чтение ROM — применяется при одном подключенном датчике для считывания его 64-битного кода
3. Соответствие ROM — применяется в случае если датчиков более одного для обращения к конкретному датчику
4. Пропуск ROM — команда используется для обращения сразу ко всем датчикам (устройствам) подключенным к МК. Практически применяется для подачи функциональной команды на конвертирование температуры (определение температуры) всеми подключенными датчиками одновременно
5. Поиск тревоги — если мы задали DS18B20 верхний и нижний предел температуры, которые нам нужно контролировать. В этом случае нам ответят только те датчики измеренная температура которыми соответствует заданным пределам

Каждая команда ROM имеет шестнадцатиразрядный код (также как и функциональные команды), поэтому для удобства в программе очень можно определить константы, которые имеют понятные названия команд, к примеру:

В этой таблице заданы константы нужных мне для работы с датчиками команд.
После первого шага — ИНИЦИАЛИЗАЦИЯ, и передачи датчику DS18B20 команды ROM, датчик готов выполнить функциональную команду.
В предыдущей статье я подробно рассказал и о командах ROM, и о функциональных командах, повторяться не буду (я про функциональные команды).

Два примера алгоритма работы с DS18B20:
1. При использовании одного датчика:
— выполняем инициализацию
— подаем датчику команду ROM — «Пропуск ROM»
— подаем датчику функциональную команду — «Конвертировать температуру» (измерить температуру)
В процессе конвертирования контролируем работу датчика — если на шине ноль, то конвертирование не закончилось, если на шине логическая единица — конвертирование закончено.
Теперь можно считать температуру с датчика:
— выполняем инициализацию
— подаем датчику команду ROM — «Пропуск ROM»
— подаем датчику функциональную команду — «Чтение памяти»
По команде «чтение памяти» датчик начинает передачу данных из своей памяти — все девять байт. Но нам нужны только первые два байта — в них записана текущая измеренная датчиком температура. Поэтому считываем только два первых байта и выходим из подпрограммы.

Предыдущие статьи:

Следующая статья:

(17 голосов, оценка: 4,88 из 5)

Ссылка на основную публикацию
Adblock
detector