Датчик температуры ds1820 – 1 шт. DS1820 из нержавеющей стали посылка Водонепроницаемый DS18b20 датчик температуры датчик 18B20 для Arduino

Простое электронное термореле с датчиком DS1820 на 220 вольт

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

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

Описание работы термореле

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

Специфика данного датчика в том, что измерение температуры производится в цифровом виде.  Датчик DS1820 способен измерять температуру от -55 до 125 гр. Так же  датчик способен работать в режиме термостата. У него имеются два цифровых регистра, в которые заносятся значения верхнего порога температуры (TH) и нижнего (TL).

В режиме термостатирование,  контроль за температурой происходит непрерывно. Датчик с частотой в 1 секунду производит сравнение фактической температуры с пороговыми значениями прописанные в регистры TL и TH.

В данной схеме, если текущее значение температуры превысит TH, то на выходе датчика DS1820  будет лог.1 что приведет к отключению нагрузки от сети. Если же температура опустится ниже TL то на выходе DS1820 появится лог. 0 и нагрузка будет включена.

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

Питание DS1820 осуществляется от простого бестрансформаторного блока  питания через гасящий резистор Rl. Сигнал с выхода управляет оптосимистором через цепь R2, VT1, R3. В свою очередь оптосимистор VD1, управляет симистором VS1. Данный мощный симистор, для эффективной работы, необходимо разместить на радиаторе площадью не менее 40 кв. см.

Для устранения радиопомех, возникающих при включении симистора, в схему включены R5, С1 выполняющие роль фильтра НЧ. Свечение зеленого светодиода говорит о включении термореле к сети, а свечение красного светодиода свидетельствует о включении нагревателя.

Для записи температурных порогов в память датчика  необходимо использовать простой программатор. В роли температурного датчика так же возможно применить схожие по параметрам DS1821, DS18S20. В термореле применены конденсаторы К10-17 (СЗ), К52-1 (С4), К73-17В (Cl, С2).

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

Источник: «Схемотехника», 02/2006

www.joyta.ru

Датчик температуры DS18B20. Описание, характеристики, подключение, распиновка, datasheet

DS18B20 — цифровой датчик температуры фирмы Dallas. Отправляет данные о температуре, используя только один цифровой вывод и специальный протокол, называемый 1-Wire. Вы можете подключить несколько датчиков к одному контакту. Датчик измеряет температуру в градусах Цельсия.

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

  • Датчик можно питать напряжением от 3 до 5,5В
  • Датчик может измерять температуру от -55 до 125 °C
  • Датчик имеет цифровое разрешение от 9 до 12 бит
  • Точность измерения +/- 0,5 °C в диапазоне от -10 до 85 °C
  • Точность измерения: + /- 2 °C для диапазона от -55 до 125 °C
  • Дрейф измерения +/- 0,2 °C

Распиновка DS18B20

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

Что такое разрешение?

В технических характеристиках сообщается, что датчик DS18B20 может измерять температуру с различным разрешением. Разрешение — это как у линейки: миллиметры между сантиметрами. Так же и c разрешением у DS18B20 — это шаг между последовательными ступенями градусов Цельсия.

Разрешение выбирается с помощью количества бит. Диапазон выбора от 9 до 12 бит. Выбор разрешения влечет за собой определенные последствия. Чем выше разрешение, тем дольше придется ждать результат измерений.

Для 9 битного разрешения есть 2 шага между последовательными уровнями:

То есть, вы можете прочитать температуру с разрешением 0,5 °C. Для 9 битного разрешения время измерения составляет 93,75 мс. То есть, вы можете выполнять 10,6 измерений в секунду.

Для 10 битного разрешения есть 4 шага между последовательными уровнями:

  • 0,0 °C
  • 0,25 °C
  • 0,5 °C
  • 0,75 °C

В этом случае мы считываем температуру с разрешением 0,25 °C. Время измерения для 10 битного разрешения составляет 187,5 мс, что позволяет выполнить 5,3 измерений в секунду.

Для 11 битного разрешения есть 8 шагов между последовательными уровнями:

  • 0,0 °C
  • 0,125 °C
  • 0,25 °C
  • 0,375 °C
  • 0,5 °C
  • 0,625 °C
  • 0,75 °C
  • 0,875 °C

То есть разрешение составляет 0,125 °C. Время измерения для 11 битного разрешения составляет 375 мс. Это позволяет выполнить 2,6 измерения в секунду.

Для 12 битного разрешения есть 16 шагов между последовательными уровнями:

  • 0,0 °C
  • 0,0625 °C
  • 0,125 °C
  • 0,1875 °C
  • 0,25 °C
  • 0,3125 °C
  • 0,375 °C
  • 0,4375 °C
  • 0,5 °C
  • 0,5625 °C
  • 0,625 °C
  • 0,6875 °C
  • 0,75 °C
  • 0,8125 °C
  • 0,875 °C
  • 0,9375 °C

Следовательно, разрешение составляет 0,0625 °C. Время измерения для 12 битного разрешения в районе 750 мс. То есть вы можете сделать 1,3 измерений в секунду.

Что такое точность измерения?

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

В технических характеристиках сказано, что в диапазоне измерения от -10 до 85 °C датчик DS18B20 имеет точность на уровне +/- 0,5 °C. Это значит, что, когда в комнате у нас температура 22,5 °C, то датчик может вернуть нам результат измерения от 22 до 23 °C. То есть, может показать на 0,5 °C больше или меньше. Все это зависит от индивидуальной характеристики датчика.

В диапазоне от -55 до 125 °C погрешность измерения может возрасти до +/- 2 °C. То есть, когда вы измеряете что-то с температурой 100 °C, то датчик может показать температуру от 98 до 102 °C.

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

Что такое дрейф измерения?

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

Дрейф датчика температуры DS18B20 +/- 0.2 °C. Например, когда в комнате постоянная температура составляет 24 °C, датчик может выдавать результат в диапазоне от 23,8 °C до 24,2 °C.

Скачать datasheet DS18B20 (379,0 Kb, скачано: 523)

www.joyta.ru

Цифровой термометр с датчиками DS1820 или DS1821

Появление на нашем рынке относительно дешевых цифровых
датчиков температуры и совсем дешевых микроконтроллеров сделало возможным
создание цифрового термометра, который не требует калибровки и имеет много
всяких возможностей. Среди цифровых датчиков температуры наиболее интересными
являются микросхемы DS1820 и DS1821 фирмы DALLAS. Хороши они тем, что используют
для обмена однопроводной интерфейс (1-WireTM) фирмы DALLAS. Это значит, что
датчики могут быть подключены к термометру всего с помощью 3-х проводов (датчик
DS1820 можно подключить даже с помощью двух проводов). Датчик DS1820 более
точный (и дорогой), имеет меньшее время преобразования. Зато DS1821 может быть
запрограммирован в режим термостата для полностью автономной работы.

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

www.dalsemi.com.

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

Многие хотят знать температуру и по эту сторону окна, т.е. в
комнате. Наверное, для того, чтобы решить, бежать ли в ЖЭС с криками типа «А за
тепло-то мы платим!!!». По этой причине термометр имеет второй датчик
температуры, расположенный внутри корпуса. Этот датчик имеет температуру,
примерно равную температуре воздуха в комнате.

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

Желание посмотреть на термометр появляется обычно тогда, когда
условия освещения наихудшие. Например, посреди ночи. Поэтому ЖК-индикаторы, даже
с подсветкой, не подходят. Лучшую читаемость в условиях недостаточного освещения
имеют светодиодные индикаторы. Правда, они много кушают.

Я являюсь абсолютным противником устройств, которые постоянно
торчат в сети. Может там, в странах развитой НТР, это и хорошо (в импортной
аппаратуре все чаще отсутствует полный сетевой выключатель), но в наших
своеобразных условиях это просто недопустимо. Я знаю, по меньшей мере, два
случая, когда у моих друзей в ночное время по какой-то неведомой причине сетевое
напряжение подскакивало почти вдвое. Все аппараты, которые находились в режиме
STANDBY, были выведены из строя. А на утро на местной мастерской появилась
шильдочка «Закрыто». По этой причине термометр имеет батарейное питание. Для
того чтобы продлить срок службы батарей, термометр включается кнопкой, а через
пять секунд автоматически отключается. Питание от сети тоже возможно, для этого
есть специальный разъем. При питании от сети термометр включен постоянно.

Имея в системе микроконтроллер, хотелось реализовать побольше
всяких прибабахов. Одним из них является выход управления термостатом. На этот
выход поступает напряжение 0 или +5 В в зависимости от состояния
термостата. Состояние определяется запрограммированными порогами и температурой,
считываемой с внешнего датчика. Два порога позволяют задать необходимый
гистерезис. Выход термостата может использоваться для управления тиристорами,
транзисторами или реле, которые, в свою очередь, коммутируют нагрузку. Что с
этим можно делать? Например, термостатировать ящик с картошкой на балконе на
уровне +2°С. Для этого ведь потребуется очень немного электроэнергии. Или
термостатировать воду в аквариуме (верный способ порадовать своих домашних
свежей ухой). Наконец, приспособить этот выход для управления компрессором
холодильника и иметь затем полный контроль над ситуацией. Впрочем, много еще
всего… Еще термометр умеет программировать микросхемы DS1821 в режим термостата.
Это уже не просто термометр, это средство производства!



Принципиальная схема термометра не сложна. Основой является микроконтроллер
U1 типа AT89C2051 фирмы ATMEL. Индикация динамическая, реализована программно.
Катодами индикаторы HG1 и HG2 подключены к порту P1, аноды включаются
транзисторами VT1-VT3. Транзисторы управляются линиями сканирования S0…S2.
Импульсный ток сегментов ограничен резисторами на уровне примерно 15 мА, что
вписывается в нагрузочную способность порта (20 мА) и достаточно для получения
необходимой яркости. Циклы сканирования формируются с помощью внутреннего
таймера микроконтроллера. За каждым циклом индикации следует «пустой» цикл,
когда все индикаторы выключены. Для регулировки яркости свечения индикаторов
достаточно регулировать отношение длительности цикла индикации к длительности
«пустого» цикла (PWM). Яркость регулируют кнопками «UP» и «DOWN» в режиме
индикации температуры. Новое значение яркости сохраняется в энергонезависимой
памяти. Для субъективно постоянной скорости изменения яркости в процессе
регулировки применен закон регулировки, близкий к гиперболическому.

Для экономии портов микроконтроллера на линиях сканирования
«висит» еще и I2C микросхема flash-памяти U2. Циклы сканирования игнорируются
микросхемой, так как представляют собой чередующиеся условия «старт» и «стоп».
Когда микроконтроллер обменивается с микросхемой, циклы сканирования
приостанавливаются. Все бы хорошо, только при таком включении микросхемы
flash-памяти был отловлен глюк. Если в качестве флэшки применялась КР1568РР1
производства ПО «ИНТЕГРАЛ», то в момент выключения питания, если идет
сканирование дисплея, содержимое некоторых ячеек портилось. Интересно, что
замена флэшки на PHILIPS PCF8582, с которой и содрана интеграловская, полностью
устранила глюк. Вообще, ни с одной фирменной микросхемой глюка не наблюдалось.

Местная клавиатура использует в качестве линий сканирования
линии данных дисплея, а в качестве линии возврата RL-порт микроконтроллера.
Сканирование клавиатуры происходит в циклах сканирования дисплея.

Внешний и внутренний датчики температуры подключены к портам
микроконтроллера через защитные цепочки. В цепи питания датчиков включены
небольшие резисторы для защиты от короткого замыкания на линиях термометров.
Внешний термометр подключен через 3-контактный 3,5-мм разъем, который обычно
используется для стереонаушников. У этого разъема есть особенность: во время
сочленения на некоторое время оказываются замкнутыми все три контакта. Поэтому
без защитного резистора в цепи питания не обойтись. На внутреннем датчике
цепочки защиты установлены на всякий случай. Ведь никто не запрещает превратить
этот датчик во второй внешний, правда?

Выход управления термостатом имеет двухтактный каскад на
транзисторах VT4 и VT5. Такой каскад обеспечивает одинаковый втекающий и
вытекающий ток. Этот ток ограничен резистором R17 из энергетических соображений
и в целях защиты транзисторов. Оба транзистора включены по схеме с общим
эмиттером, что по сравнению со схемой эмиттерного повторителя обеспечивает
больший размах выходного напряжения.

Разъем для программирования микросхемы DS1821 использует одну
и ту же линию данных, что и внешний термометр, а в качестве напряжения питания
использует напряжение выхода термостата (питание нужно выключать при переводе
микросхемы DS1821 из режима термостата в режим термометра). Поэтому при
программировании внешний термометр и исполнительное устройство термостата должны
быть отключены.

Разъем для программирования микросхемы DS1821 использует одну
и ту же линию данных, что и внешний термометр, а в качестве напряжения питания
использует напряжение выхода термостата (питание нужно выключать при переводе
микросхемы DS1821 из режима термостата в режим термометра). Поэтому при
программировании внешний термометр и исполнительное устройство термостата должны
быть отключены.

Вот мы и подошли к самой страшной части схемы — к
стабилизатору. При разработке стабилизатора нужно было выполнить ряд условий.
Полностью заряженные батареи имеют напряжение 6 В. Для нормальной работы
датчиков требуется минимум 4,3 В. Поэтому стабилизатор должен обеспечивать как
можно меньшее минимальное падение (лучше не более 200 мВ при 100 мА).
Стабилизатор должен триггерно включаться с помощью кнопки, а выключаться
сигналом с микроконтроллера. Стабилизатор должен «чувствовать» сетевое питание и
при его наличии оставаться все время включенным. Включение и выключение штекера
сетевого питания может производиться «на ходу». Батареи не должны разряжаться
при работе от сети. Кроме того, у имевшегося сетевого адаптера на центральном
контакте вилки был плюс, поэтому при сочленении разъема питания рвался минус.
При всем этом батареи должны коммутироваться правильно. Все вышеперечисленные
требования были выполнены в стабилизаторе, собранном на дискретных компонентах.
Может быть, какая-нибудь микросхема LDO-стабилизатора, например LP2951 с входом
SLEEP позволила бы решить эту задачу более просто, но что сделано, то сделано. Я
привожу описание конструкции «как есть», со всеми преимуществами и недостатками.
В качестве регулирующего элемента в стабилизаторе применен n-канальный
logic-level МОП-транзистор VT6 типа IRLZ44, который выпускается ПО «ИНТЕГРАЛ»
под кодовым названием КП723Г. Корпус этого транзистора ТО-220 способен рассеять
необходимую мощность без радиатора. В качестве низковольтного опорного источника
применен красный светодиод. Усилитель ошибки выполнен на транзисторе VT9.
Благодаря высокому сопротивлению нагрузки этот каскад имеет большое усиление.
Кнопка SB1 осуществляет начальное включение стабилизатора при работе от батарей.
При работе от сети включение стабилизатора осуществляет каскад на транзисторе
VT10. Транзисторы VT7 и VT8 образуют схему автоматического отключения. Для
выключения стабилизатора микроконтроллер должен сформировать соответствующий
сигнал на порту вывода. Но у микроконтроллера нет свободных линий (как всегда,
не хватило одной линии). Поэтому для отключения стабилизатора используется линия
возврата клавиатуры RL. При нормальной работе на этой линии наблюдается некая
последовательность импульсов, зависящая от того, какая нажата кнопка и что в
данное время на дисплее. Во всяком случае, период следования импульсов не может
быть больше длительности полного цикла сканирования дисплея. Когда ни одна из
кнопок не нажата, на линии «висит» единица. Для отключения стабилизатора было
решено использовать уровень логического нуля, длительностью не менее 50 мс.
Чтобы отличить это состояние линии от нормального, сигнал линии нужно
заинтегрировать, причем постоянная времени заряда должна быть намного меньше,
чем разряда. Транзистор VT7 включен по схеме эмиттерного повторителя, он
способен быстро зарядить интегрирующую емкость C8. Постоянная времени разряда
определяется в основном резистором R20. Транзистор VT8 используется как
пороговый элемент, при разрядке C8 ниже некоторого уровня транзистор
закрывается, разрывая цепь питания опорного источника VD12, и стабилизатор
выключается. При работе от сети узел отключения блокирован с помощью цепочки
VD13, R21, которая всегда поддерживает VT8 в открытом состоянии.

Несмотря на обилие дискретных компонентов, если применять SMD
элементы, схема стабилизатора легко «размазывается» на плате, заполняя собой
свободные места.

Отмечу один недостаток конструкции: отсутствует сигнал разряда
батарей. Микроконтроллер нормально работает при напряжении питания 2,7 В, в то
время как датчики температуры могут начинать «врать» при напряжении питания ниже
4,3 В. Батареи могут быть разряженными, показания термометра — неверными, а
пользователь даже не будет догадываться об этом. Выдаст разве что пониженная
яркость свечения индикаторов. Сразу скажу, что дело не в трудности формирования
сигнала BAT. LOW, а в отсутствии свободных портов ввода у микроконтроллера.
Кстати, подобный сигнал (там он называется ERROR) есть у того же LDO
стабилизатора LP2951. Один из выходов из положения — применить watchdog timer
DS1232L (он же ADM1232) или подобный. Для перезапуска можно использовать линию
сканирования дисплея, а встроенный монитор питания просто не позволит системе
работать, если напряжение питания ниже 4,5 В.

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

Печатная плата (и механическая конструкция) термометра сильно
зависит от желаемого дизайна изделия, поэтому здесь не приводится.

Содержимое ПЗУ микроконтроллера можно найти в файле therm.bin,
а исходный текст — в файле

therm.asm. Я пользуюсь транслятором TASM (версия 2.76) с таблицей
tasm51.tab. Поскольку этот транслятор не специализирован для 8051, имена SFR с
их адресами нужно указывать в тексте. Это сделано в файле

libreg.asm, а в therm.asm имеется строка #include «libreg.asm». Сразу
предупреждаю, что исходный текст стал не очень читаемым после нескольких
операций «ужатия» кода. С трудом удалось получить

therm.bin объемом 2048 байт, а AT89C4051 я еще в руках не держал. Вечные
проблемы с русским (кто это придумывает все эти кодировки, и где берет на это
финансирование?) давно вынудили пользоваться для комментариев ломаным
английским. Впрочем, комментарии не для того, чтобы их читать…

Инструкция по эксплуатации термометра в сжатом виде находится
в файле

thermmanual.doc (Word 97).

Автор проекта: Ридико Леонид Иванович (E-mail:
Включите javascript, чтобы увидеть email Email )

www.qrz.ru

DS1820 — датчик температуры

DS1820 — датчик температуры

Информация & документация


DS1820 — датчик температуры




Сейчас выпускается более совершенный аналог: DS18S20. Старый вариант снят с производства. Новый датчик имеет укороченный корпус и расширенный диапазон температур (???). Общение с датчиком ведется по однопроводному интерфейсу. В микросхему встроен контроллер сети MicroLAN.

Пример чтения температуры с датчика в сети MicroLAN:

  • Сбрасываем все устройства сети.
  • Пропускаем импульс присутствия.
  • Выводим команду «Совпадение ПЗУ» (команда 055h).
  • Выводим 8-байтовый сетевой номер (ПЗУ) интересуемого датчика.
  • Выводим команду «Преобразование температуры» (команда 044h).
  • Ждем, пока температура преобразовывается (в худшем случае 0.5 секунды).
  • Сбрасываем все устройства сети.
  • Выводим команду «Совпадение ПЗУ» (команда 055h).
  • Выводим 8-байтовый сетевой номер интересуемого датчика.
  • Выводим команду «Чтение блокнотной памяти» (команда 0BEh).
  • Считываем 9 байт (блокнотная память).
  • Проверяем контрольную сумму у считанных данных (восьмой байт — CRC).


Если на линии всего одно устройство, можно упростить:

  • Сбрасываем все устройства сети.
  • Пропускаем импульс присутствия.
  • Выводим команду «Пропуск ПЗУ» (команда 0CCh).
  • Выводим команду «Преобразование температуры» (команда 044h).
  • Ждем, пока температура преобразовывается (в худшем случае 0.5 секунды).
  • Сбрасываем все устройства сети.
  • Выводим команду «Пропуск ПЗУ» (команда 0CCh).
  • Выводим команду «Чтение блокнотной памяти» (команда 0BEh).
  • Считываем 9 байт (блокнотная память).
  • Проверяем контрольную сумму у считанных данных (восьмой байт — CRC).

Карта блокнотной памяти DS1820:











Блокнотная память

Номер байта

ТЕМПЕРАТУРА младший
байт
0
ТЕМПЕРАТУРА старший
байт
1
TH/пользовательский байт
1
2
TL/пользовательский байт
2
3
ЗАРЕЗЕРВИРОВАН4
ЗАРЕЗЕРВИРОВАН5
COUNT REMAIN6
COUNT PER °C7
CRC8


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

Единица в 16-битном числе «ТЕМПЕРАТУРА» соответствует 0.5 градуса. То есть значение 25 будет соответствовать 12.5 °C. Чтобы получить реальную температуру, необходимо это число умножить на 5. Тогда младшая цифра в десятичной системе будет отображать десятые доли температуры. В этом случае 25*5=125, младшая цифра — десятые, следовательно температура будет 12.5 °C. Для вычисления температуры без десятых долей необходимо разделить число на 2. Тогда 25/2=12 °C. Во всех этих случаях разрешение останется прежним — 0.5 градуса.

Чтобы добиться разрешения (но не точности!) 0.1, необходимо произвести вычисления используя регистры «COUNT REMAIN» и «COUNT PER °C». Вот формула:

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

Процедуры чтения температуры с датчиков DS1820 в разделе Исходники.
————————

icmicro.narod.ru

1-Wire. Работа с DS18B20. Часть 1

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

   Каждый термометр DS18B20 имеет уникальный 64 битный серийный номер, который используется для его адресации на 1-Wire шине. Это позволяет объединять на одной шине несколько независимо работающих термометров и осуществлять между ними и микроконтроллером обмен данными по 1-Wire протоколу. 

   Также особенностью данного термометра является то, что его можно запитывать не только от источника питания, но и от сигнального провода. Это так называемый режим паразитного питания. В этом режиме для подключения DS18B20 требуется всего два провода — сигнальный и возвратный (земляной, GND).

   
   Схема подключения нескольких датчиков DS18B20 с внешним питанием. 
   1-Wire шина  должна быть обязательно подтянута к плюсу питания через резистор номиналом 4,7 Ком. Напряжение источника питания от 3 до 5 Вольт. 

   Схема подключения датчика DS18B20 в режиме паразитного питания. 

   Вывод Vdd соединяется с GND, а 1-Wire шина дополнительно подключается к источнику питания через полевой транзистор. 

   Когда датчик DS18B20 выполняет преобразование температуры или копирует данные из ОЗУ в EEPROM память, он потребляет ток до 1,5 мА. Этот ток может вызывать недопустимое снижение напряжения на 1-Wire шине. Чтобы этого не происходило, 1-Wire шину на время выполнения этих операций подключают к источнику питания. Для этого и нужен полевой транзистор.   

     Для обмена данными термометр DS18B20 использует 1-Wire протокол (однопроводный протокол). Это низкоскоростной двунаправленный полудуплексный последовательный протокол обмена данными использующий всего один сигнальный провод. Естественно требуется еще и возвратный (земляной) провод, но об этом маркетологи обычно умалчивают. 1-Wire протокол был разработан фирмой Dallas Semiconductor в конце 90-х годов.    

     

   Имеется несколько типов сигналов, определенных 1-Wire протоколом — импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0 и чтение 1. Все эти сигналы, за исключением импульса присутствия, формируются на шине главным устройством — MASTERом . В нашем случае это  микроконтроллер AVR. 

  Принцип формирования сигналов во всех случаях одинаковый. В начальном состоянии 1-Wire шина с помощью резистора подтянута к плюсу питания. Главное устройство «проваливает» на определенное время 1-Wire шину в ноль, затем «отпускает» ее и, если нужно, «слушает» ответ подчиненного (SLAVE) устройства. В нашем случае подчиненное устройство — термометр DS18B20. 

 

  Физически это реализуется так. 

  Операция записи бита: Вывод микроконтроллера устанавливается в режим выхода и на нем устанавливается логический ноль. Выдерживается пауза, длительность которой зависит от значения передаваемого бита (0 или 1), затем вывод переводится в режим входа в состоянии Hi-z и снова выдерживается пауза. 

  Операция чтения бита: Вывод микроконтроллера устанавливается в режим выхода и на нем устанавливается логический ноль. Выдерживается определенная пауза, вывод переводится в режим входа в состоянии Hi-z, выдерживается пауза, а затем микроконтроллер считывает потенциал вывода. 

 

   Все сеансы связи микроконтроллера с датчиком DS18B20 начинаются с сигнала сброса.  Микроконтроллер на 480 мкс «проваливает» 1-Wire шину в ноль, а затем «отпускает» ее. Если к шине подключен термометр DS18B20, то он  обнаруживает положительный перепад и после паузы в 15-60 мкс отвечает микроконтроллеру импульсом присутствия — «проваливает» шину в ноль на время от 60 до 240 мкс. 

  

   Обмен данными по 1-Wire шине происходит последовательно, младшим битом вперед. Передача или прием одного бита данных выполняются в течении фиксированного промежутка времени, так называемого тайм слота (time slot). Различают тайм слоты записи и тайм слоты чтения. Длительность всех тайм слотов должна быть > 60 мкс, а пауза между тайм слотами  > 1 мкс.   

 

   Для передачи нуля микроконтроллер «проваливает» 1-Wire шину на время от 60 до 120 мкс. Затем «отпускает» ее и перед записью следующего бита выдерживает паузу >1  мкс.

   Для передачи единицы микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс,  «отпускает» ее и выдерживает паузу. Пауза должна быть такой, чтобы длительность тайм слота была > 60+1 мкс. 

   

   DS18B20 является подчиненным устройством и может передавать данные, только когда микроконтроллер формирует на 1-Wire шине тайм слоты чтения. Для формирования тайм слота чтения микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс, а затем «отпускает» ее, передавая  управление состоянием 1-Wire шины датчику DS18B20. Если DS18B20 передает ноль, он удерживает шину в «проваленном» состоянии (в состоянии логического нуля) до конца тайм слота. Если он передает 1, он оставляет шину в «подтянутом» состоянии. 

   Микроконтроллер может считывать данные датчика DS18B20 через 15 мкс после начала тайм слота чтения. 

chipenable.ru

Герметичный датчик температуры DS18B20 [Амперка / Вики]

Цифровой датчик температуры DS18B20 предназначен для измерения температур от −55 до +125 °C. Показания передаются на управляющую плату по протоколу 1-Wire — для подключения понадобится всего один свободный пин.

Подключение

Датчик имеет несколько вариантов исполнения чувствительного элемента. В статье мы опишем работу с сенсором DS18B20+ и его герметичным вариантом.

Для питания датчика током напряжением от 3 В до 5.5 В используются контакты V и G. Контакт S предназначен для передачи данных на микроконтроллер.

Чтобы подключить датчик понадобится резистор на 4.7 кОм, которым необходимо будет притянуть сигнальный контакт S к контакту питания V. Ниже приведена схема подключения двух типов датчика с использованием Breadboard.

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

Распаяйте резистор на 4.7 кОм, штырьковые соединители и герметичный датчик, как показано на рисунке ниже.

Теперь датчик легко подключить стандартным трёхпроводным шлейфом «мама-мама» к Troyka Shield.

А если хотите избавиться от лишних проводов, воспользуйтесь Troyka Slot Shield.

Примеры работы

Для того чтобы микроконтроллер получил данные с термометра необходимо установить библиотеку OneWire Library. Рекомендуем установить еще одну библиотеку Dallas Temperature — в ней собраны функции для упрощения работы с датчиком.

Работа с одним датчиком

Рассмотрим самый простой способ получения температуры — получение значений и выводом их в Serial монитор.
Прошейте управляющую плату примером кода, перезагрузите контроллер и откройте Serial монитор.

simple.ino
// подключим необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
 
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS 4
 
// настроим библиотеку 1-Wire для связи с датчиком
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
 
void setup(){
  // инициализируем работу Serial порта
  Serial.begin(9600);
  sensors.begin();
}
 
void loop(){
  // отправляем запрос на измерение температуры
  sensors.requestTemperatures();
  // покажем температуру в мониторе Serial порта
  Serial.print("Temp C: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println();
}

В результате получим значение вот в таком виде

Рассмотрим более сложный пример — с большим числом параметров

single.ino
// подключим необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
 
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS 4
 
// выберем разрешение от 9 до 12
#define TEMPERATURE_PRECISION 9
 
// настроем библиотеку 1-Wire для связи с датчиком
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
 
// создаем массив для хранения адреса датчика
DeviceAddress Thermometer;
 
// функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = 0; i < 8; i++){
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
 
void setup(void){
  // инициализируем работу Serial порта
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library");
 
  // инициализируем работу с датчиком
  sensors.begin();
 
  // выведем общее количество найденных датчиков
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
 
  // проверяем способ подключения питания
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()){
  Serial.println("ON");
  } else {
  Serial.println("OFF");
  }
  // сделаем запрос на получение адреса датчика
  sensors.getAddress(Thermometer, 0);
  // выведем полученный адрес
  Serial.print("Device 0 Address: ");
  printAddress(Thermometer);
  Serial.println();
 
  // установим выбранное разрешение датчика
  sensors.setResolution(Thermometer, TEMPERATURE_PRECISION);
  // выведем значение установленного разрешения
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(Thermometer), DEC);
  Serial.println();
}
 
void loop(void){
  // отправляем запрос на измерение температуры
  sensors.requestTemperatures();
  // создаем переменную для хранения температуры в градусах Цельсия и выводим её значение
  float tempC = sensors.getTempC(Thermometer);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.println();
  // пересчитаем значение температуры из шкалы Цельсия в шкалу Фаренгейта
  Serial.print("Temp F: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC));
  Serial.println();
  Serial.println();
}

В Serial мониторе отобразятся значения температуры и дополнительные настройки датчика.

Работа с двумя датчиками

К одному сигнальному пину, можно подключить несколько датчиков сразу.

Multiple.ino
// подключим необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
 
// сигнальный провод подключен к 2 пину на Arduino
#define ONE_WIRE_BUS 4
// выберем разрешение от 9 до 12
#define TEMPERATURE_PRECISION 9
 
// настроем библиотеку 1-Wire для связи с датчиком
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
 
// создаем массивы для хранения адреса датчиков
DeviceAddress insideThermometer, outsideThermometer;
 
// функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = 0; i < 8; i++){
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
 
void setup(void){
  // инициализируем работу сериал порта
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library");
 
  // инициализируем работу с датчиком
  sensors.begin();
 
  // выводим количество найденных датчиков
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
 
  // проверяем способ подключения питания
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
 
  // сделаем запрос на получение адреса датчика
  sensors.getAddress(insideThermometer, 0);
  sensors.getAddress(outsideThermometer, 1);
  // выведем полученный адрес
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();
  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer);
  Serial.println();
 
  // установим выбранное разрешение датчика
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
 
  // выведем значение установленного разрешения
  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();
  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer), DEC);
  Serial.println();
}
 
void loop(void){
  // отправляем запрос на измерение температуры
  sensors.requestTemperatures();
  // создаем переменную для хранения температуры в градусах Цельсия и выводим её значение
  float tempC0 = sensors.getTempC(insideThermometer);
  Serial.print("Temp C Device 0: ");
  Serial.print(tempC0);
  Serial.println();
  // пересчитаем значение температуры из Цельсия в Фаренгейт
  Serial.print("Temp F Device 0: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC0));
  Serial.println();
  Serial.println();
 
  float tempC1 = sensors.getTempC(outsideThermometer);
  Serial.print("Temp C Device 1: ");
  Serial.print(tempC1);
  Serial.println();
  // пересчитаем значение температуры из Цельсия в Фаренгейт
  Serial.print("Temp F Device 1: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC1));
  Serial.println();
  Serial.println();
}

В мониторе порта появятся показания двух датчиков.

Характеристики

  • Диапазон измеряемых температур: −55…+125 °C

  • Точность: ±0,5°C (в пределах −10…+85 °C)

  • Время получения данных: 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении

  • Напряжение питания: 3–5,5 В

  • Потребляемый ток при бездействии: 750 нА

  • Потребляемый ток при опросе: 1 мА

Ресурсы

wiki.amperka.ru

Про температурные датчики DS18B20 | BUDYON’S OFFICIAL SITE

Все-таки фирма «Dallas Semiconductor» рулит. Выпускают множество уникальных и недорогих штуковин. Одна из них — цифровой датчик температуры DS18B20. Штуковина чуть меньше вишневой косточки с тремя выводами. Первый вывод – питание + 5 вольт, второй – общий (ноль), ну а третий – сигнальный, с него снимается последовательный код пропорциональный температуре.  Датчик обеспечивает измерение температуры в диапазоне (–55… +125)°C с погрешностью измерений ±0.5°C на диапазоне (-10… +85)°C. Все процессы на шине управляются центральным микропроцессором.   Внутри – сложная схема с сенсором, АЦП, ПЗУ, регистрами хранения и системой последовательного вывода.

Важная особенность – каждый датчик имеет индивидуальный 64-разрядный идентификационный номер. Это дает возможность кидать на одну линию множество датчиков (до 256) и опрашивать каждый по отдельности. То есть распределять датчики  по большому участку, контролируя температуру в зданиях, инкубаторах и оборудовании или машинах, а также контролировать и управлять температурными процессами. Датчик обеспечивает возможность работы без внешнего источника питания, только за счет паразитного питания однопроводной линии, хотя в этом режиме я его не тестировал. Питание датчика через отдельный вывод производится напряжением от 3,0 В до 5,5 В. Датчик размещается в транзисторном корпусе TO-92. Более подробное описание см. оригинальный документ от производителя на английском языке.

А вот описание реальной системы разработанной и реализованной на кафедре Одесской Академии Пищевых технологий.

Основные функциональные возможности DS18B20 — его температурный преобразователь. Разрешающая способность температурного преобразователя может быть изменена пользователем и составляет 9, 10, 11, или 12 бит, соответствуя приращениям  0.5 °C, 0.25°C, 0.125°C, и 0.0625°C, соответственно. Разрешающая способность по умолчанию установлена 12-бит.

У меня валялось штук пять контроллеров PIC16F628 и я как-то вдруг обнаружил что у меня все термометры или ртутные или спиртовые, что было расценено как явный непорядок. Поэтому было решено собрать несколько схем на этом датчике, для измерения температуры на улице, температуры в квартире, ну и еще сделаю один мини-вариант для измерения температуры человека, а то эти аптечные электронные градусники безбожно врут! Ну еще система измерения температуры понадобится для робота, так что в любом случае нужна будет как испытательная.

!!!!!

Из замеченных недостатков:

1. Высокое термическое сопротивление корпуса. То есть БЫСТРО измерять нельзя. Нельзя измерять быстрые изменения. На видео это видно.

2. Диапазон температур  -55 — +125 явно не промышленный, да и вообще, скажем, зекам в Оймяконе или подземных ниобиевых рудниках на Таймыре (а там –50-60 и даже –70 бывает) температуру он не покажет. То есть даже не весь бытовой диапазон охватывает.

Схема

 

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

Вид сверху. Неработающий разряд – минус температур.

 

 

Испытания. Начал дуть феном для сушки волос, потом выключил. Осталось еще в корпус оформить. Себестоимость устройства – 6 долл. Блок питания —  от старой мобилы.

 

 

 

 

 

Возможно будет изготовлен экспериментальный вариант с питанием от солнечной батареи на ЖК-индикаторах, чтобы вообще не заморачиваться с питанием. Приклеить на окно и пусть себе вечно работает!  Кстати, кому нужна будет прошивка, пишите, у меня заведомо правильная.

P.S. Сегодня сравнил показания с другим устройством где датчиком является терморезистор. Как мы видим — все совпадает.

www.budyon.org