Датчик температуры DS18B20: подключение, распиновка и примеры работы
Цифровой датчик DS18B20 измерит температуру в воде, на земле и даже в космосе.
Датчик способен считывать показания температуры в диапазоне от −55 до +125 °C и передавать данные на управляющую плату всего через один пин.
Примеры работы для Arduino
Датчик общается с управляющей платой по протоколу 1-wire . Но вы можете не загружать себе голову битами и байтами, а сразу сосредоточиться на проекте. Для этого скачайте и установите две библиотеки OneWire и DallasTemperature через менеджер модулей.
Один датчик
Рассмотрим простой пример — подключения одного датчика.
Схема подключения
Сенсор подключается к управляющей плате через один сигнальный пин. При подключении к Arduino в компактном форм-факторе, например Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.
Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.
При коммуникации сенсора со стандартными платами Arduino Uno формата Rev3 или Iskra Uno используйте 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 хранит в своей памяти уникальный номер, такое решение позволяет подключить несколько датчиков к одному пину.
Урок 10 — Датчик температуры DS18B20, подключаем к Arduino.
В предыдущем уроке мы рассмотрели подключения датчика температуры и влажности DHT11 к Arduino. И выяснили что данный датчик не очень точный. Чем же его можно заменить? Одним из распространенных датчиков для измерения температуры являться DS18B20. Рассмотрим в данном уроке варианты подключения датчика, пару примеров программного решения.
Характеристики датчика DS18B20:
- Погрешность измерения не больше 0,5 С (для температур от -10С до +85С). Не требуется дополнительная калибровка.
- Диапазон измерений от -55 С до +125 С.
- Напряжение питания от 3,3В до 5В.
- Датчик обладает своим уникальным серийным кодом.
- Не требуются дополнительные внешние элементы.
- Можно подключить сразу до 127 датчиков к одной линии связи.
- Информация передается по протоколу Wire.
- Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.
Датчик выпускается в открытом корпусе в виде транзистора для измерения температуры воздуха.
Можно купить датчик в виде модуля DS18B20. Распаренный на плате.
Также датчик DS18B20 продеться в закрытом корпусе для измерения температуры жидкости.
Для урока нам понадобиться:
Подключаем датчик DS18B20 к Arduino NANO вот по такой схеме.
Подключение датчика DS18B20 к Arduino UNO будет вот таким.
Для написания программы нам понадобиться библиотека OneWire.
Данную библиотеку можно установить из менеджера библиотек или скачать отсюда.
Код ниже будет выводить показание температуры в монитор порта каждую секунду.
Но данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature. Данная библиотека ставиться поверх OneWire. Т.е. для ее роботы должна быть установлена библиотека OneWire.
С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.
Мы рассмотрим более простотой пример.
В данном примере температура выводиться 1 раз в секунду. И при этом выводится температура в Цельсиях и фарингитах.
Как видите данный пример намного меньше и более понятен для новичка.
На одну шину можно подключить до 127 датчиков вот по такой схеме.
С библиотекой DallasTemperature идут примеры которые позволяют получать данные с датчиков при током подключении.
Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.
Спасибо за внимание!
Понравилась статья? Поделитесь ею с друзьями:
Как подключить датчик ds18b20 к Ардуино
Как подключить к Ардуино термодатчик DS18B20 и DS18B22, чтобы сделать термометр с помощью библиотеки OneWire — рассмотрим в этом уроке. В отличие от датчика температуры и влажности DHT11, сенсор работает в широком диапазоне температур и способен измерять отрицательные температуры. Интегральный датчик температуры DS18B20 для Arduino имеет разрешающую способность измерений до 0,0625 °C.
Датчик DS18B20: характеристики
- диапазон измерения температуры -55 … +125 °C;
- погрешность сенсора не превышает 0,5 °C;
- разрешающая способность достигает 0,0625 °C;
- сенсор DS18B20 откалиброван при изготовлении;
- можно подключить до 127 датчиков на одной линии;
- для подключения требуется только 3 провода.
Подключение и распиновка термодатчика ds18b20
Цифровой датчик DS18B20 отправляет данные по Wire шине и может работать на одной линии с множеством других устройств. Каждый датчик имеет свой персональный 64-битный код, позволяющий микроконтроллеру Arduino общаться на одной шине сразу с несколькими сенсорами. Датчик преобразует температуру окружающей среды в цифровой код, т.е. для подключения не требуется дополнительного АЦП.
Подключение к Ардуино датчика ds18b20
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- термодатчик DS18B20;
- макетная плата;
- резистор на 4.7 кОм;
- провода «папа-мама», «папа-папа».
Схема подключения датчика ds18b20 к Arduino Uno
Подключите датчик температуры DS18B20 к микроконтроллеру согласно схеме, и загрузите скетч для датчика температуры ds18b20 к Arduino UNO.
Работа с библиотекой DallasTemperature
Библиотека для Arduino DallasTemperature Sensors OneWire значительно облегчает и упрощает работу с сенсором DS18B20. Описание библиотеки DallasTemperature.h на русском говорит, что датчик управляется несколькими простыми функциями, которые представлены в следующем скетче. Схема подключения датчика не меняется, а скачать библиотеку DallasTemperature.h для Ардуино можно на нашем сайте здесь.
Скетч для датчика ds18b20 Ардуино
Скетч для нескольких датчиков на одной шине
Подключите несколько термодатчиков DS18B20 к микроконтроллеру согласно схеме, и загрузите скетч для датчика температуры ds18b20 к Arduino UNO.
Пояснения к коду:
- DallasTemperature датчик подключается к порту A1, он же 15 цифровой порт;
- цикл for выполняется столько раз, сколько обнаружено сенсоров на одой шине.
Заключение. Датчик может быть выполнен в нескольких вариантах (смотри фото выше), от этого будет зависеть только схема подключения термодатчика к Arduino NANO или UNO. В первом случае необходимо использовать подтягивающий резистор на 4.7 кОм. Датчик, в виде готового модуля уже имеет резистор. Третий вариант — это датчик в герметичном корпусе, который можно смело использовать в горячей воде.
Arduino и термометр DS18B20
Описание
DS18B20 – высокоточный цифровой датчик температуры. Основные характеристики:
- Диапазон: -55.. 125 °C
- Точность: 0.5 °C
- Разрешение: 9.. 12 бит (0.48.. 0.06 °C)
- Питание: 3-5.5V
- Период выдачи результата:
- 750 мс при точности 12 бит
- 94 мс при точности 9 бит
- Интерфейс связи: 1-Wire (OneWire)
- Корпус: TO-92, SOIC-8 или герметичное исполнение
В наборе идёт датчик в герметичном исполнении со стандартным гнездом (шаг 2.54 мм) для подключения
Подключение
Датчик имеет следующие назначения пинов:
Датчик подключается к любому цифровому пину Arduino, но пин должен быть подтянут к питанию резистором 4.7 кОм. На один пин можно подключить несколько датчиков DS18B20.
В рамках набора GyverKIT резистор на 4.7 кОм можно заменить двумя резисторами на 10 кОм (есть в комплекте), подключенными параллельно:
Библиотеки
Для этого датчика есть несколько библиотек:
- “Официальная” библиотека DallasTemperature.h, для работы которой также понадобится библиотека OneWire.h.
- Наша библиотека microDS18B20
В примерах на этом сайте мы будем использовать microDS18B20, так как она в несколько раз легче и проще в использовании, чем официальная. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию microDS18B20. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Работа с microDS18B20
Без адресации
В этом режиме на один пин МК подключается один датчик, для работы с ним не требуется предварительного чтения адреса и записи его в программу. Можно подключить несколько датчиков, каждому указать свой пин, см. пример one_pin_one_sensor.
С адресацией
В этом режиме можно подключить сколько угодно датчиков на один пин МК, но для работы с ними понадобится занести в программу уникальные адреса датчиков. В момент чтения адреса к пину должен быть подключен только один датчик! Пример – address_read. Для дальнейшей работы адреса хранятся в массивах на стороне программы и передаются датчикам при инициализации, пин указывается один и тот же:
Также адрес можно сменить во время работы программы, см. документацию.
Чтение температуры
Чтение температуры делится на два этапа – запрос и получение данных. Запрос делается функцией requestTemp() . После получения запроса датчик начинает измерение температуры, которое длится от 90 до 750 мс в зависимости от настроенной точности (по умолчанию точность максимальная, преобразование длится 750 мс). Если прочитать температуру до окончания преобразования – датчик вернёт результат предыдущего измерения, поэтому в примерах используется задержка или опрос по таймеру на 1 секунду. Получить температуру можно при помощи getTemp() [float] или getTempInt() [int]. Если принятые данные повреждены или датчик отсутствует на линии – функция вернёт предыдущее успешно прочитанное значение температуры.
Примечание: при повторных вызовах getTemp() не запрашивает с датчика новую температуру (долгое выполнение функции), вместо этого она просто возвращает предыдущий результат до тех пор, пока не будет сделан новый запрос requestTemp().
В версии библиотеки 3.5 появилась возможность отдельно запросить температуру и определить корректность полученных данных, чтобы только после этого их прочитать и применить в программе – функция readTemp() . Также это позволяет определить состояние подключения и всё ли в порядке с датчиком. Для чтения температуры рекомендуется использовать конструкцию вида:
где readTemp() запрашивает данные с датчика и возвращает true , если они прочитаны корректно. После этого можно забрать текущую температуру из getTemp() , которая уже не запрашивает температуру с датчика, а отдаёт прочитанный в readTemp() результат.
Примеры
Библиотека позволяет работать по схеме “один датчик – один пин”, в которой адрес датчика получать не нужно. Достаточно подключить и использовать: