Меню Рубрики

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

Содержание

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

Мы сделаем LCD-термометр или, как вариант, Serial-термометр (напечатает данные о температуре на последовательном мониторе Arduino IDE) на основе микроконтроллера Ардуино и цифрового датчика DS18B20, макетов, перемычек. Таким образом, вы сможете измерять температуру воздуха, жидкости, например, воды и температуру земли.

Информация о сенсоре DS18B20

DS18B20 – это цифровой температурный датчик с интерфейсом 1-Wire от Maxim IC. На выходе мы получаем информацию в Цельсиях с точностью от 9 до 12 бит, от -55 до 125 (+/- 0,5). Каждый датчик имеет уникальный 64-разрядный серийный номер, что позволяет использовать огромное количество датчиков на одной шине данных.

Особенности:

  • Для уникального интерфейса 1-Wire® требуется только один порт для связи.
  • Каждое устройство имеет уникальный 64-битный последовательный код, хранящийся в ПЗУ.
  • Многоточечная возможность упрощает использование распределенных температурных зондов.
  • Не требует внешних компонентов.
  • Может питаться от линии передачи данных.
  • Диапазон мощности от 3,0 до 5,5 В.
  • Измеряет температуру от -55°C до + 125°C (от -67 °F до + 257 °F) ± 0,5°C от -10°C до + 85°C.
  • Разрешение термометра выбирается пользователем от 9 до 12 бит.
  • Преобразует температуру в 12-битное цифровую переменную в 750 мс (макс.).
  • Определяемые пользователем энергонезависимые (NV) настройки сигнализации.
  • Команда поиска по тревоге идентифицирует и адресует устройства, температура которых находится за пределами запрограммированных пределов (состояние аварийной сигнализации).
  • Применяется в термостатических устройствах, промышленных системах, потребительских товарах, термометрах или в любых термических чувствительных системах.

Комплектующие

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

  • Плата Arduino (UNO, DUE, Micro и т.п.);
  • Датчик DS18B20 (водонепроницаемый или нет);
  • Резистор 4.7К (в некоторых магазинах продается датчик с резистором 4,7 тыс.);
  • ЖК-дисплей 16×2 с шиной I2C;
  • Макет;
  • Перемычки.

Из программного обеспечения нужно иметь установленную Arduino IDE.

Библиотеки

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

/Progam Files (x86)/Arduino/Libraries (по умолчанию):

Все библиотеки вы можете скачать по ссылкам выше или на нашем сайте в разделе Библиотеки.

Термометр через последовательный монитор

Чтобы отобразить данные на последовательном мониторе, подключите датчик DS18B20 к Arduino, используя перемычки и макет, и не забудьте подключить или припаять резистор 4.7k между контактом 2 и 3 датчика.

Затем скачайте, откройте и загрузите файл .ino, который называется – DS18B20_Serial, ниже.

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

Термометр с ЖК-дисплеем

Если вы не хотите измерять температуру через последовательный монитор, то этот шаг для вас.

Подключите ЖК-дисплей I2C к контактам UNO:

Затем скачайте и загрузите файл .ino, который называется – DS18B20_I2C_LCD. Если все в порядке, вы увидите показания температуры на дисплее.

Популярное

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

Подключение датчика 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.

Читайте также:  Аквариум 200 литров дизайн

Последовательность операций общения
ОЧЕНЬ ВАЖНО следовать установленной последовательности (которая состоит из трех пунктов) каждый раз при обращении к 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)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *