Друзья, разрешите представить проектик GSM сигнализации на Arduino. В сети довольно много проектов по типу «Arduino + модем + датчики», однако я часто вижу в них некоторую незаконченность (в особенности, с программной точки зрения): отсутствие гибкости в настройках и конфигурировании. В представленном решении я попытался сделать устройство максимально готовое к «боевым» условиям, предусмотрев все, что может понадобится среднестатистическому пользователю (на мой взгляд).
TL; DR программно и аппаратно задуманное реализовано, тест в реальных условиях запущен, исходники и бинарники опубликованы, корпус не осилил.
Устройство и характеристики
Устройство отправляет SMS при возникновении следующих событий:
- открытие двери (герконовый датчик);
- резкое изменение освещения (фоторезистор);
- движение (PIR датчик);
- выход температуры из заданного диапазона;
- низкое напряжение батареи.
Пример SMS с событием
Также, раз в сутки можно настроить время ежедневного отчета
Питается устройство от 3-х батареек AA. Расчетное время работы ≥6мес.
Настройка устройства, считывание логов событий и построение месячного графика температуры происходит с помощью утилиты (Python 2.7 + Tk + pyserial + matplotli).
Основное окно утилиты настройки
Окно лога событий
Окно лога температуры
Постановка задачи
Первый этап проекта при возникновении желания создать простую сигналку на Ардуино своими руками — постановка задачи. Речь идет о том, что она должна „уметь” и какими функциями обладать. Именно настоящие действия определят конечную ее стоимость и компоненты, необходимые для получения нужного результата.
Итак, сигнализация должна «уметь»:
- определять движение какого-либо объекта в наблюдаемом пространстве;
- контролировать состояние дверей — в разрезе открыты они или закрыты;
- чувствовать смену освещенности — при любом несанкционированном доступе будет или включен свет, или использован фонарик, что непосредственно укажет управляющему устройству на фактор взлома;
- отправлять периодические сообщения на сотовый телефон владельца с использованием SMS, о текущем состоянии окружающей среды и контролирующего оборудования;
- информировать, — посредством тех же коммуникаций — о факте недозволенного доступа в охраняемое помещение;
- также нужна предусмотренная возможность простой смены настроек самой системы безопасности.
Сигнализация в сборе с питанием от аккумулятора:
Кроме названых функций, учитывая постоянные проблемы с электричеством, надо обеспечить резервное снабжение энергией цепей сигнализации, впредь до полной замены внешнего питания на внутренние батареи.
Советуем прочитать: подробная инструкция о том, как заставить работать датчик движения на Ардуино платформе.
Сборка устройства
Себестоимость деталей устройства на момент публикации этой статьи составляет примерно 1000-1200 рублей (без учета заказа платы).
Для удобства сборки и надежности в эксплуатации лучше заказать плату. Китайские друзья с известного сайта предлагают сделать 10 штук с доставкой за ~$7, а иногда и меньше. Но всегда можно собрать и на макетке, как я и поступил с первым прототипом:
Прототип.
Arduino и совместимые модули были заказаны с aliexpress. Понадобятся:
- Arduino Pro Mini 3.3v 8MHz (5v 16MHz is also acceptable, but requires different firmware);
- MH-SR602 MINI Motion Sensor;
- SIM800C(L) GSM Module;
- CP2102 MICRO USB to UART TTL Module;
- DS3231 RTC Module For Raspberry Pi;
- 3 AA battery holder With ON OFF Switch;
- различная рассыпуха (резисторы, конденсаторы, зуммер и поч.).
В списке специально указаны названия, дающие нужный результат при вводе в поиск.
Схема устройства Для снижения энергопотребления с платы Arduino нужно обязательно удалить резистор светодиода питания и регулятор напряжения. Проект платы сделан в Ki-CAD.
Схема проекта
Схема сигнализации с лаем собаки на Arduino и PIR датчике представлена на следующем рисунке. Усилитель в составе схемы используется для усиления сигнала с выхода звукового модуля с лаем собаки.
Схема сигнализации включает плату Arduino Nano, PIR датчик движения, звуковой модуль с лаем собаки, микросхему усилителя LM386, громкоговоритель, NPN транзистор и несколько резисторов и конденсаторов. Транзистор BC547 используется для активации сигнализации каждый раз когда PIR датчик обнаруживает движение. Контакты VCC и GND PIR датчика подключены к контактам 5V и GND платы Arduino, а его контакт OUT подключен к цифровому контакту 12 платы Arduino.
Контакты 1 и 8 микросхемы усилителя (Amplifier IC) служат для управления его коэффициентом усиления, по умолчанию он равен 20, но его можно увеличить до 200 при помощи конденсатора, включенного между контактами 1 и 8. Мы использовали конденсатор C1 емкостью 10 мкФ чтобы получить наибольший коэффициент усиления – 200.
Контакты 2 и 3 являются входными контактами микросхемы усилителя. Контакт 2 является инвертирующим входом, в нашем случае он замкнут на землю. Контакт 3 является неинвертирующим входом, на него подается сигнал, который требуется усилить. В нашей схеме он подключен к выходу звукового модуля с лаем собаки через потенциометр 100 кОм (RV1).
Через контакты 4 и 6 на микросхему усилителя подается питание. На контакт 6 подается +Vcc, а на контакт 4 – Ground (земля). Схему усилителя можно запитать от напряжения в диапазоне 5-12v.
Контакт 5 является выходным – с него снимается усиленный сигнал. Выходной сигнал содержит постоянную и переменную составляющую. Постоянная составляющая сигнала нежелательна – ее нельзя подавать на вход громкоговорителя, поэтому для ее устранения используется конденсатор емкостью 220 мкФ.
Контакт 7 – это bypass terminal (контакт шунтирования). Можно оставлять неподключенным или замыкать его на землю через конденсатор для повышения стабильности работы усилителя.
Использование
- После сборки и прошивки устройство требует загрузки конфигурации (с помощью утилиты).
- При подключении к USB нормальная работа устройства приостанавливается, очередь неотправленных сообщений очищается.
- При неудачной отправке SMS, устройство произведет повторную попытку через 2 минуты, затем через 5, 10, 20, дважды через 40 и затем каждые 12 часов.
- После принятого звонка, он будет завершен через 3 минуты.
- Звуковая сигнализация включается на 30 секунд.
- События «открытие двери», «движение» и «изменения освещения» срабатывают не чаще, чем раз в 20 мин.
- Если питание устройства отсутствует более 3 часов, то записанная история измерения температуры сбрасывается.
Где можно применить?
Область применения GSM сигнализации весьма широка. Она может использоваться не только в качестве охранной для квартир, частных домов, дачных строений или магазинов. Даже в самом простом варианте изготовления, ее функций достаточно для оповещения владельца о каком-либо физическом событии.
К примеру, доступна установка ее на систему полива огорода, чтобы шли сигналы о закончившейся воде. Или можно использовать в качестве пожарной – при срабатывании датчика дыма и огня происходит звонок владельцу. Все зависит только от типа сенсоров.
Различные датчики
Хороша GSM сигнализация и для защиты своего авто от угона или обворовывания. В первом случае, приятным бонусом будет возможность найти пропажу радиопеленгацией телефона.
Полевые испытания
Прошу прощения за эстетику монтажа.
Установка на входную дверь. Часть конструкции справа (непосредственно на самой двери) — магнит для срабатывания геркона
На место постоянного использования (гараж) устройство было установлено 4 месяца назад. Для целей усиленного тестирования, функция расписания не используется (по каждому событию отправляется SMS). В среднем получается 5 SMS в день: два при входе в гараж (срабатывает датчик открытия двери и датчик освещения), два при выходе и один «ежедневный отчет». На текущий момент батареи (3x AA) держат напряжение 4.1в при включенном модеме.
Сам код:
тут
/// GSM сигналка c установкой по звонку /// датчиком на прерывателях // донат, https://money.yandex.ru/to/410012486954705 #include <EEPROM
.h> //// как подключен модем? //#include // если программный //SoftwareSerial gsm(7, 8); // RX, TX #define gsm
Serial
// если аппаратный в UNO //#define gsm Serial1 // если аппаратный в леонардо #define LED 13 #define TELLNUMBER «ATD+70001112233;» // номен на который будем звонить #define SMSNUMBER «AT+CMGS=\»70001112233\»» // номер на который будем отправлять SMS #define TELMODE «70001112233» // номер для установки на охрану #define SH1 A2 // шлейыф //#define SH2 A3 #define pinBOOT 5 // нога BOOT или K на модеме byte mode = 0; // 0 — только включили // 1 — установлена охрана // 2 — снята с охраны // при добавлении не забываем посмотреть на 41 строку void setup() { delay(1000); //// !! чтобы нечего не повисало при включении gsm.begin(9600); /// незабываем указать скорость работы UART модема // Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(pinBOOT, OUTPUT); /// нога BOOT на модеме pinMode(SH1, INPUT_PULLUP); /// нога на растяжку // pinMode(SH2, INPUT_PULLUP); /// нога на растяжку // читаем режим из еепром mode =
EEPROM
.read(0); if (mode > 2) mode = 2; // проверяем значение в еепром // занимаемся модемом delay(1000); digitalWrite(LED, HIGH); // на время включаем лед digitalWrite(pinBOOT, LOW); /// включаем модем // нужно дождатся включения модема и соединения с сетью delay(2000); // while(gsm.find(«STARTUP»)); /// ждем команды от модема gsm.println(«ATE0»); // выключаем эхо while(1){ // ждем подключение модема к сети gsm.println(«AT+COPS?»); if (gsm.find(«+COPS: 0»)) break; digitalWrite(LED, LOW); // блымаем светодиодом delay(50); digitalWrite(LED, HIGH); delay(500); } //Serial.println(«Modem OK»); digitalWrite(LED, LOW); // блымаем светодиодом delay(1500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } void loop() { if (mode == 1){ // если в режиме охраны // проверяем датчики if (digitalRead(SH1)){ // если обрыв // отзваниваемся gsm.println(TELLNUMBER); delay(2500); if (gsm.find(«NO CARRIER»)){ // ищим сброс вызова, // снимаем охранку mode = 2;
EEPROM
.write(0, mode); } } } // если охрана снята if (mode == 2){ if (digitalRead(SH1)){ // проверяем датчики, включаем LED digitalWrite(LED, HIGH); } else digitalWrite(LED, LOW); } // ищим RING // если нашли, опрашиваем кто это и ставим на охрану if(gsm.find(«RING»)){ // если нашли RING gsm.println(«AT+CLIP=1»); // включаем АОН, while(1){ // в цикле if (gsm.find(TELMODE)){ // ищим номер телефона, если нашли mode = 1; // меняем режим
EEPROM
.write(0, mode); // пишим его в еепром break; // и выходим } else{ // иначе gsm.println(«AT+CPAS»); // спрашиваем состояние модема delay(100); if (gsm.find(«+CPAS: 0»)) break; // и если он в «готовности», выходим из цикла } // если звонок в процессе, возвращает +CPAS: 3 } // и крутимся дальше gsm.println(«AT+CLIP=0»); // выключаем АОН, delay(500); gsm.println(«ATH0»); // сбрасываем вызов digitalWrite(LED, LOW); // сигнализируем об этом delay(500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } }
Проблемы
За время эксплуатации температура в помещении понизилась с +10°С до -15°С и обнаружилась две проблемы.
- Используемый PIR датчик начинает давать ложные срабатывания при низких температурах. При +5°С использование стало совсем невозможным: число ложных срабатываний превысило одно в день. Попытка замены датчика на другой проблему не решило, поэтому сейчас этот датчик временно отключен. Что с этим делать пока не понятно.
- Датчик температуры, встроенный в DS3231 при -10°С и ниже начал сходить с ума: периодически выдает случайные значения, например, «-84°С» или «+115°С». Интересно, что RTC работает нормально. На текущий момент не понятно, проблема ли это конкретно моего экземпляра или нет. Жду для проверки второй идентичный модуль, при повторении с ним проблемы в устройство будет добавлен DS18B20.
В остальном полет нормальный.
GSM-сигнализация на базе Arduino
Один из вариантов подключения Arduino к геркону сигнализации
Более расширенным вариантом изготовления сигнализации будет использование контроллера Arduino с GSM модулем. Сигнальные датчики в таком случае подключаются к самому микрокомпьютеру, а его программа уже осуществляет управление связью, отправляя сообщения или совершая информационные звонки владельцу системы.
Большой плюс такой конструкции – возможность контролировать охранный комплекс посредством SMS, главное – запрограммировать реакцию на них в Arduino.
Основные особенности
На текущий день уже представлена масса аппаратных платформ, а также есть большое разнообразие микроконтроллеров, они получают информацию от внешних датчиков, далее происходит обработка данных и сигнал передается исполнительному механизму. Платформа Arduino во многом упрощает выполнение многочисленных задач и отличается действительно большим перечнем преимуществ, в сравнении с другими подобными устройствами. К основным преимуществам стоит отнести:
- Доступную цену. Платформа отличается своей небольшой стоимостью в сравнении с другими аналогичными системами. Но при этом тут есть весь необходимый набор функций для обеспечения полной безопасности.
- Кросс-платформенность. Программное обеспечение Arduino может эффективно взаимодействовать с Linux, Windows, Macintosh-OSX.
- Простой процесс программирования. Для того чтобы настроить микроконтроллер применяется среда программирования Processing. Данный вариант отлично подходит не только для профессионала, но и также для пользователя, который еще не имеет навыков работы с подобными устройствами.
- Всегда можно модернизировать систему. Благодаря специальному программному обеспечению и открытому коду, можно адаптировать охранную систему по собственным требованиям, но в таком случае нужно иметь некоторые навыки. Arduino отличается высокой надежностью, и даже наиболее старые модели соответствуют всем современным требованиям и обеспечивают надежную защиту. Что касается новых разработок, то тут имеется обширный перечень функций и гарантирует полная безопасность.
Топ 6 самых популярных модулей
Представленные ниже модули – популярный продукт для монтажа систем автономной сигнализации и иных проектов, для передачи управляющего сигнала через сети мобильных операторов.
Под модулем понимается изделие, состоящие из платы и элементов на ней (включая компонент, состоящий из чипсета и приемопередатчика). Компонент находятся под крышкой в едином форм-факторе (напоминает процессор для материнской платы компьютера). Распайка на плате расширения происходит через торцевые контактные ножки. Такая полноценная плата и называется модулем. Если на ней есть множество других элементов, ее иногда именуют шилд.
Ниже будут приведены модули, такие как Neoway M590, A6 и A7, и прочие, представлены их характеристики.
SIM900
Разработанный компанией SIMCom Wireless Solution модуль SIM900 подключается и обменивается данными через распространенный физический протокол передачи данных UART. Подключение к ПК осуществляется через USB-UART преобразователь.
Плата позволяет в двухстороннем режиме работать с сообщениями и звонками адресата.
Спецификация:
- Диапазон частот EGSM900, DCS1800, GSM850, PCS1900.
- Напряжение 3,2-4,8 В.
- Сила тока в режиме простоя – 450 мА.
- Максимальный ток – 2 А.
- Канал связи до 14.4 кбит/с.
- Диапазон температур от -30 °C до +80 °C без искажения, и от -40 °C до +85 °C, с незначительным отклонением радиочастотных характеристик, с сохранением работоспособности.
- Вес 6,2 г.
- Размеры 24 x 24 x 3 мм.
У компонента есть модификации: 900B, 900D, 900TE-C, 900R 900X. У каждой модификации своя специфика. SIM900D дополнен блоком заряда аккумулятора, а в SIM900X введены новые режимы энергосбережения, что позволяет использовать модули в современных системах трекинга автомобилей, охранной и промышленной автоматики. Все модификации компонентов можно найти в едином форм-факторе SMT, с торцевыми контактами под пайку. Но, не исключены варианты нахождения в других форм факторах.
SIM800L
Основа модуля – компонент SIM800L с реализацией обмена данными по каналам GSM и GPRS с помощью дуплексного режима. В модуль устанавливается SIM-карта, есть встроенная антенна и выход под еще одну антенну. Питание на плату подается через преобразователь напряжения DC-DC. Еще, есть возможность подключиться к другому источнику питания. Интерфейс подключения – UART.
Спецификация:
- Четырехдиапазонный сотовый терминал.
- Напряжение 3,8-4,2В.
- Ток в режиме ожидания – 0,7 мА. Предельный ток – 500 мА.
- Слот
- Поддержка 2G сети.
- Диапазон температур от -30 °C до +75 °C.
GSM/GPRS-модуль SIM800L (#1) — как выбрать, подключение, введение в AT-команды
A6
Шилд A6 работает в сетях мобильной связи и позволяет принимать и передавать сигналы с помощью GSM и GPRS. Модуль, созданный компанией AI-THINKER несколько лет назад, успешно показал себя и пользуется популярностью в системах автоматики.
ТТХ А6:
- Четырехдиапазонный сотовый терминал.
- Напряжение питания 5 В.
- Ток в спящем режиме – 3 мА.
- Ток режима ожидания – 100 мА.
- Ток режима соединения – 500 мА.
- Ток пиковой нагрузки – 2А.
- Разъем
- Скорость GPRS во время передачи сигнала 42,8 Кбит/сек.
- Температура от -30 °C до +80 °C.
A6 modem
A7
Новый модуль А7 отличается от предшественника тем, что в него встроен GPS. Это решение позволило упростить конструкцию платы.
Основные параметры:
- Четырехдиапазонный сотовый терминал.
- Напряжение 3,3-4,6 В.
- Напряжение питания 5В.
- 10 Класс GPRS: канал передачи данных 85,6 кбит/с.
- Jammer эха и шумов.
GSMGPRS модем с GPS приемником AI-Thinker A7
Neoway M590
Модуль на основе компонента Neoway M590 позволяет принимать звонки, обмениваться данными и сообщениями. Имеет интерфейс подключения UART.
Характеристики:
- Диапазон частот EGSM900, DCS1800.
- 10 Класс
- Напряжение 3,3-5 В.
- Пиковый ток 2 А.
- Рабочий ток 210 мА.
- Коммуникационный сигнал 3,3 В.
- Температура от -40 °C до +80 °C.
Подключая модуль к контроллеру, потребуется преобразователь 3,3 В -> 5 В.
GSM GPRS модуль SIM900
На базе модуля SIM900 разработали и успешно используют SIM900 GSM GPRS Shield, в качестве модуля для подключения к Arduino UNO. По сравнению с остальными платами, стоимость этой на порядок дороже, и она укомплектована множеством разъемов и контактов. Среди основных параметров:
- Подключается плата к Arduino Mega и UNO.
- Четыре рабочих частоты, как и в остальных платах.
- Низкое энергопотребление 1.5 А в спящем режиме.
- GPRS мульти-слот класса 10/8.
- Рабочие температуры от -40°C до +85 °C.
GSMGPRS shield SIM900, Первый взгляд