Категории
Последние статьи
Свободным осенним днем решил я автоматизировать включение нагнетателя обдува теплового коллектора в гараже, чтобы вентилятор включался при достижении температуры в коллекторе 60°С, а выключался при 45.. Читать
Центральный замок подключаем за водительской кик-панелью, жгут из двери, фишка с тонкими проводами. Белый- закрытие,коричневый- открытие. Провода нужно отрезать от жгута и подключение выполнять к пров.. Читать
Очередная заявка в мастерской, правильно подключить автосигнализацию после безуспешных попыток хозяина автомобиля выполнить работу по установке самостоятельно. На общем подключении останавливаться смы.. Читать
Поступил в мою мастерскую автомобиль NOAH 2009 года выпуска с кнопкой. Владелец пожелал оборудовать своего коня Дневными ходовыми огнями с включением от коробки передач. Дело не новое, и мы бодро взял.. Читать
Все статьи

ARDUINO + GSM

ARDUINO + GSM

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

GSM модуль, который за 5-10 минут собирается из набора GSM KIT M590 нам в помощь.

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

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

Маленькое замечание: для избегания «танцев с бубном» при запуске модуля GSM, я поставил SMD резистор 10кОм между ножками GND и BOOT разъема модуля. Это означает, что модуль будет включаться сразу при подаче питания.

Итак, слепили схему? Теперь зальем скетч:

#include <SoftwareSerial.h>

SoftwareSerial GsmSerial(2, 3);          // RX-2 pin, TX-3 pin

 

String AdminPhone="71234567890";              // Телефон админа

int pinLed=13;                                // Номер порта светодиода, который будем включать/выключать

 

void setup()

{

  pinMode(pinLed, OUTPUT);                       // Режим порта на вывод

  

  Serial.begin(9600);

  GsmSerial.begin(38400);                        // Устанавливаем скорость связи Ардуино и модема

  

  GsmSerial.println("ATE0");                // выключаем эхо

  delay(100);

  GsmSerial.println("AT+CLIP=1");                // Включаем АОН

  delay(100);

  GsmSerial.println("AT+CMGF=1");                // Формат СМС = ASCII текст

  delay(100);

  GsmSerial.println("AT+CSCS=\"GSM\"");          // Режим кодировки текста = GSM (только англ.)

  delay(100);

  GsmSerial.println("AT+CNMI=2,2");              // Текст смс выводится в com-порт

  delay(100);

  

  String str="";

  while(str.indexOf("+COPS: 0") == -1) {        // Ждем пока модем будет готов

    GsmSerial.println("AT+COPS?");

    str=ReadCom();

    delay(300);

  }

}

 

void loop()

{

  String strSms = ReadCom();                  // Читаем смс, если есть

  while (strSms.length()==0)                                  {

    delay(500);

    strSms = ReadCom();

  }

  

  // Если телефон админа, то читаем дальше

  if (strSms.indexOf(AdminPhone) > -1)   {

    if (strSms.indexOf("+CMT") > -1)     {    // Если смс

      // Кодовое слово "on"

      if (strSms.indexOf("on") > -1) {    // Если обнаружено ключевое слово на включение

        digitalWrite(pinLed,HIGH);             // Включаем светодиод

        SendSms("led=on", AdminPhone);       // Можем отправить смс, что включили

        Serial.println("led=on");

      }

      // Кодовое слово "off"

      if (strSms.indexOf("off") > -1){    // Если обнаружено ключевое слово на выключение

        digitalWrite(pinLed,LOW);             // Выключаем светодиод

        SendSms("led=off", AdminPhone);     // Можем отправить смс, что выключили

        Serial.println("led=off");

      }

    }

    if (strSms.indexOf("RING") > -1)     {    // Если звонят (выполняется на каждый гудок)

      // Можем, что нибудь выполнить

      Serial.println("start call");

    }

  }

  if (strSms.indexOf("NO CARRIER") > -1){   // Если звонок окончен

    //SendSms("called", AdminPhone);     // Можем отправить смс, что нам звонили

    Serial.println("end call");

  }

}

 

// Читает смс

String ReadCom()

{

  int chCode = 0;                              // Код символа

  String strSms = "";                          // Текст

  if (GsmSerial.available()) {                 // Есть данные от модема

    delay(300);

    // Считываем смс с com-порта модема

    while (GsmSerial.available()) {            // Если есть еще символы, то читаем

      chCode = GsmSerial.read();               // Считываем очередной символ

      strSms += char(chCode);                  // Добавляем к строке

      delay(10);

    }

  }

  if (strSms.length()>0) {

    Serial.println("++++++++++");

    //Serial.println();

    Serial.println(strSms.length());

    Serial.println(strSms);

  }

  return strSms;

}

 

// Отправляет текст смс на определенный номер

void SendSms(String text, String phone)

{

  phone="+"+phone;

  GsmSerial.println("AT+CMGS=\"" + phone + "\""); // Заголовок АТ команды и номер телефона

  delay(500);

  GsmSerial.print(text);                          // Текст смс

  delay(500);

  GsmSerial.print((char)26);                      // Конец сообщения и отправляем смс

  delay(500);

}

 

После заливки прошивки, подключите питание к GSM модулю и сбросьте кнопкой «ресет» Ардуинку. Вы должны заметить веселые перемигивания лампочек в дуинке и модуле, после чего модуль GSM станет мерно мигать светодиодом – это означает, что модуль успешно зарегистрировался в сети и ждет ваших указаний (вы ведь не забыли вставить SIM карту в слот модуля?).

Эти самые указания мы дадим нашему созданию с мобильного телефона:

Наберите SMS команду «on» (разумеется, без кавычек) и отправьте на номер симки устройства. Ничего?  Упс… мы забыли поправить скетч…

В строке   String AdminPhone="71234567890";  вместо 71234567890  вбейте свой номер телефона, с которого вы будете давать команды устройству в формате 7хххххххххх

Поправили скетч => заливаем => запускаем => отправляем команду «on»

О чудо электронное! Лампочка на плате зажглась! Можно начинать читать хвалебные молитвы богу Електрону… Простите, увлекся…

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

Дополнительный приятный бонус такой системы – подтверждение выполнения команды, устройство услужливо отрапортует вам в ответном SMS  о выполнении задачи!

Чтобы выключить светодиод – отправьте команду «off», и снова рапорт о выполнении…

Ну что, завертелась мысля? Что можно соорудить на таком функционале?

Предлагайте – обсудим!

tarip

Опубликовано tarip

Товары связанные со статьёй

Комментариев к статье "ARDUINO + GSM" : 5

Юрий добавил комментарий 14 Nov 2018
Криво работает. Каждое смс коверкает номер админфона и не принимает команды ))) и в итоге ничего не заработало. Ответить
tarip добавил комментарий 14 Nov 2018
Юрий, если у ВАС не получилось, дело не в скетче и конструкции! сотни людей повторили схему и все получилось. Задумайтесь над этим, прежде чем писать о "кривости". Если у вас не вышло можно спросить совет, всегда помогу. Или воспользоваться готовым решением: https://neru5.ru/index.php?route=product/product&path=118&product_id=979
Дмитрий добавил комментарий 10 Apr 2018
А как скетч подправить, чтоб можно было управлять пятью светодиодами и добавить еще 2 номера с которых отправлять смс? Дайте хотя бы подсказку, пните в нужное направление, сам с кодом не разберусь. Ответить
tarip добавил комментарий 23 Apr 2017
https://drive.google.com/open?id=0BxS4SE7y6LqXSGQ4WjhTNUFra2s по ссылке скетч для запуска котла Бинар. в нем один из каналов включается на 0,8 сек и запускает котел. Ответить
Алексей добавил комментарий 23 Apr 2017
Привет! А можешь написать скейч что бы диод включался на 0.8 сек. Ответить

Оставить комментарий

Автор:


Введите код с картинки:

Текст комментария:
Внимание: HTML не поддерживается! Используйте обычный текст!
Neru5RU © 2018
^ Наверх