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

 

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



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

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

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