Проект GSM/GPRS сигнализации на Arduino

Предлагаю вашему вниманию проект охранно-пожарной GSM/GPRS сигнализации на ардуино с резервным питанием от батареи. Мною ставилась цель создать простую в изготовлении сигнализацию для дома, состоящую из недорогих ардуиновских модулей и датчиков, управляемую с телефона. При этом затраты на обслуживание должны быть минимальными. А лучше чтобы их вообще не было! И мне удалось этого добиться.

Для вожделенной халявы пришлось отказаться от традиционных смс оповещений, и освоить отправку писем на электронную почту. При правильно подобранном тарифе, сигнализация не тратит денег с баланса. При этом мы получаем по e-mail всю информацию о работе сигнализации, сработавших датчиках, действиях пользователей. Такой роскоши не добиться с помощью платных смс. Управление сигнализацией реализовано на основе DTMF команд. Если у вас один оператор связи на основном телефоне и на сигнализации, с бесплатными звонками внутри сети, или имеется пакет бесплатных минут, то управление сигнализацией тоже будет бесплатным. В противном случае всегда можно отправить команду в течении первых 3-х секунд. И так же не платить. Заинтриговал? Тогда прошу под кат.

Первым делом составим техническое задание:

1) Оповещение звонком Админа при срабатывании датчика.

2) Отправка e-mail с подробностями.

3) Отправка e-mail о действиях пользователей.

3) Наличие резервного питания на случай отключения основного.

4) Управление сигнализацией при помощи DTMF команд и смс.


Для этого нам понадобится плата ардуино и недорогой, но функциональный GSM-модем SIM800L. Любой литиевый аккумулятор с модулем заряда. Датчики по вкусу.

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

В данном реализации были применены следующие сенсоры и модули:

1. Геркон NC типа, как датчик открытия двери.

2. Пироэлектрический инфракрасный датчик движения HC-SR501.

3. Датчик газа и дыма MQ-2.

4. Микроволновый датчик движения RCWL-0516. Видит сквозь препятствия и стены. Хорош для охраны дачи или частного дома. В квартире будут частые ложные срабатывания на соседей за стенкой или бегающих собачек и котиков.

5. Датчик пламени.

6. Датчик температуры и влажности DHT11.

7. Для подачи звуковых сигналов при выполнении команд использована пищалка (зуммер). В готовом изделии не обязателен.

8. Плата контроля заряда-разряда лития на основе микросхемы TP4056 с защитой от перезаряда и разряда.

9. Ардуино Nano V3. Можно заменить 5 вольтовой Ардуино pro mini.

10. В качестве GPRS GSM модема выбран недорогой, но хороший модуль SIM800L. Он имеет небольшие размеры. Умеет работать с DTMF командами, звонить, отправлять смс и e-mail. Смс дороги, а вот электронные письма можно слать практически бесплатно. Чем мы в дальнейшем и воспользуемся!


Датчиком открытия двери (окна) у нас служит нормально закрытый (NC тип) геркон. В случае отсутствия электричества наша ардуина будет отправлена в сон, и разбудить её смогут три вещи: сработавший геркон, появление внешнего питания (сеть), или сигнал RING с модема в случае звонка. Но это мы уже забежали вперёд.


Схема соединения.

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост
Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост
Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Допустим мы всё собрали как надо. Чтобы сигнализация заработала, первым делом надо заполнить файл настроек, находящийся по следующему пути libraries/main_type/settings.h


В строке

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

за место 115200 необходимо указать скорость, на которой работает ваш модем. Как определить скорость работы модема, можно найти в интернете. Не буду на этом заострять внимание.


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

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Можно оставить всё как есть. Не подключенные датчики на работу не повлияют.

Далее перечисляются пины, на которых висят наши модули. Первым у нас будет пин RING модема. Он соответствует пину 2 ардуино. Т.к. это обычное перечисление, номер следующего пина будет на один больше предыдущего, т. е. 2, 3, 4 и т. д. Если вы закомментировали какие-то модули выше, то их пины не будут учитываться в перечислении.

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

При сборке схемы модули подключаются начиная со 2-го пина друг за другом в том порядке, что указан в перечислении.

Далее нам надо настроить отправку e-mail.

Первым делом задаём SMTP сервер почты, к которой будет подключаться наш модуль SIM800L. Он прекрасно работает с яндекс почтой, с другими не тестировал. Советую завести там почтовый ящик, и слать через него. В этом случае настройки изменять не нужно.

Для яндекса у нас такие параметры сервера и порта:

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Далее за место слов login и password впишите логин и пароль от вашей почты

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Затем укажите полное название вашей почты и имя отправителя. В данном случае у нас указан отправитель SIM800L. Можете написать что-то своё.

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Теперь впишите название почты получателя и его имя. На этот ящик будут приходить письма. Для отправки и получения можно указать один и тот же ящик. Тоже будет работать.

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Если вы хотите отправлять письма сразу на два или три ящика , раскомментируйте вот эти дефайны, и впишите имя почты

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Поздравляю! На этом настройки закончены. Можно прошивать ардуину.


Как работает сигнализация.

Внимание! Сигнализация управляется только с номеров, записанных в телефонную книгу симкарты.

Если на симкарте уже есть номера, то их владельцы являются пользователями, которые могут включать и отключать сигнализацию. Перед использованием удалите ненужные номера. Администратором считается номер с именем ADMIN. Если на симкарте нет такого номера, то первый позвонивший незарегистрированный пользователь станет Администратором. Его номер будет занесён в телефонную книгу.

Администратор — единственный пользователь, который может отправлять DTMF и смс команды.

Для удалённого добавления пользователя в телефонную книгу Администратор должен отправить смс вида

AT+CPBW=,"+xxxxxxxxxxx",145,"USER"
где +xxxxxxxxxxx - номер телефона
USER - имя абонента

Модем настроен на поднятие трубки при звонке с номера Админа. Это сделано для возможности использовать DTMF команды. Звонки с других номеров будут сбрасываться.

Администратор может отправлять DTMF команды из списка ниже. Если команда принята, сигнализация сбросит звонок. Отчёт о выполнении команды придёт на почту. Любая команда представляет собой цифру и знак #, который означает завершение ввода. После этого модем завершит звонок и выполнит полученную команду.

Проект GSM/GPRS сигнализации на Arduino Сигнализация, Arduino, Sim800l, Gsm, Gprs, Длиннопост

Команды, не вошедшие в список, считаются USSD запросами. Например, мы хотим узнать баланс телефона. USSD запрос баланса нашего оператора *xxx#

где xxx — цифры.

Отправляем DTMF команду xxx#. Она будет подставлена в USSD запрос. Ответ оператора будет переслан на почту.


Порядок включения.

Подать питание на сигнализацию.

Дождаться прихода e-mail. Сигнализация загрузилась.

По умолчанию режим охраны выключен. При звонке любого зарегистрированного номера (кроме админа) сигнализация будет ставить/снимать с охраны и отправлять отчёт на почту. Звонок будет сброшен. При звонке с номера Администратора модем поднимает трубку и ждёт DTMF команду. Админ может поставить/снять с охраны сигнализацию командой 1# и 2# соответственно. После ввода команды звонок завершится сам.


Режимы работы:

Тревога.

При срабатывании одного из датчиков включится режим тревоги. На телефон Админа поступит звонок. Его надо сбросить. На почту будут отправлены показания сработавшего датчика. Продолжительность режима тревоги задана в файле настроек дефайном ALARM_MAX_TIME. По умолчанию 60 секунд. В течение этого времени идёт сбор статистики о сработавших датчиках. Когда время истечёт, информация будет отправлена на почту, а счётчики срабатываний обнулятся. Если датчики снова сработают, всё повторится.


Выключение сетевого питания. Режим низкого энергопотребления.

При пропадании электричества на 3 пине ардуины появится низкий уровень. Сигнализация переключится на питание от батареи. На почту придёт сообщение, что свет пропал Svet OFF. После этого, для экономии энергии батареи, ардуина уйдёт в сон, модем будет переведён в режим низкого энергопотребления.

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

При появлении электричества ардуина проснётся, переведёт модем в обычный режим работы, и отправит сообщение на почту Svet ON.


Поддерживаемые операторы.

Прошивка поддерживает основных российских операторов:

МТС, Билайн, Мегафон, Теле2. Если у вас другой оператор, и не отправляется e-mail, пишите в комментариях. Будем добавлять.


На этом всё. Скачать прошивку можно здесь https://github.com/wisenheimer/Arduino

Вопросы пишите в комментариях :)

Arduino & Pi

1.4K постов20.6K подписчика

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
21
Автор поста оценил этот комментарий

И тут рядом дядя Вася сварочником в железку тюк, или недалеко молния шварк, наводочка на микроконтроллер по длинным проводам прыг и контроллер зависает и так и висит, пока по питанию его не перезапустят :-)

Короче, решение хорошее, но нужна доделка.

1. Включить watchdog

2. Сделать защиту от наводок по шлейфам.

3. Ардуина на 16МГц при напряжении ниже 5 вольт работает нестабильно, нужно поменять кварц на 8МГц и поправить фьюзы, а еще включить BOD, чтобы контроллер не повисал при плохом питании

4. GSM модуль тоже любит виснуть, надо проверять его живость и доступность сотовой сети и перезапускать его если он завис или сеть потерял.

раскрыть ветку (22)
2
Автор поста оценил этот комментарий
А если шлейф короткий,необходима защита от наводок или качественного источника питания хватит?
раскрыть ветку (2)
6
Автор поста оценил этот комментарий

Короткий насколько, у меня по датчикам кухни идут два шлейфа длиной по 4 метра (внешний контур температуры и внутренний), шлейфы экранированы, экраны заземлены на корпус в одной точке вместе с ардуиной и её блоком питания, гальванически отвязаны от управляющего компьютера и все равно несколько раз за зиму (в основном в морозную сухую погоду) время от времени watchdog перезапускает повисший контроллер.

Верить в качественный источник питания нельзя, низкое напряжение питания например при включении может повесить контроллер до инициализации watchdog'а, поэтому играть с fuse обязательно, как раз там после отладки включишь watchdog сразу с момента старта и BOD, ну и не забудь загрузчик поменять, штатный ардуиновский не дружит с watchdog'ом и после его срабатывания уходит в бутлуп до перезапуска питания.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Благодарю)
3
Автор поста оценил этот комментарий

Ардуина работает от 4 вольт, всё стабильно. GSM модуль проверяется на зависание, если не ответил, перезагружается ресетом. У меня в SIM800L настроены будильники. Утром и вечером приходит письмо в одно и тоже время, для контроля, что ардуина не висит.

раскрыть ветку (18)
12
Автор поста оценил этот комментарий

Как говорят мои коллеги "это ошибка выжившего", пока тепло может работать, станет холодно, может начать грустить, а может и не начнет, зависит от факторов при изготовлении. Я не сторонник вылезать за границы даташита, и если там написано 4.5-5.5 при кварце 16МГц, то мне не интересно проверять как оно там за краем работает, и тем более закладывать такое в железо.

раскрыть ветку (7)
3
Автор поста оценил этот комментарий

Я ориентировался на опыт вот этого автора. Он несколько лет эксплуатирует ардуину напрямую от лития. Она стабильно работает вплоть до 3 вольт. При этом SIM800L выключится уже при 3,3. Если эти данные не устраивают, всегда можно собрать на 3,3 вольтовой ардуине, питать через диод. Над WTD я подумаю.

https://mysku.ru/blog/ebay/43282.html

раскрыть ветку (4)
Автор поста оценил этот комментарий
Только не через диод, и сам сгорит, и модель за собой потянет
если уж так надо, берите амs1117-3.3
раскрыть ветку (3)
2
Автор поста оценил этот комментарий

Через диод уже подключал ESP32 от аккумулятора. Работает. Если диод правильный подобран, ничего там не сгорит. Для амs1117-3.3 по даташиту требуется входное напряжение не ниже 4,75 В. Т.е. напрямую от аккумулятора ардуину не запитать. Надо сначала повышать напряжение. Это усложняет схему. Но если мы уже поставили повышающий модуль на 5 В, зачем нам тогда ардуина 3,3 В??  Вообще практика показывает, всё и так работает. Проведу эксперимент, сколько и как стабильно моя сигнализация проработает от батареи. Неделю точно протянет.

раскрыть ветку (2)
Автор поста оценил этот комментарий

Мой есп01 с Диодом проработал около недели

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Мы подключали через 2 диода, один обычный, другой Шотки. 0,7+0,2 В падения на них. 4,2 В на аккумуляторе - 0,9 В = 3,3 В. Диоды должны быть с запасом по току.

2
Автор поста оценил этот комментарий

Работает во всем диапазоне температур. Если нет требований работать -40 +80 градусов, то можно менять напряжение питания.

А вот WDT включить это правильно.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Да я разве против, все в руках разработчика. Я просто обратил внимание, на несоответствие спецификации. Тем более 4.2В там только первые 5% разряда, а потом 4В и дальше плавный спуск до 3.2В до отсечки платы защиты. Так что если оно работает сразу, не значит, что будет работать когда напряжение будет 3.5В.

1
Автор поста оценил этот комментарий
Dht 11?делаю свой курсач и пожалел что купил 22,но 11 это наверное вообще ужасный датчик
раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Чем он так ужасен?) DHT22 этой прошивкой тоже поддерживается. Нужно просто в одном месте указать что у нас DHT22.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Да прошивать то его не беда
Автор поста оценил этот комментарий

Не, не работает стабильно. И модуль GSM виснет постоянно. А эта платка обеспечивает нормальный ток для него? Я не долго с эти баловался, хотел теплицу подключить. Но если с СМС оно худо-бедно работает, то с GPRS совсем беда. В итоге к соседскому Вайфаю прицепился. Вот это отлично работает. И протокол UDP. чтоб не висло. Поскольку я еще и 20 лет сигнализацией занимался, то скажу - для нее Ардуино не годится. Из-за проблем, озвученных @p0gank .
А так - понравился подход, качество и все остальное. Жаль, что ненадежно. Все равно плюс.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Модуль модулю рознь. У меня только один раз на макетке проблема была, SIM800L постоянно перезагружался. Оказалось проводок питания плохо прилегал. В остальном модуль намного стабильнее того же Neoway М590. Редко отваливается. В коде отслеживается разрыв связи по GPRS, предусмотрена перезагрузка. Платка зарядки обеспечивает нормальное питание и для ардуины, и для модема. На деле он жрёт не много, даже в момент регистрации в сети. В простое потребляет совсем немного. По питанию у меня стоит конденсатор 1000 мкФ, и 0,1 мкФ от помех. В общем модуль проблем не доставил.

За похвалу спасибо, долго код вылизывал :)

раскрыть ветку (3)
Автор поста оценил этот комментарий

У меня именно 800-й и был. Конденсатор, конечно, выручает. Но не всегда.
С другой стороны вам нравится - и хорошо.
Но с вайфаем и UDP - реально отлично. Одно зависание в год.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

Кстати, реальные приборы сигнализации работают по UDP. Простой способ контроля - с односторонней связью, прибор отправляет периодический сигнал на сервер, ели подряд не придет несколько - сервер выдает потерю связи. Тревогу сразу посылает. Более сложный, прибор создает канал связи, сервер сам шлет UDP прибору. Прибор в ответ свое состояние. Не ответил - потеря связи.
У меня Распберри стоит в качестве сервера для теплицы ,

https://pikabu.ru/story/teplitsa_na_arduinomega_chast_7_5071...

в принципе мог бы мне на телефон звонить или СМС слать, что пропала связь. Так контроль будет постоянным. А то кто наличие интернет будет проверять?

Автор поста оценил этот комментарий

вы сами писали библиотеки?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, все кроме Low power. В следующем обновлении её не будет. Добавится беспроводной датчик на ик-порту.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку