Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> Очумелые Ручки —> Компьютерные —> 1-Wire

Изготовление простейшего контроллера шины 1-Wire для создания системы мониторинга температуры.

Автор: Капитан.


          Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.

    Автор не несёт ответственности за возможные негативные последствия вызванные попытками  применить на практике материалы данной статьи!

Железо
    Датчик подключается к COM порту компьютера. Мы будем собирать его навесным монтажом в корпусе разъёма DB9.
Возможные грабли:
Перед закупкой деталей убедитесь, что COM порт вашего сервера мониторинга имеет стандартное питание 9 В. Померьте напряжение между 4 и 5 контактом. Убил кучу времени пытаясь завести схему на сервере Hewlett Packard с 5-ти вольтовым портом. У стандартного порта напряжение между 4 и 5 контактом будет примерно 10-11,5 вольт

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

По сути - это просто преобразователь уровней.

Для сбора схемы с одним датчиком были закуплены в «Чип&Дип» следующие детали:

1.Диод  Шоттки  - 1N5818 – 2шт.
2.Стабилитрон на 3,9 В - BZX55C3v9 – 1шт.
3.Стабилитрон на 6,2 В  - BZX55C6v2 – 1шт.
4.Резистор на 1,5 КОм – 1шт.
5.Датчик температуры DS1820 – 1шт.
6.Корпус разъема DB9 – 1шт.
7.Разъем DB9 мама (Female) – 1шт.


Всё это дело обошлось примерно в 420р. По ценам января 2011 года.

    Самая дорогая деталь – сам датчик (~280р.). Если необходимо наблюдать за температурой в нескольких точках, можно купить несколько датчиков и соединить их параллельно. Каждый датчик имеет уникальный идентификатор.
Маркировка датчика DS1820


Маркировка полупроводников


Штриху на корпусе соответствует катод.
Я советую сначала скрутить все детали
в воздухе с помощью пинцета или маленьких плоскогубцев

Лишние концы выводов деталей лучше откусить уже после пайки.

Выводы, которыми схема будет припаиваться к разъёму, откусываем в последнюю очередь



Сам разъём



Возможные грабли:
В советском радиолюбительском жаргоне используется слово МАМА для обозначения разъема с дырочками и, ПАПА – разъём со штырьками. Буржуины, соответственно, используют обозначения МУЖСКОЙ и ЖЕНСКИЙ пол. Так, что обозначения в каталогах F и M это не Father и Mother, а Female и Male. Будьте внимательны при заказе радиодеталей дистанционно! ;-)

Для удобства монтажа я откусил неиспользуемые контакты разъёма



Припаиваем схему к контактам разъёма



Размещаем всё в корпусе



Напаиваем датчик на кабель


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

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


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

В работе это выглядит примерно так



Если кто собирается вешать несколько датчиков в разных местах или экспериментировать с разными устройствами, рекомендую размещать схему вот в таком разъёме-переходнике


Это позволит более оперативно производить различные коммутации. Такой переходник знаком техническим специалистам телекоммуникационных компаний. Без такого к "кошкиной" консоли не подберёшься. ;-)

Теперь софт
В портах FreeBSD программы Digitemp нет.
Придётся ставить вручную из исходников. Исходники можно скачать с сайта разработчиков по адресу:
http://www.digitemp.com
Для компиляции понадобится gmake, если не установлен, собираем из портов
#cd  /usr/ports/devel/gmake
#make install clean
#rehash

Начинаем ставить Digitemp.
#mkdir  /usr/temporaly_source_code_folder
#cd  /usr/temporaly_source_code_folder
#fetch http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz
#tar -xzvf digitemp-3.6.0.tar.gz

После разархивирования у нас появится папка /usr/temporaly_source_code_folder/digitemp-3.6.0
#cd digitemp-3.6.0
#gmake ds9097

После компиляции в папке появится исполняемый файл digitemp_DS9097. Проверяем:
# ./digitemp_DS9097

Программа выведет встроенный Help. Всё ОК.В принципе,  кроме этого файла нам больше ничего и не нужно.
Создаём рабочую папку нашей системы наблюдения за температурой.
#mkdir /usr/local/etc/digitemp/
#cp digitemp_DS9097 /usr/local/etc/digitemp/digitemp
#rm –r  /usr/temporaly_source_code_folder
#cd /usr/local/etc/digitemp

Контроллер присоединён к COM1, выполняем его инициализацию.
# ./digitemp -i -s /dev/cuau0

Будет выведена информация о найденных датчиках и создан файл конфигурации .digitemprc примерно следующего содержания:
TTY /dev/cuau0
READ_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 0x28 0x4B 0xD1 0xC7 0x02 0x00 0x00 0xF0

Как видно, у меня один датчик. Нумерация датчиков начинается с нуля.
Пробуем снять показания.
#/usr/local/etc/digitemp/digitemp -a -c /usr/local/etc/digitemp/.digitemprc
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Jan 27 12:51:38 Sensor 0 C: 23.62 F: 74.53

Что и требовалось . . .

Практическое применение схемы для формирования графиков изменения температуры описано в статье:
http://www.lissyara.su/articles/freebsd/programms/mrtg+digitemp/
Система оповещения о превышении температуры на основе Nagios описана в статье:
http://www.lissyara.su/articles/freebsd/programms/nagios+digitemp/

Лирическое отступление
    Шина 1-Wire (один провод) была разработана в недрах капиталистической фирмы Dallas Semiconductor в 90-х годах прошлого века. Она представляет из себя сеть, с одним ведущим устройством (мастером) и несколькими ведомыми. На самом деле для осуществления связи используется минимум два провода: линия данных и земля, из-за этого в некоторых русскоязычных источниках я встречал термин "двухпроводная шина". Предусматривается и возможность дополнительного питания устройств по отдельному проводу (3-й вывод датчика). Однако ведомые устройства умеют накапливать энергию импульсов данных во встроенных ёмкостях (паразитное питание). Существуют и устройства со встроенными аккумуляторами. Стандарт предусматривает передачу данных на расстояния до 300-м (в рассматриваемой схеме конечно меньше) со скоростью 16,3 Кб/с. Фирма гарантирует уникальность идентификатора каждого устройства. Самым распространённым устройством, с которым, наверняка, каждый сталкивался, является DS1990A в корпусе MicroCAN - домофонная таблетка. Таблетка содержит внутри только уникальный код, который отдаёт по запросу. С помощью DS9097 его можно читать, однако соответствующего софта под FreeBSD я не нашёл :(



размещено: 2011-02-03,
последнее обновление: 2011-02-16,
автор: Капитан


BlackCat, 2011-02-03 в 23:46:16

Спасибо. Интересный материал.

Nebuchadnezzar, 2011-02-04 в 8:26:46

спасибо, Капитан, за дополненную статью. на днях завёл датчик в серверную и по синусоиде на графике обнаружилось, что один из кондеев (они у нас работают попарно с ежечасным переключением) или не работает или работает не эффективно. за описание монтажа особое спасибо. буду делать.

MYed, 2011-02-04 в 21:09:52

Перед закупкой деталей убедитесь, что COM порт вашего сервера мониторинга имеет стандартное питание 9 В. Померьте напряжение между 4 и 5 контактом. Убил кучу времени пытаясь завести схему на сервере Hewlett Packard с 5-ти вольтовым портом. У стандартного порта напряжение между 4 и 5 контактом будет примерно 10-11,5 вольт

Пожалуйста не путайте людей. Приёмопередатчики компьютеров на интерфейсе RS232 как правило питаются от -/+ 12В имеющихся в нём. Ввиду экономии энергии исключение точно составляют ноутбуки и т.п. Те самые "10-11,5 вольт" (кстати - Вольт это фамилия и пишется с большой буквы) получаются благодаря падению напряжения на выходных каскадах микросхем. Стандарт RS232 описывает уровни напряхения на сигнальных линиях в диапазоне от -/+ 3В до -/+ 25В.

Шина 1-Wire (один провод) - не что иное ка "однопроводная шина". Разумеется под этим понимается один информационный провод.

Хочу отметить что статья бесспорно полезна на практике.

Капитан, 2011-02-04 в 21:54:30

MYed
вам прямая дорога в серверную, и тестер вам в руки!


З.Ы. очепятку исправил, " не что иное ка "

Капитан, 2011-02-04 в 22:08:12

Не поленился, залез в словарь иностранщины, применяемой в нашем великом и могучем . . .
Если говорим об итальянце, пишем Вольт, если об единице измерения - вольт.
Наезд отклонён.
Совет пройтись по серверной с тестером остаётся в силе.
Прошу выложить результаты замеров для серверов HP и более других!

MYed, 2011-02-04 в 22:55:36

Капитан Не вступая в перепалку замечу, что \"Ампер\" вы наверняка тоже пишите с маленькой буквы.

Дорогой Капитан не сочтите за наезд. Вы не всё представляете себе в "электрификации" - пожалуйта без громких заявлений.

Капитан, 2011-02-04 в 23:33:28

Реально без наездов

Жену свою поучи электрификации . . .

З.Ы. так что там с результатами замеров в серверной?

Nebuchadnezzar, 2011-02-07 в 15:11:27

сходил в серверную, измерил. у моих серверов (в основном супермикры) 10-11V.
Кэп, лучше расскажите, что делать если питания не хватает. у меня дома качалка на mini-itx, так походу там как раз низкое напряжение, а забортную температуру снять охота.

Капитан, 2011-02-08 в 19:19:07

Нарыл в блокноте перерисованную откуда-то схему (ссылка не сохранилась). Помню, что автор успешно использовал данное решение на переходнике USB - RS232.

Ессно - решение не проверенное - рекомендовать в продакшн не могу.
    Фирменные решения для работы на низковольтных портах достаточно сложны для изготовления неподготовленным человеком, да и по деньгам выйдут конкретно дороже :(

MYed, 2011-02-09 в 0:28:58

Проанализировал схему адаптера данной статьи. Для обладателей COM-портов с уровнями +/- 5В есть следующая рекомендация - попробуйте уменьшить номинал резистора, скажем до 300 Ом. Но дабы не спалить COM-ы, не используйте доработанный адаптер на 12 вольтовых портах.

Nebuchadnezzar схема приведённая Капитан-ом для прямого подключения к COM-порту не годится. Её можно использовать, скажем, после преобразователя уровней RS232-TTL.

Капитан, 2011-02-09 в 11:49:39

Тогда остаётся вариант от производителя
http://www.treeworks.narod.ru/schems/DS9097u-009.jpg
Микросхемку идентификатора можно не использовать.
Цитата:
Works with bipolar logic signals of ± 5V to
± 12V (RS232C) as well as unipolar signals
of 5V to 12V

Nebuchadnezzar, 2011-02-10 в 8:01:11

когда искал информацию по теме температурных датчиков, наткнулся на статью на хабре. [url=http://habrahabr.ru/blogs/DIY/55780/#habracut] схема аналогичная, но там деталек больше

Афанасий, 2011-02-10 в 12:38:47

С RRDTool как-то красивее (http://www.unix.ck.ua/content/monitoring-temperatury-s-pomoshchyu-rrdtool)

Andy, 2011-02-13 в 10:41:49

Это просто пиздец какой-то! Сделайте уже порт наконец для этой софтины, а то стремно видеть когда в хорошей статье софт из сорцов компиляют. А Капитану троекратное ура! За находчивость, смекалку и handmade. :)

titan, 2011-06-02 в 17:11:56

Кап спасибо огромное за статью - обязательно возьму на заметку.

inkindly, 2011-09-13 в 23:36:39

Лучше делать на макетной плате,у меня все аккуратно и понятно получилось. И свободно сидит в корпусе COM-штекера. Один минус. Пробовал запустить на Windows - температуру показывает около 0. В  комнате +20. На серваке с Ubuntu linux Server 9.04 вообще ничего не выводит.

Капитан, 2011-10-08 в 12:59:48

inkindly
хороший комментарий:
\"лучше делать по-другому, но не заработало\"

VASh, 2011-10-18 в 14:28:13

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

yurkinson, 2011-10-24 в 16:59:36

Повторил схему несколько раз - работало стабильно при наличии
"высоковольтажного" ком-порта, на части хостов компортов свободных не было, пришлось покупать USB переходники, ни на одном из них не заработала. Вышел из ситуации использованием наружного блока питания, т.е. на датчиках третий вывод подключается к отдельно протянутой линии питания (т.е. протягивать придётся не две а три линии: GND-Data-Uпит.
Общий провод блока питания и предлагаемой схемы соединял возле хоста мониторинга.
Для того чтобы снизить инертность датчиков и погрешность измерения выводы откусывал и наращивал тоненькими "волосинками" - проводниками многожильного провода (в противном случае солидно врёт, особенно если вентилятором обдувается и выводы не обрезаны и не теплоизолированы).



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0448 секунд
Из них PHP: 25%; SQL: 75%; Число SQL-запросов: 69 шт.
Исходный размер: 75942; Сжатая: 14189