Товары из Китая

Бюджетная + Энергоэффективная GSM сигнализация на Arduino


Бюджетная + Энергоэффективная GSM сигнализация на Arduino

Вдохновление питал из этих двух известных статей на этом сайте: mysku.club/blog/ebay/51321.html, mysku.club/blog/ebay/44545.html

Изначально хотел свою маленькую энерго эффективную (от любого телефонного акума или 18650) но с более грамотным кодом сигналку, хотя ардуино я знал на уровне базовых уроков :).

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

Замечу, Arduino Pro Mini RobotDyn реально меньше кушает, так что если вам нужен автономный вариант, не пренебрегайте этим советом. Но главное это грамотный уход в сон. Стандартный sleep_cpu() (в большинстве реализаций только он используется) на самом деле не полностью тушит «свет». Играясь разными ADCSRA = 0; и т.п. можно снизить потребление тока во сне на уровне погрешности дешового мультиметра. После долго изучения, проб и ошибок, была написанна рабочая версия сигналки от 18650 но с приходом апетита хотелось чтоб это всётаки было больше похоже на законченное решение а не инженерный образец плюс добавить функциональсноти как у kvolk. Вот и появилась, спустя много времени, эта статья с первой публичной версией (которая только на момент написания статьи еще раз 5 обновлялась 🙂 ). Хоть всё работает просто, но описать все эти нюансы оказалось непростой задачей, возможно даже чтото упустил, забыл, не протестировал. Буду рад всем найденым багам. Хотя их вроде не осталось 🙂

Важно

На комплектующих, сборке, настройке модема и других базовых моментах останавливаться не буду, это описанно и в статьях выше и на радиолаб и много где еще. Скажу лишь модем надо предварительно настроить на скорость 9600 остальные настройки модема желательны по умолчанию и архи важно иметь хорошее питание выдающее честные 2 Ампера и надежное подсоединение ко всем пинам. Пароль с сим карты убрать. Все команды управления сигнализацией только латиницей и только большими. Первая команда которую вы отправляете на модем должна быть RESETC. После этого необходимо произвести первоночальную настройку сигнализации (добавить номер, режимы и тд) и все не используемые пины заземлить. Теоретически скорость соединения с модемом можно поднять до 57600 (но зачем?). А вот выше уже и железо может глючить и прошивка. Если в будущем размер прошивки превысит 16Кб его можно уменьшить обратно с небольшим урезанием фунционала.

Возможные проблемы
Ресеты когда ищет сеть, звонит, смс — проблема питания или контактов

Ресеты когда ищет сеть, звонит, смс — убедитесь что у вас есть деньги и для звонков и для смс

Выключается когда ищет сеть, звонит, смс — проблема питания или контактов

Ресетится или перестаёт отвечать (зависает) при первом запуске или настройке — обнулите весь еепром. все ячейки должны быть или 00 или FF

Ресетится циклически — уберите пароль на симке

Ресетится циклически — убедитесь что у вас GSM симка а не CDMA например

Ресетится циклически — убедитесь что у вас активная GSM симка

В кратце как работает (более подробно ниже): Может работать как с уходом в сон так и всегда включенна. Если в Багдаде всё спокойно, включается режим сигнализации и ардуинка выключает модем и уходит сама в сон. В режиме сна её может пробудиь только тревога. GSM естественно не работает для экномии батареи. Когда тревога — ардуино просыпается, включает модем, отправялет смс о тревоге, некоторое время бодрствует — для приема смс-команд, и опять уходит в сон. Программа на строенна так что если сбой сети и/или прошивки то ардуино рестартует самостоятельно, и если все режимы настроенны правильно, то она сама опять благополучно уйдёт в сон/охрану. А судя по моим тестам глюки gsm сети и наводки на пины бывают. Чаще это проявляется в моменты общения ардуино с модемом (то ответ не приходит, то ресетится). А что вы хотели от бу модема 🙁

Касательно баланса — пока что, прошивка работает только в режиме английских букв и USSD запроса баланса. Т.е. чтобы работал баланс, ответ должен приходить латиницей через USSD а не смс-кой или звонком. Если у вашего оператора нет такой функции — отключите в настройках сигнализации получение баланса.

Техническая информация по проекту
Прошивка расчитанна на Arduino на чипе Atmega 168/328 (Uno, Nano, Pro Mini) и Atmega 16u4/32u4 (Micro/Leonardo). Там где возможно присутсвует а-ля realtime-ность. Например программа может одновременно и замечать изменения на тревожных пинах (и сообщять в терминал об этом в девелоперской версии) и принимать/обрабатывать sms-команды. В коде отсутсвуют delay() функции и «блокирующий» код. Но всеравно этот код максимум уровня junior developer 🙂

For Atmega 168/328:

Sketch uses 11530 bytes (37%) of program storage space. Maximum is 30720 bytes.

Global variables use 128 bytes (6%) of dynamic memory, leaving 1920 bytes for local variables. Maximum is 2048 bytes.

For Atmega 32u4:

Sketch uses 14394 bytes (50%) of program storage space. Maximum is 28672 bytes.

Global variables use 266 bytes (10%) of dynamic memory, leaving 2294 bytes for local variables. Maximum is 2560 bytes.

  • Arduino может питаться как от акума так и от БП так и обоих вместе. Если только от акума то режим сна включать обезательно (по понятным причинам). Сколько долго может проработать от одной 18650 я не замерял но например PIR AM312 китайцы пишут потребляет несколько десятых mA выходит достаточно долго (месяца 3 точно а то и полгода).
  • GSM Modem используется: Neo 590/m590e (возможно и 6хх) и Sim800.
  • PIR датчики или герконовые датчики или любые другие с двумя состояниями: любые. 4 штуки. можно разные. Я проверял:

    HC-SR505/501 только 5В, out средний пин длительностью 8 секунд. мне не подходит как по размеру так и по питанию и по времени уровня.

    MINI SR602 out крайний пин. глюченный какойто.

    AM-312 pull-down не нужен, out средний пин. мне эти больше всего понравились. могут работать и от акума (менее 5в) и от БП 5 вольт. маленькие по размеру и потреблению тока. Но есть один нюанс. У меня их не получилось притянуть к земле они сами имеют подтяжку. Поэтому когда приходит звонок или смс, срабатывает тревога (получается ложная). Кто сможет это исправить пожалуйста сообщите.

Настройка и синтаксис
Длина смс с командами которые вы отправляете на модем максимум 64 символа.

Команда имеет формат ЧТО_НАСТРАИВАЕМ: НОВОЕ_ЗНАЧЕНИЕ например: SLEEP:OFF или SMS:0 или ADMIN:591691791

Номер телефона всегда указывается только номер без кода страны/региона макс длина 10 цифр.

Простые команды которые имеют только два состояния, можно передовать все в одном сообщении через пробел, соблюдая максимальную длину, например: SLEEP:ON S0:OFF и тд.

Если отправляете длинное смс (длинее 64) то модем не обработывает непоместившиеся команды.

Сложные команды (где длиное значение/текст) лучше передовать по одной, например номер админа, баланса и тд. Вы можете попробовать их объеденять по 3 или более команд в одно смс, но тогда результат проверять фактически. Если сигналка сообщила что ок значит ок (5 быстрых вспышек). иначе укарачивайте команду.

Проверить состояние конфига нельзя. Поэтому если сомневаетесь/запутались. Сбрасываем одной смс RESETC и другой смс настраиваем заново.

Распиновка и выводы
ATmega328P

#define Pin11 bit(PB3) //sensor 3

#define Pin10 bit(PB2) //sensor 2
#define Pin9 bit(PB1) //sensor 1
#define Pin8 bit(PB0) //sensor 0
#define ExtPwr bit(PB4)// D12 пин тревоги отключения напряжения 220 вольт
#define AOFF bit(PD2) // D2 - INT0 кнопка включения отключения сигнализации.
#define BELL bit(PD4) // D4 - пин внешней сирены или любого другого устроства которое будет включаться на время до 3 минут
#define BOOT bit(PD5) // D5 - пин загрузки модема
#define LED bit(PB5) // D13 led

ATmega32U4

#define Pin11 bit(PB7) //sensor 3

#define Pin10 bit(PB6) //sensor 2
#define Pin9 bit(PB5) //sensor 1
#define Pin8 bit(PB4) //sensor 0
#define ExtPwr bit(PB2)// Mosi пин тревоги отключения напряжения 220 вольт
#define AOFF bit(PD0) // D3 - INT0 кнопка включения отключения сигнализации.
#define BELL bit(PE6) // D7 - пин внешней сирены или любого другого устроства которое будет включаться на время до 3 минут
#define BOOT bit(PC6) // D5 - пин загрузки модема
#define LED bit(PC7) // D13 led
Подключение
В случае с PIR AM312 средний вывод сенсора на любой пин ардуины (D8-D11) без резистора/заземления.

Пин контроля внешнего питания ExtPwr — просто от блока питания 5В плюсовой вывод на этот пин. Без делителей напряжения и прочего. Когда нет 220В то на этот пин не идёт высокий сигнал и сигналка срабатывает. Но если у вас ардуино 3,3 вольта то конечно делитель напряжения надо. Также делитель напряжения нужен если у вас ардуино 5В но блок питания скажем 7В. Если у вас питание только от акума то вам не нужен этот пин.

Если у вас питается и от сети и от акума, подключение акума к сети делаете так — mysku.club/blog/ebay/43282.html#comment1930875 Это чтобы не использовать акум когда есть 220.

Саму ардуину запитываете либо через USB порт либо через пины Vin (если БП более 5В) или 5V (если БП 5В или акум).

От блока питания/акума отдельная линия питания идёт на датчики. Чтобы они подолжали работать даже если ардуино выключится.

Кнопка включения отключения режима тревоги реагирует на землю т.е. пин AOFF, когда нажата кнопка подключенная к этому пину, должен притягиватся к земле.

На BELL пине при срабатывании тревоги появляетмя или лог 0 и лог 1 (настраивается) тем самым можно через реле или еще как, активировать какоето устройство, например здоровый школьный звонок в качестве сирены 🙂 (у соседа в совецкие времена когда еще не было ЧОПов висел такой). Ну или пожарную сигнализацию для ардуино. Как её подключать можно подсмотреть в этом обзоре сигнализации на ардуино — kolotushkin.com/article.php?id=33

BOOT пин через резистор 4,7 или 10 кОм просто подключается одним проводком к BOOT модема.

Модем запитывается либо отдельной линией либо через ардуино либо ардуино запитывается через модем (если на модеме дублируются пины питания). На своем 590 я вместо понижающего диода (который понижает напряжение с 5 до 4.2В) поставил перемычку. Модем прекрасно работает от 5 вольт. Перемычка мне дала то что у меня с двух сторон 5В и я могу ардуино запитывать через модем. Но каждый решает сам понижать напряжение для модема или нет. Главно помните что основные глюки и рестарты изза плохого питания модема. Лучше еще танталовый конденсатор подключить к выводам птания.

D13 пин можно использовать как внешний лед (либо использовать встроенный в ардуино)

У модема и ардуино обезательно общая земля. Tx модема на Rx ардуино. Rx модема на Tx ардуино.

Если плата 32u4 то используется Serial1 (PD2/PD3)

О логике работы
Модем регистрирует сим и регистрируется в gsm сети. Если это не получается он рестартуется. Если получилось модем после регистрации переходит в режим ожидания смс команд.

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

После рестарта ардуионо, режим перехода в охрану — после ожидания команд — всегда включен. Даже если до этого охрана была выключенна кнопкой или смс.

Далее после нескольких минут ожидания команд модем становится непосредственно на охрану.

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

В охране кроме датчиков тревоги может участвовать пин напряжения сети 220В. если пропала или появилась сеть — будет тревога.

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

Смс не сработают, если приём этого смс совпал с уходом в сон, или уже во сне, со звонком как на сигнализацию так и от сигнализации и т.д. Т.е. например если вы отправили команду и тут же (сразу) получили звонок тревоги то ваша команда не сработала но зато вы узнали что есть проникновение в периметр охраны, смс команду придётся отправить еще раз, если это по прежнему актуально. Если вы отправили команду а прошло секунд 20-40 и вы получили звонок то скорее всего это ложная тревога от вашего смс. Кто сможет это «победить» напишите пожалуйста как.

Из выше описанной логики также следует что не отключайте режим охраны при включенном режиме сна — уйдёт в сон и не проснется. Также наоборот не включайте режим сна когда выключенна охрана(тревога).

Еще следите за временем ухода в сон и временем работы внешней сирены/звонка (если конечно включен режим внешней сирены). Время работы внешней сирены должно быть меньше того времени через которое ардуино уйдёт в сон (а в месте с ним и в режим охраны), если режим сна конечно включен. А то уход в сон при включенной внешней сирены вызывает неопределенное поведение.

После как сработала тревога, модем звонит на указанные номера и отправляет смс со статистикой и цикл повторяется. Т.е. опять несколько минут ждёт смс и потом становится на охрану. Букв много но на самом деле всё просто.

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

При отправке смс команд в режиме приёма если все команды в этом смс правильные и все успешно установлены то будет световая индикация. Если хоть одна команда не правильная то индикации не будет.

Про админа
При первом включении флаг ADMIN 0. После ресета флаг ADMIN 0. даже если если до этого адмн был установлен.

Когда флаг ADMIN 0 выполняем любые команды с любого номера. если 1 только от ADMIN

Флаг ADMIN 1 когда по смс отправили ADMIN:795695555 [ваш номер].

Добавить второй номер (только для получения звонка и смс о тревоге) командой ADMIN2:795795795 может только админ. команды второй номер отправлять не может. длина и регион второго номера должнабыть как первый.

Удалив админ номер автоматом удаляются админ права и второй номер. Удалять может только админ.

После тревоги еслиесть телефон в еепром он автоматом становится админом. даже если админ не был установлен.

Про кнопку остановки охраны
Если тревога уже сработала (допустим хозяин зашёл) и хозяин (или даже не хозяин если знает где кнопка и что она делает) нажал стоп то звонок всеравно пройдет а потом уже охрана не будет реагировать на сенсоры. Повторное нажатие активирует охрану. Но в настройках «отложенное реагирование» на тревогу т.е. сигнализация срабатывает например через 30 сек после обнаружения тревоги в охроняемом периметре. Это сделано для того чтоб хозяин мог зайти нажать (секретную) кнопку и ардуино не будет звонить и отправлять смс. Но охрана остается выключенной. Если её включить повторно до условного времени (в нашем примере 30с) то звонок и смс будут. Получается если вам нужна и дальше охрана её повторно надо включать после 30 сек и до ухода в сон/охрану.

Если встеки вы забыли нажать второй раз (для включения, а охрана вам нужна) и сигналка ушла в сон (настроенна именно на сон) то вы больше не будете получать звонки о тревоге. Чтобы включить обратно надо, чтоб сенсоры сработали (ардуино от сенсоров просыпаться будет но не будет звонить т.к. модем не включается) и когда сигналка выйдет в режим приема команд (примерно через 20-40 сек) при этом лед горит постоянно, надо повторно нажать кнопку.

Если вы через смс выключите охрану с уходом в сон то обратно через смс включить не сможите тк. модем больше не включиться, только через кнопку можно будет включить охрану.

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

Световая индикация
Стандартный 13 пин (или можите пользоваться диодом на ардуино).

Если быстро мигает в самом начале при включении значит у вас либо сим пароль либо не ловит сеть.

Когда сигналка в режиме охраны она мигает коротко раз в секунду

Когда сигналка без охраны она горит постоянно.

Когда набирает номер, сработал датчик, поиск сети и пару других режимов тоже горит постоянно но этим режимы короткие по времени. например примерно 30-40 сек позвонить на один номер и ждать 3 гудка. потом постоянное свечение как правило должно перейти в режим охраны. если у вас горит постоянно и долго это либо отключена охрана либо он завис.

В режиме ожидания команд, если вы отправли смс команду будет быстрое моргание сигнализирущее что все команды правильные и успешно применены.

Если нет никакой сигнализации на отправленный смс значит хоть одна из команд не правильная.

Если отправили длинное (длинее 64 символа) смс (оно отправится) и команды которые поместились обработались (все) успешно то модем проморгает быстро (SMS_OK) но при этом он не обработает непоместившиеся команды и вы об этом ни как не узнаете. Следите за длиной смс.

Если у вас предложения по добавлению дополнительной лед индикации (определенные моргания для 13 пина) буду рад услышать.

Список команд

SMS:0 - не отправлять смс статус

1 - отправлять только на первй номер. по умол.
2 - на оба
S0:ON - задействовать нулевой сенсор для обнаружения тревоги
OFF - выключить
S1:ON - задействовать первый сенсор
OFF - выключить
S2:ON - задействовать второй сенсор
OFF - выключить
S3:ON - задействовать третий сенсор
OFF - выключить
по умол все сенсоры включены
S0LV:HI - логический уровень 0сенсора когда нет тревоги выставить как высокий
LO - как низкий
S1LV:HI - логический уровень 1сенсора когда нет тревоги выставить как высокий
LO - как низкий
S2LV:HI - логический уровень 2сенсора когда нет тревоги выставить как высокий
LO - как низкий
S3LV:HI - логический уровень 3сенсора когда нет тревоги выставить как высокий
LO - как низкий
по умол все низкий
CALL:0 - не звонить когда тревога
1 - звонить только на первый. по умол.
2 - на оба
BELL:ON - задействовать пин внешней сирены (или другого устройства) [ВКЛ]
OFF - выключить [ВЫКЛ]. по умол.
BPLV:HI - логический уровень внеш сирены когда есть тревога выставить как высокий. по умол.
LO - как низкий
BELLT:10..180 - время в сек, в течении которого будет подаваться заранее выставленный лог уровень на пин внешней сирены. 30 по умол.
BEEP:0..9 - сколько условных гудков звонить на номера. по умол 3
ADMIN:номер без локального регионального кода. может отправлять команды
ADMIN2:номер без локального регионального кода. длина обезательно как в первом.
ALARM:ON - задействовать срабатывание тревоги. по умол.
OFF - выключить
SLEEP:ON - задействовать режим сна
OFF - выключить. по умол.
POWER:ON - задействовать режим тревоги когда пропала сеть 220. если питание только от батареи не нужен.
OFF - выключить
DELAY:0..250 - время задержки до срабатывания тревоги в сек. через сколько будет тревога когда сенсоры уже обнаружили проникновение. 0 по умол т.е. без задержки сразу.
GETBAL:ON - получать баланс симки в репорте
OFF - выключить. по умол.
BALNUM:ххх - номер с которого получать баланс в USSD режиме например *100#
AWAKET:3..60 - через сколько минут уходить на охрану/сон и сколько минут ждать смс команды от админа. 3 по умол.
DELTEL:1 - удалить админ номер и второй
2 - удалить только второй номер
PREFIX:0 - перед номером добавляется - 0. по умол.
1 - +7
2 - +373
3 - +375
4 - +380
RESETA - ресет ардуино
RESETC - ресет конфига
BALANCE - отправить админу смс репорт сейчас

Прошивка

Обычный hex файл для прошивки через USB посредством avrdude из Arduino.

with_bootloader.hex для прошивки програматором.

Если мега 328p то можно прошить либо программа XLoader либо командой (при условии что у вас стоит ардуино IDE на диске C: а плата на COM7)

C:Program Files (x86)Arduinohardwaretoolsavr/bin/avrdude -C«C:Program Files (x86)Arduinohardwaretoolsavr/etc/avrdude.conf» -patmega328p -carduino -PCOM7 -b115200 -D -Uflash:w:«D:Filesalarm.hex»:i

Если 32u4 то надо узнать какой порт именно во время прошивки (обычно на один меньше чем где Serial) и такой командой (при условии что у вас стоит ардуино IDE а плата на COM14)

C:Program Files (x86)Arduinohardwaretoolsavr/bin/avrdude -C«C:Program Files (x86)Arduinohardwaretoolsavr/etc/avrdude.conf» -patmega32u4 -cavr109 -PCOM14 -b57600 -D -Uflash:w:«D:Filesalarm.hex»:i

disk.yandex.ru/d/-ng7FTKKAAuatQ

PS: Это мой первый обзор. Не судите строго


СМОТРИ ТАКЖЕ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *