Pages: [1]   Go Down
Author Topic: Ajuda de Arduino e GSM  (Read 1154 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boas,

Estou a desenvolver uma aplicacao que irá necessitar de envio de mensagens para o utilizador!
Logo quero iniciar neste mundo do Arduino e gostaria de saber qual o melhor para poder enviar mensagens (GSM).
Qual o arduino que deverei comprar e qual o modolo GSM?


Aguardo respostas sabias!  smiley
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 27
Posts: 1414
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Qualquer arduino da quanto ao Modem eu tenho usado Siemens MC35 mas apenas por que é o que me veio à mão.O contra e que não há lib construída para ele e não tem implementado o stack TCPIP o que o torna inútil se quiseres usar o gprs
Quando tiver mais tempo vou criar uma library para ele visto que já o tenho um pouco estudado, e só colocar tudo numa classe c++.
No entanto muitos utilizadores recorrem ao Shield IComSat
Procura por este nome
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Entao sendo o Shield IComSat é melhor que o MC35?

onde aconselhas comprar?
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 27
Posts: 1414
Tomorrow I will know a BIT more than yesterday
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Como no Siemens nao tens lib para ele, é melhor optares por o IcomSat
Eu compraria no ebay mas podes procurar noutros locais.
http://www.ebay.co.uk/itm/SIM900-GSM-GPRS-Shield-for-Arduino-IComSat-V1-1-/120895187481?pt=UK_CCTV&hash=item1c25ea2a19
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

você pode postar o código?

estou desenvolvendo uma aplicação que exige o envio e recebimento de sms e tô tendo problemas pra enxergar como colocar os códigoss AT pro arduino rodar independente!

se puder, agradeço desde já!
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 75
3ª Idade ... in the house
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boas,

Antes de brincar com o arduino brincava com os pics e usava velhos telemóveis para lhes enviar comandos AT fica bem mais barato e sempre da para "reciclar" os velho telemóveis que estão no fundo das gavetas a ocupar espaço.

 Aqui fica um link prós nokia   ->>  http://www.embedtronics.com/nokia/fbus.html

E já agora alguém sabe como fazer mesmo uma chamada e enviar uma mensagem de voz como fazem os alarmes de roubo, em que ligam e esperam por a acção numa tecla definida para darem como fim do alarme ?

Cpts

Zé tretas
Logged

Arduino Mega 2560
Arduino Nano
Arduino UNO Rev3
Raspberry PI Model B
EasyPIC v4

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 381
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu uso este, funciona muito bem!



Code:
// André M. Schimohigashi
// 18/06/2012
//
// This code will make the Arduino sending an SMS every time it finds a GPS coordinate.
// coordinates can be programmed to be searched at any given time.
 
// # Product name: GPS/GPRS/GSM Module V2.0
// # Product SKU : TEL0051
// # Version     : 0.1

// # Steps:
// #        1. Turn the S1 switch to the EN(right side)
// #        2. Upload the sketch to the Arduino board
// #        3. Turn the S1 switch to the communication mode(left side)
// #        4. Turn the S2 switch to the Arduino side(right side)
// #        5. Turn the S3 switch to the ON side(right side)


String number = "????????"; // number of cellphone

String tmp;
double utc, lat, lon, alt;
char la_d, lo_d;

bool dadosOk = false, enviado = false;
byte gsmDriverPin[3] = {3,4,5};


void setup()
{

}

void loop()
{
  Serial.end();
  InitGpsMode();
   while(!dadosOk)
   {
     enviado = false;
     //Serial.println("GPS");
     gpsfuncao();   
     delay(100);     
   }   
   if(dadosOk){
     Serial.end();
     InitGsmMode();
     while(!enviado)
     {
       dadosOk = false;
       //Serial.println("GSM");
        gsmfuncao();       
        delay(100);       
     }
   } 
}

void InitGpsMode(){
  //ShutDown the GSM.
  digitalWrite(5, HIGH);
  delay(500);
  digitalWrite(5, LOW);
  for(int i=0; i <= 7; i++){
    delay(1000); //wait 8 seconds to shutdown gsm connections
  }
  //Init the driver pins for GSM function
  for(int i = 0 ; i < 3; i++){
    pinMode(gsmDriverPin[i],OUTPUT);
  }
  Serial.begin(4800);
  digitalWrite(3,HIGH);//Disable the GSM mode
  digitalWrite(4,LOW);//Enable the GPS mode
}

void InitGsmMode(){
  //Init the driver pins for GSM function
  for(int i = 0 ; i < 3; i++){
    pinMode(gsmDriverPin[i],OUTPUT);
  }
  Serial.begin(115200); 
  digitalWrite(3,LOW);//Enable the GSM mode
  digitalWrite(4,HIGH);//Disable the GPS mode
  //Output GSM Timing
  digitalWrite(5,HIGH);
  delay(1500);
  digitalWrite(5,LOW); 
  for(int i=0; i <= 7; i++){
    delay(1000);
  }
}

void gsmfuncao()
{
  Serial.println("AT");
  for(int i=0; i <= 5; i++){
    delay(1000);   
  }
  Serial.println("AT+CMGF=1");
  for(int i=0; i <= 5; i++){
    delay(1000);   
  }
  Serial.println("AT+CMGS=\"" + number + "\"");
  for(int i=0; i <= 5; i++){
    delay(1000);   
  } 
  Serial.print("UTC:");
  Serial.println(utc, 0);
  Serial.print("Lat:");
  Serial.println(lat, 4);
  Serial.print("Lon:");
  Serial.println(lon, 4);
  Serial.print("Lon_D:");
  Serial.println(lo_d);
  Serial.print("Lat_D:");
  Serial.println(la_d);
  Serial.print("Alt:");
  Serial.println(alt, 2);
  delay(1000);
  Serial.println((char)26);
  delay(1000); 
 
  Serial.println();
  enviado = true;   
}

void gpsfuncao()

  utc = UTC(); 
  lat = latitude(); 
  la_d = lat_dir(); 
  lon = longitude(); 
  lo_d = lon_dir(); 
  alt = altitude(); 
  dadosOk = true;
}

double Datatransfer(char *data_buf,char num)//convert the data to the float type
{                                           //*data_buf:the data array                                         //the number of the right of a decimal point
  double temp=0.0;
  unsigned char i,j;

  if(data_buf[0]=='-')//
  {
    i=1;
    //process the data array
    while(data_buf[i]!='.')
      temp=temp*10+(data_buf[i++]-0x30);
    for(j=0;j<num;j++)
      temp=temp*10+(data_buf[++i]-0x30);
    //convert the int type to the float type
    for(j=0;j<num;j++)
      temp=temp/10;
    //convert to the negative number
    temp=0-temp;
  }
  else//for the positive number
  {
    i=0;
    while(data_buf[i]!='.')
      temp=temp*10+(data_buf[i++]-0x30);
    for(j=0;j<num;j++)
      temp=temp*10+(data_buf[++i]-0x30);
    for(j=0;j<num;j++)
      temp=temp/10 ;
  }
  return temp;
}

char ID()//Match the ID commands
{
  char i=0;
  char value[6]={
    '$','G','P','G','G','A'    };//match the gps protocol
  char val[6]={
    '0','0','0','0','0','0'    };

  while(1)
  {
    if(Serial.available())
    {
      val[i] = Serial.read();//get the data from the serial interface
      if(val[i]==value[i])   //Match the protocol
      {   
        i++;
        if(i==6)
        {
          i=0;
          return 1;//break out after get the command
        }
      }
      else
        i=0;
    }
  }
}

void comma(char num)//get ','
{   
  char val;
  char count=0;//count the number of ','

  while(1)
  {
    if(Serial.available())
    {
      val = Serial.read();
      if(val==',')
        count++;
    }
    if(count==num)//if the command is right, run return
      return;
  }
}

double UTC()//get the UTC data -- the time
{
  char i;
  char time[9]={
    '0','0','0','0','0','0','0','0','0'
  };
  double t=0.0;
  String te;
  if(ID())//check ID
  {
    comma(1);//remove 1 ','
    //get the datas after headers
    while(1)
    {
      if(Serial.available())
      {
        time[i] = Serial.read();
        i++;
      }
      if(i==9)
      {
        i=0;
        t=Datatransfer(time,2);//convert data       
        if(t > 0 && t < 30000){
          t = t + 240000;
        }
        t=t-30000.00;//convert GMT-3 Time zone
        //Serial.println(t);//Print data
        return t;
      } 
    }
  }
}
double latitude()//get latitude
{
  double lt;
  char i;
  char lat[10]={
    '0','0','0','0','0','0','0','0','0','0'
  };

  if( ID())
  {
    comma(2);
    while(1)
    {
      if(Serial.available())
      {
        lat[i] = Serial.read();
        i++;
      }
      if(i==10)
      {
        i=0;
        lt = Datatransfer(lat,4);//print latitude
        return lt;
      } 
    }
  }
}
char lat_dir()//get dimensions
{
  char i=0,val;

  if( ID())
  {
    comma(3);
    while(1)
    {
      if(Serial.available())
      {
        val = Serial.read();
        //Serial.println(val);//print dimensions
        i++;
        return val;
      }
      if(i==1)
      {
        i=0;
        return val;
      } 
    }
  }
}
double longitude()//get longitude
{
  double ln;
  char i;
  char lon[11]={
    '0','0','0','0','0','0','0','0','0','0','0'
  };

  if(ID())
  {
    comma(4);
    while(1)
    {
      if(Serial.available())
      {
        lon[i] = Serial.read();
        i++;
      }
      if(i==11)
      {
        i=0;
        ln = Datatransfer(lon,4);//print longitude
        return ln;
      } 
    }
  }
}

char lon_dir()//
{
  char i=0,val;

  if(ID())
  {
    comma(5);
    while(1)
    {
      if(Serial.available())
      {
        val = Serial.read();
        //Serial.println(val);
        i++;
        return val;
      }
      if(i==1)
      {
        i=0;
        return val;
      }
    }
  }
}

double altitude()//get altitude data
{
  char i,flag=0;
  double at;
  char alt[8]={
    '0','0','0','0','0','0','0','0'
  };

  if( ID())
  {
    comma(9);
    while(1)
    {
      if(Serial.available())
      {
        alt[i] = Serial.read();
        if(alt[i]==',')
          flag=1;
        else
          i++;
      }
      if(flag)
      {
        i=0;
        at = Datatransfer(alt,1);//print altitude data
        return at;
      } 
    }
  }
}
Logged

????????????????????

Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 381
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu uso este, funciona muito bem!

http://www.dfrobot.com/wiki/index.php/GPS/GPRS/GSM_Module_V2.0_%28SKU:TEL0051%29

 smiley-cool
Logged

????????????????????

Pages: [1]   Go Up
Jump to: