Назначение и принцип работы
GSM-модуль (Global System for Mobile Communications) использует сеть телефонной связи оператора, для получения и передачи сигнала на удаленный объект управления. Например, с помощью СМС команд можно:
- получать оповещение о состоянии объекта через используемые датчики;
- узнавать о срабатывании сигнализации;
- включать и выключать охранную систему.
С помощью GPRS, который также поддерживают GSM-модули, можно аналогичные команды обрабатывать через Internet.
С помощью такого функционала можно организовать автономную сигнализацию на удаленном объекте. Датчики будут фиксировать изменение состояния, а по каналам связи будет транслироваться информация об этом на ваш смартфон. По сути, можно организовать Smart Home самостоятельно, постепенно добавляя в схему дополнительное комплектующее.
Работает такое устройство на базе платы Arduino Uno. Никто не запрещает использовать платы Nano (mini-схема) или Mega если необходимо, но для удобства монтажа устройства минимальной комплектации, достаточно материнской платы Uno.
За передачу GSM или GPRS отвечает модуль, который соединяется с основной платой. Он расширяет возможности Arduino UNO, позволяя принимать и совершать звонки, отправлять SMS, обмениваться данными через GPRS. На рынке представлены несколько версий отличных GSM-плат, которые можно сопоставлять и программировать через AT-команды на необходимый функционал.
Топ 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.
A6
Шилд A6 работает в сетях мобильной связи и позволяет принимать и передавать сигналы с помощью GSM и GPRS. Модуль, созданный компанией AI-THINKER несколько лет назад, успешно показал себя и пользуется популярностью в системах автоматики.
ТТХ А6:
- Четырехдиапазонный сотовый терминал.
- Напряжение питания 5 В.
- Ток в спящем режиме – 3 мА.
- Ток режима ожидания – 100 мА.
- Ток режима соединения – 500 мА.
- Ток пиковой нагрузки – 2А.
- Разъем
- Скорость GPRS во время передачи сигнала 42,8 Кбит/сек.
- Температура от -30 °C до +80 °C.
A7
Новый модуль А7 отличается от предшественника тем, что в него встроен GPS. Это решение позволило упростить конструкцию платы.
Основные параметры:
- Четырехдиапазонный сотовый терминал.
- Напряжение 3,3-4,6 В.
- Напряжение питания 5В.
- 10 Класс GPRS: канал передачи данных 85,6 кбит/с.
- Jammer эха и шумов.
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.
Подключение модуля к Arduino
Вы должны подавать на модуль SIM800 точно 4,2 В. Я использовал понижающий модуль LM2596. Настраиваем выходное напряжение до 4,2 В от потенциометра. Не забудьте соединить Arduino GND с выходом LM2596 (-). Сначала подключите ваш модуль Sim800L к Arduino;
- NET -> Нет соединения
- VCC -> LM2596 Out (+)
- RST -> Arduino D9
- RXD -> Arduino D7
- TXD -> Arduino D8
- GND -> LM2596 Out (-)
Схема сборки типового проекта Умного дома
Рассмотрим варианты подключения нескольких модулей GSM к платам Arduino. В качестве примера рассматриваются платы Arduino UNO и MEGA.
Перед подключением модулей, вставьте соответствующего размера симку мобильного оператора в слот модуля. Далее, модуль соединяется с основной платой. Для этого нужно внимательно изучить инструкцию, определив распиновку модулей. После, подключив плату к питанию, с помощью переходника USB-UART контроллер подключается к компьютеру, через среду программирования Arduino IDE, или ее более комфортную альтернативу, прошивается и программируется AT-командами.
Естественно, по мере увеличения функционала вашего проекта, к плате необходимо добавить датчики, реле, розетки и другие компоненты. Об этом вы можете почитать на других страницах сайта.
Аппаратная часть: составляющие
В зависимости от того, какой GSM-модуль будет использоваться, зависят и составляющие схемы.
В основном это: микроконтроллер Arduino UNO, совместимый с платой GSM-модуль, DC-DC преобразователь понижающий (если коммуникационный сигнал ниже 5В), проводки и переходники для подключения.
SIM800L + Arduino UNO
Например, для подключения SIM800L к Arduino UNO, из-за малого напряжения в 3,8 В нужно подключить через преобразователь DC-DC. Распиновка модуля SIM800L выглядит так.
Подключение происходит в такой последовательности:
- Подключите Arduino UNO к компьютеру через порт USB.
- Источник питания на 12 В подключите через DC-DC.
- Минус с ИП на GND платы контроллера, и с GND в минус преобразователя.
- Плюс с ИП на плюс DC-DC.
- Плюс с DC-DC на плюс (Vcc) GSM модуля.
- Минус с земли преобразователя на GND модуля.
- RXD и TXD модуля соедините с пинами 2 и 3 Arduino UNO.
К любым digital pin (цифровые входы/выходы), если необходимо, можно соединять несколько модулей.
A6 + Arduino UNO
Так как GSM-модуль имеет стандартное напряжение питания, поэтому преобразователь в схеме не нужен. Подключать платы можно напрямую. Схема распиновки A6 на рисунке ниже.
Соединение происходит следующим образом:
- UART_RXD модуля к TX→1 микроконтроллера.
- UART_TXD модуля к RX ←0 микроконтроллера.
- GND контроллера с GND GSM-модуля.
- Пин VCC0 (питание) к кнопке питания на модуле PWR_KEY (power).
SIM900 Шилд + Arduino MEGA
Особенность платы в том, что при вызове устройства, сила тока достигает пикового предела в 2А. Поэтому, не подключайте питание напрямую. Прежде чем соединить, установите в слот сим карту и выставите TXD и RXD перемычку для слаботочной цепи, согласно картинке.
Далее, подключайте платы между собой:
- Желтым проводом соедините контакт TxD.
- Салатовым –
- Черным соедините GND плат.
- Через USB-порт соединить Микроконтроллер с ПК.
Чтобы удостовериться, что схема собрана верно, установите в IDE GPRS_Shield_Arduino.
Проверка правильной отработки схемы выглядит так:
- На плате Arduino соедините RESET и землю, чтобы информация поступала от Shield к ПК.
- Установите SIM-карту в слот и дайте напряжение на модуль.
- Основную плату по USB соедините с ПК и нажмите кнопку «ON».
- При правильной работе схемы, зеленый светодиод будет мигать, а красный постоянно гореть.
Программная часть: скетчи и библиотеки
После разбора аппаратной части, нужно запрограммировать собранное устройство. С помощью текстовых короткого AT-кода, можно задавать устройству прямые команды. Они воспринимаются устройством во время нахождения программируемого устройства в командном режиме. Команды устройство считывает напрямую с клавиатуры или с помощью ПО, такого как IDE. Программу или ее аналоги доступны для устройств, работающих на Linux, MacOS, Windows, Android. Поэтому, задавать команды удаленно с телефона можно тоже.
На примере программирования модуля SIM900, можно рассмотреть настройку основных инструментов взаимодействия с будущим охранным проектом, сделанным своими руками.
Работа с СМС уведомлениями
Сперва настройте кодировку, с которой нет проблем у компилятора, а затем отправляйте СМС:
- Зайдите в IDE и выполните команду AT+CMGF=1 для перевода в текстовый формат сообщения.
- Затем, командой AT+CSCS=«GSM» выберите ASCII-кодировку.
- За набор сообщения отвечает команда AT+CMGS=«+79********».
- После команды введите текст мессенджа и отправьте его.
- Отправив SMS, нажмите CTRL+Z и устройство отправит SMS-сообщение на приемник.
- После правильного выполнения команд, вернется «ОК».
Чтобы получить сообщение, следуйте example:
- Отправьте команду AT + CNMI = 2,2,0,0,0, чтобы прочитать SMS.
- Обратной связью от порта будет +CMTI: «SM»,2 – двойка значит номер SMS в порядке очереди.
- Отправьте команду AT+CMGR=2 для чтения SMS.
Звонки
Естественно, пока к схеме не подключены микрофон и динамик, ни о каком приеме звонка и речи быть не может. Когда осуществиться звонок, будет выведен номер, с которого звонили. Чтобы далее работать со звонками:
- Загрузите библиотеку #include .
- Если на сим установлен PIN, то введите команду #define PINNUMBER “”, где в скобках пропишите его. В случае, если пин не установлен, оставьте скобки пустыми.
- Выполнив данную команду, следует узнать статус симки с подключением к сети с помощью boolean notConnected = true.
- Установить активацию с сетью можно через begin(). Если соединение готово к работе, в обратной связи покажется статус GSM_READY.
Универсальная сигнализация на arduino с отправкой смс
Схема подключения:
Для данного проекта нам понадобится:
Датчик движения: https://ali.ski/EPkJs | Gearbest HC-SR501: https://fas.st/9YvTp
Датчик газа: https://ali.ski/6JRA_ | gearbest: https://fas.st/HB1Ds
Датчик протечки воды: https://got.by/1hzcye
Модуль реле:https://ali.pub/1hzd3n
Zummer: https://got.by/1hzdau
Геркон (датчик открытия двери): https://got.by/1hzdjz
Gsm модуль NEOWAY M590: https://got.by/1hzdsx
В данном примере реализована универсальная сигнализация, которая отправляет смс на определенный номер по выполнению определенного действия, будь то движение, или протечка воды.
Сама схема подключения универсальной сигнализации представлена в начале статьи.
После подключения всех компонентов необходимо скопировать программный код приведенный ниже и вставить его в программу Arduino IDE и загрузить этот программный код в саму плату Arduino.
Скетч:
#include //подключаем библиотеку для программного Rx Tx SoftwareSerial mySerial(2, 3); // RX, TX #define pirPin 9 // Объявляем переменную для датчика движения и указываем пин int Count = 0; int relay1 = 6; // Объявляем переменную для реле 1 и указываем пин int relay2 = 5; // Объявляем переменную для реле 2 и указываем пин int relay3 = 4; // Объявляем переменную для реле 3 и указываем пин int relay4 = 7; // Объявляем переменную для реле 4 и указываем пин const int gassensorpin = A5; //Объявляем переменную для сенсора газа, указываем пин int gassensorvalue = 0; //Объявляем переменную для хранения значения с датчика газа и приравниваем ее к 0 int water = A0; //Объявляем пин для подключения датчика дождя unsigned int waterValue = 0; //Создаем переменную для хранения значений с датчика воды и приравниваем его к 0 int Door_sensor = 10; // Объявляем пин для подключения датчика открытия двери int Door_val = 0; // Объявляем переменную для хранения состояния датчика int buzzer = 8; //Обявляем переменную для пьезоизлучателя, указываем пин void setup() { pinMode(pirPin, INPUT); // Назначаем пин датчика движения как вход pinMode(Door_sensor, INPUT); //Назначаем пин датчика открытия двери как вход pinMode(relay1, OUTPUT); //назначаем пин как реле как выход pinMode(relay2, OUTPUT); //назначаем пин как реле как выход pinMode(relay3, OUTPUT); //назначаем пин как реле как выход pinMode(relay4, OUTPUT); //назначаем пин как реле как выход delay(2000); //время на инициализацию модуля Serial.begin(115200); //скорость порта Serial.println(«Signalization v1.0»); mySerial.begin(115200); mySerial.println(«AT+CMGF=1»); //режим кодировки СМС — обычный (для англ.) delay(100); mySerial.println(«AT+CSCS=\»GSM\»»); //режим кодировки текста delay(100); } void loop() { gassensorvalue = analogRead(gassensorpin);//Считываем значение с датчика газа if (gassensorvalue >= 600) // задаем порог уровня загазованности { mySerial.println(«AT+CMGS=\»+71234567890\»»); // даем команду на отправку смс delay(100); mySerial.print(«gas»); // отправляем текст mySerial.print((char)26); // символ завершающий передачу Serial.println(«ok»); tone(buzzer, 1915); //Подаем сигнал пьезоизлучателем delay(3000); digitalWrite(relay1, LOW); // Включаем реле, к которому подключен вентилятор delay(15000); } else { digitalWrite(relay1, HIGH); //Выключаем реле с вентилятором noTone(buzzer); //Выключаем сигнал пьезоизлучателя } int pirVal = digitalRead(pirPin); if(pirVal == HIGH) // Если происходит движение { mySerial.println(«AT+CMGS=\»+71234567880\»»); // даем команду на отправку смс delay(100); mySerial.print(«Motion»); // отправляем текст mySerial.print((char)26); // символ завершающий передачу Serial.println(«ok»); digitalWrite(relay2, LOW); //то Включаем реле, к которому подключено освещение digitalWrite(relay3, LOW); // включаем реле, к которому подключено освещение digitalWrite(relay4, LOW); // включаем реле, к которому подключено освещение tone(buzzer, 1700); //Подаем сигнал пьезоизлучателем delay (10000); } else { digitalWrite(relay2, HIGH); //Выключаем реле digitalWrite(relay3, HIGH); //Выключаем реле digitalWrite(relay4, HIGH); //Выключаем реле noTone(buzzer); //Выключаем сигнал } waterValue = analogRead(water);//Считываем значения с датчика дождя if(waterValue<300) //задаем пороговое значение срабатывания сигнализации { mySerial.println(«AT+CMGS=\»+1234567890\»»); // даем команду на отправку смс delay(100); mySerial.print(«Water!»); // отправляем текст mySerial.print((char)26); // символ завершающий передачу Serial.println(«ok»); tone(buzzer, 1000); //Подаем сигнал пьезоизлучателем delay (10000); } else { noTone(buzzer); //Выключаем сигнал } Door_val = digitalRead(Door_sensor); //Считываем значения с датчика открытия двери if (Door_val == LOW){ //Дверь открыта digitalWrite(Door_sensor, LOW); { mySerial.println(«AT+CMGS=\»+71234567890\»»); // даем команду на отправку смс delay(100); mySerial.print(«Dooropen»); // отправляем текст mySerial.print((char)26); // символ завершающий передачу Serial.println(«ok»); tone(buzzer, 1700); //Подаем сигнал пьезоизлучателем delay (5000); } } else { noTone(buzzer); //Выключаем сигнал } }
Ссылка на скетч: https://yadi.sk/d/5drVRxcv3JaLvB
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.
Видео:
Выводы
Соорудить собственноручную автономную GSM-сигнализацию не составит большого труда для технически не подкованных людей, в вопросах электро и схемотехники. Прочитав инструкцию и ознакомившись с распиновкой схем, можно подключить микроконтроллер к отвечающему за GSM передачу данных модуль. Также, для подключения доступны разнообразные модели GSM модулей, которые в соответствии со своими характеристиками можно применять для различных задач и так называемых project-объектов.
Касаемо программирования контроллеров, с этим тоже не возникнет проблем. С помощью библиотек, АТ-команд и скетчев, можно определять статус SIM-карты, получать и отправлять SMS сообщения, принимать звонки и тому прочее. Осуществляется это в среде программирования Arduino IDE или в аналогичных средах, установленных на удаленном устройстве, которыми могут быть как смартфон, так компьютер, что непосредственно подключен к программируемому устройству.
Код урока
Откройте пустой эскиз Arduino и загрузите код ниже:
#include SoftwareSerial mySerial(8,7); // Change These Pins if you make different wiring void setup() { Serial.begin(19200); //Serial.println(“Begin”); mySerial.begin(19200); } void loop() { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }
Откройте AT Command Tester Tool. Нажмите «Найти порты» и выберите правильный порт. Выберите «BaudRate» как 19200. Выбрав порт устройства и правильную скорость передачи (скорость последовательного порта), нажмите «Connect» (перевод — «соединиться») на AT Command Tester. Инструмент отправит запрос на устройство и подключится.
Регистрация устройства в сети необходима перед установлением соединения для передачи данных. В разделе «Выбор сети» устройство можно настроить для ручной или автоматической регистрации.
На вкладке «Голосовой вызов» вы можете проверить исходящие и входящие голосовые вызовы. Инструмент предоставляет простой в использовании интерфейс для набора исходящих номеров и приема входящих звонков.