Микроконтроллеры в домашних условиях
 

GSM сигнализация с DTMF управлением.

Общее описание

Схема устройства

Телефонный интерфейс

Прошивка

Фото

Общее описание

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

Изначально GSM сигнализация с DTMF управлением разрабатывалась для применения в условиях автомобильного гаража, удаленного от места проживания (квартиры). Исходя из этого, описание будет вестись с привязкой к вышеуказанным условиям.

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

Наверх

Схема устройства

Схема GSM сигнализации

Рис. 1. Схема устройства

Схема собрана на базе контроллера PIC16F628A. Микросхема MT8870 является детектором DTMF сигналов. Сотовый телефон (на схеме не показан) подойдет любой дешевый. Достаточно, чтобы он обладал следующими функциями:

Соединение сотового телефона с платой устройства можно выполнить, например, при помощи шлейфа от принтера (я делал именно так). На телефоне нужно аккуратно припаять провода параллельно кнопкам 4, 6 и "сброс", а также параллельно динамику и микрофону, желательно, чтобы родные динамик и микрофон остались включенными параллельно (чтобы осталась возможность использования телефона по прямому назначению). Моторчик вибровызова можно отключить, чтобы не перегружать выход. Провода с контактов батарейки нужно взять чуть потолще - питание все-таки.

Контакт 1-2 реле включается в разрыв плюсового провода от зарядного устройства, которое, кстати, подключено постоянно. Посредством постоянного подключения зарядного мы осуществляем контроль наличия сетевого питания, чтобы в случае пропадания сети произвести дозвон хозяину (поочередно на два любимых номера). Контакт реле в данной цепи необходим для кратковременного отключения зарядного (осуществляется периодически с интервалом в несколько часов), чтобы сбросить контроллер заряда батареи сотового и заставить его опять заряжать батарею.

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

Однако, питание контроллера осуществляется от батареи сотового телефона, поэтому охранные функции и дозвон остается в силе с той лишь разницей, что дозвон будет произведен однократно на оба номера (без периодического повтора). Это сделано для того, чтобы не докучать периодическими вызовами, так как снять с охраны посредством DTMF возможности нет.

Сигнальная "земля" подается через "сухие" нормально замкнутые контакты на входы 1 и 2 платы. Опрос состояния входов 1 и 2 происходит только в режиме охраны.

Кнопка SB1 служит для включения - выключения режима охраны и устанавливается у выхода из гаража, чтобы успеть покинуть помещение и закрыть двери за время порядка 10 секунд.

Светодиод HL1 служит для индикации режима работы устройства. При отключенной охране погашен. После нажатия кнопки SB1 мигающим светом в течение порядка 10 секунд информирует о необходимости приведения датчиков (дверей, движения) в исходное состояние. По истечении выдержки времени светодиод ровным светом сигнализирует о том, что режим охраны включен. Нажатием кнопки SB1 при мигающей или ровной индикации режим охраны выключается без выдержки времени. Следует отметить, что постановка на охрану путем DTMF команды осуществляется без выдержки времени.

Гальваническая развязка схемы устройства и телефона, кроме микрофона и динамика, выполнена с помощью оптопар PC817.

Сигнал на вход микросхемы детектора MT8870 подается с динамика сотового телефона. Здесь второй провод подключается к "земле", причем, не имеет значения, какой именно из двух, идущих от динамика - ток то переменный. С выхода детектора сигнал в виде параллельного кода подается на контроллер для расшифровки. Светодиод HL2 загорается кратковременно после декодирования очередной посылки DTMF и необходим скорее во время отладки, либо ремонта устройства.

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

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

Контроль наличия напряжения от зарядного и управление реле отключения заряда, также, выполнено с оптической развязкой.

Монтажную плату устройства в формате Sprint-Layout 5.0 можно скачать здесь.

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

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

Наверх

Телефонный интерфейс

При соединении с устройством независимо от того, входящее, либо исходящее соединение, происходит информирование о состоянии устройства в виде тональных посылок определенной частоты, длительности импульсов и интервалов. В это время (если не выключено сетевое напряжение в гараже) система реагирует на нажатие на клавиатуре телефона удаленного абонента. Блок-схема с описанием информационных сигналов и последовательности нажатия клавиш для отправки DTMF приведена на рис. 2.

Блок-схема алгоритма телефонный интерфейс

Рис. 2. Блок-схема алгоритма телефонного интерфейса

На блок-схеме показаны сигналы управления (DTMF) и информации о состоянии устройства, а также приведена логика работы интерфейса в режимах до и после авторизации, в случае блокировки и разблокировки авторизации.

Особо следует отметить, что в режиме соединения в случае длительноого отсутствия (около 24 секунд) сигналов DTMF происходит сброс авторизации. Эта же выдержка используется и при разрыве соединения, так как система не отслеживает дополнительно наличие или отсутствие соединения (а только входящие посылки DTMF).

Буквы возле обозначения тональных посылок на схеме (A, B, C и т. д.) используются для удобства идентификации типа посылки при составлении кода прошивки.

Наверх

Прошивка

Файлы проекта в среде MPLab IDE можно скачать здесь.

Исходный код с описанием алгоритмов работы приведен ниже.

Микроконтроллер PIC16F628A использует внутренний осциллятор 4 МГц. Сторожевой таймер включен на максимальный предделитель. Для определения наличия входящей DTMF посылки используется прерывание по входу INT (RB0). Работа тональных посылок организована на прерываниях от таймера 2.

Основной цикл программы построен на таймере 1 с периодом около 0,1 секунды (Подпрограмма TIME_UP).

Здесь происходит поочередный вызов следующих подпрограмм: проверки состояния датчиков - CHECK_INPUTS, проверки наличия питания - CHECK_POWER, проверки нажатия кнопки - BUTTON_CHECK, индикации состояния модуля - INDICATE, передачи сигнала тревоги - TRANS_ALARM, выбора тонального сигнала - CASE_TONE_SIG, проверки активности DTMF - DTMF_ACTIVITY, прерывания заряда батареи - CHARGE_INT, сохранения в энергонезависимую память - SAVE_TO_EEPROM.

Подпрограмма CHECK_INPUTS если модуль не на охране, производит сброс флагов тревоги. В случае, когда модуль в режыме охраны происходит поочередная проверка входов PORTA, 4 и PORTA, 3. Если на одном из входов (или на обоих) обнаружена единица (обры в цепи датчика), устанавливаются флаги соответствующей тревоги и флаги сохранения в EEPROM.

Подпрограмма CHECK_POWER проверяет состояние входа PORTB, 4 и устанавливает либо снимает флаг отсутствия питания.

Подпрограмма BUTTON_CHECK определяет реакцию устройства на нажатие кнопки. Счетчики ON_BUT_COUNT и OFF_BUT_COUNT служат для защиты от дребезга контактов. Процедуры постановки на охрану и снятия с охраны выведены в отдельные подпрограммы соответственно SET_GUARD_ON и SET_GUARD_OFF, так как они используются также и во время обработки DTMF сигналов. Алгоритм работы подпрограммы приведен на рис. 3.

Блок-схема алгоритма обработка нажатия кнопки

Рис. 3

Подпрограмма INDICATE определяет режим работы светодиода индикации HL1: погашен при отключенной охране, горит ровным светом при включенной охране, редко мигает при выдержке времени после нажатия кнопки перед постановкой на охрану, часто мигает при срабатывании датчика в режиме охраны.

Подпрограмма TRANS_ALARM определяет режимы нажатия кнопок телефона (длительности нажатия и пауз между нажатием) при наличии тревоги, либо отсутствии питания, либо при обоих указанных событиях. Здесь при наличии питания и наличии тревоги производится периодический с интервалом 1 минута поочередный набор номеров зашитых в клавиши 4 и 6. В случае пропадания питания производится однократный набор номера в клавише 4, затем в клавише 6. При появлении тревоги в отсутствие питания, также, производится однократный набор номера в клавише 4, затем в клавише 6. Алгоритм работы подпрограммы приведен на рис. 4.

Блок-схема алгоритма передача тревоги

Рис. 4

