Управление Arduino по звонку с телефона

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1368
Joined: 5 Apr 2013
With us: 7 years 9 months

#1by Дим » 29 Jul 2017, 19:43

В этой теме рассмотрим как можно управлять Arduino простым звонком телефона. Это будет не отправка СМС а простой вызов на модуль NEOWAY M590E. Он сам сбросит вызов и подаст сигнал контроллеру на определённые действия. В данном случае это будет включение и выключение светодиода. Собираем нижеприведенную схему
Управление Arduino по звонку с телефона.jpg
Управление Arduino по звонку с телефона
Управление Arduino по звонку с телефона.jpg (124.49 KiB) Viewed 2973 times

и заливаем такой скетч. Он довольно таки простой - проверка на номер телефона - если не ваш, то ни каких действий не будет.

Code: Select all

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); 
int led1=0;//вкл или выкл светодиод
byte led = 13;

void setup() 
{
  pinMode(12,OUTPUT);//пин светодиода
  delay(2000);  
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600);  
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(100);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop() 
{
 if(mySerial.available()) //если модуль что-то послал
  {  
    char ch = ' ';
    String val = "";
    
    while(mySerial.available()) 
     {  
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
    
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     { 
      if(val.indexOf("79111111111") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль
       {  
         Serial.println("Call my phone");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led1==0){
          digitalWrite( 12, HIGH );led1=1; //ВКЛ светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led1==1){
          digitalWrite( 12, LOW );led1=0;//ВЫКЛ светодиод
          Serial.println("ВЫКЛ светодиод");
        }  

       }
     } 
  }
}

phpBB [media]

Для управления с трёх разных телефонных номеров заливаем скетч

Code: Select all

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); 
int led1=0;//вкл или выкл светодиод
int led2=0;//вкл или выкл светодиод
int led3=0;//вкл или выкл светодиод
byte led = 13;

void setup() 
{
  pinMode(8,OUTPUT);//пин светодиода
  pinMode(9,OUTPUT);//пин светодиода
  pinMode(12,OUTPUT);//пин светодиода
  delay(2000);  
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600);  
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(100);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop() 
{
 if(mySerial.available()) //если модуль что-то послал
  {  
    char ch = ' ';
    String val = "";
    
    while(mySerial.available()) 
     {  
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
    
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     { 
      if(val.indexOf("79111111111") > -1) // ВПИШИТЕ первый НОМЕР, с которого Вы будете звонить на модуль
       {  
         Serial.println("Call my phone 1");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led1==0){
          digitalWrite( 12, HIGH );led1=1; //ВКЛ R светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led1==1){
          digitalWrite( 12, LOW );led1=0;//ВЫКЛ R светодиод
          Serial.println("ВЫКЛ светодиод");
        }  
       }

      if(val.indexOf("79111111112") > -1) // ВПИШИТЕ второй НОМЕР, с которого Вы будете звонить на модуль
       {  
         Serial.println("Call my phone 2");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led2==0){
          digitalWrite( 9, HIGH );led2=1; //ВКЛ G светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led2==1){
          digitalWrite( 9, LOW );led2=0;//ВЫКЛ G светодиод
          Serial.println("ВЫКЛ светодиод");
        }  
       }


      if(val.indexOf("79111111113") > -1) // ВПИШИТЕ третий НОМЕР, с которого Вы будете звонить на модуль
       {  
         Serial.println("Call my phone 3");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led3==0){
          digitalWrite( 8, HIGH );led3=1; //ВКЛ B светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led3==1){
          digitalWrite( 8, LOW );led3=0;//ВЫКЛ B светодиод
          Serial.println("ВЫКЛ светодиод");
        }  
       }

       
     } 
  }


К 8 и 9 пину подключаем ещё 2 светодиода или один RGB, тогда это будут ножки G и B цветов. И тестируем результат.
phpBB [media]
i love you mxIni Mysql

! ! !


Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1368
Joined: 5 Apr 2013
With us: 7 years 9 months

#2by Дим » 12 Aug 2017, 13:41

В какой то момент перестали проходить команды в порт. Решил эту проблему добавлением в void loop() кода:

Code: Select all

 if (Serial.available()) { //если в мониторе порта что-то ввели

    mySerial.write(Serial.read());
  


Полный код void loop()

Code: Select all

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
int led1=0;//вкл или выкл светодиод
byte led = 13;

void setup()
{
  pinMode(12,OUTPUT);//пин светодиода
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(100);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop()
{
 if (Serial.available()) { //если в мониторе порта что-то ввели

    mySerial.write(Serial.read());
  }
 if(mySerial.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
   
    while(mySerial.available())
     { 
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
   
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     {
      if(val.indexOf("79111111111") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль
       { 
         Serial.println("Call my phone");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led1==0){
          digitalWrite( 12, HIGH );led1=1; //ВКЛ светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led1==1){
          digitalWrite( 12, LOW );led1=0;//ВЫКЛ светодиод
          Serial.println("ВЫКЛ светодиод");
        } 

       }
     }
  }
}
i love you mxIni Mysql

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1368
Joined: 5 Apr 2013
With us: 7 years 9 months

Управление нагрузкой двумя номерами

#3by Дим » 10 Jan 2021, 22:30

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

Code: Select all

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); 

void setup
() 
{
  pinMode(12,OUTPUT);//пин светодиода
  delay(2000);  //время на инициализацию модуля
  Serial.begin(9600);  
  mySerial
.begin(9600);
  Serial.println("GSM NEOWAY");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop() 
{
  if(mySerial.available()) //если модуль что-то послал
  {  
    char ch 
= ' ';
    String val = "";
    while(mySerial.available()) 
    
{  
      ch 
= mySerial.read();
      val += char(ch); //собираем принятые символы в строку
      delay(5);
    }
    Serial.print("Neo send> ");
    Serial.println(val);
    
    if
(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
    { 
      if
(val.indexOf("79999999999") > -1) // ВПИШИТЕ первый НОМЕР, с которого Вы будете звонить на модуль
      {  
        Serial
.println("Call my phone 1");
        mySerial.println("ATH");  //разрываем связь
        Serial.println("Disconnection");
        delay(3000);
        digitalWrite( 12, HIGH ); //ВКЛ светодиод
        Serial.println("ВКЛ светодиод");
      }
        
      if
(val.indexOf("79111111111") > -1) // ВПИШИТЕ второй НОМЕР, с которого Вы будете звонить на модуль
      {  
        Serial
.println("Call my phone 2");
        mySerial.println("ATH");  //разрываем связь
        Serial.println("Disconnection");
        delay(3000);
        digitalWrite( 12, LOW ); //ВЫКЛ светодиод
        Serial.println("ВЫКЛ светодиод");
      }
      else //Если чужой номер
      {
        Serial.println("NO MI TEL");
        mySerial.println("ATH");  //разрываем связь
      }
    }
  } 
}
i love you mxIni Mysql


Return to “Программирование”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest