Tutorial: Como fazer acionamentos com o Celular Shield via SMS

Olá Garagistas! Neste tutorial mostraremos como você pode utilizar o Celular Shield com SM5100B para fazer acionamentos via SMS. Como demonstração, faremos acionamentos de LEDS por SMS e também utilizaremos um sensor de corrente para fazer com que o Celular Shield nos envie uma SMS caso uma lâmpada for acionada.

 

Material Utilizado:

Adquira estes componentes na Loja do Lab de Garagem

1x Celular Shield com SM5100B

1x Arduino

1x Sensor de Corrente ACS712

3x LEDS 5mm

3x Resistor 330Ω

1x Lâmpadas 110V1x Interruptor

1x Protoboard

Alguns Jumpers

1. Celular Shield com SM5100B

Imagem 1 - Celular Shield com SM5100B

Este Shield Contém:

- Módulo SM5100B (sem antena): É um módulo GMS quad-band, que pode ser integrado em um grande número de projetos sem fio. Você pode usar este módulo para realizar quase qualquer coisa que um celular normal pode, como por exemplo: SMS, GSM, TCP/IP e muito mais.

- Soquete para SIM card: Você colocar um chip GSM da operadora de sua preferência.

- Comunicação serial selecionável por jumpers: Hardware ( D0 e D1) ou Software (D2 e D3)

- Headers para conexão de microfone ou auto-falante

- Botão de RESET

2. Comandos AT e Biblioteca SerialGSM.h

O Módulo SM5100B é configurado via comandos AT, a lista de todos os comandos você pode encontrar no Datasheet do Módulo.

A SerialGSM.h, é uma biblioteca que tem como finalidade auxiliar o usuário somente com mensagens SMS, ou seja, as funções dela são voltadas apenas para envio, recebimento, e tratamento de SMS.

3. Demonstrações

Todas as demonstrações contidas neste tutorial, podem ser acompanhadas no nosso vídeo, no início desta página.

- 3.1 Acionamento via SMS:


#include <SerialGSM.h> //Inclui a biblioteca SerialGSM.h
#include <SoftwareSerial.h> //Inclui a biblioteca SoftwareSerial.h
SerialGSM cel(2,3); //Configura os pinos 2 e 3 para se trabalhar como Rx e Tx via Software

String SMS; //Variável para o armazenamento da SMS recebida
String numeroRemetente; //Variável para o armazenamento do número do remetente da SMS
String numeroPermitido = "011982823030"; //Variável que define o número do celular que o sistema irá responder

boolean sendonce=true; //Variável boleana utilizada pela biblioteca SerialGSM.h

void setup()
{
  int i; //Variável para contagem
  for(i=5;i<=7;i++) //Laço que configura os pinos D5 a D7 como saída e em nível lógico 0(LOW)
  {
    pinMode(i,OUTPUT);
    digitalWrite(i,LOW);
  }

Serial.begin(9600); //Incializa a Serial(Hardware) com um Baud Rate de 9600
  cel.begin(9600); //Incializa a Serial(Software) com um Baud Rate de 9600
  cel.Verbose(true); //Função de configuração da biblioteca SerialGSM.h
  cel.Boot(); //Função de inicialização do Módulo SM5100B
  cel.DeleteAllSMS(); //Função para deletar todas as SMS do chip
  cel.FwdSMS2Serial(); //Função utilizada para enviar as SMS para a Serial

Serial.println(">>>>> Celular Shield Inicializado <"); //Mensagem de início da aplicação
  Serial.println(); //Pula linha
}

void loop()
{
  if (cel.ReceiveSMS()) //Se o chip no Celular Shield receber uma SMS
  {
    Serial.println(); //Pula linha
    Serial.println(); //Pula linha
    Serial.println(); //Pula linha
    Serial.println(); //Pula linha
    Serial.println("~~NOVA MENSAGEM RECEBIDA~~"); //Imprime na serial "NOVA MENSAGEM RECEBIDA"
    Serial.println(); //Pula linha

Serial.print("REMETENTE: "); //Imprime na serial a palavra "REMETENTE:"
    Serial.println(cel.Sender()); //Imprime o número do remetente que a SMS foi enviada

numeroRemetente = cel.Sender(); //Armazena na variável numeroRemetente o número do remetente

if(numeroRemetente != numeroPermitido) //Se o número do remetente não for o mesmo que o número permitido
    {
      Serial.println("Não Permitido"); //Imprime a mensagem "Não Permitido" e não executa nada
    }

else //Senão, o número é o permitido e executará os comandos
    {
      Serial.print("MENSAGEM: "); //Imprime na serial a palavra "MENSAGEM:"
      Serial.println(cel.Message()); //Imprime a mensagem que foi recebida
      SMS = cel.Message(); //Guarda na mensagem na variável SMS

//++++++++Tratamento do Primeiro Caractere++++++++
      if(SMS[0] == '1') //Se o primeiro caractere da SMS for igual a 1
      {
        digitalWrite(5,HIGH); //Acende o LED verde
        Serial.println();//Pula uma linha na serial
        Serial.println("LED VERDE ACESO"); //Imprime a mensagem "LED VERDE ACESO"
      }
      else if(SMS[0] == '0') //Senão, se o primeiro caractere for igual a 0
      {
        digitalWrite(5,LOW); //Apaga o LED verde
        Serial.println(); //Pula uma linha na serial
        Serial.println("LED VERDE APAGADO"); //Imprime a mensagem "LED VERDE APAGADO"
        Serial.println(); //Pula uma linha na serial
      }
      //=================================================
    }   

//++++++++Tratamento do Segundo Caractere++++++++
    if(SMS[1] == '1') //Se o segundo caractere da SMS for igual a 1
    {
      digitalWrite(6,HIGH); //Acende o LED amarelo
      Serial.println(); //Pula uma linha na serial
      Serial.println("LED AMARELO ACESO"); //Imprime a mensagem "LED AMARELO ACESO"
    }
    else if(SMS[1] == '0') //Senão, se o segundo caractere for igual a 0
    {
      digitalWrite(6,LOW); //Apaga o LED amarelo
      Serial.println(); //Pula uma linha na serial
      Serial.println("LED AMARELO APAGADO"); //Imprime a mensagem "LED AMARELO APAGADO"
    }
    //=================================================

//++++++++Tratamento do Terceiro Caractere++++++++
    if(SMS[2] == '1') //Se o terceiro caractere da SMS for igual a 1
    {
      digitalWrite(7,HIGH); //Acende o LED vermelho
      Serial.println(); //Pula uma linha na serial
      Serial.println("LED VERMELHO ACESO"); //Imprime a mensagem "LED VERMELHO ACESO"
    }
    else if(SMS[2] == '0') //Senão, se o terceiro caractere for igual a 0
    {
      digitalWrite(7,LOW); //Apaga o LED vermelho
      Serial.println(); //Pula uma linha na serial
      Serial.println("LED VERMELHO APAGADO"); //Imprime a mensagem "LED VERMELHO APAGADO"
    }
    //=================================================

cel.DeleteAllSMS(); //Deleta todas as SMS
  }
}

 

- 3.2 Notificação de Acionamento por SMS:

#include <SerialGSM.h> //Inclui a biblioteca SerialGSM.h
#include <SoftwareSerial.h> //Incluir a biblioteca SoftwareSerial.h
SerialGSM cell(2,3); //Configura os pinos 2 e 3 para serem utilizados como RX e TX

//Variáveis utilizadas para o cálculo do valor eficaz da corrente em AC
float valorSensor_aux = 0;
float valorSensor = 0;
float valorCorrente = 0;
float voltsporUnidade = 0.0048828125;
//======================================================================

void setup()
{
  Serial.begin(9600); //Inicializa a serial(Hardware) com Baud Rate = 9600

//Inicializa o Celular Shield
  cell.begin(9600);
  cell.Verbose(true);
  cell.Boot();
  cell.FwdSMS2Serial();
  //============================

Serial.println(); //Pula linha na Serial
  Serial.println(); //Pula linha na Serial
  delay(2000); //Delay de 2 segundos
}

void loop()
{
  ajusteSensor(); //Chama a função para o cálculo da corrente
  if(valorCorrente >= 0.50) //Se lâmpada estiver acesa
  {
    Serial.println(); //Pula linha na Serial
    Serial.println(); //Pula linha na Serial
    cell.Rcpt("982823030"); //Seleciono o número de envio da SMS
    cell.Message("LAMPADA ACIONADA"); //Escreve a mensagem "Lâmpada Acionada"
    cell.SendSMS(); //Envia a SMS
    Serial.println(); //Pula linha na Serial
    Serial.println(); //Pula linha na Serial
    while(valorCorrente >= 0.50) //Enquanto a lâmpada estiver acesa
    {
      ajusteSensor(); //Chama a função para o cálculo da corrente
    }
  }
}

void ajusteSensor() //Função para o cálculo do valor eficaz da corrente aferida
{
  for(int i=500; i>0; i--)
  {
    valorSensor_aux = (analogRead(A0) - 511); // Faz a leitura do sensor e subtrai 511 (511 = sem corrente no circuito = 0A)
    valorSensor += pow(valorSensor_aux,2);  // Soma os quadradosos das leituras no laço
  }
  valorSensor = (sqrt(valorSensor/ 500)) * voltsporUnidade; // Tira a raiz quadrada da média da somatória dos valores aferidos
  valorCorrente = (valorSensor/66)*1000; // Calcula a corrente considerando a sensibilida do sensor para 60mV/A
  if(valorCorrente < 0.50) //Se a corrente lida for menor que 0.50
  {
    Serial.println("Lampada Apagada"); //Imprime na serial "Lâmpada Apagada"
  }
  else
  {
    Serial.println("Lampada Acesa"); //Senão, imprime na serial "Lâmpada Acesa"
  }
  delay(1000); //Delay de 1 segundo entre as leituras
}

4. Montagem

- 4.1) Circuito da primeira demonstração (Acionamento via SMS): 

Figura 1 - Circuito da primeira demonstração

- 4.2) Ligações da segunda demonstração (Notificação de Acionamento por SMS):

4.2.1) Conecte o VCC(5V) e o GND do sensor ao Arduino, e para fazer a leitura do sensor neste tutorial, conectamos o VOUT do sensor ao pino A0:

Imagem 2 - Conexões do sensor de corrente no Celular Shield 

4.2.2) Faça as ligações em seu interruptor:

Imagem 3 - Ligações no interruptor

4.2.3) Faça as ligações em sua lâmpada:

Imagem 4 - Ligação da lâmpada no borne

4.2.4)Faça as ligações em série da lâmpada, sensor de corrente e o interruptor:

Imagem 5 - Circuito em série nos bornes

Então é isso Garagistas! Esperamos que tenham gostado deste tutorial, até a próxima!

Referências:

https://www.sparkfun.com/products/9607

https://www.sparkfun.com/products/8882

Exibições: 31023

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Wemerson Alves Saldanha em 20 outubro 2014 às 16:06

Olá pessoal estou tendo m problema com o no recebimento da mensagem onde fica da seguinte forma

Nova Mensagem Recebida
Remetente: +5527XXXXXXX

o correto seria 

Remetente: +5527XXXXXXXXX

e quero armazenar apenas o numero do celular em uma variável (XXXXXXXXX) para poder depois reenviar um relatorio para esse numero que enviou a mensagem.

1 - preciso de ajuda para pegar o numero completo.

2 - Depois armazenar em uma variável

para depois enviar.

Obrigado

Comentário de Phelipe Santos Silva em 4 setembro 2014 às 15:03

Olá pessoal, copilei a progamação 3.1 e esta dando um erro. algum poderia me ajudar?

Obrigado!

Phelipe Santos

Comentário de washington Luiz Santos em 11 agosto 2014 às 19:35

Onde consigo e como carregar a tela para o celular 

Comentário de washington Luiz Santos em 2 agosto 2014 às 21:04

OLA

gostaria de saber como ficaria o codigo para acionar cargas de forma que possa ser de qualquer aparaelho porem com uma senha para nao ser acionado de modo aleatorio mas de qualquer celular. e tambem como incluir mais acionamentos. Preciso acionar mais cargas tipo utilizar as 12 portas do arduino

Comentário de Francisco Alves em 31 julho 2014 às 14:51

nao esta dando certo com sim900

Comentário de Paulo souza em 20 julho 2014 às 10:55

ALGUÉM SABE COMO FAZER ISSO PORQUE NAO ESTOU ENCONTRANDO NADA COM TIME

ALGUÉM ME AJUDA??

Comentário de Paulo souza em 20 julho 2014 às 10:46

GALERA SOU NOVO POR AQUI E ESTOU MONTANDO UM PROJETINHO COM ARDUÍNO MEGA E SHIELD GSM USANDO ESTE CÓDIGO A CIMA.
MINHA IDEIA ECOLOCAR UM SENSOR PARA MONITORAR ABERTURA DE PERÍMETRO COM UM TIME DE 2 MINUTOS, ASSIM QUE FOR ABERTO O SENSOR ATIVE UMA SAÍDA ONDE TERA UM LED INDICANDO QUE IRA DISPARAR A SIRENE ATRAVÉS DE UM BOTÃO EU ZERO O PROGRAMA E COMEÇO NOVAMENTE SE O BOTÃO NÃO FOR PRESSIONADO DENTRO DE 2 MINUTOS  TOCA UMA SIRENE ATIVA OUTRA SAIDA

Comentário de Rosimar Barbosa de Freitas Jr em 22 maio 2014 às 23:38

Alguem ai Sabe dizer oque tem que alterar para funcionar no SIM900 ?? Por favor estou desesperado.

Comentário de João Ricardo Grillo em 21 fevereiro 2014 às 15:12

Prezados, alguma sugestão de como utilizar este sketch com o módulo GSM SIM900 Efcon v1.0? Devo alterar apenas os pinos para TX e RX?

Comentário de Paulo Toledo em 22 novembro 2013 às 21:52

pessoal não consigo subir o código exemplo postado acima, ele sempre da erro, estou usando o arduino mega.

C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:39:24: error: WConstants.h: No such file or directory
In file included from C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:41:
C:\Program Files\Arduino\libraries\SerialGSM\/NewSoftSerial.h:71: error: conflicting return type specified for 'virtual void NewSoftSerial::write(uint8_t)'
C:\Program Files\Arduino\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp: In member function 'void NewSoftSerial::tx_pin_write(uint8_t)':
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:291: error: 'LOW' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp: In member function 'void NewSoftSerial::setTX(uint8_t)':
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:368: error: 'OUTPUT' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:368: error: 'pinMode' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:369: error: 'HIGH' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:369: error: 'digitalWrite' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:370: error: 'digitalPinToBitMask' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:371: error: 'digitalPinToPort' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:372: error: 'portOutputRegister' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp: In member function 'void NewSoftSerial::setRX(uint8_t)':
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:377: error: 'INPUT' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:377: error: 'pinMode' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:379: error: 'HIGH' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:379: error: 'digitalWrite' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:381: error: 'digitalPinToBitMask' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:382: error: 'digitalPinToPort' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:383: error: 'portInputRegister' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp: In member function 'virtual void NewSoftSerial::write(uint8_t)':
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:472: error: 'HIGH' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:472: error: 'LOW' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:478: error: 'byte' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:478: error: expected `;' before 'mask'
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:478: error: 'mask' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:492: error: 'byte' was not declared in this scope
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:492: error: expected `;' before 'mask'
C:\Program Files\Arduino\libraries\SerialGSM\NewSoftSerial.cpp:492: error: 'mask' was not declared in this scope

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço