РадиоКот :: Автомобильный GSM-оповещатель с дополнительными функциями
Например TDA7294

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

Теги статьи: Добавить тег

Автомобильный GSM-оповещатель с дополнительными функциями

Автор: savage
Опубликовано 29.03.2017
Создано при помощи КотоРед.

Добрый день, вечер, утро и любое время суток!

Предлагаю вашему искушенному вниманию некое устройство, которое, как следует из названия, оповещает по сотовой связи владельца автомобиля о срабатывании сигнализации. Типа того GSM-пейджер. Казалось бы, что там можно выдумать? Подключил старый сотовый телефон через простейшую схему согласования и вот тебе пейджер. Но раз речь идет вашем любимом автомобиле, который стоит непонятно где, то обычно простой звонилки недостаточно. Хочется чтобы кроме тревожного звонка еще и приходила СМСка с разъяснением что же конкретно случилось. Опять же хочется чтобы приходила СМСка если подсел аккумулятор. Не помешает если будет возможность запросить баланс. Опять же хорошо если будет возможность с помощью СМС настраивать устройство (телефон владельца, пароль доступа). А еще, раз пошла такая пьянка, пусть устройство еще и центральный замок умеет открывать и закрывать (подумаешь две релюшки). А где две релюшки, там и четыре. Мало ли, например включить автономный отопитель. Можно конечно и автозапуск двигателя сделать, но мне было не нужно, а кроме того не хотелось городить аналог древней телефонной станции с кучей реле. Нужно же как-то отключать или обмануть основную сигнализацию в этот момент. Например отключив от нее провод зажигания и провода к датчику удара. Это однозначно лишние реле и провода. Уж проще сделать целиком свою сигнализацию.
Ниже описано то, что у меня получилось после выполнения моих хотелок. Собственно многие читатели уже прокрутили страничку чтобы посмотреть фотки и схему. Возможно сделали для себя какие-то выводы по конструкции. Итак по порядку. Это не Ардуино, не смотря на то что используется плата Arduino mini pro. Программа написана на CodeVisionAVR. Платка Ардуино взята из за того, что у меня под рукой не было ничего подходящего с такими объемами памяти и габаритами. У ATmega8 мало памяти, ATmega32 была только в дип корпусе. 16й меги не было под рукой вообще. С другой стороны целый килобайт ОЗУ расхолаживает. Вместо того чтобы сразу в прерывании парсить сообщения модема, я как белый человек, сначала загружаю их в FIFO- буфер (размером аж на две СМС), потом разбираю их на строки, а уже потом расшифровываю. Короче шиканул. Конструктивно устройство собрано на односторонней плате. В архивах в конце статьи есть исходник платы на EAGLE и картинка в PNG формате (600dpi) для лазерного утюга. Картинка слегка подретуширована. Увеличены площадки и т.п. Мне обычно так удобнее. На плате имеется множество перемычек. Увы.

В качестве модема используется m590 без буковки «Е». Их сейчас БУшных китайцы продают в огромных количествах и недорого. Кстати m590e мне не нравятся, они планарные и продаются в жутком состоянии. Их грубо выпаивают и перегревают всё и вся. У m590 формфактор в виде платки со штырьками и при выпайке ему не так достается. В качестве стабилизаторов используются 7805 и LM317T (4,2 В для m590). Схема согласования уровней для m590 практически без изменений взята из даташита и кочует с одного сайта на другой. Я например пользовался материалами этой странички: https://radiolaba.ru/microcotrollers/gsm-modul-neoway-m590-opisanie-i-komandyi-upravleniya.html
Собственно во включении модема есть только одно кардинальное отличие. Это управление питанием. У меня модем обесточивается полностью с помощью ключей Q1 и Q9 (варинт Q9* в зависимости что окажется под рукой, транзистора на 1А достаточно). Сделано это для того, чтобы, во-первых, в случае зависания контроллера и последующего его сброса по WDR можно было сразу начинать процедуру его инициализации, а не судорожно пытаться определить состояние модема. А во-вторых, для того чтобы после включения питания модем был выключен до тех пор пока гарантированно питание не стабилизируется. Не забываем, что устройство работает в автомобиле, а там в бортовой сети бывает всякое.
Ничего дефицитного в модуле нет. Все детали можно найти в закромах наверное любого радиоломателя. В крайнем случае можно заменить подходящим и оно будет работать. Полевые транзисторы заменить биполярными, диоды побольше на диоды поменьше и т.п.

В процессе я выявил два недостатка конструкции. Все же нужно было слот СИМ-карты сделать на другой стороне платы, чтобы при смене СИМки не нужно было плату доставать из корпуса. А еще нужно было ключи реле подключить к другим выводам контроллера. Сейчас задействованы MOSI, MISO, SCK. Пока реле не припаяны это не имеет значения. Но если распаять реле и попытаться прошить контроллер чем-то медленным, например AVR910, то реле начинают отбивать неслабую чечетку. На прошивку это не влияет, но звучит страшно. И да, не помешает устройство снабдить LC фильтром по питанию. Я забыл его предусмотреть, а для автомобиля он очень желателен.


В машине модуль у меня подключен согласно данной схемы. Питание непосредственно от батареи автомобиля. Сигналы зажигание (IGN), сирена (ALARM), концевики дверей (DOOR) взяты с проводов идущих к сигнализации. Вход к концевикам двери рассчитан на то, что при открывании он будет замыкаться на массу. Если у вас в машине концевики какие-то другие, замыкаются на плюс, то вам придется либо делать инвертор, либо переделывать прошивку, а на плате переделывать по образу и подобию входа IGN. Провода к центральному замку подключены в разрыв провода от концевика замка в водительской двери. У меня однопроводная система (УАЗ Патриот). Вы можете реле устройства скоммутировать как-то иначе, помня о том, что одно реле срабатывает по приходу СМС с командой OPEN, другое реле по команде CLOSE. Еще на плате имеются два полевых транзистора которые предназначены для управления внешними реле. Их можно заменить на подходящие NPN, изменив номиналы резисторов в цепи базы. В моем случае IRLL014 могут коммутировать до 2А. Можно нагрузить весьма мощными реле. Соответственно это третий и четвертый выход. По умолчанию они управляются командами HEAT и CAM. Что касается подключения к сирене сигнализации, то устройство рассчитано на срабатывание при положительном уровне на этом входе. Условие срабатывания, положительный уровень должен держааться более 5 секунд. Вообще у некоторых сигнализаций есть специальный выход на пейджер. Можно было подключить модуль к этому выходу и убрать задержку, но это уже другая история.
Теперь о программе и алгоритме работы. Программа была написана на CodeVisionAVR. Можно наверное было и на Ардуино, но я просто на нем никогда не писал программ. Изучать специфику и компилятор не хотелось. И вообще, я программированием занимаюсь не часто и не на СИ, поэтому прошу не судить строго. В конце приложен архив с исходником программы и откомпилированные бинарники для ATmega328 и ATmega168 для частот 8 и 16 МГц. Картинки с фюзами см. ниже. Заранее предупреждаю, что программу для ATmega168 я не проверял. В принципе работать должна, но там меньше буфера для СМС. С самого начала я выбрал буфер ФИФО из расчета на 2 СМС (на случай спама) и буфер чтения чуть больше одной СМС. Это должно было облегчить обработку текста. А вот у 168й пришлось все это подсократить больше чем вдвое. Защита от переполнения присутствует, все вроде должно работать, но в памяти еще есть стек. И этот момент в отсутствии подопытной меги я проверить не мог.

Фюзы для внешнего кварца на 8 и 16Мгц

Фюзы для использования внутреннего генератора 8МГц



На картинках фюзы показаны для случая с внешним кварцем на 16 и 8МГц, а так же с внутренним тактированием на 8МГц. Внутренне тактирование использовать не советую, все-же в машине температура может меняться очень в широких пределах а с ней и частота внутреннего генератора.
Модуль m590 перед установкой нужно настроить на скорость 9600 бод. Как это сделать есть например в упомянутой мной выше статье. Например его можно подключить так:


Перед установкой СИМ-карты ее нужно в любом сотовом телефоне разблокировать и снять ПИН-код. Других действий с ней проделывать не нужно.
Со сборкой, прошивкой и подключением я думаю все понятно. Теперь собственно о работе и настройке. Вообще можно сразу все зашить в EEPROM и не заморачиваться ни с какими СМСками. Самый что ни на есть наш метод. Шутка. Об этом я распишу чуть позже. А пока будем как истинные юзеры изучать команды модуля оповещения.
Устройство принимает СМС с любых номеров, поэтому многие действия с ним вы можете проделывать с любого телефона, а вот оно само будет звонить и писать СМС только на номер из своей EEPROM.
Собственно команда модуля представляет собой СМС следующего вида: *pasw#COMMAND:PARAM
СМС начинается со звездочки «*», не найдя звездочку в начале СМС модуль ее просто игнорирует. Символы pasw соответствующий пароль. Пароль из четырех символов (латинские буквы или цифры). В системе имеется два пароля. Один зашит в первых ячейках EEPROM (с 0x00 по 0x04 включая концевой ноль) и его можно поменять только программатором. По умолчанию это WE32. Это можно назвать мастерпаролем. Второй пароль можно настроить с помощью соответствующей СМС. По умолчанию пароль 1234 (В EEPROM с 0x05 по 0x09 включая концевой ноль). Оба пароля для системы равноценны. СМС команда для смены второго пароля (пароля пользователя): *pasw#SETPASS:pass
Понятное дело, что pasw это старый пароль, pass это новый пароль. Система различает регистр пароля, но задать вы можете только пароль в верхнем регистре (заглавными буквами). Будьте внимательны. Даже если вы пытаетесь задать пароль типа qwer маленькими буквами, в памяти он станет уже QWER, то есть заглавными. И команды будут работать уже с таким паролем. Маленькие буквы можно задать только через программатор (ну вот такое неудобство).
Установить номер телефона для оповещения можно такой командой: *pasw#SETPHONE:+7999999999
По умолчанию в EEPROM зашит несуществующий номер +70000000000 (В EEPROM с 0x0A по 0x16 включая концевой ноль). Заданный вами номер будет использован для звонка в случае срабатывания сигнализации и последующей отправки СМС.
После смены пароля или номера телефона устройство присылает СМС «COMMAND OK».
Стоит сказать про алгоритм дозвона. Устройство будет набирать номер после задержки 5 сек с начала появления сигнала на входе ALARM. Это для того чтобы исключить ложные срабатывания при коротких писках сирены при постановке и снятии охраны. В случае срабатывания сигнализации набирается номер из памяти. Программа ждет либо поднятия трубки, либо отбоя. И то и другое воспринимается как реакция хозяина. При неудачной попытке дозвона устройство делает еще две попытки дозвониться. Но это в теории. На практике у многих операторов, например у Мегафон, в случае недозвона или занятости линии включается автоответчик. Модем вместо BUSY и NO ANSWER получает ответ CONNECT и программа считает, что все в порядке, хозяин звонок принял. Что с этим делать - я не знаю.
После дозвона или недозвона происходит отправка СМСки. СМС будут имеет вид «ALARM: DOOR OPEN!» или «ALARM: IGNITION ON!»или «ALARM: SHOCK!» в зависимости от причины срабатывания. Понятно, что если зажигание не включено и дверь не открыта, то сработал датчик удара («SHOCK»). Если в течении последующих 3х минут происходит повторное срабатывание сигнализации по датчику удара то СМСка уже не отправляется. Только попытка дозвона.
Входящие звонки устройство не принимает. Сразу дает отбой. Пытаться на него дозвониться бесполезно.
Теперь о всяких допфункциях. В случае разряда аккумулятора до 10% (11.7В), устройство отправляет СМС со статусом входов и напряжением бортовой сети: "STATUS: NO ALLARM, IGNITION OFF, DOOR CLOSE, VOLTAGE:11.2V". Эта СМС отправляется только 1 раз в сутки и только после того как напряжение ниже порога в течении 20 минут.
Так же узнать статус можно отправив СМС: *pasw#STATUS
Для того чтобы узнать текущий баланс на номере нужно отправить СМС: *pasw#BILLING или *pasw#BALANS
В ответ придет СМС «BILLING:123.45?. ??????????????». Вместо кириллического текста рекламы, обычно рассылаемой провайдером вместе с биллингом, множество знаков вопроса. Увы, m590 русский язык не понимает и транслирует нам что может понять. Для того чтобы устройство запрашивало биллинг у провайдера, нужно чтобы в EEPROM была зашита правильная команда. Сейчас там записано *100#. Вы можете задать другое значение с помощью программатора. Для команды отведено 8 символов (девять если с концевым нулем). Адрес ячеек в EEPROM с 0x17 по 0x1F. Что-то я так и не написал соответствующий программный код для настройки параметра через СМС. Хотя это не сложно. Можно приспособить часть кода от процедуры настройки пароля.
Для управления реле используются команды следующего вида: *pasw#RELEY, *pasw#RELEY:123 или *pasw#RELEY:12M. Где RELEY название соответствующего выхода. По умолчанию OPEN, CLOSE, HEAT и CAM. Эти названия прописаны в EEPROM в том порядке что я перечислил. Их можно заменить на свои подходящие с помощью программатора. Главное чтобы их длина не превышала 7 символов включая концевой ноль. OPEN и CLOSE я предполагал для управления центральным замком, HEAT для включения автономки, CAM для включения видеорегистратора. После двоеточия указывается время включения соответствующего реле в секундах (до 999) или минутах (до 99М). Если не указано, то по умолчанию из EEPROM. У меня настроена 1 секунда для OPEN и CLOSE , и 240 (4 минуты) для HEAT и CAM. Можно задать в EEPROM от 1 до 255 секунд
Написание команд для управления конкретным реле и время срабатывания по умолчанию записано в EEPROM по следующим адресам. Название команды не более 6 символов плюс концевой ноль. Для реле K1 ячейки 0x20-0x26. Там сейчас записано «OPEN». Время срабатывания в ячейке 0x27. Там сейчас записано значение 0x01. Для реле K2 ячейки 0x28-0x2E. Там сейчас записано «CLOSE». Время срабатывания в ячейке 0x2F. Там сейчас записано значение 0x01. Для транзистора Q7 ячейки 0x30-0x36. Там сейчас записано «HEAT». Время срабатывания в ячейке 0x27. Там сейчас записано значение 0xF0. Для транзистора Q8 ячейки 0x38-0x3E. Там сейчас записано «CAM». Время срабатывания в ячейке 0x3F. Там сейчас записано значение 0xF0.


Ах да. Еще одну команду забыл. *pasw#HELP. Правда особого смысла в ней нет, поскольку без пароля она не работает.

Ну и, собственно, то, что получилось в итоге.

 П.С. Про светодиоды я забыл. LED1 - индикация состояния модема. Можно не паять. Мигает с частотой 1 Гц только когда модем включен. После переключения в состояние сна он гаснет. Далее когда модем из состояния сна принимает СМС или отправляет их этот светодиод все равно не горит. LED2 - индикация состояния устройства. Горит когда устройство находится в активном состоянии, т.е. при приеме и передаче СМС и при активации любым способом (срабатываение сигнализации, прием звонка, прием смс).  Мигает во время поиска сети с частотой 1Гц. В случае проблем с модемом или СИМ-картой мигает с частотой примерно 5 Гц.


Файлы:
Исходник платы
прошивки
Исходники
описание команд модема


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

28 2 4
1 0 0