Оригинальная статья доступна по ссылке
Автор оригинальной статьи: производитель Silines
DS18B20 – цифровой датчик температуры, который является популярной моделью среди аналогов. Эксплуатация устройства очень проста, датчик помещается в водонепроницаемый корпус и измеряет температуру воды или других жидкостей. Зачастую он подключается к Arduino или к контроллерам компании Silines, и в итоге владелец получает чувствительный и качественный сенсор. Ниже вы узнаете основные характеристики и методы подключения датчика DS18B20.
Общее описания датчика DS18B20
DS18B20 – это датчик температуры, который обладает разрешением преобразования от 9 до 12 разрядов. Тревожный сигнал – функция, которая позволяет качественно контролировать температуру жидкости. Большинство параметров контроля задаются самостоятельно, пользователем. Они сохраняются в памяти и могут быть перенастроены в будущем. Датчик DS18B20 использует протокол интерфейса 1-Wire для обмена данными.
Линия данных может стать непосредственным передатчиком энергии для DS18B20. В таком случае можно не пользоваться внешними источниками. Так называемое – паразитное питание. Каждая выпущенная модель изготовляется со своим уникальным кодом. Он имеет длину в 64 разряда, поэтому сразу несколько датчиков могут работать одновременно, на одной линии связи. Один порт может выступать обменщиком данных сразу для двух датчиков.
Датчик может измерять температуру в достаточно широком диапазоне, от -55 до +125 градусов по Цельсию. Погрешность минимальна и зачастую составляет максимум полградуса. Вышеописанные характеристики делают датчики популярным для использования в экологическом контроле, мониторинге температурных перемен в зданиях, а также в узлах оборудования.
Основные преимущества
Датчик температуры DS18B20 обладает массой основных функций и плюсов:
- Однопроводный интерфейс 1-Wire требует только один порт связи для контроллера.
- Уникальные коды для каждого агрегата.
- Одна линия может подключить сразу несколько датчиков.
- Не нужны никакие внешние компоненты.
- Питание может быть получено напрямую после подключения к линии связи.
- Большой диапазон температур, от -55 до +125 градусов Цельсия.
- Ошибки и погрешности могут составлять максимум полградуса.
- Можно запрограммировать тревожный сигнал.
- Адрес датчика будет передаваться тревожным сигналом, если температура вышла за предел допустимого.
- Позволяет установить программное обеспечение.
- Может применяться практически повсеместно.
Краткий обзор характеристик
Датчик позволяет вносить корректировки в конфигурацию, используя регистр. Можно установить параметры преобразования агрегата. Цифра варьируется от 9 до 12 бит. Вся информация будет внесена в энергонезависимую память, которую еще называют (EEPROM). Обмен данными осуществляется специальным протоколом 1-Wire. Владельцу нужен небольшой подтягивающий резистор, ведь все агрегаты подключаются к общей шине.
Если быть более точными:
- Каждый элемент подключен к одной шине.
- Специализированный протокол идентифицирует каждое устройство на шине и обменивается информацией.
- Адрес датчика есть в каждом агрегате, именно он позволяет микроконтроллеру определять его и отправлять данные через 64-разрядный код.
- Схема подключения выглядит именно так, число датчиков может быть неограниченным.
Также датчик может работать без источников внешнего питания. Используется специальный резистор и вывод DQ. Сигналы повышенного уровня подзаряжают внутренние конденсаторы. Данный метод называется паразитным питанием. Каким вариантом питания пользоваться решать именно владельцу.
Режим измерения температур
Как проверить работоспособность датчика? Преобразовывать температуру в цифровые данные – вот основная функция датчика. Разрешение цифровых кодов задает сам владелец. Когда питание подключено, DS18B20 потребляет малое количество энергии. Для инициации измерения температур, микроконтроллер выполняет команду преобразования температуры. Когда процесс завершается, результаты находятся в 2 байтах регистра.
Если подключена схема внешнего питания, микроконтроллер может следить за состоянием конвертации. Он читает состояние линии, то есть, другими словами – выполняет временные слоты чтения. Далее, когда команда завершиться, линия переходит в высокое состояние. Когда выполняются процессы конвертации, она, наоборот, в низком положении.
Способ невозможен, если владелец хочет использовать паразитную емкость. На шине должен быть стабильный высокий уровень сигнала, что невозможно в таких условиях. Поэтому данный метод не является корректным в этом случае.
Как проверить полученный результат? Датчик предоставит все данные в 16-ти разрядном знаковом числе с дополнительным кодом. Если разрешение выставлено 12 быт, то регистр предоставляет наиболее точные результаты.
Как работает тревожный сигнал
Когда запущена команда преобразования температур, полученные данные сравнивают с верхними и нижними порогами регистров. Байтовое значение является знаковым и имеет дополнительный код. Энергозависимая память сохраняет все показатели. Регистры имеют разную длину, поэтому сравнения идет с битами 11 по 4 регистра. Если данные превышают или находятся ниже, то создается признак угрозы. Каждое измерение температурных данных перезаписывает эту команду. То есть, если температура снова вернулась в норму, то информация будет удалена с датчика.
Как проверить состояние датчика? С помощью специально команды поиска тревожных сигналов. Если датчик включен, то он всегда отреагирует на заданную команду. Таким образом, если работает сразу несколько датчиков, мастер сможет легко понять, какой из них выдает тревожный сигнал.
Подключаем датчик к плате Arduino
Так как DS18B20 передает значение в двоичном коде, то получаемая информация должна куда-то поступать. Цифровой или аналоговый пин платы ардуино принимает данные, а затем декодирует. Программа DS18B20 1-Wire имеет определенный протокол, по которому и работает вся система. Чтобы понимать ее достаточно иметь минимальную базу знаний:
- Программа выполняет всего три главных действия, которые мы опишем далее.
- Инициализацию. Несколько сигналов, с которых начинается измерение или аналогичные команды. Основной агрегат создает специальные импульсы, после них задействуется датчик. Он подает импульс присутствия, который значит, что техника готова выполнить операцию.
- Записи данных. Передается большое количество байтов информации в устройство DS18B20.
- Чтение информации. Датчик принимает всю информацию в виде кода.
Какие программы DS18B20 необходимы для его качественной работы?
- Arduino IDE.
- OneWire – специальные библиотеки, которые могут быть использованы сразу несколькими датчиками.
- DallasTemperature – аналог предыдущего варианта, менее популярен, но тоже используется.
А что касается оборудования для датчика?
- DS18B20 в одном экземпляре или нескольких.
- Специальный микроконтроллер от компании Ардуино или другие контроллеры, например, компании Silines.
- Несколько коннекторов.
- Резисторы на 4.7 кОм.
- Одна монтажная плата.
- Кабель, который можно подключить к персональному ПК и проводить анализ получаемой информации.
Когда датчик нужно подсоединить к плате, то для многих это становится проблемой. Ничего сложного. GND – знак, который вы найдете на датчике, его нужно соединить с GND. Второй показатель располагается на самой плате. Vdd необходимо соединить с 5V, а Data объединяется с любым цифровым пинам. Калибровка может осуществляться только в том случае, если вся система собрана.
Скетч для датчика
Программа DS18B20 может работать только по определенному алгоритму. Это позволит максимально точно и быстро получать данные об изменении температуры. Как проверить правильно ли работает скетч? Достаточно проследить за алгоритмами его функционирования, он должен выглядеть следующим образом.
- Сначала устройство должно определить адрес датчика, затем проверить его подключение.
- Датчик принимает команду, которая требует прочитать параметры температуры и перенаправить их в основной регистр. Приблизительно 750 мс уходит на весь процесс.
- Происходит чтение в регистре, полученные значения перенаправляются в порт.
- Возможна конвертация в различные показатели температуры.
Пример скетча
Программа DS18B20 OneWire требует скетчи для полноценной работы цифрового датчика. Мы прилагаем к данному материалу пример простейшего скетча.
#include <OneWire.h> /* * Описываются взаимодействия с агрегатом ds18b20 * ds18b20 подключается к плате используя восьмой пин /* OneWire ds(8); // Создается объект на шине, он сделает работу с датчиком возможной void setup(){ Serial.begin(9600); } void loop(){ // Определяется температурный показатель агрегата DS18b20 byte data[2]; // Здесь находятся показатели температуры ds.reset(); // Чтобы начать взаимодействия, необходимо сбросить все предыдущие команды ds.write(0xCC); // Датчик должен пропустить команду. Пока что установлено всего одно устройство ds.write(0x44); // Датчик должен измерить температуру. Данные будут помещены в цифровое хранилище данных, но не будут выводиться на экран delay(1000); // Агрегат меряет температуру, необходимо подождать ds.reset(); // Подготовьтесь получить значения данных ds.write(0xCC); ds.write(0xBE); // Даем команду передачи данных температуры из регистров // Ответ получен, считываем его data[0] = ds.read(); // Младший байт температурных показателей считывается data[1] = ds.read(); // Очередь старшего // Формируется окончательно значение температуры: // - Значение склеивается; // - далее умножается на коэффициент, который соответствует разрешающей способности (к примеру, если установлено 12 бит по умолчанию, то показатель равен - 0,0625) float temperature = ((data[1] << 8) | data[0]) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }
Библиотеки OneWire для правильной работы датчика
Цифровой датчик температуры DS18B20 не может работать без специального программного обеспечения. Чтобы обмен информацией был корректным, используется протокол 1-Wire. Именно для него создали большую и понятную библиотеку. Она позволяет датчику функционировать полноценно, выполнять большое количество команд и так далее. Если не использовать ее преимущества, то все команды придется записывать и запускать вручную, что не очень удобно.
Чтобы не тратить свое время, нужно реализовывать возможности библиотеки. Для этого вам необходимо скачать ее с официального сайта, архив программы, далее распаковать в папку в каталоге самой платы. Она называется library, что с английского переводиться как – библиотека. Чтобы подключить и начать пользоваться всеми плюсами программы, необходимо активировать команду #include <OneWire.h>.
Если вы хотите ознакомиться со всеми техническими параметрами платы или цифрового датчика, то обязательно воспользуйтесь datasheet. У нас их называют проще – технической документацией.
Какие команды может выполнять библиотека OneWire?
- Искать температурный датчик, и перезаписывать его код. Он располагается в массиве addressArray, если устройство не будет идентифицировано, то вы увидите команду false. Команда – search(addressArray).
- Производить поисковые работы на первичном приборе. Команда – reset_search().
- Сбрасывать шину перед непосредственным подключением к устройству. Команда – reset().
- После сброса библиотека может выбрать устройство, на которое будет записываться ROM код. Команда – select(addressArray).
- Процесс записи байтов данных на агрегат. Команда – write(byte).
- Аналогичная предыдущему варианту команда, но только в том случае, если вы используете паразитное питание. Команда – write(byte, 1).
- Процесс прочтения байтов информации с агрегата. Команда – read().
- Процесс, который вычисляет код CRC. Команда отличается в зависимости от нужд – crc8(dataArray, length). dataArray – означает выбранный массив, а length длину кода.
Также программа позволяет правильно настраивать питание в самом скетче. Помните, что питание может отличаться. Если оно паразитное, то нужно найти строку 65 и вписать туда ds.write(0x44, 1). Если мы говорим о внешнем варианте, то в том же месте добавляем ds.write(0x44).
Библиотека позволяет не только передавать команды, но и подавать их в виде битов. Основные разновидности таких команд:
- 0x44 – измерение температурных показателей, а также их дальнейшая запись в SRAM.
- 0x4E – третий байт начинает записываться в 3.4 и 5 байты SRAM.
- 0xBE – девять байт SRAM начинают процесс последовательно считывания.
- 0х48 – третий и четвертый байты копируются в основную память.
- 0xB8 – вся информация из основной памяти копируется в байты SRAM.
- 0xB4 – позволяет переключить тип питания обратно. 0 обозначает паразитный вариант, а 1 внешний.
Как подключить сразу несколько датчиков?
Каждый датчик DS18B20 подключается параллельно друг к другу. Чтобы распиновка была возможна, достаточно иметь хотя бы один резистор. Вышеописанная библиотека OneWire позволяет осуществлять сбор информацию сразу со всех подключенных агрегатов. Иногда датчиков может быть сразу больше десяти, тогда резистор должен иметь хорошее сопротивление, но не более 1.6 кОм.
Чтобы температура измерялась более точно, необходим дополнительный резистор на 100 Ом. Он подключается к плате Ардуино. Чтобы узнать с какого датчика была получена та или иная информация, достаточно ознакомиться с их уникальными серийными 64 битными кодами. Он отображается в данных, когда команда выполняется. Помните, что в режиме паразитного и внешнего питания, схемы подключения будут выглядеть по-разному.
Где купить датчик температуры DS18B20?
Вы можете купить датчики температуры на чипе DS18B20 в нашем B2B интернет-магазине оборудования для серверных и ЦОД Cyber Networks через корзину сайта или написав в отдел продаж по email sales@cybernetworks.ru.
Полный актуальный каталог оборудования с ценами -> Датчики температуры DS18B20