Код товара:
87089
Артикул производителя:
112025
Гарантия:
1 год
Страна-производитель:
РоссияПроизводитель:
Эван
Количество, шт:
КупитьНапечатать
Добавить в закладки
Добавить в сравнения
Товар имеется в наличии
Склад в Санкт-ПетербургеПолучение товара сразу после оплаты!
Нужен совет? Позвоните нам!
+7 (812) 401-66-31 (многоканальный) или
+7 (800) 333-56-06 (бесплатный по России)
Вид оборудования:
автоматика
Применение:для настенных котлов
Происхождение бренда:
РоссияДатчик температурный GSM-Climate
Датчик температурный GSM-Climate DS18S20 Эван применяется в управлении термостатированием, промышленных системах, устройствах широкого потребления,термометрах или любых чувствительных к температуре системах.
Особенности датчика DS18S20:
Габаритный чертеж временно отсутствует
Документация на данное оборудование временно отсутствует
С этим товаром покупают
Подробная информация
Причина уценки: ${xdata.Text}
{{if xdata.StockVorosh3 > 0}}Кол-во товара с уценкой: ${xdata.StockVorosh3} шт.
{{/if}} {{if xdata.StockEngel28 > 0}}Кол-во товара с уценкой: ${xdata.StockEngel28} шт.
{{/if}}Новая цена: ${xdata.Price}
Код уцененного товара ${xdata.ArtWWW}
По вопросу приобретения уцененных товаров обращайтесь к менеджерам по телефонам +7 (812) 401-66-31 или +7 (800) 333-56-06 (бесплатный по России)
Причина уценки: ${xdata.Text}
{{if xdata.StockVorosh3 > 0}}Товар есть в наличии на складе на ул.Ворошилова д.2
Кол-во товара с уценкой: ${xdata.StockVorosh3} шт.
{{/if}} {{if xdata.StockEngel28 > 0}}Товар есть в наличии в магазине на пр. Энгельса, д.28
‘;Кол-во товара с уценкой: ${xdata.StockEngel28} шт.
‘; {{/if}}Новая цена: ${xdata.Price}
Код уцененного товара ${xdata.ArtWWW}
По вопросу приобретения уцененных товаров обращайтесь к менеджерам по телефонам
+7 (812) 401-66-31 или +7 (800) 333-56-06 (бесплатный по России)
teplo3000.spb.ru
В корпусе современного компьютера сконцентрировано большое количество элементов, выделяющих тепло. По большому счету, тепло выделяет практически всё, так как любая работающая электронная схема рассеивает некоторую мощность. Однако есть элементы, которые являются весьма интенсивными источниками тепла. Это процессор, чипы на материнской плате и на видеокарте, элементы на плате жесткого диска, элементы блока питания и т.д. Давно прошли те времена, когда процессор мог работать без принудительного охлаждения. Уже стал привычным кулер на видеокарте, иногда он устанавливается также на северный мост чипсета и на жесткий диск. Современный корпус обычно имеет места для установки дополнительных вентиляторов, которые призваны продувать весь внутренний объем корпуса компьютера. Особенно остро проблема охлаждения стоит для компьютеров, насыщенных платами расширения, а также для компьютеров с «разогнанными» процессорами.
Надежность полупроводниковых приборов при повышении рабочей температуры падает, не говоря уже о надежности и долговечности жесткого диска. Однако повышенная температура внутри корпуса компьютера ведет не только к сокращению срока службы компонентов, но и к неустойчивой работе, если какой-то компонент перегревается.
В свете сказанного очень важно обеспечить должное охлаждение компонентов и правильную вентиляцию корпуса. Правильно выбрать количество и тип вентиляторов, а также правильно организовать воздушные потоки является весьма сложным делом, так как свободный объем внутри корпуса имеет сложную конфигурацию, и потокам воздуха мешают различные предметы, в том числе провода. Иногда применение более мощного вентилятора даёт худший эффект, чем правильное распределение воздушных потоков от маломощного вентилятора. К тому же мощный вентилятор обычно имеет высокий уровень шума. Теоретически рассчитать потоки не представляется возможным, поэтому действовать приходится интуитивно, методом проб и ошибок. Основная трудность заключается в том, что очень трудно оценить эффективность той или иной принятой меры ввиду отсутствия средств контроля температуры. Имеющиеся на некоторых материнских платах и жестких дисках термодатчики позволяют судить лишь о температуре в нескольких точках. Поэтому приходится замерять температуру компонентов «на ощупь», что нельзя назвать точным и повторяемым методом.
При экспериментах с охлаждением компонентов компьютера неоценимую помощь может оказать независимый термометр. Такой термометр должен иметь небольшой по размерам датчик для его легкого размещения на различных компонентах, датчик должен иметь маленькую инерционность для возможности быстрого проведения измерений, ну и, конечно, достаточно высокую точность измерений. К тому же, термометр должен быть не дорогим. Всем этим требованиям удовлетворяют цифровые датчики температуры, выпускаемые фирмой DALLAS Semiconductor (теперь это уже MAXIM), которые могут быть подключены к последовательному порту компьютера.
Широко распространенная микросхема цифрового термометра DS18S20, выпускаемая фирмой DALLAS, обеспечивает измерение температуры в диапазоне –55..+125°C с дискретностью 0.5°C. Стоимость микросхемы DS18S20 составляет примерно 2$, стоимость деталей адаптера для подключения её к COM-порту компьютера — еще меньше. Подробное описание микросхемы DS18S20 можно найти по ссылке: http://pdfserv.maxim-ic.com/arpdf/DS18S20.pdf.
С помощью дополнительных вычислений дискретность представления температуры можно уменьшить, в нашем случае она равна 0.1°C. Самым привлекательным является то, что такой термометр уже откалиброван на заводе, гарантированная точность составляет ±0.5°C в диапазоне –10..+85°C и ±2°C во всем диапазоне рабочих температур. Типичная кривая ошибки измерения температуры приведена на рис. 2.
Несмотря на ограниченную абсолютную точность, малая дискретность представления температуры является весьма желательной, так как очень часто на практике требуются относительные измерения.
DS18S20 допускает напряжение питания от +3 до +5.5В. В режиме ожидания потребляемый ток близок к нулю (менее 1мкА), а во время преобразования температуры он равен примерно 1мА. Процесс преобразования длится максимум 750мс.
Принцип действия цифровых датчиков температуры фирмы DALLAS основан на подсчете количества импульсов, вырабатываемых генератором с низким температурным коэффициентом во временном интервале, который формируется генератором с большим температурным коэффициентом. Счетчик инициализируется значением, соответствующим -55°C (минимальной измеряемой температуре). Если счетчик достигает нуля перед тем, как заканчивается временной интервал (это означает, что температура больше -55°C), то регистр температуры, который также инициализирован значением -55°C, инкрементируется. Одновременно счетчик предустанавливается новым значением, которое задается схемой формирования наклона характеристики. Эта схема нужна для компенсации параболической зависимости частот генераторов от температуры. Счетчик снова начинает работать, и если он опять достигает нуля, когда интервал еще не закончен, процесс повторяется снова. Схема формирования наклона загружает счетчик значениями, которые соответствуют количеству импульсов генератора на один градус Цельсия для каждого конкретного значения температуры. По окончанию процесса преобразования регистр температуры будет содержать значение температуры.
Для DS18S20 температура представляется в виде 9-битного значения в дополнительном коде. Поскольку это значение занимает 2 байта, все разряды старшего байта равны знаковому разряду. Дискретность представления температуры составляет 0.5°C. Зависимость выходного кода от температуры приведена в таблице:
Температура | Выходной код (Binary) | Выходной код (Hex) | |
Ст. байт | Мл. байт | ||
+125°C | 0000 0000 | 1111 1010 | 00FAh |
+25°C | 0000 0000 | 0011 0010 | 0032h |
+0.5°C | 0000 0000 | 0000 0001 | 0001h |
0°C | 0000 0000 | 0000 0000 | 0000h |
-0.5°C | 1111 1111 | 1111 1111 | FFFFh |
-25°C | 1111 1111 | 1100 1110 | FFCEh |
-55°C | 1111 1111 | 1001 0010 | FF92h |
Более высокая разрешающая способность может быть получена, если произвести дополнительные вычисления на основе значений COUNT_REMAIN (значение, оставшееся в счетчике в конце измерения) и COUNT_PER_C (количество импульсов на один градус для данной температуры), которые доступны. Для вычислений требуется взять считанное значение температуры и отбросить младший бит. Полученное значение назовём TEMP_READ. Теперь действительное значение температуры может быть вычислено по формуле:
TEMPERATURE=TEMP_READ-0.25+(COUNT_PER_C — COUNT_REMAIN)/COUNT_PER_C
В нашем случае такой расчет позволяет получить дискретность представления температуры 0.1°C.
Каждый экземпляр DS18S20 имеет уникальный 48-битный номер, записанный с помощью лазера в ПЗУ в процессе производства. Этот номер используется для адресации устройств. Кроме серийного номера в ПЗУ содержится код семейства (для DS18S20 это 10h) и контрольная сумма.
Кроме ПЗУ DS18S20 имеет промежуточное ОЗУ объемом 8 байт, плюс два байта энергонезависимой памяти. Карта памяти DS18S20 показана на рисунке:
Байты TH и TL представляют собой температурные пороги, с которыми сравниваются 8 бит каждого измеренного значения температуры (младший бит отбрасывается). С помощью специальной команды можно организовать сигнализацию выхода температуры за пределы этих порогов. Если такая функция не нужна, байты TH и TL можно использовать для хранения любых данных пользователя.
Считывание значения измеренной температуры, а также передача команды начала преобразования и других команд производится с помощью 1-проводного интерфейса (1-WireTM) фирмы DALLAS. На основе этого интерфейса фирма DALLAS даже создала сеть, называемую microLAN (или µLAN). Для работы в этой сети выпускается целый ряд устройств, таких как адресуемые ключи, АЦП, термометры, часы реального времени, цифровые потенциометры. Кстати, такой же протокол обмена имеют и цифровые ключи IButton (или Touch Memory), которые сейчас широко используются в системах ограничения доступа.
Протокол, который используется 1-проводным интерфейсом, достаточно прост. В любой момент времени на 1-проводной шине можно выделить устройство-мастер, которым может быть микропроцессор или компьютер, и подчиненное устройство, в нашем случае это микросхема термометра. Так как у нас на шине присутствуют только мастер и всего одно подчиненное устройство, можно опустить всё то, что связано с адресацией устройств. В результате требуется знать лишь протокол передачи байтов, которые могут являться командами или данными.
Вначале рассмотрим аппаратную конфигурацию. 1-проводная шина является двунаправленной. На рис. 4 показана аппаратная конфигурация интерфейсной части DS18S20 и мастера шины. У каждого 1-проводного устройства к шине подключен вход приемника и выход передатчика с открытым стоком. Открытый сток позволяет подключать к шине множество устройств, обеспечивая логику «монтажное или». Генератор тока 5мкА обеспечивает на входе 1-проводного устройства низкий логический уровень, когда шина не подключена. Так как линия тактового сигнала отсутствует, обмен является синхронным. Это означает, что в процессе обмена нужно достаточно точно выдерживать требуемые временные соотношения.
1-проводная шина оперирует с TTL-уровнями, т.е. логическая единица представлена уровнем напряжения около 5В, а логический ноль – напряжением вблизи 0В. В исходном состоянии на линии присутствует уровень логической единицы, который обеспечивается подтягивающим резистором номиналом около 5Ком.
Инициатором обмена по 1-проводной шине всегда выступает мастер. Все пересылки начинаются с процесса инициализации. Инициализация производится в следующей последовательности (рис. 5):
Первой командой, которую должен передать мастер для DS18S20 после инициализации, является одна из команд функций ПЗУ. Всего DS18S20 имеет 5 команд функций ПЗУ:
Приняв команду Read ROM, DS18S20 будет готов передать 64-битный код, который мастер должен принять.
При приеме данных от подчиненного устройства временные интервалы для принимаемых битов тоже формирует мастер. Интервал начинается импульсом низкого уровня длительностью 1 — 15 мкс. Затем мастер должен освободить шину, чтобы дать возможность термометру вывести бит данных. По переходу из единицы в ноль DS18S20 выводит на шину бит данных и запускает схему временной задержки, которая определяет, как долго бит данных будет присутствовать на шине. Это время лежит в пределах 15 — 60 мкс. Для того чтобы данные на шине, которая всегда обладает некоторой ёмкостью, гарантированно установились, требуется некоторое время. Поэтому момент считывания данных мастером должен отстоять как можно дальше, но не более чем на 15 мкс от начала временного интервала (Рис 7):
Прием байта начинается с младшего бита. Вначале идет байт кода семейства. За кодом семейства идет 6 байт серийного номера, начиная с младшего. Затем идет байт контрольной суммы (CRC). В вычислении байта контрольной суммы принимают участие первые 7 байт, или 56 передаваемых бит. Для вычисления используется следующий полином:
CRC = X8+X5+X4+1
После приема данных мастер должен вычислить контрольную сумму и сравнить получившееся значение с переданной CRC. Если эти значения совпадают, значит, прием данных прошел без ошибок. Можно также вычислить контрольную сумму для всех 64 принятых бит, которая в этом случае должна быть равна нулю. Блок-схема алгоритма вычисления контрольной суммы показана на рис. 8. Алгоритм использует операции сдвига и «исключающего или». Квадратиками показаны биты переменной, которая используется для вычисления CRC. Перед вычислением её необходимо обнулить, а затем на вход алгоритма нужно последовательно подать 56 принятых бит в том порядке, в котором они были приняты. В результате переменная будет содержать значение CRC.
Такой же алгоритм вычисления контрольной суммы используется и в случае чтения промежуточного ОЗУ, только там считанная из термометра CRC (9-й байт) рассчитана для 8-ми байтов данных.
После обработки одной из команд функций ПЗУ, DS18S20 способен воспринимать еще несколько команд:
При использовании DS18S20 только для измерения температуры нужны всего две из этих команд: Convert T и Read Scratchpad.
Последовательность действий при измерении температуры должна быть следующей:
Для подключения DS18S20 к COM-порту компьютера используется адаптер, схема которого приведена на рис. 9, где показано окно помощи программы.
Схема этого адаптера не так проста, как, например, схема адаптера DS9097 фирмы Dallas. Это связано в первую очередь с тем, что хотелось иметь общую «землю» компьютера и 1-проводной шины. Для питания DS18S20 используется линия DTR последовательного порта. Адаптер обеспечивает на входе RXD порта компьютера лишь однополярные уровни, что, строго говоря, не соответствует спецификации RS-232C. Однако большинство портов с такими уровнями работают нормально. Вместо указанных на схеме n-канальных МОП-транзисторов можно применить близкие по параметрам транзисторы других типов, например, 2N7000. Подойдут также отечественные транзисторы КП501 или КП505. В принципе, можно применить и биполярные транзисторы, добавив в базы ограничительные резисторы. Конструктивно адаптер выполнен в корпусе разъема D-SUB-25 (рис. 10):
Разъем паяется прямо на плату, которая входит между рядами контактов. Другая сторона платы выполнена удлиненной и выходит за пределы корпуса разъема. В эту часть платы впаян 3-х контактный винтовой терминал (рис. 11):
Можно вовсе обойтись без печатной платы, а выполнить монтаж адаптера навесным способом на контактах разъема.
К винтовому терминалу подключается микросхема термометра с помощью проводов, длина которых может составлять до нескольких метров. Если датчик термометра используется в комнатных условиях, то никаких мер по его защите применять не нужно, необходимо только заизолировать выводы. Если же предполагается измерять температуру наружного воздуха или каких-то агрессивных сред, датчик термометра необходимо упаковать. Например, можно взять алюминиевый корпус электролитического конденсатора подходящего диаметра и поместить туда датчик, заполнив весь свободный объем теплопроводящей пастой. Сверху такой стакан необходимо загерметизировать.
Описанный адаптер также подходит для считывания электронных ключей IButton и для подключения других однопроводных устройств.
Программа ds1820.exe, работающая под Win95/98/ME/NT, позволяет считывать и отображать показания термометра, а также считывать серийный номер и программировать два пользовательских байта. Эта программа кроме термометра DS18S20 поддерживает и его предшественника DS1820.
Вид главного окна программы показан на рис. 12:
Окно имеет следующие элементы управления:
Кроме того, вверху окна имеется меню, состоящее из трех пунктов: Port, Utilites и Help.
Меню Port в развернутом виде показано на рис. 13. Это меню позволяет открыть один из четырех портов COM1 – COM4. Кроме того, меню позволяет закрыть порт и выйти из программы. В списке активны только доступные порты (т.е. те, которые физически присутствуют и не заняты в данный момент другими приложениями). Когда порт открывается, проверяется наличие на этом порту адаптера (достаточно соединения TXD – RXD). Если адаптер не обнаружен, выводится соответствующее сообщение (рис. 14):
Меню Help содержит рисунок принципиальной схемы адаптера и сведения о разработчике программы.
Для хранения установок программа использует ini-файл, который создается автоматически в том же директории, где расположен exe-файл. В ini-файле содержится информация о положении окна программы и номер используемого COM-порта:
[General] Left=427 Top=295 COM port=2
Если в существующем ini-файле указан номер COM-порта, который на момент запуска программы занят или отсутствует, выводится специальное сообщение (рис. 15):
Меню Utilites (рис. 16) содержит три пункта:
Обмен, который производится по 1-проводной шине, требует довольно точного соблюдения временных соотношений микросекундного диапазона. Работая под Windows, точно сформировать такие интервалы программным способом невозможно. Поэтому необходимые временные интервалы формируются аппаратно микросхемой приемопередатчика последовательного порта, который используется не совсем обычно.
Для генерации импульса сброса и приема ответа порт настраивается на скорость 9600 бод, длина символа 8 бит, и передается число F0h. Это приводит к формированию импульса сброса низкого уровня (с учетом инверсии адаптера) длительностью примерно 520 мкс (стартовый бит + 4 передаваемых бита). За ним следует импульс высокого уровня такой же длительности (4 передаваемых бита + стоповый бит), в течение которого ожидается ответ термометра. Если термометр не подключен, то порт примет число F0h не искаженным. Но если термометр сформировал импульс ответа, то принятое число будет содержать большее количество единиц, чем четыре. Таким образом определяется наличие ответа.
Для генерации интервалов приема и передачи битов, порт настраивается на скорость 115200 бод. Стартовый бит начинает временной интервал, затем идут 8 единичных или нулевых бит, в зависимости от значения бита, который нужно передать. Заканчивается последовательность стоповым битом, который на некоторое время устанавливает на 1-проводной шине высокий уровень. Вид этой последовательности полностью соответствует требуемому виду временного интервала передачи бита, за исключением того, что обмен является более медленным, чем способна обеспечить 1-проводная шина: на один бит затрачивается примерно 87 мкс.
Прием со стороны передатчика последовательного порта ничем не отличается от передачи единичного бита. Проанализировав принятый последовательным портом символ можно установить, какой бит передал термометр. В случае нулевого бита один или несколько битов принятого портом байта будут единичными (с учетом инверсии адаптера).
Для работы с COM-портом программа пользуется функциями API через специальную «оберточную» динамическую библиотеку comapi32.dll. Однако скорость обмена получается гораздо ниже расчетной из-за того, что переключение скорости COM-порта (вызов функции SetCommState с изменённым значением поля BaudRate структуры DCB) идёт удивительно долго (порядка 200 миллисекунд!). Это весьма неприятное свойство API.
Программа DS1820.zip вместе с исходным текстом на Delphi 5 source20.zip распространяется бесплатно.
При использовании термометра необходимо учитывать, что корпус DS18S20 сделан из материала с относительно плохой теплопроводностью. Поэтому утечка тепла через выводы и подключенные к ним провода может быть весьма ощутимой. Для уменьшения ошибки измерения следует использовать провода малого сечения.
Кроме измерения температуры компонентов внутри корпуса компьютера, этот термометр можно использовать и для других целей, например, как комнатный или как наружный термометр.
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
3dnews.ru
Собственно с чего появился этот материал. Как-то раз в длинные выходные осенью 2010 года в офисе проводили работы мосэнергосбыт с отключением электричества, о чем я узнал только придя на работу и открывая дверь серверной почувствовал, что температура воздуха превышает 30°С. Блоки бесперебойного питания не дали серверам выключится, а вот кондиционер оказался выключен.
В тот же день начался поиск какого-либо решения для мониторинга температуры воздуха в серверной. Искалось изначально готовое решение, но поиски не увенчались успехом, либо цена решения была слишком высокой, либо решения были под windows. И вот вспомнив, что в счастливое советское детство в 6-7 классе я посещал несколько кружков, в том числе кружок Радиоэлектроники и наткнувшись в интернете на нижеуказанную схему было решено — паять срочно:). Тем более, что это решение подразумевало использование нескольких программных решений под различные платформы, нас интересовала поддержка FreeBSD. Поискав еще немного, были обнаружены записи об использовании программы Digitemp во FreeBSD. С тех пор прошло уже много времени и Digitemp появился в портах /usr/ports/misc/digitemp.
Детали для нескольких комплектов, т.к. появилось желание при успешном опыте собрать такую же схему для дома, но сразу на несколько датчиков были куплены в магазине «Чип и Дип» на ул. Гиляровского, паяльник был, так же была канифоль и немного припоя.
Схема подключения температурного датчика для RS232
Разъем RS232 (D-SUB9) с корпусом
У электролитического конденсатора длинная ножка указывает на +, короткая на минус, так же сбоку на корпусе конденсатора имеется маркировка – (минус)
Распиновка диодов, стабилитронов
С резистором все проще, его можно подключать как угодно, не забываем, что нам нужен резистор на 1,5кОм
Распиновка температурного датчика и внешний его вид.
Надеюсь, что со схемой и деталями Вы разобрались:) У меня после многолетнего перерыва общения с паяльником эта схема поместилась в корпус для разъема RS232. Датчик присоединен через трех пиновый разъем от компьютерного кулера.
Получился у нас простой адаптер 1-wire сети, теоретическая протяженность которой может составлять 300 метров и иметь 250 датчиков (устройств). То что удалось достичь на практике — это 3 датчика DS1820 подключенных параллельно тремя отрезками по 2м, 3м и 4 метра и теперь я знаю температуру не только в серверной, но и дома в трех точках: на улице, лоджии и комнате.
Пример параллельного подключения датчиков
В следующей части материала мы рассмотрим как и чем снимать данные с датчиков и в чем хранить эти данные:)
marvins.ru
Разное
Главная Радиолюбителю Разное
Предлагается устройство измерения температуры, выполненное на микроконтроллере ATmega8515 и датчике температуры DS18S20, отличающееся простотой схемы и конструкции при повышенной точности измерения.
Сегодня выпускаются много различных датчиков температуры, как аналоговых, так и цифровых. Однако многие аналоговые датчики имеют существенно нелинейную зависимость выходного параметра от температуры (терморезисторы), сигналы других (термопар) приходится значительно усиливать перед использованием.
Все они зачастую требуют калибровать изготовленный измеритель температуры по образцовому термометру, чтобы устранить систематическую погрешность. Цифровые датчики калиброваны, как правило, на заводе и имеют линейную шкалу температуры.
Для использования в приборе был выбран распространённый цифровой датчик DS18S20. Согласно [1], он способен измерять температуру в интервале от -55 до +125°С. К сожалению, почти во всех известных термометрах с этим датчиком (например, в [2]) не используется возможность получать от него значения температуры с дискретностью меньше 0,5 °С. Это, видимо, связано с необходимостью считывать с датчика дополнительную информацию и производить вычисления с использованием сложной для простого микроконтроллера операции деления. В предлагаемом термометре эта возможность реализована. Отсчёт температуры ведётся с дискретностью 0,1 °C, что позволяет точнее отслеживать тенденции её изменения.
Благодаря использованию 40-выводного микроконтроллера ATmega8515-16PU схема измерителя температуры, изображённая на рис. 1, получилась сравнительно простой. Датчик DS18S20 (ВК1) связан с микроконтроллером по интерфейсу 1-Wire. Для управления датчиком в микроконтроллере выбран выход PE1, а принимает информацию от датчика вход PE0. Использование двух выводов вместо одного существенно упростило программу микроконтроллера.
Рис. 1. Схема измерителя температуры
Работа интерфейса 1-Wire основана на кодировании передаваемых по нему логических нулей и единиц определёнными интервалами времени. Длительность этих интервалов задана довольно жёстко, поэтому микроконтроллер тактируется от генератора, стабилизированного внешним кварцевым резонатором ZQ1 и обеспечивающего длительность машинного такта 0,25 мкс.
Подав датчику команду начать цикл измерения температуры, микроконтроллер ждёт его окончания. Затем он читает из внутренних регистров датчика не только обычно используемое измеренное значение температуры Тизм с ценой младшего двоичного разряда 0,5 оС, но и два поправочных коэффициента к нему. Коэффициент K1 (COUNT_PER_C) — число импульсов, генерируемых внутри датчика на один градус температуры. Коэффициент K2 (COUNT_REMAIN) — остаток во внутреннем счётчике после отсчёта целой части значения измеренной температуры. Расчёт уточнённого значения температуры T микроконтроллер выполняет по формуле, аналогичной приведённой в справочных данных датчика DS18S20:
T = int(Тизм) — 0,25 + (K1 — K2) / K1
Вывод значения температуры происходит через порты A, B и C микроконтроллера, выводы которых соединены через ограничивающие ток резисторы R2-R9, R12-R25 с катодами элементов светодиодных семиэлементных индикаторов HG1-HG3 с общим анодом. Отображается температура от -55 до +99,9 °С. Отрицательные значения температуры, лежащие в пределах -55…-10°С, отображаются целыми числами со знаком минус (рис. 2,а). В интервале-9,9…-0,1 °С температура отображается с десятыми долями градуса и знаком минус (рис. 2,6). Положительные значения в интервале 0…+99,9°С выводятся без знака с десятыми долями градуса (рис. 2,в).
Рис. 2. Отображение температуры
Термометр собран на стеклотекстолитовой технологической плате с металлизированными отверстиями, расположенными по сетке с шагом 2,5 мм (рис. 3). Для микроконтроллера на плате установлена панель. Конденсаторы С1-СЗ — керамические. Монтаж произведён на обратной установке деталей стороне платы проводом МГТФ. Датчик температуры ВК1 можно сделать выносным, соединив его с платой тройкой свитых проводов длиной не более 5 м.
Рис. 3. Термометр собран на стеклотекстолитовой технологической плате с металлизированными отверстиями
Потребляемый термометром ток, в зависимости от выводимого на индикаторы значения температуры, изменяется от 50 до 110 мА. При использовании указанного на схеме микроконтроллера термометр может быть запитан от любого источника постоянного напряжения 4,5…5,5 В. При питании от батареи микроконтроллер желательно заменить на
ATmega8515L-8PU, который работает при напряжении питания 2,7…5,5 В, что практически совпадает с допустимым напряжением питания датчика DS18S20 (3.5,5 В).
Программу микроконтроллера можно скачать здесь.
Литература
1. High precision 1-Wire Digital Thermometer — URL: http://www.robotstorehk. com/sensors/doc/DS18S20.pdf (21.02.14).
2. Самохин И. Цифровой термометр с функцией управления термостатом. — Радио, 2007, № 7, с. 35, 36.
Авторы: Е. Лукьяненко, Н. Никитина, А. Старых, г. Таганрог Ростовской обл.
Дата публикации: 06.10.2015
Вы можете оставить свой комментарий, мнение или вопрос по приведенному вышематериалу:
www.radioradar.net
Предыстория:
Обратился как-то ко мне знакомый, который работал инженером в фирме — интеграторе GPS/Глонасс оборудования. Один из их клиентов захотел измерять температуру окружающей среды за бортом очередного трактора. На этой технике уже стояли GPS — терминалы, отечественные, ADM600, какой-то пермской конторы. Спросил меня, какой лучше датчик применить, недорогой. У меня сразу возникла мысль, почему бы не применить DS18B20, на что коллега мне ответил: «у треккера нет 1wire», есть только 2 АЦП, один канал от 0-13, второй от 0 — 36, ну и плюс еще всякие входа дискретные и протокольные интерфейсы. Странно думаю, как так-то? В общем нужно было срочно решить его проблему, причем еще и как обычно — недорого. Придя домой сразу же открыл ящик стола. В кассетнице лежало с десяток DS18b20 и LM35. Откуда LM 35, я даже и не вспомнил. Никогда их не применял. Открыв ДШ по GPS треккеру и вправду не обнаружил у него шину Dallas а. Решено, делать датчик на том что есть — LM35. В ДШ написанно, что при базовом подключении, цена деления 10мВ на 1 градус С. И при этом нет возможности измерить отрицательную температуру.
Исходя из этого, требуется усилить сигнал и сделать смещение на датчике, что бы была возможность измерения отрицательных температур. Полазив в интернете, нашел схему смещения на двух диодах. Решил поставить транзистор.
В качестве усилителя применен низковольтный ОУ LM358:
Дальше решил промоделировать схему со смещением:
Как видно из рисунка, выходной сигнал измеряется (вольтметром) относительно общего провода.
Резистор R1 и транзистор Q1(включенный как диод) образуют схему смещения уровня вывода GND датчика температуры. При этом потенциал нижнего вывода резистора R4 оказывается отрицательным по отношению к GND LM35 и, датчик может работать как с положительными, так и с отрицательными температурами. Измерение выходного сигнала, как уже говорилось выше, осуществляется относительного общего провода питания. При нулевом значении температуры выходное напряжение составляет 0.6В (при использовании транзистора MMBT3906).
Снижение температуры ниже нуля вызывает уменьшение выходного напряжения (10 мВ на 1С на выходе LM35).
Подъем температуры выше нуля приводит к росту выходного напряжения.
Далее вопрос стал о конструктиве. Набросал 3D в Proteus, дабы визуально оценить размеры (решил плату усилителя совместить с головкой датчика в единую конструкцию, ибо линии на этом тракторе могут достигать длины и более 2х метров).
В DIPe сразу не понравилось, громоздко. Решил использовать планарные элементы. В качестве элемента для головки термодатчика использовал медный наконечник с отверстием под болт, решил обжать им LM35, предварительно промазав КПТ-8. Обжал при помощи специальной обжимки от Phoenix contact, брал у коллеги, поэтому не удалось сфотографировать. Далее аккуратно обработал простыми плоскогубцами.
Нарисовал плату в sLayot, получилась достаточно компактна:
Ну дальше сборка, решил сделать сразу 10 штук:
После сборки, обжал аккуратно наконечником корпус термодатчика и хорошо припаял с обратной стороны печатной платы… Конечно лучше было сделать прорези и пропаять с обеих сторон, но времени не было. Плату аккуратно обмакнул в Казанский герметик и поместил в термоусадочную трубку с клеем, провода от датчика поместил в пластиковый гофрорукав с авторынка, диаметром 6мм.
Питание датчика осуществляет отдельный параметрический стабилизатор на TL431 и МДП транзисторе и в данном случае не рассматривается.
Попробовал я откалибровать датчик. Калибровал при помощи спиртового градусника и своего самодельного термометра на DS18B20:
Калибровал так: холодильник, улица, фен. Хотя можно было применить чашку со льдом и комфорку плиты. Но так как термодатчик линеен, не стал сильно заморачиваться и сделал несколько замеров:
Сопоставляя данные с разных термометров сделал вывод: датчик получился достаточно точным.
Схема подключения датчика к прибору ADM600:
Передал датчики товарищу. Который через неделю после инсталяции термометров скинул мне отчет из програмного комплекса Fort Monitor, все работало =)
PS: По оси Y указана температура, а не напряжение. Так устроен программный комплекс…
we.easyelectronics.ru
В первой части материала мы рассмотрели создание простого 1-wire адаптера для com-порта компьютера.
В этой части материала мы узнаем как нам извлечь данные с температурного датчика посредством программы Digitemp, сей продукт разрабатывается под лицензией GNU General Public License, соответственно доступен исходный код, имеются сборки под Linux (.deb и .rpm пакеты), Windows(с помощью Cygwin), так же с недавних пор (c 26 июня 2011) появился в портах FreeBSD.
Итак мы будем использовать Digitemp в системе FreeBSD 8.1, но Вы без труда сможете его использовать в Linux и в Windows (работу в windows я не проверял) скачав нужный вам пакет. Подключаем адаптер к com-порту, для начала обновляем порты, я использую pertsnap. # portsnap fetch update Далее идем в нужный нам порт и инсталлируем его следующей командой # cd /usr/ports/misc/digitemp/ && make install clean # rehash В конце установки инсталлятор выдаст предупреждение.
NOTE: on FreeBSD Digitemp should use /dev/cuau* serial devices, so if running as non-root user, please tune your devfs rules or add running user to «dialer» group which is the default owner of /dev/cuau* devices !
Означающее, что Digitemp использует последовательные устройства /dev/cuau* (* — номер устройства (порта)) и если Вы будете опрашивать эти устройства не от пользователя «root», то пользователя необходимо добавить в группу «dialer».
Проверяем видит ли Digitemp наш адаптер. # digitemp_DS9097 -q -w -s /dev/cuau0 Где ключи означают следущее: -q — не выводить © -w — пройтись по всем устройствам в сети 1-wire -s — указываем какой серийный порт опрашивать
Если адаптер спаян правильно, то на вывод мы получим следующее: 10F106E901080025 : DS1820/DS18S20/DS1920 Temperature Sensor Начинаем радоваться, программа увидела наш температурный датчик, с уникальным адресом 10F106E901080025 который относится к семейству датчиков DS1820/DS18S20/DS1920 и является Temperature Sensor.
Далее для работы Digitemp надо создать конфигурационный файл. Переходим в директорию где хотим сохранить конфигурационный файл. # cd ~ # digitemp_DS9097 -q -i -s /dev/cuau0 Ключ -i указывает создать конфигурационный файл (файл создастся в директории откуда была запущена команда, имя файла .digitemprc)
Можем просмотреть получившийся файл
# less .digitemprc
TTY /dev/cuau0READ_TIME 1000 LOG_TYPE 1 LOG_FORMAT «%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F» CNT_FORMAT «%b %d %H:%M:%S Sensor %s #%n %C» HUM_FORMAT «%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%» SENSORS 1 ROM 0 0x10 0xF1 0x06 0xE9 0x01 0x08 0x00 0x25
Немного разберем его
Итак нас интересует вывод только температуры в C° и пусть останется номер датчика, для этого меняем переменную LOG_TYPE в .digitemprc с 1 на 2 и запускаем командой # digitemp_DS9097 -q -a -c .digitemprc 0 22.62 — 0 номер нашего датчика, 22.62 полученная температура в C° Для примера напишем небольшой скрипт, для вывода текущего значения в лог-файл. # vi /home/scripts/temperature.sh
#!/bin/sh # в переменную $line вставляем текущие значения номер датчика и температуры line=`/usr/local/bin/digitemp_DS9097 -q -a -c /path/.digitemprc` # в переменной $temperature оставляем только значение температуры temperature=`echo $line | awk ‘{print $2}’` # определяем текущею дату для вывода в лог date=`date «+%d.%m.%Y_%H:%M»` # делаем вывод в лог-файл echo $temperature $date >> /var/log/temperature.log
#!/bin/sh # в переменную $line вставляем текущие значения номер датчика и температуры line=`/usr/local/bin/digitemp_DS9097 -q -a -c /path/.digitemprc` # в переменной $temperature оставляем только значение температуры temperature=`echo $line | awk ‘{print $2}’` # определяем текущею дату для вывода в лог date=`date «+%d.%m.%Y_%H:%M»` # делаем вывод в лог-файл echo $temperature $date >> /var/log/temperature.log |
Делаем файл исполняемым # chmod +x /home/scripts/temperature.sh Добавляем в crontab наш скрипт для выполнения раз в 5 минут # crontab -e
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin HOME=/var/log #minute hour mday month wday */5 * * * * /home/scripts/temperature.sh >/dev/null 2>&1
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin HOME=/var/log #minute hour mday month wday */5 * * * * /home/scripts/temperature.sh >/dev/null 2>&1 |
Теперь раз в 5 минут наши данные с датчика будут писаться в лог-файл, запись «>/dev/null 2>&1» сделана для того, чтобы данные не отправлялись почтой, в принципе уже можно выводить эти данные куда-нибудь, так же не забываем включить пользователя от которого запускается скрипт отличного от «root» в группу «dialer».
В следующей части статьи мы рассмотрим пакет rrdtool и научимся хранить данные от нашего датчика в RRD (Round-robin Database) и рисовать температурные графики.
marvins.ru
В первой части материала мы рассмотрели создание адаптера 1-wire для последовательного порта компьютера.
Во второй части научились забирать данные с температурного датчика с помощью программы Digitemp.
В этой части статьи мы научимся структурировано сохранять и визуализировать наши данные. Поможет нам в этом — набор утилит rrdtool.Поехали!
# portsnap fetch update
# cd /usr/ports/databases/rrdtool
# make config
Выбираем нужные нам опции, жмем Enter
# make install clean
# rehash
Создаем директорию для хранения базы rrd.
# mkdir /var/db/rrdtool
Выполняем команду создания нашей базы, команда выполняется в одну строку, символы «\ » являются переносами строк.
/usr/local/bin/rrdtool create /var/db/rrdtool/temperature.rrd —step 300 \ DS:temperature:GAUGE:600:U:U \ RRA:AVERAGE:0.5:1:576 \ RRA:AVERAGE:0.5:6:672 \ RRA:AVERAGE:0.5:24:732 \ RRA:AVERAGE:0.5:144:1460\
/usr/local/bin/rrdtool create /var/db/rrdtool/temperature.rrd —step 300 \ DS:temperature:GAUGE:600:U:U \ RRA:AVERAGE:0.5:1:576 \ RRA:AVERAGE:0.5:6:672 \ RRA:AVERAGE:0.5:24:732 \ RRA:AVERAGE:0.5:144:1460\ |
Тем самым мы создали нашу базу в /var/db/rrdtool/temperature.rrd с шагом 300(скрипт у нас запускается каждые 5 мин(5мин*60сек=300)), в которой есть один DS (Data Source) с названием temperature, с типом источника GAUGE, который нам больше всего подходит, т.к. может хранить произвольные числа. Так же в DS у нас описаны четыре RRA (round robin archives), по примеру:
RRA:функция_консолидации:доля:отсчетов_на_ячейку:число_ячеек.
Немного переделываем наш скрипт, который мы писали во второй части статьи.
# vi /home/scripts/temperature.sh
#!/bin/sh # в переменную $line вставляем текущие значения номер датчика и температуры line=`/usr/local/bin/digitemp_DS9097 -q -a -c /path/.digitemprc` # в переменной $temperature оставляем только значение температуры temperature=`echo $line | awk ‘{print $2}’` # определяем текущею дату для вывода в лог date=`date «+%d.%m.%Y_%H:%M»` # делаем вывод в лог-файл echo $temperature $date >> /var/log/temperature.log #Наполняем нашу базу /usr/local/bin/rrdtool update /var/db/rrdtool/temperature.rrd N:$temperatere
#!/bin/sh # в переменную $line вставляем текущие значения номер датчика и температуры line=`/usr/local/bin/digitemp_DS9097 -q -a -c /path/.digitemprc` # в переменной $temperature оставляем только значение температуры temperature=`echo $line | awk ‘{print $2}’` # определяем текущею дату для вывода в лог date=`date «+%d.%m.%Y_%H:%M»` # делаем вывод в лог-файл echo $temperature $date >> /var/log/temperature.log #Наполняем нашу базу /usr/local/bin/rrdtool update /var/db/rrdtool/temperature.rrd N:$temperatere |
Если скрипт отработал без ошибок, значит Вы все сделали правильно, если нет, то проверьте пути до программ и конфигурационного файла.
Теперь попробуем создать график для отображения наших данных.
В вышеуказанных примерах, мы использовали утилиту rrdtool с аргументами «create» и «update». Для создания графиков мы будем использовать rrdtool c аргументом «graph».
Напишем скрипт для генерации графика:
# vi /home/scripts/graphcreate.sh
#!/bin/sh #Экспортируем нашу локаль, у меня KOI-8, свою локаль Вы можете проверить командой «locale» #без этого на график не получится вывести кириллические символ export LANG=KOI8-R export LC_ALL=ru_RU.KOI8-R #Строим график либо все в одну строку, либо через разделитель » «, комментарии в строке вызовут ошибку rrdtool graph /usr/local/www/temperature/test.png —width 400 —height 250 —font TITLE:13 —color BACK#444444 —color SHADEA#444444 —color SHADEB#444444 —color CANVAS#444444 —color FONT#ff7518 —slope-mode —start -1d —end now —units-exponent 0 —vertical-label «Температура, C°» —title «Температура за сутки» —imgformat PNG DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE LINE1:temperature#00ff00:»» GPRINT:temperature:LAST:»Текущая:%3.2lfC°» GPRINT:temp_0:AVERAGE:»Средняя:%3.2lfC°» GPRINT:temp_0:MAX:»Максимальная:%3.2lfC°» GPRINT:temp_0:MIN:»Минимальная:%3.2lfC°j» HRULE:0#00ffff
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/bin/sh #Экспортируем нашу локаль, у меня KOI-8, свою локаль Вы можете проверить командой «locale» #без этого на график не получится вывести кириллические символ export LANG=KOI8-R export LC_ALL=ru_RU.KOI8-R #Строим график либо все в одну строку, либо через разделитель » «, комментарии в строке вызовут ошибку rrdtool graph /usr/local/www/temperature/test.png —width 400 —height 250 —font TITLE:13 —color BACK#444444 —color SHADEA#444444 —color SHADEB#444444 —color CANVAS#444444 —color FONT#ff7518 —slope-mode —start -1d —end now —units-exponent 0 —vertical-label «Температура, C°» —title «Температура за сутки» —imgformat PNG DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE LINE1:temperature#00ff00:»» GPRINT:temperature:LAST:»Текущая:%3.2lfC°» GPRINT:temp_0:AVERAGE:»Средняя:%3.2lfC°» GPRINT:temp_0:MAX:»Максимальная:%3.2lfC°» GPRINT:temp_0:MIN:»Минимальная:%3.2lfC°j» HRULE:0#00ffff |
# chmod +x /home/scripts/graphcreate.sh
Создадим директорию для сохранения файла с графиком
# mkdir /usr/local/www/temperature
# /home/scripts/graphcreate.sh
466×298
466X298 – это размер созданного .png файла, хотя мы в скрипте описали параметры —widht 400 и —height 250, картинка получается больше из-за дополнительных атрибутов (обозначение оси, титула и т.п.).
Вот что у меня получилось
Разберем некоторые параметры rrdgraph:
Выведем график с помощью веб-сервера Apache (предполагается, что Apache у вас уже настроен и запущен, все пути в этой статье указывают на дефолтные настройки Apache).
Создадим статичную страницу HTML.
# vi /usr/local/www/temperature/temperature.html
<html> <title>Наша температура</title> </html> <body> <h2 align=»center»>Температура за сутки</h2> <div align=»center»> <img src=»test.png»> </div> </body>
<html> <title>Наша температура</title> </html> <body> <h2 align=»center»>Температура за сутки</h2> <div align=»center»> <img src=»test.png»> </div> </body> |
Заходим на созданную страницу http://my_domen/temperature/temperature.html,
мы должны увидеть примерно следующее:
Осталось поместить в crontab расписания запуска нашего скрипта, генерирующего график /home/scripts/graphcreate.sh, либо вызывать его из скрипта получающие данные с температурного датчика или объединить эти скрипты.
В следующих статьях рассмотрим возможность генерации графика через CGI и возможность создавать на графике градиентные заливки в зависимости от температуры.
marvins.ru