Цель: идея получать и обрабатывать температуру во всех комнатах квартиры и на улице, автоматизировать процесс наблюдения за изменением температуры и информирование, если температура вышла за заданные границы.
Реализация:
На тот момент был собран и работал сервер на базе старинного Pentium 3,1,2мгц,756мб, 10гб hdd под управлением Windows XP и вся программная реализация планировалась на нем. Так как в кажду комнату квартиры была подведено как минимум по одной телефонной розетке, то неиспользуемые две жилы в них можно было использовать для работы с датчиком температуры. Из-за того, что провода всегодва, была выбрана технология 1-Wire от Dallas Semiconductor.
Закуплено 8 датчиков DS18B20, рассыпуха для изготовления простейшего Master’а для 1-wire, скачено с ELIN.RU библиотеки iButton-TMEX v3.20 из которой используется, по сути, только ibfs32.dll но сама библиотека установлена на сервере.
1. Собираем мастера для работы со всеми датчиками DS18B20 по следующей схеме:
Получается примерно вот это:
Только вместо разъема от наушников я припаял обычный двухжильный кабель, длинной 0.5м, на конце у него был разъем как внутри материнской платы для подключения кнопок ресета и динамика, вот моя конструкция:
Потом для каждой из комнат были изготовлены крепления для датчиков DS18B20, для этого берется вилка телефонная TP6P6C (RJ12), вставляется в нее датчик DS18B20 и обжимается. Получается следующая конструкция (еще не обжата):
Если телефонную розетку закрывает шкаф или другая мебель, то датчик DS18B20 выносится на жесткий проводах на нужное расстояние, т.е. в RJ12 обжимается одножильный кабель, а на конце припаивается сам датчик. Такая конструкция позволяет подогнуть провод по месту и разместить датчик оптимально, для дачи верных показаний.
На улицу датчик был выведен с помощью гибкого двухжильного кабеля, сам DS18B20 был густо обмазан просроченной термопастой КПТ-8, помещен в прозрачный колпачок из под шариковой ручки, и залит автомобильным герметиком. Так как для получения адекватных показаний, датчик температуры нужно выносить на 0.5м от стен дома, то из алюминиевой проволоки от вешалки из химчистки, был выгнут Г-образный крючок, на одном его конце был закреплен, в колпачке, сам датчик температуры, а второй конец был подсунут под жестяной откос.
Теперь о самом главном, об конструкции сети 1-wire. Так как датчиком было 8 шт и длинна от сервера до некоторых достигала 30м и шина датчиков была проложена рядом с проводкой 200в и вообще в одной бухте с телефонной линией, то очень важно бы обеспечить хорошую помехоустойчивость. Для этого была выбрана топология Звезды, когда от сервера до распределительного шкафа был проложена шина из качественного кабеля UTP 5+, причем по оставшимся 6 жилам не было подано больше ни какого сигнала или напряжения (так рекомендуют на сайте elin.ru). Дальше в распределительном шкафе была изготовлена, из двух старый хабов Ethernet, гребенка из 12 гнезд RJ45 к которой была подпаяна сама шина от сервера (задействовано всего 2 жилы из 8) и входящая в квартиру телефона линия. А уже одиночные розетки в комнатах, были подключены с помощью обычных RJ12 в это гребенку, через разведенные провода по всей квартире. Получилось эстетично, практично и надежно, да и поставить в распределительный шкаф еще один датчик не составило проблем.
На этом железячная часть была закончена.
Требование предъявляемое к программной части:
1. Знание языка программирование, т.е. написать программу я должен самостоятельно.
2. Возможность отображения параметров всех найденных датчиков DS18B20
3. Возможность информирование пользователя по email/sms/визульно о выходе значения температуры датчиков за заданные пределы.
4. Платформа WinXP
Соответственно был выбран язык программирования Visual Basic 6.0, интерфейс с датчиками и мастером использовался iButton-TMEX.
Саму программу, с исходником, можно скачать вот тут http://www.rn3aig.ru/phpBB3/files/iButton.rar если Вы ее планируете использовать для зарабатывания денег, то придется делится с автором, в остальном "AS IS" =)
Кратко о программе:
Запускается автоматически с ранее сохраненными настройками если передать при запуске любой параметр в командной строке, например, запустить вот так
Project1.exe 1234
Настройка порогов информирование проводится в отдельном окне, при двойном клике на «Грид с данными датчиков». Данные с датчиков пишутся в лог файл при каждом измерении температуры. Файл текстовый с именем «день-месяц-год.txt»
А теперь о грустном: вся эта система проработало порядка 3 лет, программа развивалась, железо и так было доведено до практически идеала. Сбоев не было, даже при сильнейшей «зашумленности», работе радиостанции, телефонном звонке и других помехах, температура с датчиков считывалась всегда. На сегодняшний момент сервер был залит водой, так как прорвало трубу с холодно водой в стояке и система больше не используется и не развивается.
На вопросы по данной статье, автор с удовольствием ответит по email.