Arduino Forum

International => Español => Topic started by: ivan_navas1 on Nov 11, 2015, 12:22 am

Title: Problema módulo GSM y alarma
Post by: ivan_navas1 on Nov 11, 2015, 12:22 am
Hola, estoy intentando hacer una alarma con un arduino uno REV 3, la shield GSM 2 de arduino, un sensor PIR, una sirena y un buzzer. Bien, pongo el código y os comento cual es el problema que me esta volviendo loco porque no le encuentro la lógica por ninguna parte.

Bueno como veis abajo en el código, básicamente lo que hace es permitir activar o desactivar la alarma mediante llamadas perdidas, una llamada activa la alarma y otra la desactiva. Y estando activada comprueba periódicamente si recibe una llamada de desactivación y si estando activada detecta movimiento. Lo hace todo bien hasta que hago la llamada de desactivación. En vez de ejecutar el "Punto 3" se va directamente al "Punto 1" en adelante, que he puesto como comentarios. Lo curioso es que cuando hago la llamada de desactivación el detector se pone en HIGH sin haber movimiento alguno con lo cual la sirena se enciende durante unos segundos y ya después si que se desactiva la alarma. El problema es que esto no debe ocurrir, la alarma simplemente tiene que desactivarse sin hacer sonar la sirena. No se si se ha entendido todo.

#include <GSM.h>

#define PINNUMBER ""

GSM gsmAccess;
GSMVoiceCall llamadaSaliente;
GSMVoiceCall llamadaEntrante;
String numeroDestino = "660161598";  //número al que llamar
char charbuffer[20];
int estadoAlarma=0;
int estadoSensor=0;
int bocina=10; //Sonido que indica que hemos activado o desactivado la alarma
int sensor=6;
int sirena=8;

 
void setup()
{
  pinMode(bocina,OUTPUT);
  pinMode(sirena,OUTPUT);
  pinMode(sensor, INPUT);     
  boolean notConnected = true;
  digitalWrite(sirena, LOW);

  /*Serial.begin(9600);
while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  */
  //Esperamos que el módulo GSM se cargue
   while (notConnected)
  {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY)
      notConnected = false;
    else
    {
      delay(1000);
    }
  }

}

void loop()
{
  if(estadoAlarma==0)
  {
     switch (llamadaEntrante.getvoiceCallStatus())
     {
      case IDLE_CALL: // No ocurre nada
      break;

      case RECEIVINGCALL: // Nos llaman  y activamos la alarma
      delay(100);
      estadoAlarma=1;
     
      tone(bocina,700,1000);
      llamadaEntrante.hangCall();
      delay(5000);
     
      break;

      case TALKING:  //Si nos cogen la llamada colgamos directamente
      llamadaEntrante.hangCall();
      break;
      }
      delay(5000);
 
   }
   if(estadoAlarma==1)
   {
      if(llamadaEntrante.getvoiceCallStatus()==RECEIVINGCALL) //Punto 3
      {
        llamadaEntrante.hangCall(); //Si nos llaman colgamos y desactivamos la alrma
        estadoAlarma=0;
        tone(bocina,200,1000);
      }
     
      else
      {
      estadoSensor = digitalRead(sensor); //Comprobamos si hay movimiento
     
        if (estadoSensor == HIGH) //Punto 1
        {
        numeroDestino.toCharArray(charbuffer, 20); //Punto2
        llamadaSaliente.voiceCall(charbuffer); //En caso de detectar movimiento hacemos una llamada
        digitalWrite(sirena, HIGH); //Activamos la sirena durante un tiempo determinado
        delay(10000);
        digitalWrite(sirena, LOW);
        }
        delay(100);
      }
   }
   

}
Title: Re: Problema módulo GSM y alarma
Post by: ivan_navas1 on Nov 11, 2015, 01:44 pm
Buenas, creo que he encontrado la solución a mi problema, lo comento por aquí por si a alguien le ocurre lo mismo alguna vez, que es fácil. Bueno, el problema estaba en que por lo visto el sensor detecta las ondas que emite la llamada telefónica que efectuamos para activar y desactivar la alarma. Mi error era que tenía el sensor justo al lado del módulo GSM con lo cual en cuanto efectuaba la llamada al instante se encendía la sirena, antes incluso de que al programa le diera tiempo a comprobar si estábamos efectuando una llamada. Todo se soluciona apartando el sensor unos dos o tres metros del módulo GSM.

Un saludo.