Подпрограмма CASE_TONE_SIG осуществляет выбор тонального сигнала для передачи на микрофон сотового в зависимости от флагов состояния устройства. Следует отметить, что передача сигнала микроконтроллером осуществляется постоянно (для этого используется прерывание таймера 2), однако, микрофон сотового включается только во время соединения. Управление частотой тонального сигнала осуществляется посредством настройки предделителя и выходного делителя таймера 2 для каждого импульса в текущем состоянии устройства. Наличие интервала либо импульса определяется битом FLAG_TONE, 0. Длительность каждого импульса и интервала определяется счетчиком SOUND_COUNT, единица которого равна периоду основного цикла программы (около 0,1 секунды). Выбор одной из трех частот осуществляется посредством флагов SOUND_FLAGS (1, 2 и з биты). Наименование сигнала (A, B, C и т. д.) и логика работы подпрограммы соответствует алгоритму, приведенному на рис. 2.

Подпрограмма DTMF_ACTIVITY осуществляет декремент счетчика DTMF_COUNT в кажном программном цикле (период 0,1 секунды) и при достижении нуля осуществляет сброс флагов активности DTMF (авторизации). При каждом приеме новой посылки DTMF в счетчик заносится 240 (осуществляется в прерывании по входу INT). Таким образом, сброс активности DTMF происходит через 24 секунды после приема последней посылки.

Подпрограмма CHARGE_INT производит отсчет часов, секунд и минут в соответствующих счетчиках и при достижении 24 часов происходит включение реле отключения заряда батареи сотового посредством PORTB, 6. По истечении 25 секунд (счетчик CLOCK_COUNT) реле отключается и сбрасываются счетчики времени. Счетчик часов при каждом изменении сохраняется в энергонезависимую память.

Подпрограмма SAVE_TO_EEPROM производит проверку флагов сохранения в регистре SAVE_FLAGS и при обнаружении установленного флага (или флагов) сохраняет соответствующий регистр по своему адресу. Процедуры чтения и сохранения в память EEPROM выделены в отдельные подпрограммы - READ_EEPROM м SAVE_EEPROM соответственно.

Прерывание по входу INT наступает при каждом появлении новой посылки DTMF. При этом происходит считывание кода посылки в регистр DTMF_CODE и дальнейшая обработка его в зависимости от текущего состояния устройства (режим авторизации, режим блокировки DTMF, режим управления нагрузкой и т. д.).

Следует особо остановиться на авторизации. Четырехзначный код хранится в EEPROM по адресам 04h-07h. По умолчанию установлен код 0A, 0A, 0A, 0A (нажатия кнопки 0 на удаченном телефоне), однако существует возможность изменить его сколько угодно раз. Для этого необходимо в режиме авторизации после * ввести четыре цифры нового кода. После этого в режиме сигнала BL (схема на рис. 2) нажать и удерживать кнопку SB1 (постановка - снятие с охраны), и после этого нажать # и отпустить кнопку SB1. Затем при следующей авторизации вводить уже новый код по обычной схеме.

При трех неверных попытках ввода кода происходит блокировка авторизации. Флаги этого состояния сохраняются в EPROM. Снятие блокировки осуществляется при отключении режима охраны кнопкой в гараже (SB1). Также существует возможность снятия блокировки дистанционно. Для этого используется восьмизначный код, при введении которого по обычной схеме (* до и # после) сбрасывает блокировку. Цифры кода разблокировки хранятся в EEPROM по адресам 10h-17h и заносятся туда при прошивке микросхемы, изменить их при дальнейшей работе нельзя. В данном проекте используются цифры 02, 03, 0A, 02, 02, 0A, 01, 02 (не забываем, что код 0A получается при нажатии кнопки с цифрой 0), при прошивке, соответственно, можно установить любые другие. Количество попыток ввода кода разблокировки не ограничено.

 

прошивка 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

 

Наверх

Фото

Фото 1

Устройство выполнено в корпусе от автомобильной аптечки. На резисторах МЛТ-2 - обогрев телефона в зимнее время. Тестировалось при температуре до -20 градусов Цельсия.

Сверху (в районе ручки) выведены провода внешних цепей: кнопки постановки на охрану, светодиода контроля режима, входных цепей (смотаны в скрутки).

Фото 2

Фото 3

Сбоку выведены выключатель обогрева и светодиод контроля включенного состояния.

Наверх

Наверх