Translate

Monitor Gas dan Asap FUZZY LOGIC MAMDANI Arduino

Monitor Gas dan Asap FUZZY LOGIC MAMDANI Arduino


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk monitor gas dan asap dengan menggunakan metode fuzzy logic mamdani, alat ini menggunakan 4 buah sensor sebagi inputnya dan outputnya menggunakan relay. untuk lebih jelasnya berikut adalah komponen dan kodingnya. 


a. Arduino Mega




b. Sensor Gas MQ2 dan MQ135






c. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

float dinginx, hangatx, panasx;
float sedikitx, sedangx, banyakx;
float lbx, sdx, kex;
float hasillbx, hasilsdx, hasilkex;
float Coglbx, Cogsdx, Cogkex;
float Cogxlbx, Cogxsdx, Cogxkex;
float Komlbx, Komsdx, Komkex;
float Penlbx, Pensdx, Penkex;
float lb1x, lb2x, lb3x;
float sd1x, sd2x, sd3x;
float ke1x, ke2x, ke3x;
float dingin, hangat, panas;
float sedikit, sedang, banyak;
float lb, sd, ke;
float hasillb, hasilsd, hasilke;
float Coglb, Cogsd, Cogke;
float Cogxlb, Cogxsd, Cogxke;
float Komlb, Komsd, Komke;
float Penlb, Pensd, Penke;
float Totalkom, Totalpen;
float Totalkomx, Totalpenx;
float Cog1,Cog2,Cogt;
float lb1, lb2, lb3;
float sd1, sd2, sd3;
float ke1, ke2, ke3;

float adc1mq135;
float adc2mq2;
float adc3mq135;
float adc4mq2;
int statusarea = 0;
int pompa = 0;
int valve = 0;
int doorlock = 0;

//pompa
int relay1 = 22;
//doorlock
int relay2 = 24;
//solenoid1
int relay3 = 26;
//solenoid2
int relay4 = 28;

int led = 30;
int buzzer = 49;

void setup()
{
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
 
  pinMode(buzzer,OUTPUT);
  pinMode(led,OUTPUT);
 
  pinMode(relay1,OUTPUT);
  pinMode(relay2,OUTPUT);
  pinMode(relay3,OUTPUT);
  pinMode(relay4,OUTPUT);
  digitalWrite(relay1,HIGH);
  digitalWrite(relay2,HIGH);
  digitalWrite(relay3,HIGH);
  digitalWrite(relay4,HIGH);
 
  digitalWrite(led,LOW);
  digitalWrite(buzzer,LOW);
}


void loop()
{
 
adc1mq135 = analogRead(A0);
adc2mq2 = analogRead(A1);
 
delay(200);

  //===============================
  //       fuzzyfikasi gas 1 MQ135
  //===============================
 
   if(adc1mq135 <= 150){
   sedikit = 1;
   sedang = 0;
   banyak = 0;
   }
   else if(adc1mq135 >= 300){
   banyak = 1;
   sedang = 0;
   sedikit = 0;
   }
   else if(adc1mq135 == 200){
   banyak = 0;
   sedang = 1;
   sedikit = 0;
   }
   else if((adc1mq135 > 150)&&(adc1mq135 < 200)){
   sedang = (adc1mq135 - 150)/50;
   sedikit = 1-(adc1mq135 - 150)/50;
   banyak = 0;
   }
   else if((adc1mq135 > 200)&&(adc1mq135 < 300)){
   sedang = (adc1mq135 - 200)/100;
   banyak = 1-(adc1mq135 - 200)/100;
   sedikit = 0;
   }
   
/*  
   Serial.print("Sedikit= ");  
   Serial.println(sedikit);
   Serial.print("sedang= ");  
   Serial.println(sedang);
   Serial.print("banyak= ");  
   Serial.println(banyak);
*/   
      
   //===============================
   //       fuzzyfikasi gas 2 MQ2
   //===============================
 
   if(adc2mq2 <= 150){
   dingin = 1;
   hangat = 0;
   panas = 0;
   }
   else if(adc2mq2 >= 300){
   dingin = 0;
   hangat = 0;
   panas = 1;
   }
   else if(adc2mq2 == 200){
   dingin = 0;
   hangat = 1;
   panas = 0;
   }
   else if((adc2mq2 > 150)&&(adc2mq2 < 200)){
   hangat = (adc2mq2 - 150)/50;
   dingin = 1-(adc2mq2 - 150)/50;
   panas = 0;
   }
   else if((adc2mq2 > 200)&&(adc2mq2 < 300)){
   hangat = (adc2mq2 - 200)/100;
   panas = 1-(adc2mq2 - 200)/100;
   dingin = 0;
   }

/*  
   Serial.print("Sedikit= ");  
   Serial.println(sedikit);
   Serial.print("sedang= ");  
   Serial.println(sedang);
   Serial.print("banyak= ");  
   Serial.println(banyak);
*/     


//==================================
 //           fuzzy rule 1
 //===================================
     
   //============================================================================
   if((adc1mq135 <= 150 )&&(adc2mq2 <= 150)){ //1A
    if(dingin < sedikit){
    lb = dingin;
    }
    else if(dingin > sedikit){
    lb = sedikit;
    }
    else if(dingin == sedikit){
    lb = sedikit;
    }
   
    hasillb = lb;
    hasilsd = 0;
    hasilke = 0;
    
   }
 
   //=========================================================================
 
   else if((adc1mq135 <= 150 )&&(adc2mq2 > 150)&&(adc2mq2 < 200)){ //1AB
    if(dingin < sedikit){
    lb1 = dingin;
    }
    else if(dingin > sedikit){
    lb1 = sedikit;
    }
    else if(dingin == sedikit){
    lb1 = sedikit;
    }
   
    if(dingin < sedang){
    lb2 = dingin;
    }
    else if(dingin > sedang){
    lb2 = sedang;
    }
    else if(dingin == sedang){
    lb2 = sedang ;
    }
   
    if(lb1 < lb2){   
     hasillb = lb2;  
    }
    else if(lb1 > lb2){   
     hasillb = lb1;  
    }
    else if(lb1 == lb2){   
     hasillb = lb1;  
    }
   
    hasilsd = 0;
    hasilke = 0;
    
   }
 
   //========================================================================
    else if((adc1mq135 <= 150 )&&(adc2mq2 > 200)&&(adc2mq2 < 300)){ //1BC
    if(dingin < sedang){
    lb = dingin;
    }
    else if(dingin > sedang){
    lb = sedang;
    }
    else if(dingin == sedang){
    lb = sedang;
    }
   
    if(dingin < banyak){
    sd = dingin;
    }
    else if(dingin > banyak){
    sd = banyak;
    }
    else if(dingin == banyak){
    sd = banyak;
    }
   
    hasillb = lb;  
    hasilsd = sd;
    hasilke = 0;
    
   }
 
   //=======================================================================
    else if((adc1mq135 <= 150 )&&(adc2mq2 >= 300)){ //1C

    if(dingin < banyak){
    sd = dingin;
    }
    else if(dingin > banyak){
    sd = banyak;
    }
    else if(dingin == banyak){
    sd = banyak;
    }
   
    hasillb = 0;  
    hasilsd = sd;
    hasilke = 0;
    
   }
 
 
   //==========================================================================
 
    else if((adc1mq135 > 150 )&&(adc1mq135 < 200 )&&(adc2mq2 <= 150)){ //12A

    if(dingin < sedikit){
    lb1 = dingin;
    }
    else if(dingin > sedikit){
    lb1 = sedikit;
    }
    else if(dingin == sedikit){
    lb1 = sedikit;
    }
   
   
    if(hangat > sedikit){
    lb2 = sedikit;
    }
    else if(hangat < sedikit){
    lb2 = hangat;
    }
    else if(hangat == sedikit){
    lb2 = hangat;
    }
   
   
    if(lb1 < lb2){   
     hasillb = lb2;  
    }
    else if(lb1 > lb2){   
     hasillb = lb1;  
    }
    else if(lb1 == lb2){   
     hasillb = lb1;  
    }
   
    hasilsd = 0;
    hasilke = 0;
    
   }
 
   //=========================================================================
 
    else if((adc1mq135 > 150 )&&(adc1mq135 < 200 )&&(adc2mq2 > 150)&&(adc2mq2 < 200)){ //12AB

    if(dingin < sedikit){
    lb1 = dingin;
    }
    else if(dingin > sedikit){
    lb1 = sedikit;
    }
    else if(dingin == sedikit){
    lb1 = sedikit;
    }
   
   
    if(dingin < sedang){
    lb2 = dingin;
    }
    else if(dingin > sedang){
    lb2 = sedang;
    }
    else if(dingin == sedang){
    lb2 = sedang;
    }
   
   
    if(hangat < sedikit){
    lb3 = dingin;
    }
    else if(hangat > sedikit){
    lb3 = sedikit;
    }
    else if(hangat == sedikit){
    lb3 = sedikit;
    }
   
   
    if(hangat < sedang){
    sd = hangat;
    }
    else if(hangat > sedang){
    sd = sedang;
    }
    else if(hangat == sedang){
    sd = sedang;
    }
   
   
   if((lb1 > lb2)&&(lb1 > lb3)){                         
   hasillb = lb1;
   }
   else if((lb1 > lb2)&&(lb1 == lb3)){
   hasillb = lb1;
   }
   else if((lb1 == lb2)&&(lb1 > lb3)){
   hasillb = lb1;
   }
   else if((lb1 == lb2)&&(lb1 == lb3)){
   hasillb = lb1;
   }
   else if((lb2 > lb1)&&(lb2 > lb3)){
   hasillb = lb2;
   }
   else if((lb2 > lb1)&&(lb2 == lb3)){
   hasillb = lb2;
   }
   else if((lb2 == lb1)&&(lb2 > lb3)){
   hasillb = lb2;
   }
   else if((lb2 == lb1)&&(lb2 == lb3)){
   hasillb = lb2;
   }
   else if((lb3 > lb1)&&(lb3 > lb2)){
   hasillb = lb3;
   }
   else if((lb3 > lb1)&&(lb3 == lb2)){
   hasillb = lb3;
   }
   else if((lb3 == lb1)&&(lb3 > lb2)){
   hasillb = lb3;
   }
   else if((lb3 == lb1)&&(lb3 == lb2)){
   hasillb = lb3;
   }

   hasilsd = sd;
   hasilke = 0;
   
   }
 
   //===============================================================================
 
   else if((adc1mq135 > 150)&&(adc1mq135 < 200)&&(adc2mq2 > 200)&&(adc2mq2 < 300)){ //12BC
   if (dingin < sedang){
   lb = dingin;
   }
   else if(dingin > sedang){
   lb = sedang;
   }
   else if(dingin == sedang){
   lb = sedang;
   }

   if(dingin < banyak){
   sd1 = dingin;
   }
   else if(dingin > banyak){
   sd1 = banyak;
   }
   else if(dingin == banyak){
   sd1 = banyak;
   }

   if(hangat < sedang){
   sd2 = hangat;
   }
   else if(hangat > sedang){
   sd2 = sedang;
   }
   else if(hangat == sedang){
   sd2 = sedang;
   }

   if(hangat < banyak){
   ke = hangat;
   }
   else if(hangat > banyak){
   ke = banyak;
   }
   else if(hangat == banyak){
   ke = banyak;
   }

   if(sd1 > sd2){
   hasilsd = sd1;
   }
   else if(sd2 > sd1){
   hasilsd = sd2;
   }
   else if(sd2 == sd1){
   hasilsd = sd2;
   }

   hasillb = lb;
   hasilke = ke;

   }

   //=======================================================================

   else if((adc1mq135 > 150)&&(adc1mq135 < 200)&&(adc2mq2 >= 300)){ //12C
    
   if(dingin < banyak){
   sd = dingin;
   }
   else if(dingin > banyak){
   sd = banyak;
   }
   else if(dingin == banyak){
   sd = banyak;
   }

   if(hangat > banyak){
   ke = banyak;
   }
   else if(hangat < banyak){
   ke = hangat;
   }
   else if(hangat == banyak){
   ke = hangat;
   }
 
   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
   }

   //===============================================================
   else if ((adc1mq135 == 200) && (adc2mq2 <= 150)){ //2A
   if (hangat > sedikit){    
   lb = sedikit;
   }
   else if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat == sedikit){
   lb = hangat;
   }

   hasillb = lb;
   hasilsd = 0;
   hasilke = 0;
   }
 
   //============================================================
   else if ((adc1mq135 == 200) && (adc2mq2 > 150) && (adc2mq2 < 200)){ //2AB
   if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat > sedikit){
   lb = sedikit;
   }
   else if (hangat == sedikit){
   lb = sedikit;
   }
 

   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedikit){
   sd = sedikit;
   }
   else if (hangat == sedikit){
   sd = sedikit;
   }

   hasillb = lb;
   hasilsd = sd;
   hasilke = 0;
 
   }

//===================================================================
   else if ((adc1mq135 == 200) && (adc2mq2 > 200) && (adc2mq2 < 300)){ //2BC
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   if (hangat < banyak){
   ke = hangat;
   }
   else if (hangat > banyak){
   ke = banyak;
   }
   else if (hangat == banyak){
   ke = banyak;
   }

   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
 
   }

 //=============================================================
   else if ((adc1mq135 == 200) && (adc2mq2 >= 300)){  //2C
   if (hangat < banyak){
   ke = hangat;
   }
   else if (hangat > banyak){
   ke = banyak;
   }
   else if (hangat == banyak){
   ke = banyak;
   }

   hasilke = ke;
   hasilsd = 0;
   hasillb = 0;

}


//====================================================================

   else if ((adc1mq135 > 200) && (adc1mq135 < 300) && (adc2mq2 <= 150)){ //23A
   if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat > sedikit){
   lb = sedikit;
   }
   else if (hangat == sedikit){
   lb = sedikit;
   }
 
   if (panas < sedikit){
   sd = panas;
   }
   else if (panas > sedikit){
   sd = sedikit;
   }
   else if (panas == sedikit){
   sd = sedikit;
   }

   hasillb = lb;
   hasilsd = sd;
   hasilke = 0;
   }

//=======================================================================

   else if ((adc1mq135 > 200) && (adc1mq135 < 300) && (adc2mq2 > 150) && (adc2mq2 < 200)){  //23AB
   if (hangat < sedikit){
   lb = hangat;
   }
   else if (hangat > sedikit){
   lb = sedikit;
   }
   else if (hangat == sedikit){
   lb = sedikit;
   }

   if (hangat < sedang){
   sd1 = hangat;
   }
   else if (hangat > sedang){
   sd1 = sedang;
   }
   else if (hangat == sedang){
   sd1 = sedang;
   }
 
   if (panas < sedikit){
   sd2 = panas;
   }
   else if (panas > sedikit){
   sd2 = sedikit;
   }
   else if (panas == sedikit){
   sd2 = sedikit;
   }

   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }

   if (sd1 < sd2){
   hasilsd = sd2;
   }
   else if (sd1 > sd2){
   hasilsd = sd1;
   }
   else if (sd1 == sd2){
   hasilsd = sd1;
   }

   hasilke = ke;
   hasillb = lb;
   }

//=========================================================================

   else if ((adc1mq135 > 200) && (adc1mq135 < 300) && (adc2mq2 > 200) && (adc2mq2 < 300)){ //23BC
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   if (hangat < banyak){
   ke1 = hangat;
   }
   else if (hangat > banyak){
   ke1 = banyak;
   }
   else if (hangat == banyak){
   ke1 = banyak;
   }

   if (panas < sedang){
   ke2 = panas;
   }
   else if (panas > sedang){
   ke2 = sedang;
   }
   else if (panas == sedang){
   ke2 = sedang;
   }

   if (panas < banyak){
   ke3 = panas;
   }
   else if (panas > banyak){
   ke3 = banyak;
   }
   else if (panas == banyak){
   ke3 = banyak;
   }
 
   if ((ke1 > ke2) && (ke1 > ke3)){
   hasilke = ke1;
   }
   else if ((ke1 > ke2) && (ke1 == ke3)){
   hasilke = ke1;
   }
   else if ((ke1 == ke2) && (ke1 > ke3)){
   hasilke = ke1;
   }
   else if ((ke1 == ke2) && (ke1 == ke3)){
   hasilke = ke1;
   }
   else if ((ke2 > ke1) && (ke2 > ke3)){
   hasilke = ke2;
   }
   else if ((ke2 > ke1) && (ke2 == ke3)){
   hasilke = ke2;
   }
   else if ((ke2 == ke1) && (ke2 > ke3)){
   hasilke = ke2;
   }
   else if ((ke2 == ke1) && (ke2 == ke3)){
   hasilke = ke2;
   }

   else if ((ke3 > ke1) && (ke3 > ke2)){
   hasilke = ke3;
   }
   else if ((ke3 > ke1) && (ke3 == ke2)){
   hasilke = ke3;
   }
   else if ((ke3 == ke1) && (ke3 > ke2)){
   hasilke = ke3;
   }
   else if ((ke3 == ke1) && (ke3 == ke2)){
   hasilke = ke3;
   }

   hasilsd = sd;
   hasillb = 0;
   }

//===========================================================================

   else if ((adc1mq135 > 200) && (adc1mq135 < 300) && (adc2mq2 >= 300)){ //23C
   if (hangat < banyak){
   ke1 = hangat;
   }
   else if (hangat > banyak){
   ke1 = banyak;
   }
   else if (hangat == banyak){
   ke1 = banyak;
   }

   if (panas < banyak){
   ke2 = panas;
   }
   else if (panas > banyak){
   ke2 = banyak;
   }
   else if (panas == banyak){
   ke2 = banyak;
   }

   if (ke1 < ke2){
   hasilke = ke2;
   }
   else if (ke1 > ke2){
   hasilke = ke1;
   }
   else if (ke1 == ke2){
   hasilke = ke1;
   }

   hasilsd = 0;
   hasillb = 0;
   }

//===========================================================================

  else if ((adc1mq135 >= 300) && (adc2mq2 <= 150)){  //3A
   if (panas < sedikit){
   sd = panas;
   }
   else if (panas > sedikit){
   sd = sedikit;
   }
   else if (panas == sedikit){
   sd = sedikit;
   }

   hasilsd = sd;
   hasillb = 0;
   hasilke = 0;
   }

//============================================================================

else if ((adc1mq135 >= 300) && (adc2mq2 > 150) && (adc2mq2 < 200)){  //3AB
   if (panas < sedikit){
   sd = panas;
   }
   else if (panas > sedikit){
   sd = sedikit;
   }
   else if (panas == sedikit){
   sd = sedikit;
   }

   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }

   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
   }
 
 
//======================================================================  
 
else if ((adc1mq135 >= 300) && (adc2mq2 > 200) && (adc2mq2 < 300)){ //3BC
   if (panas < sedang){
   ke1 = panas;
   }
   else if (panas > sedang){
   ke1 = sedang;
   }
   else if (panas == sedang){
   ke1 = sedang;
   }

   if (panas < banyak){
   ke2 = panas;
   }
   else if (panas > banyak){
   ke2 = banyak;
   }
   else if (panas == banyak){
   ke2 = banyak;
   }

   if (ke1 < ke2){
   hasilke = ke2;
   }
   else if (ke1 > ke2){
   hasilke = ke1;
   }
   else if (ke1 == ke2){
   hasilke = ke1;
   }

   hasillb = 0;
   hasilsd = 0;
   }

//=========================================================================

else if ((adc1mq135 >= 300) && (adc2mq2 >= 300)){ //3C
   if (panas < banyak){
   ke = panas;
   }
   else if (panas > banyak){
   ke = banyak;
   }
   else if (panas == banyak){
   ke = banyak;
   }

   hasilke = ke;
   hasilsd = 0;
   hasillb = 0;
}


//======================================================================

else if ((adc1mq135 <= 150) && (adc2mq2 == 200)){ //1B
   if (dingin < sedang){
   lb = dingin;
   }
   else if (dingin > sedang){
   lb = sedang;
   }
   else if (dingin == sedang){
   lb = sedang;
   }

   hasillb = lb;
   hasilsd = 0;
   hasilke = 0;
}

//===================================================================

else if ((adc1mq135 > 150) && (adc1mq135 < 200) && (adc2mq2 == 200)){ //12B
   if (dingin < sedang){
   lb = dingin;
   }
   else if (dingin > sedang){
   lb = sedang;
   }
   else if (dingin == sedang){
   lb = sedang;
   }

   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   hasillb = lb;
   hasilsd = sd;
   hasilke = 0;
}

//==========================================================

else if ((adc1mq135 == 200) && (adc2mq2 == 200)){ //2B
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   hasilsd = sd;
   hasillb = 0;
   hasilke = 0;
 
}


//================================================================

else if ((adc1mq135 > 200) && (adc1mq135 < 300) && (adc2mq2 == 200)){ //23B
   if (hangat < sedang){
   sd = hangat;
   }
   else if (hangat > sedang){
   sd = sedang;
   }
   else if (hangat == sedang){
   sd = sedang;
   }

   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }
 
   hasilsd = sd;
   hasilke = ke;
   hasillb = 0;
}



//================================================================

else if ((adc1mq135 >= 300) && (adc2mq2 == 200)){  //3B
   if (panas < sedang){
   ke = panas;
   }
   else if (panas > sedang){
   ke = sedang;
   }
   else if (panas == sedang){
   ke = sedang;
   }

   hasilke = ke;
   hasilsd = 0;
   hasillb = 0;

}  

 

//==================================================
//               Defuzzifikasi 1
//==================================================

//0-10-20-200
Coglb = 60;
Cogxlb = 4;

//40-50-60-70
Cogsd = 220;
Cogxsd = 4;

//80-90-100-110-120
Cogke = 500;
Cogxke = 5;

Totalkom = (Coglb * hasillb) + (Cogsd * hasilsd) + (Cogke * hasilke);

Totalpen = (hasillb * Cogxlb) + (hasilsd * Cogxsd) + (hasilke * Cogxke);

Cog1 = Totalkom / Totalpen;

/*
   Serial.print("hasillb= ");
   Serial.println(hasillb);
   Serial.print("hasilsd= ");
   Serial.println(hasilsd);
   Serial.print("hasilke= ");
   Serial.println(hasilke);
   
   Serial.print("Totalkom= ");
   Serial.println(Totalkom);
   Serial.print("Totalpen= ");
   Serial.println(Totalpen);
   Serial.print("COG= ");
   Serial.println(Cog1);
*/

   lcd.setCursor(0,0);
   lcd.print("M135=");
   lcd.print(adc1mq135,0);
   lcd.print(" ");
   lcd.setCursor(0,1);
   lcd.print("MQ02=");
   lcd.print(adc2mq2,0);
   lcd.print(" ");
   //lcd.setCursor (10,0);
   //lcd.print ("COG1=");
   //lcd.print (Cog1,1);
   //lcd.print (" ");
 
  delay(100);
   
   
//=======================================================================================================================================   
   
     
adc3mq135 = analogRead(A2);
adc4mq2 = analogRead(A3);  

   //===============================
   //       fuzzyfikasi gas 3 MQ135
   //===============================
 
   if(adc3mq135 <= 150){
   sedikitx = 1;
   sedangx = 0;
   banyakx = 0;
   }
   else if(adc3mq135 >= 300){
   banyakx = 1;
   sedangx = 0;
   sedikitx = 0;
   }
   else if(adc3mq135 == 200){
   banyakx = 0;
   sedangx = 1;
   sedikitx = 0;
   }
   else if((adc3mq135 > 150)&&(adc3mq135 < 200)){
   sedangx = (adc3mq135 - 150)/50;
   sedikitx = 1-(adc3mq135 - 150)/50;
   banyakx = 0;
   }
   else if((adc3mq135 > 200)&&(adc3mq135 < 300)){
   sedangx = (adc3mq135 - 200)/100;
   banyakx = 1-(adc3mq135 - 200)/100;
   sedikitx = 0;
   }
 
 //  Serial.print("Sedikit= ");  
 //  Serial.println(sedikit);
 //  Serial.print("sedang= ");  
 //  Serial.println(sedang);
 //  Serial.print("banyak= ");  
 //  Serial.println(banyak);
 
 
   //===============================
   //       fuzzyfikasi gas 4 MQ2
   //===============================
 
   if(adc4mq2 <= 150){
   dinginx = 1;
   hangatx = 0;
   panasx = 0;
   }
   else if(adc4mq2 >= 300){
   panasx = 1;
   hangatx = 0;
   dinginx = 0;
   }
   else if(adc4mq2 == 200){
   panasx = 0;
   hangatx = 1;
   dinginx = 0;
   }
   else if((adc4mq2 > 150)&&(adc4mq2 < 200)){
   hangatx = (adc4mq2 - 150)/50;
   dinginx = 1-(adc4mq2 - 150)/50;
   panasx = 0;
   }
   else if((adc4mq2 > 200)&&(adc4mq2 < 300)){
   hangatx = (adc4mq2 - 200)/100;
   panasx = 1-(adc4mq2 - 200)/100;
   dinginx = 0;
   }
 
 //  Serial.print("Sedikit= ");  
 //  Serial.println(sedikit);
 //  Serial.print("sedang= ");  
 //  Serial.println(sedang);
 //  Serial.print("banyak= ");  
 //  Serial.println(banyak);


   //==================================
   //           fuzzy rule 2
   //===================================
     
   //============================================================================
   if((adc3mq135 <= 150 )&&(adc4mq2 <= 150)){ //1A
    if(dinginx < sedikitx){
    lbx = dinginx;
    }
    else if(dinginx > sedikitx){
    lbx = sedikitx;
    }
    else if(dinginx == sedikitx){
    lbx = sedikitx;
    }
   
    hasillbx = lbx;
    hasilsdx = 0;
    hasilkex = 0;
    
   }
 
   //=========================================================================
 
   else if((adc3mq135 <= 150 )&&(adc4mq2 > 150)&&(adc4mq2 < 200)){ //1AB
    if(dinginx < sedikitx){
    lb1x = dinginx;
    }
    else if(dinginx > sedikitx){
    lb1x = sedikitx;
    }
    else if(dinginx == sedikitx){
    lb1x = sedikitx;
    }
   
    if(dinginx < sedangx){
    lb2x = dinginx;
    }
    else if(dinginx > sedangx){
    lb2x = sedangx;
    }
    else if(dinginx == sedangx){
    lb2x = sedangx ;
    }
   
    if(lb1x < lb2x){   
     hasillbx = lb2x;  
    }
    else if(lb1x > lb2x){   
     hasillbx = lb1x;  
    }
    else if(lb1x == lb2x){   
     hasillbx = lb1x;  
    }
   
    hasilsdx = 0;
    hasilkex = 0;
    
   }
 
   //========================================================================
    else if((adc3mq135 <= 150 )&&(adc4mq2 > 200)&&(adc4mq2 < 300)){ //1BC
    if(dinginx < sedangx){
    lbx = dinginx;
    }
    else if(dinginx > sedangx){
    lbx = sedangx;
    }
    else if(dinginx == sedangx){
    lbx = sedangx;
    }
   
    if(dinginx < banyak){
    sdx = dinginx;
    }
    else if(dinginx > banyak){
    sdx = banyak;
    }
    else if(dinginx == banyak){
    sdx = banyak;
    }
   
    hasillbx = lbx;  
    hasilsdx = sdx;
    hasilkex = 0;
    
   }
 
   //=======================================================================
    else if((adc3mq135 <= 150 )&&(adc4mq2 >= 300)){ //1C

    if(dinginx < banyak){
    sdx = dinginx;
    }
    else if(dinginx > banyak){
    sdx = banyakx;
    }
    else if(dinginx == banyakx){
    sdx = banyakx;
    }
   
    hasillbx = 0;  
    hasilsdx = sdx;
    hasilkex = 0;
    
   }
 
 
   //==========================================================================
 
    else if((adc3mq135 > 150 )&&(adc3mq135 < 200 )&&(adc4mq2 <= 150)){ //12A

    if(dinginx < sedikitx){
    lb1x = dinginx;
    }
    else if(dinginx > sedikitx){
    lb1x = sedikitx;
    }
    else if(dinginx == sedikitx){
    lb1x = sedikitx;
    }
   
   
    if(hangatx > sedikitx){
    lb2x = sedikitx;
    }
    else if(hangatx < sedikitx){
    lb2x = hangatx;
    }
    else if(hangatx == sedikitx){
    lb2x = hangatx;
    }
   
   
    if(lb1x < lb2x){   
     hasillbx = lb2x;  
    }
    else if(lb1x > lb2x){   
     hasillbx = lb1x;  
    }
    else if(lb1x == lb2x){   
     hasillbx = lb1x;  
    }
   
    hasilsdx = 0;
    hasilkex = 0;
    
   }
 
   //=========================================================================
 
    else if((adc3mq135 > 150 )&&(adc3mq135 < 200 )&&(adc4mq2 > 150)&&(adc4mq2 < 200)){ //12AB

    if(dinginx < sedikitx){
    lb1x = dinginx;
    }
    else if(dinginx > sedikitx){
    lb1x = sedikitx;
    }
    else if(dinginx == sedikitx){
    lb1x = sedikitx;
    }
   
   
    if(dinginx < sedangx){
    lb2x = dinginx;
    }
    else if(dinginx > sedangx){
    lb2x = sedangx;
    }
    else if(dinginx == sedangx){
    lb2x = sedangx;
    }
   
   
    if(hangatx < sedikitx){
    lb3x = dinginx;
    }
    else if(hangatx > sedikitx){
    lb3x = sedikitx;
    }
    else if(hangatx == sedikitx){
    lb3x = sedikitx;
    }
   
   
    if(hangatx < sedangx){
    sdx = hangatx;
    }
    else if(hangatx > sedangx){
    sdx = sedangx;
    }
    else if(hangatx == sedangx){
    sdx = sedangx;
    }
   
   
   if((lb1x > lb2x)&&(lb1x > lb3x)){                         
   hasillbx = lb1x;
   }
   else if((lb1x > lb2x)&&(lb1x == lb3x)){
   hasillbx = lb1x;
   }
   else if((lb1x == lb2x)&&(lb1x > lb3x)){
   hasillbx = lb1x;
   }
   else if((lb1x == lb2x)&&(lb1x == lb3x)){
   hasillbx = lb1x;
   }
   else if((lb2x > lb1x)&&(lb2x > lb3x)){
   hasillbx = lb2x;
   }
   else if((lb2x > lb1x)&&(lb2x == lb3x)){
   hasillbx = lb2x;
   }
   else if((lb2x == lb1x)&&(lb2x > lb3x)){
   hasillbx = lb2x;
   }
   else if((lb2x == lb1x)&&(lb2x == lb3x)){
   hasillbx = lb2x;
   }
   else if((lb3x > lb1x)&&(lb3x > lb2x)){
   hasillbx = lb3x;
   }
   else if((lb3x > lb1x)&&(lb3x == lb2x)){
   hasillbx = lb3x;
   }
   else if((lb3x == lb1x)&&(lb3x > lb2x)){
   hasillbx = lb3x;
   }
   else if((lb3x == lb1x)&&(lb3x == lb2x)){
   hasillbx = lb3x;
   }

   hasilsdx = sdx;
   hasilkex = 0;
   
   }
 
   //===============================================================================
 
   else if((adc3mq135 > 150)&&(adc3mq135 < 200)&&(adc4mq2 > 200)&&(adc4mq2 < 300)){ //12BC
   if (dinginx < sedangx){
   lbx = dinginx;
   }
   else if(dinginx > sedangx){
   lbx = sedangx;
   }
   else if(dinginx == sedangx){
   lbx = sedangx;
   }

   if(dinginx < banyakx){
   sd1x = dinginx;
   }
   else if(dinginx > banyakx){
   sd1x = banyakx;
   }
   else if(dinginx == banyakx){
   sd1x = banyakx;
   }

   if(hangatx < sedangx){
   sd2x = hangatx;
   }
   else if(hangatx > sedangx){
   sd2x = sedangx;
   }
   else if(hangatx == sedangx){
   sd2x = sedangx;
   }

   if(hangatx < banyakx){
   kex = hangatx;
   }
   else if(hangatx > banyakx){
   kex = banyakx;
   }
   else if(hangatx == banyakx){
   kex = banyakx;
   }

   if(sd1x > sd2x){
   hasilsdx = sd1x;
   }
   else if(sd2x > sd1x){
   hasilsdx = sd2x;
   }
   else if(sd2x == sd1x){
   hasilsdx = sd2x;
   }

   hasillbx = lbx;
   hasilkex = kex;

   }

   //=======================================================================

   else if((adc3mq135 > 150)&&(adc3mq135 < 200)&&(adc4mq2 >= 300)){ //12C
    
   if(dinginx < banyakx){
   sdx = dinginx;
   }
   else if(dinginx > banyakx){
   sdx = banyakx;
   }
   else if(dinginx == banyakx){
   sdx = banyakx;
   }

   if(hangatx > banyakx){
   kex = banyakx;
   }
   else if(hangatx < banyakx){
   kex = hangatx;
   }
   else if(hangatx == banyakx){
   kex = hangatx;
   }
 
   hasilsdx = sdx;
   hasilkex = kex;
   hasillbx = 0;
   }

   //===============================================================
   else if ((adc3mq135 == 200) && (adc4mq2 <= 150)){ //2A
   if (hangatx > sedikitx){    
   lbx = sedikitx;
   }
   else if (hangatx < sedikitx){
   lbx = hangatx;
   }
   else if (hangatx == sedikitx){
   lbx = hangatx;
   }

   hasillbx = lbx;
   hasilsdx = 0;
   hasilkex = 0;
   }
 
   //============================================================
   else if ((adc3mq135 == 200) && (adc4mq2 > 150) && (adc4mq2 < 200)){ //2AB
   if (hangatx < sedikitx){
   lbx = hangatx;
   }
   else if (hangatx > sedikitx){
   lbx = sedikitx;
   }
   else if (hangatx == sedikitx){
   lbx = sedikitx;
   }
 

   if (hangatx < sedangx){
   sdx = hangatx;
   }
   else if (hangatx > sedikitx){
   sdx = sedikitx;
   }
   else if (hangatx == sedikitx){
   sdx = sedikitx;
   }

   hasillbx = lbx;
   hasilsdx = sdx;
   hasilkex = 0;
 
   }

//===================================================================
   else if ((adc3mq135 == 200) && (adc4mq2 > 200) && (adc4mq2 < 300)){ //2BC
   if (hangatx < sedangx){
   sdx = hangatx;
   }
   else if (hangatx > sedangx){
   sdx = sedangx;
   }
   else if (hangatx == sedangx){
   sdx = sedangx;
   }

   if (hangatx < banyakx){
   kex = hangatx;
   }
   else if (hangatx > banyakx){
   kex = banyakx;
   }
   else if (hangatx == banyakx){
   kex = banyakx;
   }

   hasilsdx = sdx;
   hasilkex = kex;
   hasillbx = 0;
 
   }

 //=============================================================
   else if ((adc3mq135 == 200) && (adc4mq2 >= 300)){  //2C
   if (hangatx < banyakx){
   kex = hangatx;
   }
   else if (hangatx > banyakx){
   kex = banyakx;
   }
   else if (hangatx == banyakx){
   kex = banyakx;
   }

   hasilkex = kex;
   hasilsdx = 0;
   hasillbx = 0;

}


//====================================================================

   else if ((adc3mq135 > 200) && (adc3mq135 < 300) && (adc4mq2 <= 150)){ //23A
   if (hangatx < sedikitx){
   lbx = hangatx;
   }
   else if (hangatx > sedikitx){
   lbx = sedikitx;
   }
   else if (hangatx == sedikitx){
   lbx = sedikitx;
   }
 
   if (panasx < sedikitx){
   sdx = panasx;
   }
   else if (panasx > sedikitx){
   sdx = sedikitx;
   }
   else if (panasx == sedikitx){
   sdx = sedikitx;
   }

   hasillbx = lbx;
   hasilsdx = sdx;
   hasilkex = 0;
   }

//=======================================================================

   else if ((adc3mq135 > 200) && (adc3mq135 < 300) && (adc4mq2 > 150) && (adc4mq2 < 200)){  //23AB
   if (hangatx < sedikitx){
   lbx = hangatx;
   }
   else if (hangatx > sedikitx){
   lbx = sedikitx;
   }
   else if (hangatx == sedikitx){
   lbx = sedikitx;
   }

   if (hangatx < sedangx){
   sd1x = hangatx;
   }
   else if (hangatx > sedangx){
   sd1x = sedangx;
   }
   else if (hangatx == sedangx){
   sd1x = sedangx;
   }
 
   if (panasx < sedikitx){
   sd2x = panasx;
   }
   else if (panasx > sedikitx){
   sd2x = sedikitx;
   }
   else if (panasx == sedikitx){
   sd2x = sedikitx;
   }

   if (panasx < sedangx){
   kex = panasx;
   }
   else if (panasx > sedangx){
   kex = sedangx;
   }
   else if (panasx == sedangx){
   kex = sedangx;
   }

   if (sd1x < sd2x){
   hasilsdx = sd2x;
   }
   else if (sd1x > sd2x){
   hasilsdx = sd1x;
   }
   else if (sd1x == sd2x){
   hasilsdx = sd1x;
   }

   hasilkex = kex;
   hasillbx = lbx;
   }

//=========================================================================

   else if ((adc3mq135 > 200) && (adc3mq135 < 300) && (adc4mq2 > 200) && (adc4mq2 < 300)){ //23BC
   if (hangatx < sedangx){
   sdx = hangatx;
   }
   else if (hangatx > sedangx){
   sdx = sedangx;
   }
   else if (hangatx == sedangx){
   sdx = sedangx;
   }

   if (hangatx < banyakx){
   ke1x = hangatx;
   }
   else if (hangatx > banyakx){
   ke1x = banyakx;
   }
   else if (hangatx == banyakx){
   ke1x = banyakx;
   }

   if (panasx < sedangx){
   ke2x = panasx;
   }
   else if (panasx > sedangx){
   ke2x = sedangx;
   }
   else if (panasx == sedangx){
   ke2x = sedangx;
   }

   if (panasx < banyakx){
   ke3x = panasx;
   }
   else if (panasx > banyakx){
   ke3x = banyakx;
   }
   else if (panasx == banyakx){
   ke3x = banyakx;
   }
 
   if ((ke1x > ke2x) && (ke1x > ke3x)){
   hasilkex = ke1x;
   }
   else if ((ke1x > ke2x) && (ke1x == ke3x)){
   hasilkex = ke1x;
   }
   else if ((ke1x == ke2x) && (ke1x > ke3x)){
   hasilkex = ke1x;
   }
   else if ((ke1x == ke2x) && (ke1x == ke3x)){
   hasilkex = ke1x;
   }
   else if ((ke2x > ke1x) && (ke2x > ke3x)){
   hasilkex = ke2x;
   }
   else if ((ke2x > ke1x) && (ke2x == ke3x)){
   hasilkex = ke2x;
   }
   else if ((ke2x == ke1x) && (ke2x > ke3x)){
   hasilkex = ke2x;
   }
   else if ((ke2x == ke1x) && (ke2x == ke3x)){
   hasilkex = ke2x;
   }

   else if ((ke3x > ke1x) && (ke3x > ke2x)){
   hasilkex = ke3x;
   }
   else if ((ke3x > ke1x) && (ke3x == ke2x)){
   hasilkex = ke3x;
   }
   else if ((ke3x == ke1x) && (ke3x > ke2x)){
   hasilkex = ke3x;
   }
   else if ((ke3x == ke1x) && (ke3x == ke2x)){
   hasilkex = ke3x;
   }

   hasilsdx = sdx;
   hasillbx = 0;
   }

//===========================================================================

   else if ((adc3mq135 > 200) && (adc3mq135 < 300) && (adc4mq2 >= 300)){ //23C
   if (hangatx < banyakx){
   ke1x = hangatx;
   }
   else if (hangatx > banyakx){
   ke1x = banyakx;
   }
   else if (hangatx == banyakx){
   ke1x = banyakx;
   }

   if (panasx < banyakx){
   ke2x = panasx;
   }
   else if (panasx > banyakx){
   ke2x = banyakx;
   }
   else if (panasx == banyakx){
   ke2x = banyakx;
   }

   if (ke1x < ke2x){
   hasilkex = ke2x;
   }
   else if (ke1x > ke2x){
   hasilkex = ke1x;
   }
   else if (ke1x == ke2x){
   hasilkex = ke1x;
   }

   hasilsdx = 0;
   hasillbx = 0;
   }

//===========================================================================

  else if ((adc3mq135 >= 300) && (adc4mq2 <= 150)){  //3A
   if (panasx < sedikitx){
   sdx = panasx;
   }
   else if (panasx > sedikitx){
   sdx = sedikitx;
   }
   else if (panasx == sedikitx){
   sdx = sedikitx;
   }

   hasilsdx = sdx;
   hasillbx = 0;
   hasilkex = 0;
   }

//============================================================================

else if ((adc3mq135 >= 300) && (adc4mq2 > 150) && (adc4mq2 < 200)){  //3AB
   if (panasx < sedikitx){
   sdx = panasx;
   }
   else if (panasx > sedikitx){
   sdx = sedikitx;
   }
   else if (panasx == sedikitx){
   sdx = sedikitx;
   }

   if (panasx < sedangx){
   kex = panasx;
   }
   else if (panasx > sedangx){
   kex = sedangx;
   }
   else if (panasx == sedangx){
   kex = sedangx;
   }

   hasilsdx = sdx;
   hasilkex = kex;
   hasillbx = 0;
   }
 
 
//======================================================================  
 
else if ((adc3mq135 >= 300) && (adc4mq2 > 200) && (adc4mq2 < 300)){ //3BC
   if (panasx < sedangx){
   ke1x = panasx;
   }
   else if (panasx > sedangx){
   ke1x = sedangx;
   }
   else if (panasx == sedangx){
   ke1x = sedangx;
   }

   if (panasx < banyakx){
   ke2x = panasx;
   }
   else if (panasx > banyakx){
   ke2x = banyakx;
   }
   else if (panasx == banyakx){
   ke2x = banyakx;
   }

   if (ke1x < ke2x){
   hasilkex = ke2x;
   }
   else if (ke1x > ke2x){
   hasilkex = ke1x;
   }
   else if (ke1x == ke2x){
   hasilkex = ke1x;
   }

   hasillbx = 0;
   hasilsdx = 0;
   }

//=========================================================================

else if ((adc3mq135 >= 300) && (adc4mq2 >= 300)){ //3C
   if (panasx < banyakx){
   kex = panasx;
   }
   else if (panasx > banyakx){
   kex = banyakx;
   }
   else if (panasx == banyakx){
   kex = banyakx;
   }

   hasilkex = kex;
   hasilsdx = 0;
   hasillbx = 0;
}


//======================================================================

else if ((adc3mq135 <= 150) && (adc4mq2 == 200)){ //1B
   if (dinginx < sedangx){
   lbx = dinginx;
   }
   else if (dinginx > sedangx){
   lbx = sedangx;
   }
   else if (dinginx == sedangx){
   lbx = sedangx;
   }

   hasillbx = lbx;
   hasilsdx = 0;
   hasilkex = 0;
}

//===================================================================

else if ((adc3mq135 > 150) && (adc3mq135 < 200) && (adc4mq2 == 200)){ //12B
   if (dinginx < sedangx){
   lbx = dinginx;
   }
   else if (dinginx > sedangx){
   lbx = sedangx;
   }
   else if (dinginx == sedangx){
   lbx = sedangx;
   }

   if (hangatx < sedangx){
   sdx = hangatx;
   }
   else if (hangatx > sedangx){
   sdx = sedangx;
   }
   else if (hangatx == sedangx){
   sdx = sedangx;
   }

   hasillbx = lbx;
   hasilsdx = sdx;
   hasilkex = 0;
}

//==========================================================

else if ((adc3mq135 == 200) && (adc4mq2 == 200)){ //2B
   if (hangatx < sedangx){
   sdx = hangatx;
   }
   else if (hangatx > sedangx){
   sdx = sedangx;
   }
   else if (hangatx == sedangx){
   sdx = sedangx;
   }

   hasilsdx = sdx;
   hasillbx = 0;
   hasilkex = 0;
 
}


//================================================================

else if ((adc3mq135 > 200) && (adc3mq135 < 300) && (adc4mq2 == 200)){ //23B
   if (hangatx < sedangx){
   sdx = hangatx;
   }
   else if (hangatx > sedangx){
   sdx = sedangx;
   }
   else if (hangatx == sedangx){
   sdx = sedangx;
   }

   if (panasx < sedangx){
   kex = panasx;
   }
   else if (panasx > sedangx){
   kex = sedangx;
   }
   else if (panasx == sedangx){
   kex = sedangx;
   }
 
   hasilsdx = sdx;
   hasilkex = kex;
   hasillbx = 0;
}



//================================================================

else if ((adc3mq135 >= 300) && (adc4mq2 == 200)){  //3B
   if (panasx < sedangx){
   kex = panasx;
   }
   else if (panasx > sedangx){
   kex = sedangx;
   }
   else if (panasx == sedangx){
   kex = sedangx;
   }

   hasilkex = kex;
   hasilsdx = 0;
   hasillbx = 0;

}

             
//==================================================
//               Defuzzifikasi 2
//==================================================

//0-10-20-200
Coglbx = 60;
Cogxlbx = 4;

//40-50-60-70
Cogsdx = 220;
Cogxsdx = 4;

//80-90-100-110-120
Cogkex = 500;
Cogxkex = 5;

Totalkomx = (Coglbx * hasillbx) + (Cogsdx * hasilsdx) + (Cogkex * hasilkex);

Totalpenx = (hasillbx * Cogxlbx) + (hasilsdx * Cogxsdx) + (hasilkex * Cogxkex);

Cog2 = Totalkomx / Totalpenx;

Cogt = (Cog1 + Cog2)/2;

   //Serial.print("Totalkom= ");
   //Serial.println(Totalkom);
   //Serial.print("Totalpen= ");
   //Serial.println(Totalpen);
   //Serial.print("COG= ");
   //Serial.println(Cog);
       
lcd.setCursor(0,2);
lcd.print("M135=");
lcd.print(adc3mq135,0);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("MQ02=");
lcd.print(adc4mq2,0);
lcd.print(" ");
//lcd.setCursor (10,1);
//lcd.print("COG2=");
//lcd.print(Cog2,1);
//lcd.print(" ");

lcd.setCursor (10,0);
lcd.print("COG=");
lcd.print(Cogt,1);
lcd.print(" ");

//jika terdeteksi gas
if(Cogt > 99){
digitalWrite(relay1,LOW); //pompa aktif
digitalWrite(relay2,LOW); //doorlock
digitalWrite(relay3,LOW); //solenoid
digitalWrite(buzzer,HIGH);
digitalWrite(led,HIGH);
lcd.setCursor (10,1);
lcd.print("WASPADAGAS");
statusarea = 1;
pompa = 1;
valve = 1;
doorlock = 1;
}

//jika tidak terdeteksi gas
if(Cogt <= 99){
digitalWrite(relay1,HIGH); //pompa aktif
digitalWrite(relay2,HIGH); //doorlock
digitalWrite(relay3,HIGH); //solenoid
digitalWrite(buzzer,LOW);
digitalWrite(led,LOW);
lcd.setCursor (10,1);
lcd.print("AREA AMAN ");
statusarea = 0;
pompa = 0;
valve = 0;
doorlock = 0;
}


Serial.print("*");
Serial.print(adc1mq135*1);
Serial.print(",");
Serial.print(adc2mq2*1);
Serial.print(",");
Serial.print(adc3mq135*1);
Serial.print(",");
Serial.print(adc4mq2*1);
Serial.print(",");
Serial.print(Cogt*100.0);
Serial.print(",");
Serial.print(statusarea*1);
Serial.print(",");
Serial.print(pompa*1);
Serial.print(",");
Serial.print(valve*1);
Serial.print(",");
Serial.print(doorlock*1);
Serial.println("#");


delay(100);     
}



d. Program ESP32

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

BlynkTimer timer;

int temp;
int x = 10;
int y;

int value1;
int value2;

int gas1 = 0;
int gas2 = 0;
int gas3 = 0;
int gas4 = 0;
float cog = 0;
int statusarea = 0;
int pompa = 0;
int valve = 0;
int doorlock = 0;

float datain1;
float datain2;
float datain3;
float datain4;
float datain5;
float datain6;
float datain7;
float datain8;
float datain9;

String dataIn;
String dt[10];
int i;
boolean parsing=false;

char auth[] = "fjhfjvh87987fsfswe65656hvmbkjjjhkjhltteewq";
char ssid[] = "myhotspothp";
char pass[] = "123456789";

void sendSensor()
{

 Blynk.virtualWrite(V2, gas1);
 Blynk.virtualWrite(V3, gas2);
 Blynk.virtualWrite(V4, gas3);
 Blynk.virtualWrite(V5, gas4);
 Blynk.virtualWrite(V6, cog);
 Blynk.virtualWrite(V7, statusarea);
 Blynk.virtualWrite(V8, pompa);
 Blynk.virtualWrite(V9, valve);
 Blynk.virtualWrite(V10,doorlock);
 delay(1000);

}

void setup()
{
 
  dataIn="";
  // Debug console
  Serial.begin(9600);
    
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(1000L, sendSensor);
}

void loop()
{

while(Serial.available()>0) {
//   dataIn="";
    char inChar = (char)Serial.read();
    dataIn += inChar;
    if (inChar == '\n') {
    parsing = true;
  }
}

if(parsing){
  parsingData();
   
  Blynk.run();
  timer.run();
}

}

void parsingData(){
int j=0;

//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");

//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]="";       //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}

datain1 = dt[0].toInt();
datain2 = dt[1].toInt();
datain3 = dt[2].toInt();
datain4 = dt[3].toInt();
datain5 = dt[4].toInt();
datain6 = dt[5].toInt();
datain7 = dt[6].toInt();
datain8 = dt[7].toInt();
datain9 = dt[8].toInt();

//kirim data hasil parsing
Serial.print("data 1 : ");
Serial.print(gas1);
Serial.print("\n");
Serial.print("data 2 : ");
Serial.print(gas2);
Serial.print("\n");
Serial.print("data 3 : ");
Serial.print(gas3);
Serial.print("\n");
Serial.print("data 4 : ");
Serial.print(gas4);
Serial.print("\n");

 gas1 = datain1 / 1;
 gas2 = datain2 / 1;
 gas3 = datain3 / 1;
 gas4 = datain4 / 1;
 cog = datain5 / 100.0;
 statusarea = datain6 / 1;
 pompa = datain7 / 1;
 valve = datain8 / 1;
 doorlock = datain9 / 1;

}




e. VIDEO HASILNYA 







Monitoring Flow Meter Air Topup via BLYNK Metode Upcounter

Monitoring Flow Meter Air Topup via BLYNK Metode Upcounter


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor flow air menggunakan aplikasi blynk dan juga bisa melakukan topup melalui blynk untuk mengisi saldo air pada alat. untuk lebih jelasnya berikut adalah daftar komponen dan kodingnya.



a. Arduino Uno




b. Flow Sensor




c. LCD 16x2 + I2C




d. Nodemcu ESP8266





e. Program Arduino Uno

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16,2);

int total1 = 0;
int total2 = 0;
float totalflow1;
float totalflow2;
float lebih1;
float lebih2;

byte sensorInterrupt = 0;  // 0 = digital pin 2
byte sensorPin       = 2;

float calibrationFactor = 4.5;

volatile byte pulseCount;

unsigned int frac;
float flowRate;
unsigned int flowMilliLitres;
float totalMilliLitres;

unsigned long oldTime;

byte sensorInterrupt1 = 1;  // 1 = digital pin 3
byte sensorPin1       = 3;

float calibrationFactor1 = 4.5;

volatile byte pulseCount1;

unsigned int frac1;
float flowRate1;
unsigned int flowMilliLitres1;
float totalMilliLitres1;

unsigned long oldTime1;

int topup1 = 8;
int topup2 = 9;
int topup3 = 10;
int topup4 = 11;

int topup1x = 1;
int topup2x = 1;
int topup3x = 1;
int topup4x = 1;

void setup() {

Serial.begin(9600);

lcd.begin();
lcd.clear();
lcd.noCursor();

 pinMode(topup1, INPUT);
 pinMode(topup2, INPUT);
 pinMode(topup3, INPUT);
 pinMode(topup4, INPUT);
 
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);

  pulseCount        = 0;
  flowRate          = 0.0;
  flowMilliLitres   = 0;
  totalMilliLitres  = 0;
  oldTime           = 0;

  attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

  pinMode(sensorPin1, INPUT);
  digitalWrite(sensorPin1, HIGH);

  pulseCount1        = 0;
  flowRate1          = 0.0;
  flowMilliLitres1   = 0;
  totalMilliLitres1  = 0;
  oldTime1           = 0;

  attachInterrupt(sensorInterrupt1, pulseCounter1, FALLING);

}

void loop() {

  if((millis() - oldTime) > 1000)
  {

    detachInterrupt(sensorInterrupt);
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    oldTime = millis();
    flowMilliLitres = (flowRate / 60) * 1000;
    totalMilliLitres += flowMilliLitres;

    pulseCount = 0;
   
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  }
    
    if((millis() - oldTime1) > 1000)
  {

    detachInterrupt(sensorInterrupt1);
    flowRate1 = ((1000.0 / (millis() - oldTime1)) * pulseCount1) / calibrationFactor1;
    oldTime1 = millis();
    flowMilliLitres1 = (flowRate1 / 60) * 1000;
    totalMilliLitres1 += flowMilliLitres1;

    pulseCount1 = 0;
   
    attachInterrupt(sensorInterrupt1, pulseCounter1, FALLING);
  }
      
  totalflow1 = totalMilliLitres/1000;    
  totalflow2 = totalMilliLitres1/1000;
  
  lebih1 = total1 - totalflow1;
  lebih2 = total2 - totalflow2;
  
  lcd.setCursor(0, 0);
  lcd.print(totalflow1);
  lcd.print(" / ");
  lcd.print(total1);
  lcd.print("   ");
  lcd.setCursor(0, 1);
  lcd.print(totalflow2);
  lcd.print(" / ");
  lcd.print(total2);
  lcd.print("   ");

topup1x = digitalRead(topup1);
topup2x = digitalRead(topup2);
topup3x = digitalRead(topup3);
topup4x = digitalRead(topup4);

if(topup1x == 0){
int totallx = 10;
total1 = total1 + 10;
delay(1000);
}

if(topup2x == 0){
int totallx = 5;
total1 = total1 + 5;
delay(1000);
}

if(topup3x == 0){
 int total2x = 10;
total2 = total2 + 10;
delay(1000);
}

if(topup4x == 0){
 int total2x = 5;
total2 = total2 + 5;

delay(1000);
}

Serial.print("*");
Serial.print(totalflow1*100);
Serial.print(",");
Serial.print(lebih1*100.0);
Serial.print(",");
Serial.print(totalflow2*100);
Serial.print(",");
Serial.print(lebih2*100);
Serial.println("#"); 

delay(200);

}

void pulseCounter()
{  
  pulseCount++;
}

void pulseCounter1()
{
  pulseCount1++;
}



f. Program Nodemcu ESP8266

#define BLYNK_PRINT Serial   
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>

float flow1 = 0;
float flow2 = 0;
float lebih1 = 0;
float lebih2 = 0;

float datain1;
float datain2;
float datain3;
float datain4;

String dataIn;
String dt[10];
int i;
boolean parsing=false;

char auth[] = "jhgjhg657gdhgslhkhkFFSEWnhfvhasdfghklkhgf";
char ssid[] = "Hotspothpku";
char pass[] = "123456789";

SimpleTimer timer;

void sendSensor()
{

 Blynk.virtualWrite(V2, flow1);
 Blynk.virtualWrite(V3, lebih1);
 Blynk.virtualWrite(V4, flow2);
 Blynk.virtualWrite(V5, lebih2);
 
delay(1000);
}

void setup()
{
 
  dataIn="";
  // Debug console
  Serial.begin(9600);
  
  pinMode(D5,OUTPUT);
  pinMode(D6,OUTPUT);
  pinMode(D7,OUTPUT);
  pinMode(D8,OUTPUT);  

  digitalWrite(D5,HIGH);
  digitalWrite(D6,HIGH);
  digitalWrite(D7,HIGH);
  digitalWrite(D8,HIGH);
  
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);

  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);
}

void loop()
{

while(Serial.available()>0) {
//   dataIn="";
    char inChar = (char)Serial.read();
    dataIn += inChar;
    if (inChar == '\n') {
    parsing = true;
  }
}

if(parsing){
  parsingData();
   
  Blynk.run();
  timer.run();
}

}

void parsingData(){
int j=0;

//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");

//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]="";       //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}

datain1 = dt[0].toInt();
datain2 = dt[1].toInt();
datain3 = dt[2].toInt();
datain4 = dt[3].toInt();

flow1 = datain1 / 100;
 lebih1 = datain2 / 100;
 flow2 = datain3 / 100;
 lebih2 = datain4 / 100;

//kirim data hasil parsing
Serial.print("data 1 : ");
Serial.print(datain1);
Serial.print("\n");
Serial.print("data 2 : ");
Serial.print(datain2);
Serial.print("\n");
Serial.print("data 3 : ");
Serial.print(datain3);
Serial.print("\n");
Serial.print("data 4 : ");
Serial.print(datain4);
Serial.print("\n");

}



g. Interface Blynk





h. VIDEO HASILNYA







Monitor Suhu Ruangan Interface 7 Segment Sensor DS18B20

Monitor Suhu Ruangan Interface 7 Segment Sensor DS18B20


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk memonitor suhu ruangan menggunakan interface 7segment, alat ini menggunakan sensor ds18b20 water proof. untuk lebih jelasnya berikut adalah komponen dan kodingnya


a. Arduino Uno




b. Modul 7Segment




c. Sensor Suhu DS18B20





d. Program Arduino IDE

#include <Wire.h>
#include <OneWire.h>
OneWire  ds(10);  //output ds18b20 ke pin 10 arduino

byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
int celsius, fahrenheit;
 
byte zero  = B00000011;
byte one   = B10011111;
byte two   = B00100101;
byte three = B00001101;
byte four  = B10011001;
byte five  = B01001001;
byte six   = B01000001;
byte seven = B00011111;
byte eight = B00000001;
byte nine  = B00001001;

int latchPin = 4;  //Pin connected to STR(pin 1) of HEF4094
int clockPin = 3; //Pin connected to CLK(pin 3) of HEF4094
int dataPin = 2;  //Pin connected to D(pin 2) of HEF4094
int oe = 5;  //Pin connected to OE(pin 2) of HEF4094

int temp;
int x = 5;
int y;
int sensorValue;

void setup(){
 Serial.begin(9600);
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
 pinMode(oe, OUTPUT);
 digitalWrite(oe,HIGH);
}

void loop(){
           
 if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
 
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not

  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);       

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();

  }

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
 
  temp = celsius;
  int ribuan = temp / 1000;
  temp = temp % 1000;
  int ratusan = temp / 100;
  temp = temp % 100;
  int puluhan = temp / 10;
  int satuan = temp % 10;

 switch(ratusan){
   case 0:
   ratusan = zero;
   break;
   case 1:
   ratusan = one;
   break;
   case 2:
   ratusan = two;
   break;
   case 3:
   ratusan = three;
   break;
   case 4:
   ratusan = four;
   break;
   case 5:
   ratusan = five;
   break;
   case 6:
   ratusan = six;
   break;
   case 7:
   ratusan = seven;
   break;
   case 8:
   ratusan = eight;
   break;
   case 9:
   ratusan = nine;
   break;  
 }
  
 switch(puluhan){
   case 0:
   puluhan = zero;
   break;
   case 1:
   puluhan = one;
   break;
   case 2:
   puluhan = two;
   break;
   case 3:
   puluhan = three;
   break;
   case 4:
   puluhan = four;
   break;
   case 5:
   puluhan = five;
   break;
   case 6:
   puluhan = six;
   break;
   case 7:
   puluhan = seven;
   break;
   case 8:
   puluhan = eight;
   break;
   case 9:
   puluhan = nine;
   break;  
 }

 switch(satuan){
   case 0:
   satuan = zero;
   break;
   case 1:
   satuan = one;
   break;
   case 2:
   satuan = two;
   break;
   case 3:
   satuan = three;
   break;
   case 4:
   satuan = four;
   break;
   case 5:
   satuan = five;
   break;
   case 6:
   satuan = six;
   break;
   case 7:
   satuan = seven;
   break;
   case 8:
   satuan = eight;
   break;
   case 9:
   satuan = nine;
   break; 
 }

  digitalWrite(latchPin, HIGH); //Pull latch HIGH to send data
  shiftOut(dataPin, clockPin, LSBFIRST, satuan);
  shiftOut(dataPin, clockPin, LSBFIRST, puluhan);
  shiftOut(dataPin, clockPin, LSBFIRST, ratusan);
  digitalWrite(latchPin, LOW); //Pull latch HIGH to send data
  delay(1000);
  
 }




e. VIDEO HASILNYA