РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Теги статьи:

Охрана частной собственности, или 1-Wire против сил зла!.

Автор: Bullet
Опубликовано 13.09.2010

2010

Приведенное ниже устройство представляет собой небольшой охранный прибор, предназначенный для охраны квартиры или другого объекта недвижимости. Разработан и установлен он был около 3-х лет назад и до сих пор работает, без каких бы то ни было нареканий. Для начала немного предыстории. Началось все с того, что в очередной раз наступило лето, и большая часть города разъехалась в отпуска. Мне отпуск летом не грозил, зато родители уже поковали чемоданы. Во время очередного инструктажа, по поводу того, как мне стоит себя вести в их отсутствии, отец сказал, чтобы я закрывал все имеющиеся на дверях замки, т.к. он утром видел подозрительных личностей во дворе и подъезде нашего дома. Ну замки то замками, а профессионального домушника ни один замок не остановит, зато в квартиру с сигнализацией он и не сунется (если там конечно Рембрандт в подлиннике не висит, да и это уже немного другая специализация криминального мира). Сам я работаю в охране, и прекрасно осведомлен практически обо всех охранных системах и приборах, но лицензия нашей организации не позволяет брать на охрану квартиры. Да и покупать готовый приемо-контрольный прибор, пусть и самый дешевый, не очень то и хотелось. Кроме того, в тот момент я как раз осваивал микроконтроллеры, вот и решил, что сам соберу такой прибор, во-первых денег сэкономлю, а во-вторых опыта наберусь.
Т.к. вывод на пульт централизованного наблюдения не предполагался, ТЗ выглядело более чем скромно, а именно:
- контроль 1 шлейфа охранной сигнализации
- постановка и снятие с охраны ключом Touch Memory
- индикация режима "Охрана" (мигание выносного светодиода)
- подача звукового сигнала при нарушении охранного шлейфа (сирена).
Прикинув нефритовый стержень к носу, я быстренько набросал схему и принялся писать прошивку для контроллера.

Схема

Собственно схема простая до безобразия и в особых комментариях не нуждается. Контроллер был взят Atmega16, только по тому, что он у меня был под рукой. На самом деле для подобного рода устройств есть более простые контроллеры, но с другой стороны, есть простор для модернизации: ЖК-дисплей на схеме присутствует только для отладки, в реальном устройстве его установка даже не планировалась. Хотя, если у вас есть желание, можете подключить, на него будет выводиться номер прикладываемого ключа, а также сообщения о записи ключа, остальные функции вывода информации на дисплей из прошивки удалены. Контроллер работает от внутреннего тактового генератора настроенного на частоту 8МГц. Кнопки "IN", "PROG" и "ERISE" так же установлены для отладки, в реальном приборе вместо "PROG" и "ERISE" установлены перемычки (jumper), а вместо "IN" клемные колодки под отвертку, для подключения проводов охранного шлейфа. Такие же колодки установлены на плате для подключения питания, считывателя, сирены и выносного светодиода. Для тех кто не в курсе, выглядят они так:

Устройство работает в 4 режимах: режим "Охрана", "Снят с охраны", "Тревога" и режим "Программирование".
Во время режима охрана происходит контроль охраняемого шлейфа (шлейф нормально замкнутый), светодиод мигает с частотой 1Гц. В случае нарушения шлейфа происходит переход в режим "Тревога", реле переключается, подавая питание на выносную сирену. Изначально включение сирены было безвременным, т.е. при нарушении охранного шлейфа сирена бы орала пока прибор не сняли бы с охраны, но подумав немного, время работы сирены было ограничено 4 минутами (этого вполне достаточно чтобы спугнуть вора и разбудить соседей). В режиме "Снят с охраны" контроль шлейфа не производится, светодиод выключен, сирена не включается.
Для входа в режим программирования, необходимо установить перемычку "PROG", после чего, можно записать ключи в память прибора (до 8 штук). Для записи ключа, достаточно поднести его к считывателю. После чего, светодиод моргнет 4 раза, подтверждая правильность записи ключа. Если ключ уже был занесен в память прибора, повторная его запись не произойдет.
Для стирания ключей из памяти, необходимо в режиме программирования установить, а затем снять перемычку "ERISE", после чего можно запрограммировать новые ключи.
Устройство замечательно умещается в корпусе монтажной коробки вот такого вида:

Питание осуществляется от 12-вольтового (в моем случае бесперебойного) источника питания. Сирена взята от авто-сигнализации. Датчик на открытие дверей ИО-102-16(СМК).

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

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

Схема собирается на односторонней печатной плате размерами 90*90мм. Рисунок печатной платы ниже

Что касается используемых компонентов, то тут тоже все просто, транзисторы любые NPN типа (я использовал КТ315, правда под них нужно слегка раздвинуть установочные отверстия на плате), реле 5-вольтовое (ставил 12-вольтовое, работать отказывается, то ли транзистор не вытягивает, толи х.з.).
На этом о конструкции прибора наверное все. Дальше я вам расскажу о программной реализации, ибо устройство на МК без программы - бесполезный кусок железа (вообще то железа там как раз и нет, но суть не в этом).
Я не буду утомлять вас исходными кодами, ибо каждый пишет в той среде, которая ему нравится, по этому я расскажу вам об алгоритмах и нарисую блок-схемы (терпеть не могу этого делать, но ради такого случая можно и заморочится). Так же я не буду останавливаться на самом интерфейсе 1-Wire, т.к. о нем очень хорошо рассказано в статье Интерфейс 1-Wire(https://radiokot.ru/articles/13/) от товарища ARV. Всем, кто еще не знаком с этим интерфейсом, очень рекомендую прочитать. Кстати эта статья очень сильно помогла при разработке данного устройства.
И так, для удобства работы нам понадобится несколько функций и процедур.
Первая из них, функция чтения ключа ReadKey.

Вторая функция - функция сравнения ключа (свой-чужой) CompKey. В этой функции по мимо индексных переменных циклов, которые в некоторых средах программирования даже не нужно объявлять, нам потребуется локальная переменная s, которую мы будем использовать как счетчик, для подсчета совпавших байт из номера ключа и памяти устройства. Так же в этой функции применена конструкция цикл в цикле, т.к. для удобства, память хранения номеров ключей представлена в виде двумерного массива (таблицы) 8*8, где каждая строка - ключ. Т.к. адресация EPROM происходит по номеру ячейки памяти, то для определения нужного нам номера, применена следующая формула 8*i+j, где i - номер строки, а j - номер столбца. Чтобы это было проще понять, ниже приведена таблица адресов.

Далее у нас идет процедура записи номера ключа в память прибора. Тут в принципе все просто. Объясню только один момент, при определении свободного места в памяти, проверяется только первый байт из восьми, предназначенных для номера ключа. Сделано это по тому, что первый байт, будет равен коду семейства и иметь значение 0х01 в большинстве случаев, свободная же ячейка, всегда будет иметь значение 0хFF. Соответственно проверять оставшиеся семь байт нет смысла.

И последняя процедура - процедура обработки прерывания таймера. Собственно в данном устройстве она нужна только для равномерного мигания светодиода в режиме охраны и для отсчета времени работы сирены при тревоге. Т.к. Счетчик использован один, а считать нужно 2 интервала, то в качестве второго счетчика введена глобальная переменная alarm, которая инкрементируется при тревоге.

Так же в проект включена процедура подсчета контрольной суммы Do_CRC из упомянутой выше статьи. Кому интересно, тот прочтет, по этому описывать ее здесь я не буду.
Далее собственно основной цикл программы. Переменная arm служит для определения режима "Охрана" и "Снят с охраны".

На этом пожалуй и все. Скажу только, что это устройство можно модернизировать под конкретные нужды и задачи, например добавить GSM-модем и дописать соответствующие процедуры. Лично я разработал еще несколько устройств на его основе, но о них возможно в другой раз.

Файлы:
Файл проекта Proteus.
Пеачатная плата в формате Proteus.
Прошивка МК.

Вопросы, как обычно, складываем тут.