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

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

Приветствую моих читателей. В первой части https://pikabu.ru/story/proekt_gsmgprs_signalizatsii_na_ardu... я рассказал вам, как сделать простую GPRS сигнализацию на Ардуино. Проект продолжает развиваться. Сигнализация эксплуатируется около месяца, и уже можно подводить некоторые итоги. За это время не было ни одного случая отказа или зависания, как модуля SIM800L, так и самой Ардуины. Напомню, в моём проекте микроконтроллер питается напрямую от аккумулятора пониженным напряжением 4 В. К каким-то отказам, как опасались многие читатели, это не приводит. Мною был проведён эксперимент, чтобы узнать, как поведёт себя сигнализация при постепенном разряде батареи.

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

Что удалось выяснить. При 3,5 В и выше SIM800L работает штатно. С питанием 3,4 В иногда начинаются перезагрузки при входящих звонках. При снижении напряжения ниже 3,4 В отваливается сеть, могут начаться перезагрузки, но на AT команды модуль продолжает отвечать. Так он работает в плоть до 3В, после чего выключается.

Ардуина работает даже при напряжении 2,7 В, ниже которых отключается. Никаких сбоев отмечено не было.

Но этого нам не достаточно. Нужно было проверить работу при длительной разрядке аккумулятора. Так сказать в условиях, близких к боевым. Я отключил режим сна Ардуины, подключил дополнительную нагрузку к аккумулятору, включил Serial монитор, и отслеживал поведение сигнализации, периодически проверяя её работоспособность. Эксперимент продолжался более суток. Аккумулятор разрядился до 3,6 В. Сбоев замечено не было. Схема полностью работоспособна.  Ставьте ёмкий аккумулятор и не о чём не думайте.

Для справки. Номинальное напряжение питания чипа зависит от частоты его работы. Если программно понизить частоту до 10МГц или ниже, то питание напряжением от 2,7 до 5,5В для Atmega328p будет стандартным. Если кого-то не убедили результаты эксперимента, то они могут  поиграться с настройками частоты.


С этим разобрались, теперь поговорим о доработках проекта.


За прошедшие две недели проект претерпел некоторые изменения. Геркон теперь подтянут через резистор не к +5В, а к +4,2В батареи (см. фото). Что позволит сохранить на пине высокий уровень при отключении внешнего питания без программной подтяжки. Мне кажется это более надёжным решением. Резисторы можно использовать любого номинала, начиная с 2,2 кОм и выше.


Остальные доработки касаются программной части. Файл настроек settings.h получил новые опции. https://github.com/wisenheimer/Arduino/blob/master/libraries...


По рекомендации читателей, в проект был добавлен watchdog (WTD), который перезагрузит Ардуину в случае её зависания. Включен по умолчанию следующим дефайном:

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

Т. к. стандартный загрузчик Ардуино Нано не поддерживает watchdog, и в случае его срабатывания уходит в бесконечную перезагрузку, для его работы нужно либо сменить загрузчик на другой, либо поступить проще. Прошить Ардуину через программатор. В этом случае на Ардуине больше не будет загрузчика. И watchdog будет работать. Но вы уже не сможете прошивать Ардуину по USB. Если вас это не устраивает, не используйте watchdog.


В качестве программатора я применил Ардуино УНО с прошивкой ArduinoISP из примеров.


Следующее изменение касается способа доставки отчётов. Теперь сигнализация поддерживает SMS отправку сообщений. Ранее мы отправляли ответы сигнализации на e-mail при помощи GPRS. Теперь можно выбирать способ отправки. Для этого добавлен следующий дефайн:

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

По умолчанию включены оба варианта.


SET_FLAG_ONE(GPRS_ENABLE) разрешает отправку e-mail по GPRS.

SET_FLAG_ONE(SMS_ENABLE) разрешает отправку отчётов по SMS.


GPRS имеет более высокий приоритет. Если сигнализации не удалось установить GPRS соединение, и SMS режим разрешён, то сообщения будут отправлены по SMS, флаг GPRS_ENABLE  выключен, и в дальнейшем будет задействована только SMS отправка. Включить или выключить оба режима можно так же в ручную DTMF командой.

Если мы хотим всегда использовать один режим, то дефайн нужно отредактировать, удалив лишнее.


Следующим нововведением стало изменение списка DTMF команд:

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

Команды, не вошедшие в список, будут подставлены в USSD запрос и отправлены сотовому оператору. Так что можете в режиме DTMF напирать любые USSD команды. Например запрос баланса. В случае успеха ответ оператора вернётся в виде отчёта.


Админ так же может управлять модемом SIM800L при помощи АТ команд из его даташита http://www.mt-system.ru/sites/default/files/documents/sim800... .


Например, добавлять и удалять номера из телефонной книги. Для этого достаточно с телефона Админа отправить сигнализации SMS с текстом АТ команды.


Дальше хочу подробно рассказать, как добавлять в проект датчики.


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

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

В файле https://github.com/wisenheimer/Arduino/blob/master/libraries... описан класс Sensor и следующие типы датчиков:

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

DIGITAL_SENSOR - любой датчик с одним цифровым выходом, на котором может быть только два состояния, 0 или 1.

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

ANALOG_SENSOR - любой датчик с аналоговым выходом. Например датчик газа MQ-2.

DHT11, DHT21, DHT22 - датчики температуры и влажности.


Конструктор класса имеет следующий вид:

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

В нашем файле настроек имеется целый массив таких классов для каждого датчика:

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

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


Например:

Sensor(DOOR_PIN, DIGITAL_SENSOR, "DOOR", HIGH, 0)

означает, что для датчика двери (геркона) задействован пин Ардуино DOOR_PIN (задан в том же в файле), тип датчика DIGITAL_SENSOR, название датчика, которое будет выводиться в отчётах - "DOOR" (можно заменить на любое другое слово), обычное состояние пина  HIGH (DOOR_PIN у нас подтянут к 4,2В), время подготовки датчика при включении питания в секундах, через которое он начнёт показывать правильные значения - 0 секунд.


Для аналогового датчика газа MQ-2:

Sensor(A0, ANALOG_SENSOR, "GAS", LOW, 120)

пин A0, тип датчика ANALOG_SENSOR, имя  "GAS", значение на пине LOW, на прогрев датчика и выход на номинальный режим работы отводится 120 секунд. До истечения этого времени после включения датчик не опрашивается, что бы не получать неверные значения.


Для датчика температуры DHT11

Sensor(DHT_PIN, DHT11, "DHT", LOW, 10, 35)

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


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


Вы можете подключать к сигнализации любые датчики, не требующие отдельной библиотеки, лишь заполнив конструктор класса, и добавив его в массив Sensor sensors[]. И это будет работать. Если для датчика требуется отдельная библиотека, то её можно добавить точно так же, как в проект была добавлена библиотека stDHT.h для датчика DHT11, который имеет свой протокол для обмена данными. Или напишите мне, я добавлю.


На этом всё, спасибо за внимание.


Скачать проект можно как всегда по ссылке: https://github.com/wisenheimer/Arduino

Arduino & Pi

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

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

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

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

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

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

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

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

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

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий
Чувак, я наверное тупой) потому что это ни хрена не просто)) "простая схема" тут не подходит. Хотя может не в той сфере работаю)
раскрыть ветку (21)
1
Автор поста оценил этот комментарий

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

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

Ну вот скажи, если можно купить готовое решение с датчиками за сопоставимые деньги, какой смысл колдовать? Какая отказоустойчивость этой системы? Ведь сигналка, даже GSM, это безопасность дома. Я вот имею Falcon Eye уже 4 года, только аккумы меняю. Всем доволен. Надежно. Дешево.
Чисто побаловаться - да, пойдет. Сам думал такую штуку делать для предупреждения переморозки труб водоснабжения. Но нашел более элегантный выход - воздушным компрессором выдуваю воду.

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

1. убить свободное время

2. ради своего развития, даже если для тебя это пустяк, всёравно это плюс к опыту

3. ты всегда можешь проапгрейдить систему так, как тебе это нужно

4. это дешевле вашего Falcon Eye, хотя мб я не тот модуль смотрел, укажите вашу модель)


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

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

Ваша сигнализация стоит 1000 рублей? Какая у неё отказоустойчивость? Сколько стоит обслуживание?

Моя сигнализация будет работать пока есть электричество. От зависания спасёт сторожевая собака. Когда зависает модем, ардуина его перезагружает. Есть резервное питание. Два канала связи для сообщений + звонок Админу.

Эта сигнализация делалась для гаражей, дач и т.п. Я установил её в комнате общежития, где редко бываю. Там одна дверь. Зачем мне покупать туда что-то серьёзное? Сделать не долго. Вообще это сообщество самодельщиков, всё можно купить. Но интересно сделать под себя. Каждому своё.

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

Ну 1000 рублей это без акб и резервных систем, включая модем. Это я молчу про датчики движения и прочее. Не лукавьте. А собаки на даче именно потому и нет, что раз в неделю приезжаю. А вот система что у меня обошлась в 5000р с аккумулятором, модемом, 3мя датчиками. И работает.Единственно был глюк ложного срабатывания от близко стоящего датчика. Перенес - все ок. Так что деньги практически те же, только спокойствие дороже. Если в комнате общаги ценного нет, то сойдет и ардуино.

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

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

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

Ещё раз повторюсь, каждому своё. Мне нравится делать самому такие вещи, Вам нравится что-то другое. Лично я доволен тем что сделал. Сейчас её изучает мой начальник, хочет сделать подобное в гараж.

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

Доброго времени! Подскажите, а вы на заказ не большую схему сделать можете и прошивку в нее загрузить? Или может знаете в сообществе кого-то к кому можно обратиться?

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

Доброго! Напишите мне на mihalex101 собака gmail.com

1
DELETED
Автор поста оценил этот комментарий
Готовая сигналка будет всегда дороже всего этого набора, как минимум в 2-3 раза. При чем расширяемость у вашей - максимум датчики добавить.
раскрыть ветку (4)
Автор поста оценил этот комментарий

Чем проще система, тем она надежней работает. В деле охраны это важнее выгоды и расширяемости, особенно когда ты за 500 км от места и понятия не имеешь, что там зависло. Вот поэтому ВОХР отлично функционирует и поныне.

раскрыть ветку (2)
1
DELETED
Автор поста оценил этот комментарий
При чем здесь ВОХР!? Мы обсуждаем стоимость китайской сигнализации и самодельной на Ардуино.
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Каждый раз в теме про самоделку прибегает кто-то и доказывает, что нужно покупать только готовое, нанимать ВОХР для охраны сарая и т.д. Не все понимают, что для каждой цели есть своё решение. Самоделка это бюджетное решение для не очень значимых объектов. Или когда мы хотим иметь конкретный набор функционала под себя, знать как это всё работает, дополнить потом новыми фишками. Это творческий процесс, полезное хобби. Нам нравится этим заниматься, поэтому мы делаем своё.

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

Кстати, в моей "готовой системе" все датчики беспроводные. Я ума не приложу как проводками по 110 м2 вот это вот всё прокладывать.

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

Рассыпуха что на фото стоит 1000 рублей. Могу предоставить расчёт если не верите. Там уже есть 2 датчика движения. Цена их 50-60 рублей штука. Литиевый аккумулятор у всех найдётся. От старого телефона или сдохшей ноутбучной батареи. Ну и корпус 60 рублей. Всё.

При том что некоторым не нужно столько датчиков. В гараж если ставить, хватит одного геркона.


Сторожевая собака это подсистема watchdog в микроконтроллере, которая перезагружает его при зависании.

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

На фото есть модем? Очень хотел его увидеть. И да, очень интересно, как 10 элементов, не считая аккумулятор и блок питания могут стоить 1000 рублей.

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

Модем https://ru.aliexpress.com/item/1pcs-Smallest-SIM800L-GPRS-GS...

Датчик движения https://ru.aliexpress.com/item/HC-SR501-Adjust-IR-Pyroelectr...

Микроволновый датчик движения. Цена указана за 5 штук. https://ru.aliexpress.com/item/1pcs-RCWL-0516-microwave-rada...

Датчик дыма https://ru.aliexpress.com/item/Smart-Electronics-1pcs-MQ2-MQ...

Датчик температуры https://ru.aliexpress.com/item/New-DHT11-Temperature-And-Rel...

Геркон, цена за 5 штук https://ru.aliexpress.com/item/MC-38-1pair-Wired-Door-Window...

Датчик пламени https://ru.aliexpress.com/item/IR-Infrared-3-Wire-Flame-Dete...

Плата заряда аккумулятора https://ru.aliexpress.com/item/1PCS-5V-1A-Micro-USB-18650-Li...


Сложите всё в корзину, получите скидку за доставку. Итого около 1000 руб.

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

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

И с сиреной надо потратиться, чтоб отпугивать грабителя. А так, если есть много времени (ждать, собирать, отлаживать) то экономия как бы есть. Но вот моей пожилой тетке это всё фиг поставишь, в ее деревне инет дорогое удовольствие и тем более фиг объяснишь, как пользоваться. А она живет от меня в 200 км, не наездится на консультации, так что фалкон буду ставить как и у себя.Там всё по смс управляется или по звонку.

Кстати, а как защитить вашу систему от тупо взлома с другого номера? Вот Falcon i-touch сбросит любой вызов если телефон не в "белом" списке. Скрипт определителя номера писать?

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

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

У вас часто возгорались? Ставьте новый.

И с сиреной надо потратиться, чтоб отпугивать грабителя.

Это базовый вариант. Можно довешивать всё что угодно.

Там всё по смс управляется или по звонку.

Тут тоже всё по смс управляется и звонку.

Кстати, а как защитить вашу систему от тупо взлома с другого номера?

Незарегистрированные номера сбрасываются. Читайте первую часть статьи.

Скрипт определителя номера писать?

Всё проще. Если номер есть в телефонной книге, при звонке отображается имя абонента. Если имени нет, звонок сбрасывается.

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

А если моя тетка Вам закажет это под ключ с 100% предоплатой, за сколько соберете? Только туда GPRS совсем не надо активировать, симка без инета будет.

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