GSM Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial GSM IV

Ahora exploraremos como llamar a Arduino para hacer algo mas especifico.  Aquí vamos a parse otra informacion sobre la llamada entrante.

Requisitos:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. Modulo SIM900 GSM/GPRS
  4. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Estaremos usando el modulo SIM900 GSM/GPRS para nuestra comunicación:

Arduino - SIM900 GSM_GPRS module Santiapps Marcio Valenzuela
Arduino – SIM900 GSM_GPRS

Como podemos ver, el modulo tiene un pin 5V, 2 pines GND y los típicos 2 pines para Rx y Tx.  Seguiremos usando los pins 18 & 19 en nuestra MEGA como Serial1.

En este caso leeremos cuantas veces suena el timbre.  El timbre suena y manda una señal “RING”.  Mejor dicho la librería nos permite identificar 1 ring a la vez.  El modulo se comunica a traves de tonos y cada tono significa algo distinto.  Esto significa que podemos saber cuantas veces ha sonado el timbre de la llamada entrante y reaccionamos en base a esa informacion.

Veamos un ejemplo sencillo:

#include <SoftwareSerial.h>
char inchar;
//SoftwareSerial SIM900(7, 8);
int numring=0;
int comring=3;
int onoff=0; // 0 = off, 1 = on
void setup(){
Serial.begin(19200);
// set up the digital pins to control
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
// wake up the GSM shield
SIM900power();
Serial1.begin(19200);
Serial1.print("AT+CLIP=1\r");
delay(100);
}
void SIM900power(){
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(7000);
}
void doSomething(){
if (onoff==0){
onoff=1;
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
Serial.println("D12 high D13 low");
} else
if (onoff==1) {
onoff=0;
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
Serial.println("D12 low D13 high");
}
}
void loop(){
if(Serial1.available() >0){
inchar=Serial1.read();
if (inchar=='R'){
delay(10);
inchar=Serial1.read();
if (inchar=='I'){
delay(10);
inchar=Serial1.read();
if (inchar=='N'){
delay(10);
inchar=Serial1.read();
if (inchar=='G'){
delay(10);
// Nuestro modulo ha sonado 1 vez
numring++;
Serial.println("ring!");
if (numring==comring){
numring=0; // reseteamos el counter
doSomething();
}
}
}
}
}
}
}

Como podemos ver la tecnología nos permite realizar tareas bien especificas en base a controles bien puntuales en nuestros proyectos.

Exploremos ahora opciones con mensajes de texto!

Leave a Reply