DIY Smart Home Security Arduino+SIM800L+Infrared




Gsm based Home Automation are used to control Home devices Like TV , Lights , AC etc.
just take an example , if there are sunny day and you want to Turn on your AC Before you Even Walk In the Door.
So for this you have to send a SMS then AC will be turn on.
It is simple way to save electricity and make our home smart.



      Bill Of Material

Library Disini



Program Utama

=================================Source Code================================

#include "SIM900.h"
#include "sms.h"
#include "SoftwareSerial.h"
#include "EEPROM.h"
#include "PString.h"
#include "OneWire.h"
#include "Wire.h"

SMSGSM sms;
OneWire ds(6);
char smsbuffer[160];
char n[20];
char msg[160];
#include 
char buffer[100];
PString str(buffer, sizeof(buffer));
boolean started=false;
int mag1=10;
int mag2=9;
int relay1=2;
int relay2=3;
int relay3=4;
int relay4=5;
int api=15;
int pir=14;
int led=13;
boolean m1=false;
boolean m2=false;
boolean ap=false;
boolean pi=false;
void setup() {
//  Wire.begin();
  // put your setup code here, to run once:
 pinMode(relay1,OUTPUT);
 pinMode(relay2,OUTPUT);
 pinMode(relay3,OUTPUT);
 pinMode(relay4,OUTPUT);
 pinMode(led,OUTPUT);
 pinMode(mag1,INPUT_PULLUP);
 pinMode(mag2,INPUT_PULLUP);
 pinMode(api,INPUT);
 pinMode(pir,INPUT);
 
 if(gsm.begin(9600)){
   started=true;
   digitalWrite(led,HIGH);
   delay(100);
   digitalWrite(led,LOW);
   delay(100);
   digitalWrite(led,HIGH);
   delay(100);
   digitalWrite(led,LOW);
   delay(100);
   digitalWrite(led,HIGH);
   delay(100);
   digitalWrite(led,LOW);
   delay(100);
 }
 delsms();
}

void loop() {
  float temperature = getTemp();
  boolean sm1=digitalRead(mag1);
  boolean sm2=digitalRead(mag2);
  boolean p=digitalRead(api);
  boolean ir=digitalRead(pir);
  
  if(sm1){
   if(!m1){
    sms.SendSMS("081554763545","Pintu 1 Terbuka!!");
    m1=true;
   } 
    
  }
  else{
   m1=false; 
    
  }
  
  
  
  if(sm2){
   if(!m2){
    sms.SendSMS("081554763545","Pintu 2 Terbuka!!");
    m2=true;
   } 
    
  }
  else{
   m2=false; 
    
  }
  if(p){
   if(!ap){
    sms.SendSMS("081554763545","Terdeteksi Api!!");
    ap=true;
   } 
    
  }
  else{
   ap=false; 
    
  }
  
  if(ir){
   if(!pi){
    sms.SendSMS("081554763545","Ada pergerakan!!");
    pi=true;
   } 
    
  }
  else{
   pi=false; 
    
  }
  // put your main code here, to run repeatedly:
  int pos=0; 
  if(started){
   pos=sms.IsSMSPresent(SMS_ALL);
  if(pos){
   sms.GetSMS(pos,n,smsbuffer,100);
     if(!strcmp(smsbuffer,"suhu")){
     str.begin();
     str.print("Suhu ruangan ");
     str.print(temperature);
     str.print("Celcius");
    sms.SendSMS(n,buffer);
   }
   if(!strcmp(smsbuffer,"relay1on")){
    digitalWrite(relay1,HIGH); 
    sms.SendSMS(n,"Relay 1 sudah dinyalakan");
   }
   if(!strcmp(smsbuffer,"relay2on")){
    digitalWrite(relay2,HIGH); 
    sms.SendSMS(n,"Relay 2 sudah dinyalakan");
   }
   if(!strcmp(smsbuffer,"relay3on")){
    digitalWrite(relay3,HIGH); 
    sms.SendSMS(n,"Relay 3 sudah dinyalakan");
   }
   if(!strcmp(smsbuffer,"relay4on")){
    digitalWrite(relay4,HIGH); 
    sms.SendSMS(n,"Relay 4 sudah dinyalakan");
   }
   
   
   if(!strcmp(smsbuffer,"relay1off")){
    digitalWrite(relay1,LOW); 
    sms.SendSMS(n,"Relay 1 sudah dimatikan");
   }
   if(!strcmp(smsbuffer,"relay2off")){
    digitalWrite(relay2,LOW); 
    sms.SendSMS(n,"Relay 2 sudah dimatikan");
   }
   if(!strcmp(smsbuffer,"relay3off")){
    digitalWrite(relay3,LOW); 
    sms.SendSMS(n,"Relay 3 sudah dimatikan");
   }
   if(!strcmp(smsbuffer,"relay4off")){
    digitalWrite(relay4,LOW); 
    sms.SendSMS(n,"Relay 4 sudah dimatikan");
   }
   
   
   delsms();
   
  } 
    
  }
}



void delsms(){
  for(int i=0; i<10; i++){
   int pos=sms.IsSMSPresent(SMS_ALL);
  if(pos!=0){
   
   if(sms.DeleteSMS(pos)==1){}else{}
  } 
    
    
  }
  
  
}

float getTemp(){
 
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
   
      ds.reset_search();
      return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); 
  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); 

  
  for (int i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  
  ds.reset_search();
  
  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); 
  float TemperatureSum = tempRead / 16;
  
  return TemperatureSum;
  
}



Video

No comments

Dicky B_Mz. Powered by Blogger.