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 Lâmpadas 110V1x Interruptor
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:
Comentar
Fico no aguardo. Obrigado.
Neto boa tarde, tenho uma sket que contempla o nono numero, estou chegando de viagem hoje e mando para você a noite.
Olá, bom dia.
estou tentando utilizar o sketch e o cel.Sender() retorna faltando o último dígito. Por exemplo, formato seria +5511988551021 e retorna +551198855102 (faltando o último dígito).
alguém poderia me ajudar?
os dois codigos dao erro quando verifico ...porque nos pinos 2 e 3 para rx e tx.....porque da erro de verificacao porta nao declarada
Ola pessoal, fiz várias tentativas com arduino uno + shield gsm sim 900 com este codigo, e não consegui obter sucesso. A unica mudanca que fiz foi nas portas, que meu shield somente habilita da 8 a 13, entao mudei, ao inves de 5, 6, 7, coloquei 9, 10, 11, mas mesmo assim nao obtive sucesso. Quando o monitor serial inicializa, a tela trava>>>>> Celular Shield Inicializado <, e nao executa nenhuma funcao, nem acusa o recebimento de mensagem. Ja fiz testes, enviando e recebendo mensagem, e efetuando ligacoes, e a shield funciona normalmente. Alguem pode me ajudar, estou com um projeto de conclusao de curso, e estou somente dependendo desde acionamento. Agradeço a ajuda!!
Ola amigos, gostaria de saber se algueme tem algum conhecimento referente ao arduino shield sim900?? Eu queria utilizar ele para montar um trabalho mas tenho uma duvida e queria saber se voce conseguiria me ajudar A minha duvida é o seguinte Tipo eu queria enviar um sms com um valor, digamos 20, que seria o numero E o meu shiel receber o numero 20 e eu poder tratar ele Nesse caso, dos 20, criar uma variavel para ir descontando desses 20 que recebi na msg, sera que isso é possivel ?
Boa Tarde...fiz as alterações para comunicação no Arduino Mega, porem, ao receber qualquer SMS, tenho apenas a seguinte mensagem no SerialMonitor
...............
AT+CMGD=1,4
AT+CMGD=1,4
AT+CMGF=1
-5þAT+CMGF=1
AT+CNMI=3,3,0,0
>>>>> Celular Shield Inicializado /p>
******recebeu sms:
OK
AT+CNMI=3,3,0,0
OK
+CMTI: "SM",1
como contornar a situação?
Boa noite
Deu erro no meu código:
SerialGSM.ino:95:1: error: stray '\' in program
SerialGSM.ino:95:1: error: stray '\' in program
SerialGSM.ino:95:1: error: expected unqualified-id before '-' token
SerialGSM.ino: In function 'void setup()':
SerialGSM.ino:105:6: error: redefinition of 'void setup()'
SerialGSM.ino:8:6: error: 'void setup()' previously defined here
SerialGSM.ino:109:3: error: 'cell' was not declared in this scope
SerialGSM.ino: In function 'void loop()':
SerialGSM.ino:118:6: error: redefinition of 'void loop()'
SerialGSM.ino:25:6: error: 'void loop()' previously defined here
SerialGSM.ino:125:5: error: 'cell' was not declared in this scope
Erro compilando.
Galera alguém sabe me dizer se no tratamento onde pede para ser enviado 1 e 0 posso usar uma palavra, tipo, ligar lampada da sala, desculpe a ignorância é que não sou programador, até onde sei, toda palavra é um numero decimal na linguagem de programação.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)