24/11/2008 16:22:16
В своей первой статье про Умный Дом я перечислил основные принципы, на которых должна была строиться система. Трудно было заранее предположить, какие области, так сказать, жизнеобеспечения потребуют автоматизации, а какие нет. Существовало, например, мнение, что управление освещением не более чем забава, а в быту только мешает. В связи с этим я не хотел делать на первом этапе значимых вложений. Решил, что компоненты должны быть дешевыми, простыми в монтаже, понятными в использовании и, по возможности, надежными. Вся система должна была по задумке строиться на открытых документированных стандартах. Изучив большое количество материалов, я решил попробовать технологию 1-wire от компании Maxim/Dallas.
Технология 1-wire далеко не нова и известна уже около 10 лет. 1-wire широко применяется как в быту, так и в промышленных системах. Тем не менее, мало кто об этом знает. Нас интересует применение 1-wire в системах автоматизации. 1-wire представляет из себя сеть, к которой можно подключить множество устройств, таких как датчики (температурные, влажности, освещенности), исполнительные ключи, счетчики, считыватели и многое другое. Все устройства связываются между собой в самом простом случае двухпроводным кабелем. Один провод используется под данные (отсюда и название "1-wire"), а второй провод - возвратный или "Земля". Топология сети - общая шина. Это означает, что один кабель проходит через все устройства. Ответвления допустимы, но не рекомендуются (до 50 см). Впрочем, для небольших сетей возможна произвольная топология, например, звездой. Большим преимуществом 1-wire является то, что многие, но не все, компоненты 1-wire могут обходится без внешнего питания, работая от так называемого паразитного питания, забирая энергию из шины данных. У меня, к примеру, при общей протяженности сети 80 метров на паразитном питании успешно работали 5 температурных датчиков. В качестве кабеля для 1-wire можно использовать все, что только проводит электрический ток. Это и дешевый телефонный кабель и недорогая витая пара. Однако низкие требования к среде передачи данных накладывают свои ограничения на скорость работы. Так, максимальная скорость передачи данных по технологии 1-wire в обычном режиме составляет 15,4Кбит/с (до 125Кбит в режиме Overdrive). Вроде бы совсем медленно, но если учитывать, что по сети передаются не фильмы в формате HDTV, а, например, команды ключам и короткие ответы датчиков, то становиться понятно, что этого достаточно. Для контроля ошибок в протоколе 1-wire предусмотрена проверка контрольной суммы передаваемых пакетов - CRC.
Можно перечислить преимущества 1-wire:
Недостатки 1-wire
Остановимся подробнее на обязательном требовании к наличию мастера сети. Дело все в том, что устройства с точки зрения организации обмена данными пассивные элементы цепи. Компоненты 1-wire не могут без специального запроса посылать в сеть данные. Таким образом устройства не могут общаться друг с другом без "активного" ведущего. Элементы сети являются всегда ведомыми. Мастер в сети 1-wire только один. Именно он инициирует, контролирует и управляет работой сети и подключенных к сети устройств. В зависимости от используемого программного обеспечения, мастер 1-wire линии может по-разному работать со своими подопечными, но только он в конечном итоге может опросить состояние конкретного элемента, а также послать запроса на получение от этого элемента какой-либо информации. Например, если нам необходимо в режиме реального времени выводить значение температуры с множества датчиков, то мастер сети в цикле будет по очереди опрашивать эти датчики. Отвечать мастеру по сети может только одно устройство. В качестве мастера может выступать МК (микроконтроллер), который может при соответствующем ПО напрямую включаться в сеть 1-wire к одному из своих портов ввода-вывода. Мастером может выступать также ПК (персональный компьютер), использующий специальные элементы сопряжения, позволяющие соединять 1-wire с COM-портом или USB-портом компьютера, такие как DS9097 или DS9490.
Для себя я в данный момент выбрал вариант персонального компьютера с устройством сопряжения DS9490R. В целях исследования возможностей сети это представляется обоснованным. Кроме того, использование единого сервера, центра домашней автоматизации, весьма удобно с точки зрения программной организации работы системы. Ведь к компьютеру можно достаточно просто, без использования сложных аппаратных механизмов подключить множество совершенно различных интерфейсов, сетей и протоколов, которые могут управляться единым программным обеспечением. Это значительно упрощает схему сети, не требует какого-то специального оборудование, делает всю систему более гибкой и значительно ускоряет процесс обмена информацией между системами. Например, управление элементами 1-wire посредством внешних сигналов (сработала сигнализация), через сеть Интернет, событиями, генерируемыми другими системами и программами (ZoneMinder системы видеонаблюдения зафиксировал движение в камере) значительно проще реализовать, имея в качестве мастера - персональный компьютер.
Вполне предвижу возражения относительно надежности персональных компьютеров. Действительно, PC обладает с точки зрения промышленной автоматизации и автоматизации критических систем достаточно низкой надежностью. Так, блок питания моего сервера (на базе старенького, видавшего виды ПК) вышел из строя примерно через 4 месяца непрерывной работы. Но предлагаю исходить скорее из соображений целесообразности и стоимости, которая выражается как в деньгах, так и во времени. Во-первых, как я уже говорил, решение на базе ПК значительно более гибкое. Во-вторых, можно тщательно подобрать комплектующие. Использовать, например, безвентиляторный блок питания, Intel Atom в качестве процессора в конфигурации, не требующей активного охлаждения и Flash-накопитель или карту в качестве жесткого диска. В-третьих, можно использовать промышленный контроллер с архитектурой x86 или даже готовый маршрутизатор на базе Linux с портами USB. В-четвертых, не отказываться от использования микроконтроллеров для критически важных систем и систем, требующих молниеносного ответа. Например, управление освещением в помещении (не уличным) можно поручить МК. С отоплением сложнее. Его хотя и можно отнести к критически важным, но эта не та система, которая требует немедленной реакции, поскольку очень инерционна. К примеру, температура воздуха в доме зимой в случае аварийного отключения отопление падает от 0,5 до 2 градусов в час. За это время можно решить проблемы с ПК или перевести отопление на ручную регулировку. Системы отопления должны проектироваться так, чтобы такое переключение на ручное регулирования осуществлялось легко. Подробнее о целесообразности применения персонального компьютера в качестве управляющего элемента в домашней автоматизации.
Отдельно остановимся на вопросе надежности элемента сопряжения ПК с сетью 1-wire и надежности ПО. Безусловно, схема по типу мастер-слейв (ведущий-ведомый) изначально не блещет надежностью. При выходе из строя ведущего или "глюков" ПО система встает целиком. В этом смысле системы, в которых возможен обмен информации между элементами без участия мастера, например, CAN, находятся в более выгодном положении.
Почему же не использовать CAN? Недостатки, присущие 1-wire - это обратная сторона достоинств. Низкая цена, наплевательское отношение к проводам, простота в проектировании и использовании оборачивается, скажем так, некоторыми особенностями. Возможно, использование МК или промышленных контроллеров, а также более тщательная работа с кабелями и модулями даст 100% надежность и 1-wire. Что же касается таких шин и протоколов как Modbus или CAN, то безусловно, с точки зрения надежности они лучше, но они значительно сложнее и дороже в схемотехнике и управлении. Готовые решения на базе CAN существуют, но очень дороги. Самостоятельно изготавливать модули в количестве, достаточном для домашней автоматизации, а также писать программное обеспечение без соответствующей подготовки кажется мне маловероятным.
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
2011-12-26 18:32:01 | Andrey_ims
Я почему-то думал что Вы используете телефонный провод.
Кажись в статье о выборе шины Вы писали
А так в принципе логично
2011-12-26 17:13:54 | Andrey_B
Конечно часто неудобно, поэтому все подключения выполнены псевдозвездой. Это когда от датчиков в какой-то центр (щиток, шкаф) идет всего один провод UTP. Но на самом деле в центре происходит коммутация шиной, то есть 3 провода к датчику и 3 провода от датчика. Шина сохраняется, ответвлений нет, но длина всей сети равна удвоенной длине лучей. Коммутировать лучи звездой можно пайкой, на клеммах или в специальных патч-панелях.
2011-12-26 16:48:49 | Andrey_ims
Подскажите, а проблем с ограничением длинны ответвлений от шины Вы сталкивались?
Ведь не удобно-же зигзагами пускать шину по всем датчикам.
2011-08-08 11:30:25 | Andrey_B
Max, компания iButtonLink выпускает специальные считыватели под маркой LinkLocator. Они предназначены специально для идентификации местоположения считывателя, так как имеют свой персональный адрес. Посмотрите даташит на этот продукт. То, что вам надо.
Еще один вариант - использования ветвителей и хабов. Я точно не знаю, но по-моему owfs может отображать конкретные ветки индивидуально, а значит на каждую ветку можно повесить свой считыватель.
2011-08-08 02:05:07 | Max
Подскажите, как лучше реализовать следующее: Есть несколько считывателей iButton, каждый установлен на своей двери. Если считыватели напрямую подключить к мастеру, то мы не узнаем, к какому именно считывателю поднесли ключ, мы увидим только id ключа. Вариант - установить несколько мастеров и к каждому мастеру подключить по своему считывателю. Может можно реализовать как-то эффективнее?
2011-07-18 16:42:25 | Andrey_B
Максим, очень полезно полистать Datasheet (документацию) на датчики DS18B20. Конечно, там материал подан достаточно сложно, но есть ответы на все вопросы.
У DS18B20 три ножки. Земля, Шина, Питание. Датчик может работать на так называемом "паразитном" питании. То есть брать энергию из шины. В этом случае контакт Питание и контакт Земля соединяются вместе и получается как бы две ножки.
Первый конец включается в мастер сети, второй конец подключается к датчику. Для простоты можно взять телефонную розетку (где есть разъем RJ-11 типа мама) и расположить датчик внутри корпуса, соединив ножки с нужными контактами в разъеме. Какие это контакты - смотрите Datasheet на мастер сети. Для DS9490R - это два центральных (!) провода.
Кабель наверное подойдет. Там написано "прямой". Очень важно, чтобы он был именно "прямой", так как телефонные как правило перевернуты. Для верности лучше будет проверить любым мультиметром.
2011-07-18 14:46:57 | Максим
Andrey_B, благодарю вас за столь интересный и содержательный ресурс!
После прочтения многих материалов на сайте, у меня остался отрытый вопрос по сборке 1-wire сети.
Для начал я решил опробовать сеть на ноутбуке под управлением Debian 6.
Приобрести мастер сети, кабель и два температурных датчика.
Но есть вопросы:
1) как крепить температурные датчики (у них 3 ножки, а кабель двужильный)?
2) что должно быть на "втором" конце кабеля (первый конец подключаем в мастер сети)?
3) подойдет ли для работы следующий кабель: FD-6113
Заранее благодарю!
2011-06-23 23:53:14 | Николай
Спасибо за оперативный ответ.
C Вашим программно-аппаратным решением я полностью согласен. И цена выгодная и простота реализации. Возможно более детально разобравшись с 1-wire я смогу предложить более оптимальный вариант.
2011-06-22 22:26:46 | Andrey_B
Николай, способы и варианты решения обозначенной вами задачи обсуждались здесь в комментариях и на форуме. Решений много. Но от себя хочу сказать, что предложенный вами подход имеет столько же недостатков, сколько и преимуществ. Не буду углубляться. Если мы используем как идеологию централизованное управление, то на мой взгляд и выключатели и ключи стоит подключать только к нему. Невозможно оптимально соединить в себе два взаимоисключающих подхода: централизованное и децентрализованное управление. Чаще всего из этого получается что-то глючное. Это я говорю с позиции своего опыта и своих взглядов. Никому не хочу их навязывать. Единственный случай, когда ключ может самостоятельно принимать решение - это авария сервера. Этот вариант подробно рассматривается в статье про AVR+Ethernet и в соответствующей ветке на форуме. Но это требует присутствия в схеме "умного элемента" (микроконтроллера). Преимущество же 1-wire заключается в простоте и дешевизне. Весь сложный функционал можно построить на обычном ПК, что доступен за 10 тыс. руб, чем выносить по 1% мощности сервера на десятки исполнительных элементов стоимостью в половину ПК и гораздо менее гибким функционалом.
2011-06-22 18:07:35 | Николай
На сколько я понимаю данное устройство подсоединяется минуя выключатель. Выключателем является ПК.
Таким образом поставив это устройство я не смогу включать и выключать свет с помощью выключателя.
Подскажите на сколько сложно добавить в схему вход от выключателя. Алгоритм работы следующий - выключатель либо соединяет провода - 1 либо нет 0. По управляющему кабелю передается сигнал 0 или 1. А в модуле стоит элемент &. Таким образом если я включил свет в комнате с помощью ПК то я могу выключить его с помощью выключателя. Для включения с помощью ПК необходимо послать уже инвертированный (для выключения света). Конечно еще перед выключением надо опрашивать элемент в каком состоянии он находится.
2011-05-30 23:44:42 | arsic
я тоже не нашел родного 9490. Взял как альтернативу китайца USB9097. Работает на тестовой сети.
2011-03-25 19:55:45 | gtsx4444
пора кооперироваться регионами и закупать, а то все ждут по отдельности)))
2011-03-25 09:50:02 | Сергей
спасибо, RedCat, я отказался в чип и дип и уже получил посылку от Rainbow El. всё стало дешевле на 500 руб!
2011-03-04 22:34:56 | skysilver
gdr, ты заказывал что-нибудь на hobby-boards?
2011-03-03 21:59:10 | stpavel
Несколько раз заказывал 1-wire элементы у Rainbow Electronics. Цены на элементы у них нормальные, DS9490R обходится где то в 900 руб.
2011-03-03 20:15:13 | gdr
чипдип 1300р.. у них не слипнется?
2011-03-03 16:19:51 | RedCat
Здесь не пробовали?
Rainbow Electronics
2011-03-03 09:27:23 | Сергей
Здравствуйте, пытался заказать DS9490R через чип и дип - они долго динамили меня, в результате срок поставки изменился сначала с 3 дней до 4-6 недель, потом вообще на вторую половину мая. не мог бы кто-нибудь порекомендовать аналог или альтернативу?
спасибо.
2011-01-18 23:08:14 | Andrey_B
Олег, действительно в даташите предложен хитроумный способ использования клавиатуры 4x4 с DS2408 напрямую. Но 16 в такой схеме - максимальное количество кнопок. А насчет опроса. Да, придется писать программу. Но не вижу в этом ничего сложного. Что касается языка, то это как удобнее. Если вы будете использовать owfs, то можно писать и на командном языке bash и на perl и на python и на php, не говоря уже о C. Причем можно использовать, собственно, файловую структуру owfs, а можно подключаться к owfs через stream или tcp. Вариантов масса.
Как я решил эту задачу можно прочитать в статье про водоочистку. Там как раз этот случай. Это относительно заготовок. Там все очень просто. Опрос в цикле папки alarm для выявления активного. А в вашем случае нужно дополнить код считыванием значений PIO и интерпретацией этих значений.
Надо только иметь ввиду, что DS2408 не запоминает в свойствах PIO нажатие кнопок. То есть кнопка может быть нажата в интервале между опросом. Тут надо ли уменьшать интервал опроса, либо учитывать/использовать свойства latch. Насколько я помню они остаются активными даже после того, как кнопка отжата, но после считывания их необходимо сбрасывать. Но если нажато несколько кнопок в интервале опроса, то и latch вам не поможет, потому что как бы коды кнопок смешаются. Я бы делал опрос по принципу Conditional Search 2-5 раз в секунду. И нажатие не пропустите и работе сети особенно мешать программа не будет.
2011-01-18 11:17:04 | Олег
Андрей, спасибо за довольно быстрый и хороший ответ.
Принцип опроса кнопок можно сказать я понял, но представлял немного по другому. Вот в даташите на эту микросхему есть схема подключения матрицы клавиатуры 4х4. Там предельно все просто, без каких-либо дополнительных кодеров. Опрашивать я думал раз 5 в сек. эту микросхему компьютером на состояние портов, хотя как это сделать пока не могу понять. Если бы нужно было 1раз в минуту то можно КРОНом, а так как я понимаю придется писать программу чтобы постоянно висела в памяти и опрашивала 5раз/сек? Как бы Вы организовали опрос? И на каком языке лучше и проще писать этот код? Может у Вас есть готовые заготовки?
Я понимаю что такой способ нерациональный (в том числе и в плане надежности), но его рассматриваю так как у меня дома есть сервер, на котором крутится раздача интернета + видеонаблюдение + трансляция спутникового ТВ в сеть (ресурсов на нем еще хватает чтобы что-то еще накрутить); + этот способ мне показался самым дешевый и в принципе тот функционал что мне нужен я думаю реально сделать. Если покупать еще один комп, так это дополнительные расходы, хоть и не большие + расход на электроэнергию (а у нас в Украине она вот вот в 2-а раза подорожает :(). Так что хочу сделать все это исходя с того что уже есть.
2011-01-17 21:53:13 | Andrey_B
Олег, начнем с того, что в DS2408 восемь PIO. Если использовать состояние ключей для кодирования информации, то таким образом можно закодировать 2^8 = 256 значений. Более, чем достаточно для 16 кнопок (даже с учетом Alt'ов). Другое дело, что в таким случае необходима какая-нибудь интегральная микросхема кодер (например, на базе МК), которая бы каждое нажатие кнопки представляло бы в 8 битах и замыкало соответствующие ноги DS2408.
1-wire - сеть, которая строится по системе мастер-слейв. Сама DS2408 не может инициировать процесс передачи данных мастеру. А значит состояние DS2408 необходимо проверять. Время реакции на кнопку зависит от частоты опроса. Эксперименты показывают, что опрашивать можно, скажем, 10 раз в секунду - этого вполне достаточно. Но и опрос должен строиться не на медленных запросах состояния PIO, а командой Read Conditional Search ROM. Это очень быстрая команда для поиска "активных" элементов в сети. Активность программируется заранее. Например для DS2408 можно прописать - если хотя бы один из 8 PIO сработал, значит элемент будет считаться активным. То есть мы сначала определяем факт нажатия кнопки, а уже затем, считывая состояние ключей, определяем какая кнопка нажата.
Только вот все это совершенно нерационально. Проще такие вещи делать на микрокомпьютерах, которые имеют и USB-порты для клавиатуры, и Wi-Fi и Ethernet и VGA, если нужен. Платы под управлением Linux продаются начиная с 1,5-2 тыс руб. Зато и пульт можно будет сделать куда более функциональным и мощным. Если сервер находится в прямой видимости, можно использовать совсем уж дешевые ИК пульты или 2,4ГГц беспроводные клавиатуры. А может быть есть еще какие-нибудь решения?
2011-01-17 14:13:15 | Олег
Здравствуйте,
Благодаря Вашему ресурсу решил сделать и себе умный дом :)
Но вот хочу сделать небольшое управление непосредственно с какого-то пульта управления.
Например, взять клавиатуру с матрицей 4х4, подключить ее к ds2408, и таким образом давать команды компьютеру, а он в свою очередь будет выполнять какие-то действия, например, голосом говорить какая температура, и т.д.
Но вот нигде не могу найти как организовать опрос этой клавиатуры. Если с 1х8 еще понятно (хотя не совсем понятно как сделать чтобы компьютер при нажатии клавиши моментально реагировал, т.э. чтобы не по крону опрашивать регистры), то с 16-ти клавишами, по типу матрицы 4х4, вообще не ясно как делать этот вопрос.
Может Вы имели опыт с такими задачами, или знаете где найти необходимую информацию, пожалуйста помогите. Если можете, сбросте контактный емайл мне на почту для дальнейшей связи.
Спасибо.
2010-11-21 23:46:21 | Andrey_B
ELSE, эта тема неоднократно обсуждалась в различных форумах. Краткое содержание: RS485 как стандарт физического уровня более устойчив к помехам и позволяет осуществлять более высокоскоростной обмен данными. Вместе с тем, поддержка RS485 более сложна в реализации, требует применения более сложных электронных компонентов, не оговаривает применение высокоуровневых протоколов. Упомянутый вами RS232 - стандарт обмена информацией между двумя терминалами. А нужна шина, на которой "висят" десятки и сотни устройств. Для RS485, который любители в основном реализуют на МК, либо делается свой протокол, либо используются готовые реализации: ModBus, Profibus, LanDrive и т.д. ИТОГО: Сложнее электроника, сложнее программирование, выше надежность, выше скорость.
Например, DS18B20 - это готовый элемент, который нужно просто соединить с шиной. Никакой обвязки, сетевой и транспортный уровень заложены в элемент. Все, что требуется от пользователя, скачать и запустить owfs. Справится даже школьник. С остальными элементами обвязка необходима только для реализации специфических функций модулей (опрос, коммутация, АЦП и т.д.) и эта обвязка минимальна. Поэтому 1-wire популярен. Но это, конечно, не единственная возможность автоматизировать дом. Есть масса других решений. И для RS485 есть некоторые открытые реализации протоколов.
2010-11-21 18:58:45 | ELSE
А рассматривался ли вариант с RS-485 интерфейсом? испытанное и распространенное решение. Крайне широко используется в пожароохранных сигнализациях и т.п. + в том что работа идет по RS-232 протоколу, который как раз у ПК и реализован. Конверторов и пр. оборудования для такой системы - ну просто предостаточно. Что касается программной части, а именно, управления - я не уверен что она есть под линукс/ - хотя я и не искал.