Подключение датчика температуры ds18b20 к плате arduino
Содержание:
- Типоразмеры
- Использование
- Активация однопроводного (One-Wire) интерфейса в Raspberry Pi
- Что представляет собой DS18B20?
- Подключение DS18B20 к Arduino
- Как работают современные датчики температуры
- С чем мы имеем дело?
- Код для Arduino
- Датчик DS18B20: схема построения
- Arduino датчик температуры DS18B20
- Особенности и разновидности современных температурных датчиков
- Скетч для Arduino и сенсора DS18B20
- Описание датчика DS18B20 для Arduino
- Описание датчика DS18B20 для Arduino
- Пример работы
Типоразмеры
Типоразмеры самих термисторов: стержни, трубочки, диски, бусинки, пластинки, капли, таблетки. Размеры 1–10 мкм до нескольких мм и 1 см.
Есть также SMD форматы, микропрямоугольнички.
Сразу различим именно датчики как готовые к применению изделия и сами «голые» терморезисторы.
Датчики как приборы могут выполняться в любых формах, корпусах по решению производителя, например, щупы, зонды, «фишки» с разъемами, в водостойком корпусе, с резьбой, на длинном кабеле.
Датчики как готовые приборы
Автомобильные:
Накладные. На поверхность конструкций. Примеры: T2C-NTC 10K для −50…+150° C; ALTF02 S+S для снятия данных с твердых объектов (труб).
Канальные, погружные. Для полостей. T3-NTC 10K с кабелем 30 см, для +50…−50° C; T2I-NTC 10K, 6.5 см, −50…+150° C; TF43T и TM54 для жидкостей в трубах, емкостях.
Наружные. Для погодно-зависимых комплексов, на внешние стены (ATF01 S+S Regeltechnic).
Комнатные. Для внутренних помещений, квартир, офисов.
Многофункциональные. Совмещают иные сенсоры, Исследуют не только температуру, но и давление, плотность и прочее.
Бусинковые
Бисер, шарик, капля, Ø 0.075 до 5 мм. Из свинцовых проводков, сплава с платиной, спекаемых в керамической, стеклокерамической оболочке. Лучший отклик и стабильность, их рабочие температуры выше, чем у дисковых вариантов и чипов.
Минусы: хрупкость выше, нет взаимозаменяемости, требуют индивидуальных градуировок. Нет точных стандартов для их номиналов по отношению R/T.
Диски, пластинки, чипы, трубки
Изделия в форме диска с поверхностными контактами. Форма габаритнее, реакция медленнее, чем у шариков. Но из-за увеличенных габаритов обладают хорошей диссипацией (мощностью для роста t° на 1 градус). Так как рассеиваемая энергия пропорциональная к квадрату тока, лучше работают с высокими токами, чем шарики.
Дисковые изготовляются прессовкой порошкоподобных оксидов в круглую матрицу, затем спекаются. Чипы — литьем под давлением, суспензия распределяется толстым шаром, затем производят сушку, разрезание. Габариты Ø 0.25…25 мм.
Взаимозаменяемые, но есть погрешности, минимально допустимым отклонением считается не менее 0.05° C в рамках 0…+70 °C. Стандартный термистор на 10 кОм в границах 0…+100 обладает коэффициентами близкими к таким:
Термистор в виде трубки:
Инкапсулированные
Инкапсулированные напоминают пластинки, таблетки, могут быть схожие с иными типами. Особенность в их покрытии — оно особо герметичное, воздухонепроницаемое (пузырь, капсула, контейнер), из стекловолокна. Для высоких температур, от +150° C, для плат, где требуется особая прочность. Такое исполнение увеличивает стабильность, защиту, Ø 0.4…10 мм.
Использование
// Дефайны настроек (перед подключением библиотеки) #define DS_TEMP_TYPE [float / int] // Тип данных для температуры (точность / экономия flash) (По умолч. float) #define DS_CHECK_CRC [true / false] // Проверка подлинности принятых данных (По умолч. true) #define DS_CRC_USE_TABLE [true / false] // Использовать таблицу для CRC. Быстрее, но +256 байт flash (<1мкс VS ~6мкс) (По умолч. false) // Методы void setAddress(uint8_t *addr); // установить (сменить) адрес void setResolution(uint8_t resolution); // Установить разрешение термометра 9-12 бит void readAddress(uint8_t *addressArray); // Прочитать уникальный адрес термометра в массив void requestTemp(void); // Запросить новое преобразование температуры uint16_t getRaw(void) // Прочитать "сырое" значение температуры [int/float] getTemp(void); // Прочитать значение температуры [int/float] calcRaw(uint16_t data); // Преобразовать "сырое" значение в температуру [int/float] - настраивается дефайном. По умолчанию float // внешние функции int DS_rawToInt(uint16_t data); // преобразовать raw данные в температуру int float DS_rawToFloat(uint16_t data); // преобразовать raw данные в температуру float // Время преобразования от точности точность | время 12 бит | 750 мс 11 бит | 375 мс 10 бит | 187 мс 9 бит | 93 мс
Активация однопроводного (One-Wire) интерфейса в Raspberry Pi
Поскольку датчик DS18B20 передает данные по однопроводному интерфейсу (One-Wire) нам необходимо включить использование данного интерфейса в настройках платы Raspberry Pi. Для этого выполните следующую последовательность шагов.
Шаг 1. Откройте в редакторе файл config.txt.
Shell
sudo nano /boot/config.txt
1 | sudo nanobootconfig.txt |
Шаг 2. Внутрь данного файла добавьте строку “dtoverlay=w1-gpio” как показано на следующем рисунке и сохраните изменения в файле.
Шаг 3. Используйте Ctrl+X чтобы выйти из файла и “Y”, и затем Enter чтобы сохранить изменения в файле. После этого перезагрузите плату Raspberry Pi.
Shell
sudo reboot
1 | sudo reboot |
Шаг 4. После перезагрузки платы снова откройте терминал и выполните следующую последовательность команд:
Shell
sudo modprobe w1–gpio
sudo modprobe w1-therm.
cd /sys/bus/w1/devices
ls
1 |
sudo modprobe w1–gpio sudo modprobe w1-therm. cdsysbusw1devices ls |
После этого в окне терминала у вас должна появиться примерно следующая картина:
Шаг 5. В конце шага 4 вы вводите команду ls, в результате ее выполнения ваша плата покажет вам уникальный номер, этот номер будет уникальный для каждого датчика, но он всегда будет начинаться с 28-. В нашем случае мы получили адрес датчика 28-03172337caff.
Шаг 6. Теперь проверим корректно ли работает датчик с помощью следующих команд:
Shell
cd 28-XXXXXXXXXXXX [use the name of your directory or use Tab key for auto complete)
cat w1_slave
1 |
cd28-XXXXXXXXXXXXusethe name of your directory oruseTab key forauto complete) catw1_slave |
Эти две команды считают данные с датчика и отобразят их в терминале как показано на следующем рисунке. На этом рисунке значение температуры обведено красной линией – оно равно 37*C.
Что представляет собой DS18B20?
Dallas DS18B20 – это цифровой датчик измерения температуры, оснащенный микроконтроллером, способный запоминать изменения в памяти, оповещать о нарушении температурных рамок(которые можно регулировать), изменять точность замеров, взаимодействовать с основным контроллером Arduino. DS18B20 выполнен в миниатюрном корпусе, в трех различных модификациях, одна из которых позволяет измерять температуры в жидкостях.
Датчик подключается через 3 выхода:
- Первый – питание VDD (красный).
- Второй – данные DQ (желтый или другой цвет).
- Третий – земля GND (черный).
Из-за возможности реализации схемы с фантомным питанием, можно подключить датчик через два провода: DQ и VDD. Но по-хорошему, лучше подобного подключения избегать. Также, к основной плате Arduino можно подключить на один пин выходы DQ с двух сенсоров.
Виды датчика:
- 8-Pin SO (150 mils) — DS18B20Z+
- 8-Pin µSOP — DS18B20U+
- 3-Pin TO-92 — DS18B20+
Третий можно использовать без дополнительных средств защиты для измерения температур в морозильной камере, бойлере, инкубаторе, бассейне и в других областях применения.
На рисунке изображен даллас DS18B20+ в герметичном корпусе
Характеристики:
- Диапазон измерения температур -55 °С до +125 °С.
- Погрешность максимум 0,5 °C, без дополнительной калибровки при t от -10 °С до +85° С).
- Питание 3,3-5 В.
- Для соединения с Arduino UNO необходимо 3 контакта.
- К одной линии связи доступно подключение вплоть до ста двадцати семи датчиков, потому как датчик содержит собственный 64-битный код в постоянной памяти.
- Каждый датчик имеет персонализированный серийный номер.
- Протокол 1-Wire используется для передачи информации.
- Доступно подключение через два провода напрямую к линии связи по схеме фантомного питания. Но такой режим не рекомендуется использовать при температурах от 100° С, так как нет гарантий правильных замеров в таких условиях.
- Два вида памяти — статическая память с произвольным доступом или полупроводниковая оперативная память (SRAM) и энергонезависимая память EEPROM.
- В EEPROM записываются два однобайтовых регистра контроля TH, TL, по которым можно верхний и нижний предел диапазона температур.
Применение
DS18B20 замеряет температуру и передает данные в цифровом виде. При этом, можно настроить нужно разрешение, выставив количество бит точности, тем самым подогнав под определенный параметр разрешающую способность:
- 9 бит – 0,5С;
- 10 бит — 0,25С;
- 11 бит — 0,125С;
- 12 бит — 0,0625С.
Порядок работы датчика:
- При подключении источника питания, DS18B20 будет находится в начальном состоянии.
- Затем, подается команда «преобразование температуры» на Arduino UNO для замера t.
- Результат, полученный от датчика, сохранит свое значение в двух байтах регистра t, а сам элемент схемы вернется с начальное состояние.
- При работе схемы через внешнее питание, микроконтроллер регулирует состояние конвертации.
- При выполнении команды линия находится в низком состоянии, а закончив – переходит в высокое.
Это работает со стандартной схемой подключения, так как на шину должен постоянно поступать высокий уровень сигнала. Поэтому, при соединении по схеме паразитного питания выше описанный метод не сработает.
В оперативную память сохраняются:
- 1-2 байты – данные измеряемой температуры;
- 3-4 байты – пределы изменения t;
- 5-6 байты – резерв;
- 7-8 байты – нужны для точных замеров t;
- 9 байт — циклический избыточный код, устойчивый к помехам;
Подключение 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 выглядит следующим образом:
Исходя из вышеприведенной структуры, рассматриваемый датчик состоит из:
- регистра конфигурации, программируемого пользователем (9–12 разрядов);
- датчика температуры;
- верхнего Th и нижнего Tl порога срабатывания сигнала тревоги;
- 64-битной памяти типа ROM и блока обработки протокола 1-Wire;
- внутреннего источника питания, способного работать как от внешнего источника, так и от «паразитных» импульсов.
Принцип работы
Основная функция микросхемы DS18B20 — трансформация показаний встроенного датчика температуры в цифровой код. Это преобразование зависит от разрешения преобразования, установленного пользователем, которое варьируется от 9 до 12 бит (0,5°–0,625°С). Если настройки не производились, то установка регистра конфигурации соответствует 12 битам.
В начальном состоянии DS18B20 находится в состоянии покоя или иными словами в низком энергетическом уровне. Для начала измерений микроконтроллер подает сигнал , после чего полученные данные сохраняются в регистр, а сам датчик переходит в режим «покоя».
При работе цифрового датчика температуры DS18B20 от независимого источника питания микроконтроллер способен контролировать процесс выполнения команды , которая осуществляет измерение температуры. Таким образом, датчик температуры DS18B20 сформирует логический «0» во время трансформации показаний температурного режима и логическую «1» в случае окончания процесса преобразования.
Если питание микросхемы осуществляется при помощи «паразитного метода», то контроль логических «0» и «1» невозможен, поскольку на шине будет постоянно дежурить высокий уровень напряжения питания.
После снятия и обработки сигнала с датчика температуры в микросхеме DS18B20 полученные данные в градусах Цельсия сохраняются в виде 16-битного числа с признаком (S), который отвечает за знак «+» или «-» температуры. Структура регистра температуры будет выглядеть так, как показано ниже.
Если показания температуры выше «0», то показатель S=0, если же значение температуры отрицательное, то S=1. Ниже представлена таблица соответствия данных и температуры.
С чем мы имеем дело?
Определения понятия «подделка» разнятся, но согласно документу AIR6273 подделка представляет собой умышленное несанкционированное копирование, имитацию, замену или модификацию подлинного предмета от авторизованного производителя . Начиная с 2019 года основной проблемой являются копии (клоны), имеющие определенную маркировку, чтобы ввести в заблуждение ничего не подозревающего покупателя. К счастью, клоны DS18B20 почти легко идентифицировать: маркировка на чипе напечатана, а не нанесена лазером? Нет отметки на заднем отступе? Вероятно, подделка. Содержимое памяти (регистра «блокнота», Scratchpad) не соответствует спецификации? Вероятно, подделка. Систематически ведет себя не так, как подлинный датчик? Вероятно, подделка.
Код для Arduino
Следующий скетч даст вам полное представление о том, как считывать показания температуры с датчика температуры DS18B20, и может послужить основой для более практических экспериментов и проектов.
Вот как выглядит вывод в мониторе последовательного порта.
Рисунок 8 – Вывод показаний датчика температуры DS18B20 в мониторе последовательного порта
Объяснение кода:
Скетч начинается с включения библиотек OneWire.h и DallasTemperature.h и объявления вывода Arduino, к которому подключен сигнальный вывод датчика.
Затем мы создаем объект , передавая сигнальный вывод датчика его конструктору. Этот объект позволяет нам общаться с любым устройством 1-Wire, а не только с DS18B20. Для связи с датчиком DS18B20 нам нужно создать объект библиотеки и передать ему ссылку на объект в качестве параметра.
Как только объект создан, мы можем выполнять для взаимодействия с датчиком простые команды, приведенные ниже.
- Функция ищет подключенные датчики на шине и устанавливает битовое разрешение (12 бит) для каждого.
- Функция отправляет команду для всех датчиков на шине, чтобы выполнить преобразование температуры.
- Функция считывает и возвращает показания температуры с датчика. – это не что иное, как расположение датчика на шине. Если вы используете только один DS18B20 на шине, установите этот параметр на 0.
Датчик DS18B20: схема построения
Прибор DS18B20 имеет сразу 3 ключевых корпуса:
- Сторона ТО-92;
- Стенка SO-150mil;
- Корпус uSOP.
Если говорить о внутренней структуре, то следует рассмотреть небольшую микросхему, которая представлена на рисунке:
Данная микросхема свидетельствует о наличии сразу нескольких ключевых модульных блоков в строении DS18B20, отвечающих за механизм правильного действия устройства.
К еще одному ключевому элементу в структуре термодатчика следует отнести «64-BITROM AND 1-WIREPORT». Это модуль структуры, отвечающий за хранение уникального кода устройства и передачу этого кода во внутреннюю память DS18B20 «SCRATCHPAD». «SCRATCHPAD», в свою очередь, взаимодействуя с регистрами «MEMORY CONTROL LOGIC» и «1-Wire», подает сигнал связи следующим принципиально-важным блокам датчика:
- «TEMPERATURE SENSOR»(система, предназначенная для считывания преобразованных показателей температур);
- «CONFIGURATON REGISTER»(структура, отвечающая за настройку уникальной программируемой точности, которая варьируется от 9 бит до 12 или, если рассматривать градусы Цельсия, от 0.5 °C до 0.0625 °C.);
- «8-BIT CRC GENERATOR»(система, предназначенная сугубо для защитной функции);
- «ALARM HIGH TRIGGER» (блок, ограничивающий нижние пределы температуры DS18B20);
- «ALARM LOW TRIGGER» (система, ограничивающая верхние пределы температуры DS18B20).
Arduino датчик температуры DS18B20
DS18B20 имеет различные форм-факторы. Так что выбор, какой именно использовать, остается за вами. Доступно три варианта: 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92. Серфинг по eBay или Aliexpress показывает, что китайцы предлагают версию TO-92 во влагозащищенном корпусе. То есть, вы можете смело окунать подобное чудо в воду, использовать под дождем и т.д. и т.п. Эти сенсоры изготавливаются с тремя выходными контактами (черный — GND, красный — Vdd и белый — Data).
Различные форм-факторы датчиков DS18B20 приведены на рисунке ниже.
Модель DS18B20 во влагозащищенном корпусе:
DS18B20 удобен в использовании. Запитать его можно через контакт data (в таком случае вы используете всего два контакта из трех для подключения!). Сенсор работает в диапазоне напряжений от 3.0 В до 5.5 В и измеряет температуру в диапазоне от -55°C до +125°C (от -67°F до +257°F) с точностью ±0.5°C (от -10°C до +85°C).
Еще одна крутая фича: вы можете подключить параллельно вплоть до 127 датчиков! и считывать показания температуры с каждого отдельно. Не совсем понятно, в каком проекте подобное может понадобится, но подключить два сенсора и контролировать температуру в холодильнике и морозильной камере можно. При этом вы оставите свободными кучу пинов на Arduino… В общем, фича приятная.
Особенности и разновидности современных температурных датчиков
Конкретизированный вывод по целесообразности использования определенного приспособления может дать только профессионал в данном вопросе.
К примеру, по функционалу различают следующие термодатчики:
- Существует вариант с подключением двух датчиков, которые в совокупности контролируют работу системы в двухстороннем режиме. Первый определяет температуру в помещении, а второй – внутри системы. Особенностью такой конструкции является повышенная экономичность и безопасность. Различные модификации позволяют настроить автоматическую систему активации подогрева, защиту от детей и т.д.
- У топовых производителей появилась такая возможность, как установка датчика теплого пола с сигнализацией. О любых нарушениях и неполадках в работе системы владелец узнает без задержек, что значительно ускорит процесс устранения сбоев и станет дополнительной системой защиты (подробнее: «Как выбрать и установить термодатчик для теплого пола»).
- Популярность набирают датчики с системой контроля предельных температур. Они настраиваются заранее на диапазон рабочих температур и активируют систему подогрева, если пол остывает ниже определенного значения, либо отключают в обратном случае. Обычно монтируются такие датчики в гофрированную трубку между линиями подачи энергоносителя в систему, что делает их защищенными от внешнего воздействия.
- Если монтаж датчика теплого пола производится вне системы, то устройство находится в полной безопасности. Рекомендуется устанавливать их в таких местах комнат, куда не имеют доступа активные воздушные массы, прямые солнечные лучи и т.д. Только при полной защищенности устройства от различных внешних раздражителей можно быть уверенным в точности данных, которые датчик передает система. Соответственно и четкость функционирования системы зависит от того, насколько хорошо отлажен и защищен датчик.
- Также существуют датчики со встроенным термостатом, как ручным, так и электронным.
Скетч для Arduino и сенсора DS18B20
Установливаем библиотеку OneWire Library
После того как вы скачали архив с библиотекой, ее надо импортировать. Для этого в Arduino IDE выберите пункт “Sketch” — “Import Library” — “Add Library” и выберите архив, который вы скачали. Если у вас возникли проблемы, с установкой библиотеки, ознакомьтесь с инструкцией по установке библиотек в Arduino.
Загружаем скетч на Arduino
Скетч, который представлен ниже, есть в библиотеке OneWire, в категории examples. Перейдите в “File” — “Examples” — “OneWire” и выберите пример “DS18x20_Temperature”. Код программы представлен ниже.
Данный пример использует библиотеку OneWire Library, для того, чтобы собрать данные со всех подключенных датчиков температуры DS28B20 (как подключить несколько сенсоров описано в конце статьи) и отобразить их в окне серийного монитора Arduino IDE.
В окне серийного монитора вы увидите примерно следующее:
ROM = 28 88 84 82 5 0 0 6A
Chip = DS18B20
Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1
Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.
ROM = 28 88 84 82 5 0 0 6A
Chip = DS18B20
Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1
Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.
ROM = 28 88 84 82 5 0 0 6A
Chip = DS18B20
Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1
Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.
Обычное или паразитное питание?
DS18B20 может работать в обычном или в так называемом «паразитном» режиме. В обычном режиме для подключения используется 3 коннектора, в «паразитном» режиме — в его лишь 2.
Вам надо настроить правильный режим в скетче, чтобы снять достоверные показания с датчика:
- Для «паразитного» режима в строке 65 надо указать: ds.write(0x44, 1);
- Для обычного режима в строке 65 указывается: ds.write(0x44);
Убедитесь, что вы указали корректные пины!
В строке 10, где указано “OneWire ds(2);” устанавливается пин, к которому подключен контакт data с сенсора.
В этом примере использован пин 2, но значения пина по умолчанию в примере OneWire стоит на 10. Можно использовать и его.
#include <OneWire.h>
// пример использования библиотеки OneWire DS18S20, DS18B20, DS1822
OneWire ds(2); // на пине 10 (нужен резистор 4.7 КОм)
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data;
byte addr;
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println(«No more addresses.»);
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print(«ROM =»);
for( i = 0; i
Serial.write(‘ ‘);
Serial.print(addr, HEX);
}
if (OneWire::crc8(addr, 7) != addr) {
Serial.println(«CRC is not valid!»);
return;
}
Serial.println();
// первый байт определяет чип
switch (addr) {
case 0x10:
Serial.println(» Chip = DS18S20″); // или более старый DS1820
type_s = 1;
break;
case 0x28:
Serial.println(» Chip = DS18B20″);
type_s = 0;
break;
case 0x22:
Serial.println(» Chip = DS1822″);
type_s = 0;
break;
default:
Serial.println(«Device is not a DS18x20 family device.»);
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44); // начинаем преобразование, используя ds.write(0x44,1) с «паразитным» питанием
delay(1000); // 750 может быть достаточно, а может быть и не хватит
// мы могли бы использовать тут ds.depower(), но reset позаботится об этом
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
Serial.print(» Data = «);
Serial.print(present, HEX);
Serial.print(» «);
for ( i = 0; i
data = ds.read();
Serial.print(data, HEX);
Serial.print(» «);
}
Serial.print(» CRC=»);
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// конвертируем данный в фактическую температуру
// так как результат является 16 битным целым, его надо хранить в
// переменной с типом данных «int16_t», которая всегда равна 16 битам,
// даже если мы проводим компиляцию на 32-х битном процессоре
int16_t raw = (data
if (type_s) {
raw = raw
if (data == 0x10) {
raw = (raw & 0xFFF0) + 12 — data;
}
} else {
byte cfg = (data & 0x60);
// при маленьких значениях, малые биты не определены, давайте их обнулим
if (cfg == 0x00) raw = raw & ~7; // разрешение 9 бит, 93.75 мс
else if (cfg == 0x20) raw = raw & ~3; // разрешение 10 бит, 187.5 мс
else if (cfg == 0x40) raw = raw & ~1; // разрешение 11 бит, 375 мс
//// разрешение по умолчанию равно 12 бит, время преобразования — 750 мс
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(» Temperature = «);
Serial.print(celsius);
Serial.print(» Celsius, «);
Serial.print(fahrenheit);
Serial.println(» Fahrenheit»);
}
Описание датчика DS18B20 для Arduino
Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков 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 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.
Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.
Где купить датчик
Влагозащищенный датчик температуры DS18B20 с длиной провода 1 м от надежного магазина | Комплект из 10 микросхем DS18B20 TO92 | Модуль DS18B20 для удобного подключения к Ардуино от Keyestudio |
Беспроводной модуль DS18B20 на ESP8266 ESP-01 ESP-01S для проектов умного дома | Шилд датчика DS18B20 для платы D1 MINI – беспроводная передача данных | Датчик 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 код.
Пример работы
Итак, с теоретической основой закончили, можно приступать к соединению датчика температуры и Arduino. Схема подключения:
Естественно, речь идет об использовании сенсора в воздушной среде. В том случае, если требуется измерять нагрев жидкости, то нужен герметичный датчик температуры DS18B20.
Алгоритм обработки
Сама последовательность действий достаточно проста. Только для упрощения, в приведенном примере, она рассчитана на наличие единственного сенсора на линии 1-Wire.
- Определить ИД датчика термостата
- Отправить команду по ИД на измерение температуры
- Ждать 750 мс, пока устройство отработает и поместит данные в оперативную память
- Дать функциональную команду на чтение памяти датчика температуры ds18b20
Сам скетч для Arduino
Здесь требуется примечание. Существует множество библиотек работы с 1-Wire выполняющих подключение датчика температуры DS18B20 к Arduino. В представленном скетче, будет использоваться вариант «OneWire», которую можно скачать с официальной страницы разработчиков ПО Arduino (https://playground.arduino.cc/Learning/OneWire). Там же, есть информация для ознакомления со списком функций в библиотеке.
Есть нюанс в приведенном скетче, он относится к физической схеме подключения питания датчика и соответствующим взаимодействием процедур библиотеки. Если используется паразитное, то DataSerial.Write(0х44), о запросе температуры, нужно заменить на DataSerial.Write(0x44, 1).
Что касается конечных пользователей, то пользуясь этой инструкцией, им будет несложно выполнить подключение инфракрасного датчика ds18b20 температуры для Ардуино. Все достаточно прозрачно, скетч элементарен, а простота схемы достойна уважения.