Arduino: делаем самостоятельно датчик температуры

Arduino: Делаем самостоятельно датчик температуры

Температура является едва ли не основным измеряемым параметром в промышленной и хозяйственной деятельности. Вместе с тем, мало просматривается экономически обоснованных реализации датчиков температуры даже в диапазоне -50 +50 Град С , столь обычном и привычным для многих применений. Известны на рынке датчики DS18B20 фирмы Dallas , заявленная точность которых около 0,5 Град. Эти датчики были рассчитаны на построение микросетей (MicroLAN) с осуществлением адресного опроса каждого датчика со стороны микроконтроллерного устройства по протоколу 1-Wire. Однако, реализаций таких сетевых решений, когда линию связи делили бы десяток и более таких устройств, практически не встречается. Аналогична ситуация и температурными датчиками протокола I 2 C фирмы Philips, например такими, как LM75. Все это вызывает определенное недоверие к проработанности схемотехники указанных датчиков температуры. Что же делать, если необходимо иметь несколько точек измерения температуры, опрашиваемых с помощью микроконтроллера?

В эпоху аналоговых электронных термометров нередко можно было встретить схемы с диодными датчиками температуры. Уместно, к примеру, привести схему из справочника радиолюбителя [1 ] . В ней, в качестве датчика температуры, используется обычный кремниевый диод, а точность измерения, при этом, составляет 0,3 Град.

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

В качестве Ардуино устройства используем плату TE-MINI328 , от московской компании «Терраелектроника» , которая на проверку оказалась совместима с Ардуино серии Nano.https://www.terraelectronica.ru/catalog_info.php?CODE=1041000

Принципиальная схема платы:

Практически в каждой реализации платы Ардуино имеется вывод источника опорного напряжения встроенного АЦП. Этот источник имеет уровень напряжения 1,1В у ардуино нано. Для других плат он может быть другим , например 2,54В, что зависит в общем от типа используемого микроконтроллера. Этот источник стабильного напряжения можно использовать как раз для питания температурного датчика, хотя и следует иметь в виду его относительно небольшой выходной ток.

Платформа Ардуино удобна тем, что на ней легко реализуются базовые принципы структурного программирования: наследование, полиморфизм и инкапсуляция. В качестве прародителя целесообразно взять готовую работающую программу (Sketch) и , на ее основе, дополнить необходимым функционалом, который может присутствовать также во встроенном пакете библиотек. В качестве базы в данном примере была использована программа выложенная в открытый доступ коллегами из фирмы OLIMEX (Болгария) , которая реализует часы реального времени на базе микросхемы PCF8563, являющаяся наиболее дешевой из однокристальных часов реального времени (https://www.olimex.com/Products/Duino/AVR/OLIMEXINO-328/resources/OLIMEXINO_328_MOD_RTC_Demo.zip) [2]. Далее эта программа была дополнена функцией работы с LCD индикатором известной системы команд HD44780 c четырех проводной шиной команд/данных (имеется во встроенной библиотеке Ардуино). Имея в системе этот индикатор, нам легче будут в дальнейшем провести калибровку нашего температурного датчика, и наблюдать за температурой и временем даже не используя монитор последовательного порта, который встроен в среду Ардуино.

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


РИС 2

Для изготовления диодного температурного датчика возьмем популярный импортный диод 1N4148, хотя подойдут и аналогичные отечественные, например КД521 или Д220. По нашим наблюдениям хорошей линейностью вольт- температурной характеристикой обладают и многие германиевые диоды, например Д9, у которых падение напряжения при прямом смещении оказывается раза в 2 меньше, чем у кремниевых. Поскольку работать диодный датчик будет в области малых токов, примерно 100 МкА, следует тщательно изолировать проводные выводы с помощью виниловой трубки, торцы которой следует оплавить, например, с помощью промышленного фена или загермитизировать силиконовым герметиком или применив клеевый пистолет. Воспользоваться можно и термоусадочной трубкой соответствующего диаметра. Все это необходимо для того, чтобы вода ни в коем случае не могла попасть внутрь изоляции, что неизбежно привело бы к искажениям результатов измерений. Также в расчет следует взять и тот факт, что диоды со стеклянным корпусом могут реагировать на попадание света внутрь корпуса, отчего определенным преимуществом будут обладать экземпляры с корпусом, покрытым черной краской (например КД503 Д220 и т.п.) Как указывалось выше для Ардуино Nano уровень опорного напряжения составляет 1,1 В. Поскольку падение напряжения на кремниевом диоде при комнатной температуре и току смещения 100МкА составляет прмерно 500мВ диапазон использования встроенного АЦП микроконтроллера ATMega328 , перекрывает диапазон температур от -50 до +50 Град С, так как падение напряжения на диоде не выйдет за пределы 0—1,1 В. Правда точность измерений в этом случае лучше чем 1 град ожидать не приходится. Для указанной схемы питания датчика, вольт- температурная характеристика будет иметь вид рис2. Т.е. , с повышением температуры, падение напряжения уменьшается. Зависимость температуры Т от напряжения Ud очевидно описывается уравнением вида:

Для нахождения неизвестных коэффициента пропорциональности В и коэффициента смещения А необходимо произвести по крайней мере два калибровочных измерения температуры в точках этой характеристики, отстоящей как можно дальше друг от друга. Измерение Т получают отсчетом калибровочного термометра (в качестве которого можно взять ртутный, спиртовой или электронный)( В моем случае удобно было использовать для калибровки более современный , измеряющий одновременно комнатную и «уличную» температуру фото1 ) Фото 1


Фото 1

, а Ud –есть отсчет АЦП для этой температуры . Получим, в результате, два уравнения вида 1.1, для разных измеренных температур. Разрешая пару этих уравнений относительно неизвестных А и В – получаем нужные нам калибровочные значения, которые будем использовать в программе для перевода отсчета АЦП к значению реальной температуры. Вышесказанное закрепим теперь практическим примером:

1. Помещаем датчик в среду с температурой Т1 (19,9 ГрадС)и записываем значение цифрового отсчета Ud1 (450)

2. Помещаем датчик в среду с температурой Т2 (-2,8 ГрадС) и записываем значение цифрового отсчета Ud2 (503) для этой температуры

3. Получив систему линейных уравнений : Т1=A-B*Ud1 и T2=A-B*Ud2

Разрешая их относительно неизвестных A и B получаем А=0,46, а В=229,5

Теперь несложно вычислить реальную температуру при любом полученном цифровом значении Ud по формуле 1.1. Ниже приведен фрагмент скетча где этот момент явно виден в моменте перехода переменной gett от целочисленного значения к значению с плавающей точкой.

Возникает попутно интересный вопрос: Можно ли эту процедуру вычисления калибровочных коэффициентов А и В провести и без использования Ардуино? Если в распоряжении имеется лишь цифровой тестер, то наверное да. При этом следует учесть, максимальному цифровому отсчету Udmax равному 1024 (для десяти разрядного АЦП AVR микроконтроллера будет соответствовать уровень опорного напряжения (1,1V) . Откуда следует вычислить поправку к показаниям тестера для вычисления соответствующих значений Ud.

Аналогично следует поступить и с другими диодными датчиками температуры (Коэффициенты А и В для каждого экземпляра будут очевидно отличаться!) , если предполагается их использование, например, на соседних каналах аналогового ввода А1, А2, А3, А4, А5. При необходимости расширить группу температурных датчиков выше числа аналоговых каналов у Ардуино (обычно 6) возможно применение аналоговых мультиплексоров.

Ниже дается фрагмент кода настроечных параметров АЦП с уравнением перевода цифрового отсчета падения напряжения на диодном датчике в значение реальной температуры.

При работе с другими видами Ардуино необходимо руководствоваться DataSheets применяемого микроконтроллера в части использования АЦП, где последний, необходимо настроить на работу с выбранным каналом аналогового ввода, с использованием встроенного источника опорного напряжении, к которому предполагается подключение блокировочного конденсатора. Кстати такой конденсатор, емкостью 0,1 МкФ необходимо установить также параллельно диодному датчику, т.к. при малых токах диоды имеют свойство формировать «белый шум» из-за которого показания будут искажаться и «прыгать».


РИС 4 (плата Ардуино на схеме не показана)

А как поступать если от от датчика потребуется точность выше одного градуса, например, для измерения температуры внутри инкубатора или в качестве медицинского термометра ?

В этих случаях неплохим решением может быть последовательное соединение подобных диодов, что неизбежно приведет к увеличению крутизны вольт –температурной характеристики температурного датчика, и , следовательно, разрешению по температуре. Не следует забывать, что в некоторых моделях микроконтроллеров предусмотрена настройка АЦП для работы с дифференциальным входом при одновременном увеличении коэффициента усиления входного усилителя, что может и должно привести передаточную характеристику схемы в желаемую область интереса. При отсутствии подобных опций можно применить внешний дифференциальный усилитель на отдельной специализированной микросхеме (например LM358 и т.п.), который, скорее всего, может быть общим для всех температурных каналов. Можно, наконец, настроить АЦП на работу с напряжением питания (+5В или + 3В) в качестве опорного , сделав датчик из нескольких, последовательно соединенных кремниевых диодов. Правда, подключать эту «гирлянду» лучше все же не напрямую к питающему напряжению, а лишь к той его части, что подводится к выводу для питания АЦП и развязана, как правило, индуктивно-емкостным фильтром.

Читайте также  Светодинамическая установка на мк attiny2313

Полностью скетч проекта приведен во вложении. Его реализация привела к идее изготовления универсального измерительного прибора на платформе Ардуино, что достигалось бы сменой датчиковых элементов (плат) с помощью встроенного разъема МРН22-2. См. Фото2,3. и рис4 Часы реального времени понадобятся при превращении такого прибора в логгер измеряемых данных с привязкой ко времени измерений и выгрузки, например, на ПК целью последующего анализа. Показание датчика температуры на индикаторе — в нижней строке справа, а уровня поля — на верхней строке справа. Получается весьма современный прибор, ведь входное сопротивление канала АЦП AVR микроконтроллеров составляет 100Мом, а это почти как у современных мультиметров!


ФОТО 2

Фото 3

1. Чистяков Н.И. Справочная книга радиолюбителя-конструктора М. «Радио и связь» (1990)

Делаем термометр на основе Arduino UNO и датчика DS18B20

В этом уроке мы будем использовать датчик температуры DS18B20 с Arduino UNO для создания термометра. Датчик DS18B20 является хорошим вариантом, когда в проекте с высокой точностью требуется хорошая реакция. Мы покажем как подключить DS18B20 к вашему Arduino UNO и отобразить данные температуры на ЖК-дисплее 16×2.

Обзор датчика DS18B20

Датчик DS18B20 взаимодействует с Arduino через 1-проводную шину. По определению для связи с Arduino требуется только одна линия данных (и земля).

Рабочая температура датчика колеблется от -55° C до + 125° C с точностью ± 0,5° C в диапазоне от -10° C до + 85° C. Кроме того, DS18B20 может получать питание непосредственно от линии передачи данных («паразитный источник питания») без необходимости внешнего источника питания.

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

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

  • Необходим только один однопроводный интерфейс для связи между микроконтроллером и датчиком.
  • Требуется только один внешний компонент: резистор 4,7 кОм.
  • Может питаться от линии передачи данных напрямую, требуя напряжения от 3,0 до 5,5 В.
  • Каждое устройство имеет уникальный 64-битный последовательный код, хранящийся на встроенном ПЗУ.
  • Может измерять температуру в диапазоне от -55° C до + 125° C (от -67° F до + 257° F).
  • Точность ± 0,5° C в диапазоне от -10° C до + 85° C.

В этом проекте используется DS18B20, который поставляется в форме температурного зонда, который является водонепроницаемым. Использование водонепроницаемого датчика расширяет возможности — датчик температуры сможет измерить температуру жидкостей, таких как вода, химикаты, чай и кофе.

Требования к комплектующим

Требования к оборудованию для вашего термометра достаточно стандартные, нам пригодятся:

  • Arduino UNO
  • ЖК-дисплей 16х2
  • Датчик температуры DS18B20
  • Провода для перемычек
  • Резистор 1K
  • Макетная плата

Схема соединения

Сделайте соединения согласно приведенной ниже схеме.

Соединяем датчик и Ардуино

  • VCC -> Arduino 5V, плюс резистор 4,7K, идущий от VCC к Data
  • Data -> Пин 7 Arduino
  • GND -> GND Arduino

Соединения для ЖК-дисплея и Arduino UNO

  • Пин 1 -> GND
  • Пин 2 -> VCC
  • Пин 3 -> Arduino Пин 3
  • Пин 4 -> Arduino Пин 33
  • Пин 5 -> GND
  • Пин 6 -> Arduino Пин 31
  • Пин 7-10 -> GND
  • Пин 11 -> Arduino Пин 22
  • Пин 12 -> Arduino Пин 24
  • Пин 13 -> Arduino Пин 26
  • Пин 14 -> Arduino Пин 28
  • Пин 15 -> VCC через резистор 220 Ом
  • Пин 16 -> GND

Подключите потенциометр, как показано выше, к контакту 3 на ЖК-дисплее, для управления контрастностью.

Этот проект работает на температурах до 125° C. В случае наличия некоторого диссонанса в значении показанной температуры дважды проверьте соединения с резистором, подключенным к DS18B20. После соединения всего, что описано выше, мы можем перейти к программированию.

Исходный код для термометра

Перед загрузкой исходного кода вам нужно настроить две библиотеки, необходимые для запуска этого кода в среде Arduino.

  • Первая библиотека называется — OneWire (скачать).
  • Вторая библиотека называется — DallasTemperature (перейти на GitHub).

После скачивания обеих библиотек переместите файлы в папку библиотек Arduino по умолчанию. Затем скопируйте код в IDE Arduino и загрузите его после двойной проверки правильности подключения вашего датчика.

Примерно это выглядит так:

Мы смогли измерить температуру до 100°C с помощью этого датчика! Он очень отзывчив.

После того, как вы создали проект, потестируйте устройство, погрузив датчик в горячую и холодную воду.

Датчик температуры Arduino DS18B20

Датчик температуры в 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 код.

Читайте также  Игровая видеоконсоль на avr avga

Подключение 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К. Для работы с датчиком в скетчах ардуино нужно установить дополнительную библиотеку и получить определенные навыки для работы с ней – там все не совсем тривиально. Впрочем, можно купить уже готовый модуль, а для скетча в большинстве случаев хватит простых примеров, приведенных в этой статье.

Делаем датчик температуры своими руками

Термодатчик, собранный своими руками, может принести несомненную пользу, как в домашнем, так и приусадебном хозяйстве. Контроллер температуры окружающей среды вовремя включит или наоборот выключит вентилятор, обогреватель, кипятильник, тёплые полы и много других приборов в доме, обогреет или проветрит теплицы. При наличии минимального опыта работы с инструментами сделать датчик температуры своими руками не составит особого труда.

Принцип работы

Идея создания термодатчика состоит в том, что в его качестве используется электропроводной элемент, который под воздействием колебаний температуры окружающей среды меняет своё сопротивление. Таким элементом является терморезистор.

Принцип работы переменного сопротивления заключается в том, что при нагреве сопротивление понижается и ток, протекающий через него, меняет свою характеристику. Этот процесс находит своё отражение в работе прикладной схемы, которая включает или выключает соответствующие приборы.

Изготовление простого термодатчика

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

  • блок питания 12 В;
  • вентилятор (кулер от компьютера 12 В);
  • терморезистор VDR1 (10 кОм);
  • переменный резистор (10 кОм);
  • полевой транзистор IRFZ 44;
  • макетная плата;
  • провода;
  • паяльник с припоем.

Сборка

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

  1. Плюсовую клемму блока питания соединяют проводом с входным контактом (+) кулера;
  2. Три вывода полевого транзистора спаивают проводами так: «исток» с кулером, «затвор» с терморезистором, «сток» с переменным резистором.
  3. Проводами соединяют свободные контакты терморезистора с «+» блока питания, переменного резистора с «−» того же блока.

Проверка

Тестируют терморегулятор в таком порядке:

  • к терморезистору подносят горящую спичку или зажигалку при этом должен заработать кулер;
  • при остывании вентилятор должен выключиться;
  • если схема не срабатывает, нужно перепроверить пайку и контакты.

TR — терморезистор, К — кулер, R1 — переменный резистор, ПТ — полевой транзистор, АБ — аккумуляторная батарея 12 В.

Настройка

В данном случае используется терморезистор, сопротивление которого равно 10 кОм при температуре воздуха 20 °С. При его нагреве сопротивление падает. Нужно подстроить переменный резистор на включение кулера в момент нагрева датчика. Методом подбора нескольких положений поворотного регулятора переменного сопротивления добиваются нужного эффекта.

Термодатчик на германиевых диодах

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

Их применение объясняется сильной зависимостью обратного тока от температуры окружающей среды. Эта особенность диодов используется в простой схеме регулятора скорости кулера.

Германиевые диоды, соединённые параллельно (3–4 шт.), включают в обратном направлении в цепь базы составного транзистора. Их стеклянные корпуса можно крепить прямо на кулер без всяких прокладок-теплоотводов. Резистор R1 предохраняет транзистор от теплового пробоя, а R2 определяет порог срабатывания регулятора. Если при превышении комнатной температуры вентилятор не включается, то число диодов надо увеличить. Когда кулер начинает вращать лопасти с большой скоростью количество радиодеталей уменьшают.

Читайте также  Озонатор воздуха на двух транзисторах

Применение термодатчика на Ардуино

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

  • Ардуино UNO;
  • коннекторы;
  • монтажная плата;
  • цифровой модуль DS18B20 (диапазон от −56 до +1250 С).

Цифровой температурный датчик DS18B20 — это устройство, которое не только сигнализирует о превышении заданного температурного порога, но и может запоминать значения измерений. Микросхема датчика имеет три выходных контакта — это «+», «−» и сигнальный провод. Термодатчик в водонепроницаемом исполнении используется для измерения нагрева воды или жидкостей.

Термодатчик всегда можно приобрести, как и плату Arduino, в интернет-магазинах. Цифровой модуль подсоединяют к Ардуино через каналы GND, а выход Vdd подключается к 5V, Data к любому Pin. Для более понятного восприятия схема подключения цифрового датчика DS18B20 к Ардуино представлена на нижеследующем фото.

Заключение

В зависимости от цели использования измерителя температуры окружающего пространства для самостоятельного его изготовления можно выбрать наиболее приемлемый и выгодный по затратам вариант. Для охлаждения энергозатратных плат достаточно использовать простую схему с кулером. А вот для работы с вентиляционным и обогревательным оборудованием уже понадобится более сложная система с использованием микроконтороллера Ардуино и термодатчиков заводского изготовления.

Видео по теме

Ардуино: датчик температуры LM35

Еще один полезный прибор, который часто используется в современных устройствах — это датчик температуры. Даже в вашем компьютере есть сразу несколько датчиков температуры, с помощью которых система следит за перегревом ключевых компонентов — процессора, видеокарты, блока питания, и прочих узлов. Самый же популярный пример использования датчика температуры дома — термостат. Это устройство, которое постоянно следит за температурой воздуха, и регулирует подачу энергии в систему отопления. Смежный пример — котел для нагрева воды.

В нашем уроке мы используем датчик TMP35. Вместо него можно использовать любой другой похожий датчик: TMP35, TMP37, LM35, LM335 и подобные. Выглядит датчик как обычный транзистор:

Можно легко спутать, так что рекомендую всегда внимательно читать маркировку на таких устройствах (да и вообще сначала всегда читайте, потом подключайте :). Конкретно этот датчик имеет следующие характеристики:

  • напряжение питания: от 2,7 до 5,5 В;
  • погрешность: 2 градуса;
  • измеряемая температура: от 10°C до 125°C
  • потребляемый ток: 50 мкА.

Подключение

Датчик TMP35 имеет три вывода (три ноги). Если посмотреть на датчик со стороны этих выводов и срезом вверх, как показано на рисунке,

то слева будет — положительный контакт питания (+2.7 — 5.5В),
по центру — выход на контроллер,
и справа — отрицательный контакт питания (земля).

Датчик аналоговый, а значит на его выходе мы имеем не 0 или 1, а напряжение в диапазоне от 0 до 5 вольт. Следовательно, мы должны вспомнить раздел про аналого-цифровое преобразование (АЦП) сигналов в Arduino. Держа в уме, что у Ардуино Уно есть шесть аналоговых входов (A0-A5), подключаем наш датчик по следующей схеме:

Внешний вид макета

Принципиальная схема

Вот так должна выглядеть собранная схема.

Программа

Подключив датчик температуры к Ардуино, начинаем писать программу. Первое что мы сделаем, это выведем необработанный сигнал с аналогового входа в последовательный порт, для того чтобы просто понять, как меняется значение на входе A0. Нам понадобится простая программа:

Внимание, математика! В программе можно заметить выражение:

Оно необходимо для того, чтобы преобразовать аналоговый сигнал датчика в градусы Цельсия. Дело тут вот в чем. Все аналоговые датчики имеют важную характеристику — отношение количества вольт к единице измеряемой величины. Например, в спецификации к нашему датчику tmp35 написано, что каждый градус измеряемой температуры, соответствует 10 милливольтам напряжения на выходе. Исходя из этих рассуждений, прочитанное с помощью analogRead значение мы сначала преобразуем к количеству Вольт:

Такая процедура называется нормировкой. Здесь 1023 — максимальное значение, которое может вернуть нам 10-битный АЦП, встроенный в Ардуино Уно.
5 — рабочее напряжение АЦП.

Затем преобразуем эти вольты в градусы Цельсия:

Превращаем вольты в милливольты (*1000), и делим на 10 ( то самое число из спецификации! ).

В общем, даже если ничего не понятно, загружаем программу на Ардуино и наблюдаем за температурой окружающего воздуха. Например, у нас в лаборатории датчик оценил температуру следующим образом:

Вполне себе правдивое значение. А теперь поднесем прибор к открытому окну (на улице зима -10°C):

Работает! Датчик незамедлительно регистрирует снижение температуры.

Делаем термостат

Теперь добавим в программу некое действие, которое будет совершаться если температура упадет ниже заданного нами порога. Пусть этот порог будет равен 15°C. Самое простое, что мы можем сделать — это зажигать на Ардуино штатный светодиод #13. Получается такая вот программа:

Кто-то забыл закрыть окно — температура резко опустилась ниже 15 — светодиод зажигается. Закрываем окно, активно дышим — светодиод гаснет. А теперь представьте, что вы зажигаете не светодиод, а подаете сигнал на реле, которое включает обогреватель в комнате. Получается готовый термостат!

Немного изменив программу можно отслеживать не понижение, а превышение заданного уровня. Например, удобно будет следить за температурой внутри, скажем, серверной, и при увеличении температуры до 40 градусов, включать вытяжку!

К размышлению

В современных устройствах всё чаще применяют цифровые датчики температуры, например, известный в среде DIY датчик DS18B20. Он легко подключается к Ардуино с помощью только одного сигнального провода — one wire. Модуль с таким датчиком есть и у RobotClass:

О том как его подключать и использовать в своих проектах узнаем на уроке про DS18B20.

Термометр на Arduino и датчике температуры DS18B20

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

Также на нашем сайте вы можете посмотреть проекты измерения температуры с помощью платы Arduino и датчиков lm35 и DHT11.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Maxim Integrated DS18B20 Programmable Resolution (цифровой датчик температуры DS18B20) (купить на AliExpress).
  3. Резистор 4,7 кОм (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

Общие принципы работы датчика температуры DS18B20

DS18B20 представляет собой однопроводный цифровой датчик температуры от компании Maxim IC. Выдает значение температуры в градусах Цельсия, способен измерять температуру с 9-12 битной точностью в диапазоне от -55 до 125 градусов Цельсия с точностью +/-0.5 градуса. Каждый датчик DS18B20 имеет 64-битный уникальный номер (Serial number), вытравленный на корпусе датчика, что позволяет подключать огромное число подобных датчиков к одной шине данных. С помощью данного датчика можно измерять температуру воздуха, жидкостей и земли. В некоторых магазинах датчик продается в комплекте с резистором сопротивлением 4,7 кОм.

Особенности датчика DS18B20:

  • однопроводный интерфейс (1-Wire® interface), что позволяет использовать для подключения датчика только один контакт микроконтроллера (в нашем случае платы Arduino Uno);
  • каждый датчик имеет 64-битный уникальный последовательный код (номер), хранящийся в ПЗУ (ROM) датчика;
  • способность подключения к одной шине множества датчиков позволяет создавать на его основе приложения для распределенного (в пространстве) измерения температуры;
  • не требует никаких внешних компонентов;
  • может быть запитан от линии данных;
  • поддерживает напряжение питания от 3.0V до 5.5V;
  • способен измерять температуру в диапазоне от –55°C до +125°C (–67°F до +257°F) с точностью ±0.5°C (в диапазоне от –10°C до +85°C);
  • можно выбрать разрешающую способность (разрешение) датчика: от 9 до 12 бит;
  • преобразует значение температуры в 12-битное цифровое слово длительностью 750 мс (max.);
  • можно настраивать энергонезависимую (nonvolatile, NV) сигнализацию (сигнал тревоги);
  • опции сигнала тревоги позволяют идентифицировать и определить адрес датчика, чья температура не соответствует запрограммированным границам;
  • может применяться в устройствах термоконтроля, промышленных системах, потребительских продуктах, термометрах и в любых других системах, где требуется измерение температуры.

Более подробную информацию о принципах работы датчика DS18B20 вы можете посмотреть в следующей статье на нашем сайте.

Схема проекта

Схема подключения датчика температуры DS18B20 к плате Arduino Uno представлена на следующем рисунке.

Схема подключения датчика к плате Arduino достаточно проста: контакт 1 – к контакту GND Arduino, контакт 2 – к любому ее цифровому контакту (в нашем случае к контакту 2), контакт 3 – к ее контакту +5V или +3.3V. Также необходимо подключить подтягивающий (pull-up) резистор.

Исходный код программы (скетча)

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

  • 1-Wire bus;
  • Dallas Temperature (необходима для считывания и расчета температуры с датчика).

В скетче программы необходимо подключить заголовочные файлы этих библиотек.