GSM : SMS et détection

But du projet :

Détection de l’état d’une porte (ouverte ou fermée), envoi d’un SMS d’état et allumage d’une LED. Possibilité de débrancher à distance cette détection et de connaitre l’état.

 /*  
 *****************************************  
  SMS receiver and light on or off a LED  
 ****************************************  
  This sketch, for the Arduino GSM shield, waits for a SMS message   
  from a specific phone number then light on or off or send the LED  
  Status.  
  Circuit:  
  * GSM shield attached to and Arduino  
  * SIM card that can receive SMS messages  
  * Led plug in pin 13  
  * Contact Normaly Close NC on pin 7  
 */  
 //-- include the GSM library  
 #include <GSM.h>  
 //-- PIN Number for the SIM and Your Phone Number  
 #define PINNUMBER ""  
 #define MYPHONE "+33644051254"  
 //-- initialize the library instances  
 GSM gsmAccess;  
 GSM_SMS sms;  
 //-- Array to hold the number a SMS is retreived from  
 char cSenderNumber[20],charBuf[20],c;  
 String sNumber="", sMsg, sMessage="", sSmsNumber="";   
 int dp=0,dpLed=0;  
 //-- Led PIN  
 int led = 53;  
 int inPin = 51; // input pin (for contact)   
 int val = 0; // variable for reading the pin status   
 boolean contactstatus = true; //Current contact Status true=Open, false=Close  
 boolean dpAlarme = true; //Current alarme status  
 boolean dpPorte = false; //Current door status  
 //-- SetUp  
 void setup()   
 {//-- initialize led pin output, contact pin input  
  pinMode(led, OUTPUT);   
  pinMode(inPin, INPUT);  
  //-- initialize serial communications and wait for port to open:  
  Serial.begin(9600);  
  while (!Serial) {  
   ; // wait for serial port to connect. Needed for Leonardo only  
  }   
  Serial.println("SMS Messages Receiver");    
  // connection state  
  powerUpOrDown();  
  boolean notConnected = true;  
  // Start GSM connection  
  while(notConnected)  
  {if(gsmAccess.begin(PINNUMBER)==GSM_READY)  
    notConnected = false;  
  else  
  {Serial.println("Not connected");  
   delay(1000);  
   }  
  }  
  Serial.println("GSM initialized");  
  Serial.println("Waiting for messages");  
 }  
 //-- Sketch  
 void loop()   
 {//-- Detect the contact status  
  val = digitalRead(inPin); // read input value   
  if (val == HIGH) // Contact open  
  { if (!contactstatus) //-- If contact was closed  
   {digitalWrite( led, HIGH);    
    dpLed=1;   
    //Serial.println("Porte ouverte");  
     if (dpAlarme)  
      {sSmsNumber=MYPHONE;  
       sMessage="La porte est ouverte";   
       dpPorte=true;       
       SendSms();  
      }    
    contactstatus=true;   
   }  
   }  
   else if (val == LOW) // Contact close  
   { if (contactstatus) //-- If contact was open  
    {digitalWrite( led, LOW);      
     dpLed=0;   
     //Serial.println("Porte Fermée !");  
     if (dpAlarme)  
      {sMessage="Porte fermee";  
       dpPorte=false;  
       sSmsNumber=MYPHONE;  
       SendSms();  
       }    
     contactstatus=false;  
    }  
   }  
  //--If there are any SMSs available()   
  if (sms.available())  
  {Serial.println("Message received from:");  
   //-- Get remote number  
   sms.remoteNumber(cSenderNumber, 20);  
   sNumber=cSenderNumber;  
   Serial.println(sNumber);    
   //-- Read message bytes and print message  
   while(c=sms.read())  
    {sMsg=sMsg+c;}  
   Serial.println(sMsg);  
   dp=0;  
   //-- If it's Your Phone Calling  
   if(sNumber.equals(MYPHONE))  
   { sSmsNumber=MYPHONE;  
     sMsg.toUpperCase();  
     if (sMsg=="ON")    
      dp=1;   
     if (sMsg=="OFF")   
      dp=2;   
     if (sMsg=="?")   
      dp=3;      
     switch (dp) {   
     case 1 :   
      {digitalWrite( led, HIGH);    
       dpLed=1;  
       contactstatus=false;   
       dpAlarme=true;  
       break;}   
     case 2 :   
      {digitalWrite( led, LOW);    
       dpLed=0;  
       dpAlarme=false;  
       break;}   
     case 3 :   
      {if (dpAlarme)   
        {sMessage="L'alarme est active. ";}   
       else   
        {sMessage="L'alarme n'est pas active";}   
       if (dpPorte)  
           {sMessage=sMessage+"et la porte est ouverte.";}  
       else  
           {sMessage=sMessage+"et la porte est fermee.";}      
       SendSms();     
       break;    
       }    
     case 0 :     
      {sMessage="Erreur, tapez ON, OFF ou ?, merci !";   
      SendSms();    
      break;}   
    }   
   }  
   else  
   {//-- Sender UnKnown  
      sMessage="Message '"+sMsg+"' du "+sNumber;   
      sSmsNumber=MYPHONE;   
      SendSms();   
      delay(1000);  
      sSmsNumber=sNumber;  
      sMessage="Je ne vous connais pas !";  
      SendSms();  
   }  
   Serial.println("\nEND OF MESSAGE");  
   sMsg="";  
   sNumber="";  
   //-- Delete message from modem memory  
   sms.flush();  
   Serial.println("MESSAGE DELETED");  
    delay(1000);  
  }  
 }  
 //-- Sending message function  
 void SendSms()   
 {sSmsNumber.toCharArray(charBuf, 20);  
  // send the message  
  sms.beginSMS(charBuf);  
  sms.print(sMessage);  
  sms.endSMS();   
   delay(1000);  
 }  
 void powerUpOrDown()  
 {  
  pinMode(9, OUTPUT);   
  digitalWrite(9,LOW);  
  delay(1000);  
  digitalWrite(9,HIGH);  
  delay(2000);  
  digitalWrite(9,LOW);  
  delay(3000);  
 }  
5 comments on “GSM : SMS et détection
  1. daf64 dit :

    Bonsoir, je me suis inspire de votre code pour me faire une alarme maison.
    Je voudrais rajouter des portes, des capteurs et envoyer des SMS d’etat pour chaques capteurs, auriez vous une piste ?

  2. lucas dit :

    Bonjour
    avec quelle puce de gsm fonctionne ce sketch

  3. lucas dit :

    Bonjour
    avec quelle puce de gsm fonctionne ce sketch
    Cela convient pour une 800l

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :