Друзья, разрешите представить проектик GSM сигнализации на Arduino. В сети довольно много проектов по типу «Arduino + модем + датчики», однако я часто вижу в них некоторую незаконченность (в особенности, с программной точки зрения): отсутствие гибкости в настройках и конфигурировании. В представленном решении я попытался сделать устройство максимально готовое к «боевым» условиям, предусмотрев все, что может понадобится среднестатистическому пользователю (на мой взгляд).
TL; DR программно и аппаратно задуманное реализовано, тест в реальных условиях запущен, исходники и бинарники опубликованы, корпус не осилил.
Устройство и характеристики
Устройство отправляет SMS при возникновении следующих событий:
- открытие двери (герконовый датчик);
- резкое изменение освещения (фоторезистор);
- движение (PIR датчик);
- выход температуры из заданного диапазона;
- низкое напряжение батареи.
Пример SMS с событием
Также, раз в сутки можно настроить время ежедневного отчета
Питается устройство от 3-х батареек AA. Расчетное время работы ≥6мес.
Настройка устройства, считывание логов событий и построение месячного графика температуры происходит с помощью утилиты (Python 2.7 + Tk + pyserial + matplotli).
Основное окно утилиты настройки
Окно лога событий
Окно лога температуры
Сам код:
тут
/// 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); } }
Сборка устройства
Себестоимость деталей устройства на момент публикации этой статьи составляет примерно 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.
Установка
- Подключите выводы 5V и GND платы Arduino к выводам питания и GND датчиков. Вы также можете подавать на них внешнее питание.
- Подключите выходные выводы датчиков к выводам и платы Arduino.
- Подключите вывод 3 Arduino к базе транзистора через резистор 1 кОм.
- Подайте напряжение 12 В на коллектор транзистора.
- Подключите положительный вывод 12-вольтового зуммера к эмиттеру, а отрицательный – к шине земли.
- Подключите вывод 4 к выводу 5V через кнопку. В целях безопасности, во избежание протекания большого тока это всегда лучше делать через дополнительный небольшой резистор.
- Подключите плату Arduino к компьютеру через USB кабель и загрузите программу в микроконтроллер, используя Arduino IDE.
- Подайте на плату Arduino питание, используя блок питания, аккумулятор или USB кабель/
Использование
- После сборки и прошивки устройство требует загрузки конфигурации (с помощью утилиты).
- При подключении к USB нормальная работа устройства приостанавливается, очередь неотправленных сообщений очищается.
- При неудачной отправке SMS, устройство произведет повторную попытку через 2 минуты, затем через 5, 10, 20, дважды через 40 и затем каждые 12 часов.
- После принятого звонка, он будет завершен через 3 минуты.
- Звуковая сигнализация включается на 30 секунд.
- События «открытие двери», «движение» и «изменения освещения» срабатывают не чаще, чем раз в 20 мин.
- Если питание устройства отсутствует более 3 часов, то записанная история измерения температуры сбрасывается.
Топ 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, Первый взгляд
Полевые испытания
Прошу прощения за эстетику монтажа.
Установка на входную дверь. Часть конструкции справа (непосредственно на самой двери) — магнит для срабатывания геркона
На место постоянного использования (гараж) устройство было установлено 4 месяца назад. Для целей усиленного тестирования, функция расписания не используется (по каждому событию отправляется SMS). В среднем получается 5 SMS в день: два при входе в гараж (срабатывает датчик открытия двери и датчик освещения), два при выходе и один «ежедневный отчет». На текущий момент батареи (3x AA) держат напряжение 4.1в при включенном модеме.
Работа схемы
Схема устройства представлена на следующем рисунке.
На схеме можно видеть, что переключающий контакт (Trigger pin) ультразвукового датчика подсоединен к контакту 12 платы Arduino, а контакт эхо (Echo pin) датчика подсоединен к контакту 11 платы Arduino. Контакт Vcc датчика подсоединен к контакту 5V Arduino, а контакт GND датчика подсоединен к контакту GND Arduino. Один контакт зуммера подключен к контакту GND Arduino, а другой его контакт – к контакту 8 платы Arduino.
Принцип работы рассматриваемого нами устройства очень прост – когда кто-нибудь попадает в радиус действия ультразвукового датчика плата Arduino рассчитывает расстояние до этого объекта и если измеренное расстояние находится в определенном диапазоне, Arduino передает сигнал высокого уровня на зуммер и зуммер начинает подавать сигнал тревоги. Структурная схема проекта представлена на следующем рисунке.
Вы можете проверить работу схемы при помощи помещения какого-нибудь предмета перед ультразвуковым датчиком, более подробно все эти процессы можно посмотреть в видео в конце статьи.
Проблемы
За время эксплуатации температура в помещении понизилась с +10°С до -15°С и обнаружилась две проблемы.
- Используемый PIR датчик начинает давать ложные срабатывания при низких температурах. При +5°С использование стало совсем невозможным: число ложных срабатываний превысило одно в день. Попытка замены датчика на другой проблему не решило, поэтому сейчас этот датчик временно отключен. Что с этим делать пока не понятно.
- Датчик температуры, встроенный в DS3231 при -10°С и ниже начал сходить с ума: периодически выдает случайные значения, например, «-84°С» или «+115°С». Интересно, что RTC работает нормально. На текущий момент не понятно, проблема ли это конкретно моего экземпляра или нет. Жду для проверки второй идентичный модуль, при повторении с ним проблемы в устройство будет добавлен DS18B20.
В остальном полет нормальный.
Постановка задачи
Первый этап проекта при возникновении желания создать простую сигналку на Ардуино своими руками — постановка задачи. Речь идет о том, что она должна „уметь” и какими функциями обладать. Именно настоящие действия определят конечную ее стоимость и компоненты, необходимые для получения нужного результата.
Итак, сигнализация должна «уметь»:
- определять движение какого-либо объекта в наблюдаемом пространстве;
- контролировать состояние дверей — в разрезе открыты они или закрыты;
- чувствовать смену освещенности — при любом несанкционированном доступе будет или включен свет, или использован фонарик, что непосредственно укажет управляющему устройству на фактор взлома;
- отправлять периодические сообщения на сотовый телефон владельца с использованием SMS, о текущем состоянии окружающей среды и контролирующего оборудования;
- информировать, — посредством тех же коммуникаций — о факте недозволенного доступа в охраняемое помещение;
- также нужна предусмотренная возможность простой смены настроек самой системы безопасности.
Сигнализация в сборе с питанием от аккумулятора:
Кроме названых функций, учитывая постоянные проблемы с электричеством, надо обеспечить резервное снабжение энергией цепей сигнализации, впредь до полной замены внешнего питания на внутренние батареи.
Советуем прочитать: подробная инструкция о том, как заставить работать датчик движения на Ардуино платформе.
Где можно применить?
Область применения GSM сигнализации весьма широка. Она может использоваться не только в качестве охранной для квартир, частных домов, дачных строений или магазинов. Даже в самом простом варианте изготовления, ее функций достаточно для оповещения владельца о каком-либо физическом событии.
К примеру, доступна установка ее на систему полива огорода, чтобы шли сигналы о закончившейся воде. Или можно использовать в качестве пожарной – при срабатывании датчика дыма и огня происходит звонок владельцу. Все зависит только от типа сенсоров.
Различные датчики
Хороша GSM сигнализация и для защиты своего авто от угона или обворовывания. В первом случае, приятным бонусом будет возможность найти пропажу радиопеленгацией телефона.
Что собой представляет модуль Arduino?
Arduino реализуются в виде небольших плат, которые имеют собственный микропроцессор и память. На плате также располагается набор функциональных контактов, к которым можно подключать различные электрифицированные устройства, включая и датчики, используемые для охранных систем.
Процессор Arduino позволяет загружать в себя программу, написанную пользователем самостоятельно. Создавая собственный уникальный алгоритм, можно обеспечивать оптимальные режимы работы охранных сигнализаций для разных объектов и для разных условий использования и решаемых задач.
Arduino GSM модуль
Основные особенности
На текущий день уже представлена масса аппаратных платформ, а также есть большое разнообразие микроконтроллеров, они получают информацию от внешних датчиков, далее происходит обработка данных и сигнал передается исполнительному механизму. Платформа Arduino во многом упрощает выполнение многочисленных задач и отличается действительно большим перечнем преимуществ, в сравнении с другими подобными устройствами. К основным преимуществам стоит отнести:
- Доступную цену. Платформа отличается своей небольшой стоимостью в сравнении с другими аналогичными системами. Но при этом тут есть весь необходимый набор функций для обеспечения полной безопасности.
- Кросс-платформенность. Программное обеспечение Arduino может эффективно взаимодействовать с Linux, Windows, Macintosh-OSX.
- Простой процесс программирования. Для того чтобы настроить микроконтроллер применяется среда программирования Processing. Данный вариант отлично подходит не только для профессионала, но и также для пользователя, который еще не имеет навыков работы с подобными устройствами.
- Всегда можно модернизировать систему. Благодаря специальному программному обеспечению и открытому коду, можно адаптировать охранную систему по собственным требованиям, но в таком случае нужно иметь некоторые навыки. Arduino отличается высокой надежностью, и даже наиболее старые модели соответствуют всем современным требованиям и обеспечивают надежную защиту. Что касается новых разработок, то тут имеется обширный перечень функций и гарантирует полная безопасность.
Проект
Ультразвуковой датчик HC-SR04 мы уже использовали во многих проектах и он же используется здесь для распознавания присутствия любого человека за дверью.
Модуль датчика включает в себя ультразвуковой передатчик, приемник, а также схему управления. Он включает в себя два «круглых глаза», один из которых используется для передачи ультразвуковой волны, а другой — для ее приема.
Мы можем оценить расстояние до объекта, зависящее от времени, затрачиваемого ультразвуковыми волнами, чтобы вернуться обратно к датчику. Это делается с помощью формулы:
Расстояние = (Время х Скорость звука) / 2
Каждый год, когда кто-либо попадает в зону действия ультразвукового датчика, микроконтроллер распознает расстояние от объекта до датчика и, если объект находится в пределах определенного диапазона, он посылает сигнал высокого уровня зуммеру, а зуммер начинает издавать звуковые сигналы.
Мы можем проверить всю цепь, просто поместив что-нибудь перед датчиком в пределах определенного диапазона
Перейдем к схеме соединения нашего устройства.
Типовые схемы
Рассмотрим примеры подключения указанных модулей к контроллерам Arduino.
Принцип дальнейших действий во всех случаях общий: GPRS модуль сопрягается с материнской платой главного контроллера. Для правильного выполнения подключения следует изучить инструкцию к используемой модели Arduino, выяснить распиновку на ней и на компоненте сотовой связи. Далее на собранную систему заводится питание. Когда устройство включено, его переходником USB-UART подключают к ПК и создают программу в среде Arduino IDE или другом удобном пакете ПО разработчика.
Рассмотрим несколько примеров сборки аппаратной части.
Arduino Uno и контроллер SIM800L
Поскольку напряжение SIM800L невелико, понадобится преобразователь.
Изучим распиновку устройства:
Последовательность действий:
- подключаем плату UТO к компьютеру;
- к ней подводится питание 12 В через конвертер;
- минус источника выводится на контакт GND Ардуино, а GND — на контакт минуса конвертера;
- плюс ИП идет к плюсу преобразователя;
- плюс конвертера — к плюсу блока GSM;
- минус с «земли» преобразователя на GND сотового блока;
- RXT и TXD блока на 2, 3 пины микроконтроллера UNO соответственно.
К цифровым выводам можно подключать и другие устройства, объединяя, при необходимости, несколько дополнительных модулей и плат.
UNO и A6
Здесь напряжение питания стандартное, и конвертер в схему не включается. Платы соединяются напрямую.
Общая схема распиновки:
Принцип соединения контактов:
- UART_RXD выводится на TX 1 UNO;
- UART_TXD — на RX 0;
- GND соединяется с GND на GSM-блоке;
- пин электропитания VCC0 c кнопкой включения PWR-KEY.
Шилд GSM SIM900 и контроллер Arduino Mega
Пиковая сила тока при активации устройства может достигать 2 А, в связи с чем напрямую питание подключать нежелательно. Перед соединением плат нужно поставить SIM-карту в предназначенный для нее слот и установить TX и RX джамперы:
Последовательность дальнейших действий:
- желтый провод (TX) объединяется с TX Arduino;
- зеленым соединяются контакты RX;
- GND выводится на «землю» микроконтроллера.
Проверить собранный гаджет можно следующим экспериментом:
- соединить GND и RESET главного микроконтроллера;
- вставить в разъем сим-карту;
- подать питание на модуль GSM;
- подключить центральную плату Arduino к ПК через порт USB, нажать кнопку ON;
- Если все собрано верно, красный светодиод загорится, а зеленый станет мигать.
Как работает дымовая сигнализация?
Датчик дыма MQ-2 имеет выход в форме аналогового сигнала. Мы установили в нашем коде условие, при котором, если выходное значение датчика больше 400 зуммер начнет подавать звуковой сигнал и загорится красный светодиод; и если выходное значение датчика меньше 400, то зуммер будет молчать, а загорится зеленый светодиод.
Используемый здесь ESP8266 создаст веб-страницу по IP-адресу и отправит данные на этотадрес и выведет там данные. После загрузки кода этот IP-адрес можно увидеть на последовательном мониторе, как показано ниже.
Когда вы вводите этот IP-адрес в своем браузере, то увидите страницу как на рисунке ниже: