Hoje vamos falar do shield GSM/GPRS/GPS SIM908 que dá a funcionalidade de chamadas de voz, SMS, dados via Internet e fax e mais a funcionalidade de GPS (localização). Este shield será utilizado no projeto para envio de SMS quando houver o aumento de temperatura e isto contornará o problema de monitoramento pois há maior chance do aviso chegar a uma rede GSM (celular) pois muitas vezes não temos uma conexão ativa de rede (mesmo redes móveis como 3G).
Vamos lá então!
Shield GSM/GPS SIM908 |
Desconectei a antena do GPS por não utilizá-la nos testes. Posteriormente vamos testar essa funcionalidade também!! Utilizei um cartão micro SIM de uma operadora e coloquei alguns créditos (você pode utilizar um cartão SIM ou micro SIM - quando usar o micro SIM encaixe com cuidado os contatos do cartão).
Esquema de ligação: este shield deve ser empilhado por último se você tiver outros shields por conta dos componentes que ele utiliza (são altos e o próprio shield não disponibiliza as barras de pinos). Eu utilizei ele sem empilhar no Arduino, fazendo as ligações com jumpers e utilizando uma mini protoboard em que eu a cortei no meio. Utilizei um quadro de distribuição Tigre para 3 ou 4 disjuntores para acomodar os componentes. Abri a caixa, retirei os suportes internos para os disjuntores. Posteriormente vou utilizá-lo para um outro projeto.
Vejam as fotos abaixo para ter uma idéia de como fixei o shield:
Quadro de distribuição para 3/4 disjuntores |
Mini protoboard cortada ao meio e colada na parte interna do quadro com dupla face |
Coloquei o shield de GSM forma que os pinos 2,3,5,6 ficassem alinhadas com os furos. |
Conectei os jumpers na protoboard nos pontos correspondentes aos pinos. |
Em outra lado do quadro fixei o Arduino e liguei os jumpers nos pinos 2, 3,5,6 do Arduino. Conectei jumpers nos pinos 3.3V, 5V, GND e Vin. |
Conectei os pinos 3.3V, 5V, GND e Vin na protoboard ligada ao shield GSM. |
Importante: conectar o Arduino com fonte externa. Para acionar o shield ele necessita de mais corrente que o Arduino fornece.
A biblioteca correspodente deste shield é esta:
https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
Vamos ao código:
#include "SIM900.h"
#include <SoftwareSerial.h>
// Se você quiser usar as funções para gerenciar SMS, descomente as linhas abaixo
#include "sms.h"
#include "call.h"
SMSGSM sms;
// Para mudar os pinos TX e RX modifique na biblioteca GSM.cpp (o padrão é pino 2 para TX e pino 3 para RX
//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.
//Este sketch envia um simples SMS. Há trechos comentados para efetuar chamadas de voz e ler SMS. Descomente-os se quiser testar essas funcionalidades.
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
int powerkey = 5;
int statuspin = 6;
int pinState = 0;
CallGSM call;
void setup()
{
pinMode(powerkey, OUTPUT); //define pino 5 como saída
pinMode(statuspin, INPUT); //define pino 6 como entrada
pinState = digitalRead(statuspin); //Lê o estado do pino 6
// Se o pino 6 estiver LOW, faz a sequencia de power on do Shield
if(pinState==LOW){
digitalWrite(powerkey, HIGH); // seta o pino 5 como HIGH
delay(2000); // espera 2 segundos
digitalWrite(powerkey, LOW); // seta o pino 5 como LOW
}
//Inicia monitoramento da serial.
Serial.begin(9600);
Serial.println("Testando GSM Shield.");
//Inicia a configuração do shield GSM com a velocidade de 2400
if (gsm.begin(2400)){
Serial.println("\nstatus=READY");
started=true;
}
else Serial.println("\nstatus=IDLE");
// Se o shield iniciou envia o SMS com a função SendSMS passando o número e a mensagem
if(started){
if (sms.SendSMS("015XXXXXXXXX", "Teste de SMS"))
Serial.println("\nSMS sent OK");
Se quiser testar chamadas de voz descomente as linhas abaixo
/*
if(call.CallStatus()!= CALL_ACTIVE_VOICE){
Serial.println("Chamando");
call.Call(015XXXXXXXXX);
*/
}
}
void loop()
{
// Se quiser testar a leitura de SMS descomente as linhas abaixo
/*
if(started){
//Read if there are messages on SIM card and print them.
if(gsm.readSMS(smsbuffer, 160, n, 20))
{
Serial.println(n);
Serial.println(smsbuffer);
}
delay(1000);
}
*/
};
Pessoal, é isso aí. Qualquer dúvida enviem seus comentários.
Até a próxima!