Датчик температуры ds18b20
Компьютерный термометр с датчиками DS18S20/B20.
С появлением специализированных микросхем, которые сразу преобразуют температуру в цифровой код, построение термометров значительно упростилось. Например, чтобы оснастить термометром компьютер, потребуется лишь простенький адаптер на COM-порт.
Среди микросхем цифровых термометров наибольшее распространение получили микросхемы семейства DS18x20 фирмы "Dallas" (с недавних пор это уже "Maxim"). Первой из этого семейства была микросхема DS1820, которая выпускалась в корпусе PR-35 (значительно более высокий, чем привычный TO-92) и SSOP. В настоящее время она уже не выпускается, ей на смену пришла микросхема DS18S20. Эта микросхема выпускается в корпусе TO-92 и SOIC. Причем вариант в TO-92 маркируется как "DS1820", распознать модификацию с буквой "S" можно только по низкому корпусу. Еще в этом семействе есть микросхема DS18B20, выпускающаяся в TO-92, SOIC и uSOP, но с маркировкой у нее все в порядке.
Микросхема цифрового термометра DS18S20 обеспечивает измерение температуры в диапазоне –55..+125°C с дискретностью 0.5°C. Путем дополнительных вычислений дискретность представления температуры может быть уменьшена до 0.0625°C. Стоимость микросхемы DS18S20 составляет примерно 2$, а стоимость деталей адаптера для подключения её к COM-порту компьютера - еще меньше. Подробное описание микросхемы DS18S20 можно найти по ссылке: http://pdfserv.maxim-ic.com/arpdf/DS18S20.pdf.
Рис. 1. Внешний вид микросхемы цифрового термометра DS18S20.
Самым привлекательным является то, что такой термометр уже откалиброван на заводе, гарантированная точность составляет ±0.5°C в диапазоне –10. +85°C и ±2°C во всем диапазоне рабочих температур. Типичная кривая ошибки измерения температуры приведена на рис. 2.
Рис. 2. Типичная кривая ошибки термометра DS18S20.
Несмотря на ограниченную абсолютную точность, малая дискретность представления температуры является весьма желательной, так как очень часто на практике требуются относительные измерения.
DS18S20 допускает напряжение питания от +3 до +5.5В. В режиме ожидания потребляемый ток близок к нулю (менее 1мкА), а во время преобразования температуры он равен примерно 1мА. Процесс преобразования длится максимум 750мс.
Принцип действия цифровых датчиков температуры фирмы "Dallas" основан на подсчете количества импульсов, вырабатываемых генератором с низким температурным коэффициентом во временном интервале, который формируется генератором с большим температурным коэффициентом. Счетчик инициализируется значением, соответствующим -55°C (минимальной измеряемой температуре). Если счетчик достигает нуля перед тем, как заканчивается временной интервал (это означает, что температура больше -55°C), то регистр температуры, который также инициализирован значением -55°C, инкрементируется. Одновременно счетчик предустанавливается новым значением, которое задается схемой формирования наклона характеристики. Эта схема нужна для компенсации параболической зависимости частот генераторов от температуры. Счетчик снова начинает работать, и если он опять достигает нуля, когда интервал еще не закончен, процесс повторяется снова. Схема формирования наклона загружает счетчик значениями, которые соответствуют количеству импульсов генератора на один градус Цельсия для каждого конкретного значения температуры. По окончанию процесса преобразования регистр температуры будет содержать значение температуры.
Для DS18S20 температура представляется в виде 9-битного значения в дополнительном коде. Поскольку это значение занимает 2 байта, все разряды старшего байта равны знаковому разряду. Дискретность представления температуры составляет 0.5°C. Зависимость выходного кода DS18S20 от температуры приведена в таблице:
Температура
Выходной код (Binary)
Водостойкий цифровой датчик температуры DS18B20
Артикул: DFR0198
Количество:
Данный товар не продается по одной единице. Вы должны выбрать по крайней мере 1 единиц данного товара.
Это водостойкая версия датчика температуры DS18B20. Он полезен, когда вам необходимо измерить что-то, что расположено далеко, или во влажных условиях. Хотя датчик может работать при температурах до 125°C, а его кабель закрыт ПВХ, рекомендуется использовать его при температуре до 100°C. Так как датчик цифровой, качество сигнала не снижается даже на большом расстоянии! DS18B20 предоставляет 9 - 12-битные (настраивается) показания температуры по 1-проводному интерфейсу, поэтому к центральному микропроцессору необходимо подключать только один провод (и заземление). Датчик используется в системах 3.0-5.5В.
Так как каждый DS18B20 имеет уникальный серийный номер микросхемы, на общей однопроводной шине может использоваться несколько DS18B20s. Это позволяет устанавливать датчики температуры в нескольких местах. Применения, где полезна эта функция, включают в себя ОКВ, определение температуры в помещениях, оборудовании или машинах, а также мониторинг и контроль процессов.
- Используется с 3.0 - 5.5В питание/данные Погрешность ±0.5°C от -10°C до +85°C Диапазон рабочих температур: -55 - 125°C (-67°F - +257°F) Выбор разрешения 9 - 12 бит Используется однопроводной интерфейс - необходим только один цифровой штырек для связи. В чип встроен уникальный 64-битный идентификатор Несколько датчиков могут использовать один штырек Система предупреждения о пределе температуры Время запроса менее 750 мс 3-проводной интерфейс:
- Тип A
- Красный провод - VCC Черный провод - GND Желтый провод - ДАННЫЕ
Тип В (в последнее время существует серия датчиков с таким распределением штырьков. Приносим извинения за неудобства).
- Красный провод - VCC Желтый провод - GND Зеленый провод - ДАННЫЕ
Трубка из нержавеющей стали, диаметр 6 мм, длина 35 мм Диаметр кабеля: 4 мм Длина: 90 см
Перечень поставки
- Водостойкий цифровой датчик температуры DS18B20 (1 шт.)
Самодельный термозонд на базе DS18B20
Купил я как-то от жадности пару цифровых 1-wire термометров DS18B20 (даташит )в корпусе TO-92. Купил как-то без всякой цели — увидел, что такие существуют и купил. Благо на ебее они идут по 43 руб штука.
И руки до них особо не доходили, пока не захотел хотя бы попробовать, рабочие они или нет.
Оказались вполне рабочие. Причем, что особенно порадовало — показания у двух датчиков, установленных в одну макетку совпадали друг с другом с расхождением менее, чем в градус, что, для тех же DHT11 и DHT22 мягко говоря не очень характерно.
Тут же появились мысли, что неплохо бы этот градусник приспособить под бытовые нужды — померять температуру на выходе из обычного или автомобильного кондиционера (а не использовать для этого BMP180, как я делал недавно ), температуру воды после термостата, температуру теплых полов, температуру внутри холодильника…
Благо, диапазон измерений — от -55 до 125 градус Цельсия — позволяет.
Проблема в одном — голый корпус TO-92 в воду не сунешь. Да и во всякие грязные и пыльные места тоже нежелательно.
Причем понятно, что загнать датчик в термоусадку — скорее всего не выход. Потому что защита датчика должна обеспечивать хороший подвод тепла к нему.
Готовых вариантов на том же ебее — вагон и маленькая тележка. Но стало интересно, а как вообще такие зонды устроены и можно ли сделать их самостоятельно.
Как не странно — оказалось можно. И даже детальное описание технологии на русском языке нашлось.
Ключевым моментом этой технологии является применение смеси кварцевого песка с маслом для обеспечения теплопередачи между латунной трубочкой корпуса зонда и собственно датчиком.
И еще мне очень понравилась идея оформить разъем датчика в виде 3.5мм аудио-джека.
Однако нужна гильза. Металлическая, по диаметру датчика. Автор технологии использовал б/у антенну от радиоприемника — у меня такой не было. Однако в процессе квартирного ремонта было бережно затарено две штуки непонятного назначения. Смутно вспоминается что это какие-то технологические заглушки, оставшиеся после монтажа кондиционера, но совершенно не факт.
Так вот узкая часть этих штук практически идеально соответствует размерам корпуса датчика!
Лишнее отпилим, не вопрос!
Готовая гильза
Кабель для зонда купил в Вольтмастере. Выбрал показавшийся наиболее солидным круглый кабель с небольшим числом жил — им оказался ШСМ 4х0.8 — кабель для видеонаблюдения. Одна из его четырех жил предназначена для передачи видеосигнала и поэтому экранирована оплеткой.
По результатам использования кабель произвел положительное впечатление — мягкий, гибкий, прочная внешняя изоляция. Спокойно перенес и нагревание при прогреве термоусадки и «тестовое» измерение процесса закипания воды (до 100 градусов). Изоляция внутренних жил рядом с местом пайки не «сворачивается». Жилы тонкие, но при очистке изоляции не рвуться. Диаметр внешний изоляции (3.2 мм) на практике оказался достаточен для того, чтобы на него плотно села термоусадка 8.0 мм (что странно, т.к. по документации предполагается усадка только в 2 раза, до 4 мм).
Допустимый температурный диапазон применения тоже неплохой — от -40°С до +60°С для полиэтиленовой оболочки кабеля, от -30°С до +50°С для ПВХ. Какая оболочка у меня — не знаю.
Понятно, что у самого датчика диапазон поболее, но хоть можно надеяться, что кабель выдержит, если не допускать его прямого контакта с измеряемой средой. Хотя в кипятке я его проварил — вроде все обошлось…
Масло — обычное, машинное. В смысле автомобильное. Shell Helix Ultra 5w30, если кому интересно. Набрал в медицинский шприц из канистры с остатками после ТО.
Кстати говоря, масло — диэлектрик. Поэтому погружать в него оголенные выводы датчика безопасно.
Песок. Вот тут сработал склероз. Потому что на самом деле между моментом, когда я прочитал описание технологии и моментом, когда занялся датчиком прошло давольно много времени и про то, что песок требуется не любой, а кварцевый я благополучно забыл. Зачерпнул обычного песка из детской песочницы, промыл, оставил сушиться… на третий день понял, что сам по себе песок при комнатной температуре сохнуть не хочет.
Прогревал несколько часов в духовке при 120-180 градусах — песох высох.
Одновременно я занялся сборкой из Arduino, Ethernet- и LCDShiled-ов аццкого устройства для оперативного контроля работоспособности датчика в процессе его сборки.
Изначально планировался опрос датчика с отображением результата на дисплее, но попутно мне пришла в голову идея запротоколировать на SD-карту процесс нагрева датчика при прогреве термоусадочной трубки. Отсюда и появился EthernetShield — исключительно как носитель слота SD-карты.
Достаточно быстро обнаружилось, что цифровой pin 4, который служит для выбора SD-карты на EthernetShiled-е задействован и на LCDShield-е, однако LCDShield можно настроить так, что вместо 4го будет использоваться какой-нибудь другой пин. Я использовал третий.
Но вот расположить три платы аккуратным «стэком» уже не получилось и дисплей зажил самостоятельной жизнью на шлейфе из разрозненных проводов. Это оказалось даже в чем-то удобно — «пультик» можно было взять в руки для нажатия на кнопки. Только вот клавиатура, которая у LcdShield-а реализована через делитель напряжения, время от времени подглючивала из-за плохого контакта.
Отпилил от строительного мусора тонкую часть — будущую гильзу датчика, обработал ее край напиильником, отмыл и оттер снаружи и внутри.
Разделал кабель, скрутил и пропаял жилы, надел на жилы тонкую (1.6 мм) термоусадку.
Скорее из суеверных, чем из практических соображений жилу в оплетке (белая) пустил под сигнал, оплетку с нее припаял к земляной (зеленой) жиле.
Отрезал торчащий из оболочки кабеля кусочек лишней четвертой жилы (желтой).
Укоротил ножки датчика.
Припаял кабель.
Запустил протоколирование и прогрел термоусадку. Грел газовой горелочкой, пламя приличное. Честно говоря — перестарался, греть можно было и послабее.
Из графика видно, что нагрев продолжался чуть дольше 60ти секунд, причем через 30 секунд был достигнут верхний предел диапазона измерения датчика в 127.94°C (точное значение из текстового лога) и чуть больше 25 секунд температура превышала это значение.
К счастью, датчик экзекуцию пережил…
Следующую операцию я сфотографировать забыл. На датчик была надета термоусадка 8.0 мм, она хорошо объединила в одно целое корпус датчика и внешнюю оболочку кабеля… но на этот пакет уже не надевалась гильза. Поэтому второй слой термоусадки пришлось обрезать так, чтобы она закрывала только ножки датчика и оболочку кабеля.
Вот как это выглядит с надетой гильзой
А дальше начались проблемы. Песок — ни сухой, ни смоченным маслом в гильзу набиваться не хотел. То есть в пустую гильзу — сколько угодно. А вот совместно с датчиком, проводами и термоусадкой — как-то совсем плохо.
Судя по всему, носик гильзы мне заполнить все-таки удалось, а вот в зазор между датчиком и стенкой гильзы песчинки банально не лезли. Слишком крупные!
Но что любопытно, накапанное в гильзу масло видимо как-то впитывалось песком и обратно не вытекало.
В конце-концов пришлось плюнуть на все и просто залить гильзу маслом до края.
Сравнение показаний двух датчиков — в гильзе и находящегося на открытом воздухе. Совпадение очень хорошее, но выход на совпадение происходит долго, больше минуты…
Дальше по технологии полагалось заделать выход из гильзы герметиком. Специального высокотемпературного автомобильного герметика для формирования прокладок у меня не было, покупать его специально не хотелось. Я предполагал использовать либо обычный строительный герметик, либо автомобильный герметик для выхлопной системы (этот у меня есть), либо какой-нибудь клей типа эпоксидки.
Однако поглядев, на то, что получилось, я подумал что ничего не потеряю, если просто закатаю датчик в термоусадку. Бедет течь масло — термоусадку можно срезать и все переделать. Не будет — ну и ладно.
Снова запустил протоколирование и затянул гильзу и выходящий из нее кабель в термоусадку 8.0 мм.
Нагрев на этот раз проходил в гораздо более щадящем режиме, температура выше 90 градусов не поднималась.
Кстати, по графику можно оценить скорость остывания датчика — это кривая, начиная с 1280-ой секунды до конца графика (отсчет времени шел с начала запуска логгера).
Интенсивное остывание с 90 до 35 градусов (это на 10 градусов выше температуры окружающей среды) продолжается примерно 80 секунд (до 1360-й секунды), после чего темпы остывания сильно падают.
Результат:
Первый эксперимент
Запись изменения температуры примерно полулитра воды при нагревании ее до кипения на индукционной конфорке электроплиты в режиме «boost».
У меня были опасения, что индукция либо повредит датчик, либо разогреет его независимо от содержимого кастрюльки, либо сделает невозможным получение от данных по 1-wire. Ничего подобного, все отработало совершенно нормально.
Весь процесс занял порядка 90 секунд (все-таки индукционная конфорка — это круто).
Надо заметить, что запаздывание между моментом закипания, наблюдаемым визуально и появлением значения 100 градусов на дисплее получилось весьма значительным — порядка 10 секунд…
Экономическая часть
Стоимость готового зонда на базе DS18B20 с метровым кабелем на ебее — от 63 руб.
Датчик DS18B20 сам по себе — 43 руб там же.
Кабель ШСМ 4х0.8 — в «Вольтмастере» 24 руб за метр
Термоусадка 1.6мм — 26 руб за метр, использовано, допустим 10 см — 2.6 руб
Термоусадка 8.0мм — 57 руб за метр, 10 см — 5.7 руб
Итого, суммарно по материалам получается 75.3 руб, и это еще без учета стоимости шприца для машинного масла (порядка 5 руб) и бесплатной гильзы.
Т.е. мой вариант получился дороже, чем готовый покупной.
Правда значительный вклад а конечную стоимость зонда внес крайне дорогой кабель — как оказалось в этом вопросе «Вольтмастер» окончательно потерял совесть и переплюнул даже эталонный по дороговизне «Чип и Дип» с ценой в 14 руб за один метр кабеля.
При цене в 14 руб стоимость самодельного устройства выравнивается с покупным, но опять же при условии, что имеется бесплатная гильза.
А второй датчик я сжег.
Как-то исключительно глупо — похоже перегрел при запайке в термоусадку. Хотел сделать сравнительные измерения двумя датчиками, загильзованным и открытым, чтобы сравнить запаздывание загильзованного, и поторопился при пайке. Работоспособность датчика в процессе прогрева не контролировал, температуру тоже. Визуально помню, что в какой-то момент осознал что датчик целиком находится в пламени горелки, в наиболее горячей части факела. Доли секунды, но видимо хваитило…
Из вредности и уперности заказал еще пару датчиков. Ну типа нехай хомяк подавиться…