цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и GSM: делаем телефонный вызов

Автор: Mike(admin) от 12-04-2017, 18:45

С помощью платы Arduino можно создавать порой удивительные проекты, особенно в сфере связи и беспроводной передачи информации. На основе Arduino можно даже собрать телефон! Хотя он будет достаточно простым, но он сможет выполнять основные функции, то есть в первую очередь он сможет звонить и принимать вызовы.


Arduino и GSM: делаем телефонный вызов

Для такого проекта нужен модуль GSM. GSM-модуль является очень распространенным устройством в оборудовании связи. С помощью него можно реализовывать такие функции как отправка сообщений, голосовой вызов, чтение сообщений, попытка вызова (дозвон) и т.д.


GSM-модуль очень прост в эксплуатации благодаря тому, что общение с ним производится посредством специальных AT-команд через последовательный порт. Сегодня на рынке электронных компонентов представлено большое количество GSM-модулей, и в данном случае воспользуемся одним из самых распространенных и недорогих модулей SIM300. Но помимо модуля и управляющей платы Arduino необходимо также позаботиться об интерфейсе пользователя этого импровизированного телефона. Для этого к Arduino можно подключить LCD-дисплей 16x2 для вывода данных, а также матричную клавиатуру 3x4 для ввода данных (номера телефона). Для полноценного телефонного звонка нужны также микрофон и динамик, но поскольку данный проект является учебным, то в данном случае просто рассмотрим, как делать дозвон без возможности получения обратной связи. При желании всегда можно подключить средства приема и передачи голосовой информации. Итак, схема подключения Arduino и GSM, а также клавиатуры и дисплея представлены ниже.


Arduino и GSM - схема подключения

Далее приведен код (скетч) для взаимодействия Arduino и GSM-модуля. Во время работы программы пользователь должен ввести с клавиатуры номер абонента и нажать на кнопку со звездочкой для осуществления вызова. Не забудьте при этом вставить сим-карту с положительным балансом.



#include<LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define R1 13
#define R2 12
#define R3 11
#define R4 10
#define C3 16  //A2
#define C2 15  //A1
#define C1 14  //A0
int i,j,r=0,c=0,num,m;

char value;
int temp=0;

char number[10];

void setup()
{
  Serial.begin(9600);
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(C1, INPUT);
  pinMode(C2, INPUT);
  pinMode(C3, INPUT);
 
  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
 
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("  Make A Call   ");
  lcd.setCursor(0,1);
  lcd.print("Using Keypad");
  delay(3000);
  lcd.clear();
}

void loop()
{
  lcd.setCursor(0,0);
  lcd.print(" Enter Number ");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("Dial(*)   del(#)");
  lcd.setCursor(0,0);
  c=0;r=0;
   num=0;
  temp=0;
  while(temp==0)
  {
    lcd.cursor();
    digitalWrite(R1, LOW);
   
    if(digitalRead(C1)==0)
   {
      lcd.print(number[num]='1');
      num++;
      delay(200);
       while(digitalRead(C1)==0);
       c++;
   }
  
   if(digitalRead(C2)==0)
   {
      lcd.print(number[num]='2');
      num++;
      delay(200);
       while(digitalRead(C2)==0);
       c++;
   }
  
   if(digitalRead(C3)==0)
   {
      lcd.print(number[num]='3');
      num++;
      delay(200);
       while(digitalRead(C3)==0);
       c++;
   }
  
     digitalWrite(R1, HIGH);
  digitalWrite(R2, LOW);

/* key 4 */

   if(digitalRead(C1)==0)
   {
      lcd.print(number[num]='4');
      num++;
      delay(200);
       while(digitalRead(C1)==0);
   c++;
}
  
   if(digitalRead(C2)==0)
   {
      lcd.print(number[num]='5');
      num++;
      delay(200);
       while(digitalRead(C2)==0);
c++;
   }
  
   if(digitalRead(C3)==0)
   {
      lcd.print(number[num]='6');
      num++;
      delay(200);
       while(digitalRead(C3)==0);
c++; 
}
 
   /* key 7*/
digitalWrite(R2, HIGH);
digitalWrite(R3, LOW);
   if(digitalRead(C1)==0)
   {
      lcd.print(number[num]='7');
      num++;
      delay(200);
       while(digitalRead(C1)==0);
c++; 
}
  
   if(digitalRead(C2)==0)
   {
      lcd.print(number[num]='8');
      num++;
      delay(200);
       while(digitalRead(C2)==0);
       c++;
   }
  
   if(digitalRead(C3)==0)
   {
      lcd.print(number[num]='9');
      num++;
      delay(200);
       while(digitalRead(C3)==0);
       c++;
   }
  
    /* key * */

digitalWrite(R3, HIGH);
digitalWrite(R4, LOW);
   if(digitalRead(C1)==0)
   {
      Serial.print("ATD+91");
      for(int i=0;i<10;i++)
      Serial.print(number[i]);
      Serial.println(";");
      delay(10);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("+91");
      for(int i=0;i<10;i++)
      lcd.print(number[i]);
      for(int i=0;i<25;i++)
      {
      lcd.setCursor(0,1);
      lcd.print("dialling.       ");
      delay(500);
      lcd.setCursor(0,1);
      lcd.print("dialling..      ");
      delay(500);
      lcd.setCursor(0,1);
      lcd.print("dialling...     ");
      delay(500);
      lcd.setCursor(0,1);
      lcd.print("dialling....    ");
      delay(500);
      }
      //delay(5000);
      lcd.setCursor(0,1);
      lcd.print("Call Ended      ");
      temp=1;
   }
  
    if(digitalRead(C2)==0)
    {
      lcd.noCursor();
      value=48;
      delay(10);
      for(i=0;i<200;i++)
      for(j=0;j<700;j++)
      {
       if(digitalRead(C2)==0)
       {
        lcd.setCursor(c,0);
        lcd.print(number[num]=value);
        value=value-6;
        if(value==36)
          value=35;
         if(value < 35)
          value=48;
        while(digitalRead(C2)==0);
        i=0,j=0;
        delay(100);
      }
    }
    num++;c++;
    if(c==16)
      c=0;
      while(digitalRead(C2)==0);
     }
    
  if(digitalRead(C3)==0)
  {
      num--;   
      c--;
      if(c<0)
      c=0;
    lcd.setCursor(c,r);
    lcd.print(' ');
    lcd.setCursor(c,r);
    while(digitalRead(C3)==0);
    delay(200);
  }
  digitalWrite(R4, HIGH);
  if(c==11)
  c=10;
  }
}



Теги: Arduino, GSM



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

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