No Image

Ds18b20 подключение к arduino несколько штук

СОДЕРЖАНИЕ
599 просмотров
12 декабря 2019

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

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

Часто приходится измерять температуру окружающей среды, или, скажем, требуется сделать простой домашний термометр на базе Arduino. Для этих целей нам понадобится цифровой датчик температуры, совместимый с Ардуино. Имхо, датчик DS18B20 — лучший в своем роде по соотношению качества/цена. Стоит он около доллара и имеет достаточно хорошую точность, плюс-минус 0.5 градуса.

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

— интерфейс 1-Wire (т.обр., занимает один пин на ардуине для его подключения);

— измеряемая температура от -55 до +125 °C;

— точность 0.5 град. в диапазоне от -10 до +85 °С;

— температура считывается 9-ю битами данных;

— время на конвертацию температуры — 0.75 сек.

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

Как видно, у датчика три вывода: земля GND , питание VDD и вывод DQ для передачи данных по линии 1-Wire.

На вывод DQ надо повесить резистор (в районе 4.7 кОм плюс-минус) и можно подключать его к плате ардуино. К какому цифровому выводу подключать — не суть важно — это задается в программе. Например, если подключать на pin 10 (как на рисунке), то надо в программе задать

Простой пример работы с DS18B20 (с помощью библиотек)

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

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

Скачать эти библиотеки можно отсюда:

Конечно, OneWire обычно идет вместе со средой, так что нужно только DallasTemperature.

Только с помощью OneWire.h

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

Читайте также:  Krono original variostep classic отзывы

По сути здесь мы просто сами реализовали некоторые нужные нам функции, которые есть также в классе DallasTemperature (используемом в примере выше).

Внутри датчика DS18B20 стоит свой небольшой контроллер, с которым ардуина общается посредством команд. Команды передаются с помощью метода write класса OneWire:

write(byte) — основной метод класса OneWire, который передает байт данных на устройство. Байт представляет собой определенную команду. Для DS18B20 это следующие основные команды:

0x44 — провести измерение температуры и записать данные в оперативную память;

0x4E — записать 3 байта в 3й, 4й и 5й байты оперативной памяти;

0xBE — считать последовательно 9 байт оперативной памяти;

0x48 — скопировать 3й и 4й байты оперативной памяти в EEPROM;

0xB8 — скопировать данные из EEPROM В 3й и 4й байты оперативной памяти;

0xB4 — вернуть тип питания (0 — паразитное, 1 — внешнее);

Информация об измеренной температуре хранится в оперативной памяти датчика, которая состоит из 9 байт:

1 и 2 байты — хранят информацию о температуре.

3 и 4 байты — хранят соответственно верхний и нижний пределы температуры.

5 и 6 байты — зарезервированы.

7 и 8 байты — используются для сверхточного измерения температуры.

9 байт — хранит помехоустойчивый CRC код предыдущих 8 байт.

Вот список основных методов класса OneWire:

search(addressArray) — Выполняет поиск следующего 1-Wire устройства, если устройство найдено, то в 8-байтный массив addressArray записывается его ROM код, иначе возвращает false;

reset_search() — Выполняет новый поиск с первого устройства;

reset() — Выполняет сброс шины, необходимо перед связью с датчиком;

select(addressArray) — Выполняет выбор устройства после сброса, передается ROM Код устройства;

write(byte) — Передает информационный байт на устройство;

write(byte,1) — Передает информационный байт на устройство, работающее в паразитном режиме питания;

read() — Считывает информационный байт с устройства;

crc8(dataArray,length) — Вычисляет CRC код байтов из массива dataArray длиной length.

Порядок взаимодействия с DS18B20 для получения информации о температуре:

— Посылаем импульс сброса и принимаем ответ термометра.

— Посылаем команду Skip ROM [CCh].

— Посылаем команду Convert T [44h].

— Формируем задержку минимум 750мс.

— Посылаем импульс сброса и принимаем ответ термометра.

— Посылаем команду Skip ROM [CCh].

— Посылаем команду Read Scratchpad [BEh].

— Читаем данные из промежуточного ОЗУ (8 байт) и CRC.

— Проверяем CRC, и если данные считаны верно, вычисляем температуру.

При этом происходит следующее:

1) МК генерирует сигнала reset, удерживая шину 1-wire в состоянии лог. 0 в течении 480 мкс.

2) Ждем не менее 15 мкс, но не более 60 мкс. За это время подтягивающий резистор поднимает уровень на шине до лог. 1.

3) Датчик удерживает шину в состоянии лог. 1 в течении не менее 60 микросекунд. Если за это время шина не сменит свое состояние на лог. 0, то значит на шине ошибка либо датчик нерабочий (это помогает выявить неисправный датчик).

Короче, здесь всё достаточно мудрено. Чтобы не париться, используем готовую библиотеку DallasTemperature, либо код, что я привел выше.

Схема подключения двух и более датчиков температуры DS18B20 к одной плате Ардуино

Хорошая новость заключается в том, что к шине 1-wire можно подключать несколько датчиков, не обязательно одних и тех же. В этом случае шина должна быть подтянута одним резистором.

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

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

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

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

Читайте также:  Замена терморегулятора в холодильнике бирюса своими руками

Виды корпусов 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-битного кода, который будет выдан в результате выполнения программы.

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

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

Выводы

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

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

Комментировать
599 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector