Translate

Membuat Alat Penghitung Benda / Barang (Counter Machine) Menggunakan Arduino dan sensor jarak ultrasonic HC-SRF04

Membuat Alat Penghitung Benda / Barang (Counter Machine) Menggunakan Arduino dan sensor jarak ultrasonic HC-SRF04


            Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang fungsinya untuk menghitung benda atau barang secara otomatis menggunakan Arduino dan sensor jarak untrasonic HC-SRF04. jadi alat ini hanya bertugas untuk menghitung barang yang lewat dengan jarak benda ke sensor kurang dari 20 cm namun bisa diatur pada program. Hasil counter ditampilkan ke LCD agar mengetahui jumlah totalnya, terdapat 3 buah tombol untuk reset, start counter dan stop counter atau pause. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno 




b. Sensor Ultrasonic Jarak HC-SRF04

  


c. LCD 16x2 + I2C





d. Program Arduino IDE

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
#include <SoftwareSerial.h>
#define trigPin A2
#define echoPin A3

#include <LiquidCrystal.h>
//pin lcd rs,e,d4,d5,d6,d7
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

//pin printer thermal TX,RX
SoftwareSerial Thermal(2, 3);

//definisi variabel
int mark = 0;
int cacah;
int sensor;
int tanda = 0;
int zero=0;
int heatTime = 80;
int heatInterval = 255;
char printDensity = 15;
char printBreakTime = 15;
long duration, distance;

//
const int btreset = A1;
int btresetx = 1;

const int btstart = 12;
int btstartx = 1;

const int btprint = 11;
int btprintx = 1;

const int btfinish = 10;
int btfinishx = 1;


//menampilkan nilai jam
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}


void setup() {
 
  //setting lcd
  lcd.begin(16,2);
  lcd.clear();
  lcd.noCursor();

  //setting mode pin arduino
  pinMode(btreset, INPUT_PULLUP);
  pinMode(btstart, INPUT_PULLUP);
  pinMode(btprint, INPUT_PULLUP);
  pinMode(btfinish, INPUT_PULLUP);
  pinMode(A0, INPUT_PULLUP);
 
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  //setting printer
  Wire.begin();
  Serial.begin(9600);
  Thermal.begin(19200); // to write to our new printer
  initPrinter();
 
   //set jam dan tanggal
   //DS3231 seconds, minutes, hours, day, date, month, year
   setDS3231time(0,10,11,2,3,8,15);
}

//setting printer
void initPrinter()
{
 //Modify the print speed and heat
 Thermal.write(27);
 Thermal.write(55);
 Thermal.write(7); //Default 64 dots = 8*('7'+1)
 Thermal.write(heatTime); //Default 80 or 800us
 Thermal.write(heatInterval); //Default 2 or 20us
 //Modify the print density and timeout
 Thermal.write(18);
 Thermal.write(35);
 int printSetting = (printDensity<<4) | printBreakTime;
 Thermal.write(printSetting); //Combination of printDensity and printBreakTime

}

//setting barcode
void printBarcode(char zz[])
{
 Thermal.write(29); //GS
 Thermal.write(107); //k
 Thermal.write(zero); //m = 0
 for (int z=0; z<12; z++)
 {
 Thermal.write(zz[z]);
 }
 Thermal.write(zero); // bar code terminator
 delay(3000); // necessary delay
 Thermal.write(10);
 Thermal.write(10);
 Thermal.write(10);
}


//setting untuk rtc
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}


//variabel rtc
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}


//untuk menampilkan waktu
void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  lcd.setCursor(0,0);
  lcd.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  lcd.print(":");
  if (minute<10)
  {
    lcd.print("0");
  }
  lcd.print(minute, DEC);
  lcd.print(":");
  if (second<10)
  {
    lcd.print("0");
  }
  lcd.print(second, DEC);
  lcd.print(" ");
  lcd.print(dayOfMonth, DEC);
  lcd.print("/");
  lcd.print(month, DEC);
  lcd.print("/");
  lcd.print(year, DEC);
  Serial.print(" Hari : ");
  switch(dayOfWeek){
  case 1:
    Serial.println("MINGGU");
    break;
  case 2:
    Serial.println("SENIN");
    break;
  case 3:
    Serial.println("SELASA");
    break;
  case 4:
    Serial.println("RABU");
    break;
  case 5:
    Serial.println("KAMIS");
    break;
  case 6:
    Serial.println("JUM'AT");
    break;
  case 7:
    Serial.println("SABTU");
    break;
  }
}


//untuk print waktu = jam dan tanggal
void printTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  Thermal.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Thermal.print(":");
  if (minute<10)
  {
    Thermal.print("0");
  }
 Thermal.print(minute, DEC);
  Thermal.print(":");
  if (second<10)
  {
    Thermal.print("0");
  }
  Thermal.print(second, DEC);
  Thermal.print(" ");
  Thermal.print(dayOfMonth, DEC);
  Thermal.print("/");
  Thermal.print(month, DEC);
  Thermal.print("/");
  Thermal.print(year, DEC);
  Thermal.print(" Hari : ");
  switch(dayOfWeek){
  case 1:
    Thermal.println("MINGGU");
    break;
  case 2:
    Thermal.println("SENIN");
    break;
  case 3:
    Thermal.println("SELASA");
    break;
  case 4:
    Thermal.println("RABU");
    break;
  case 5:
    Thermal.println("KAMIS");
    break;
  case 6:
    Thermal.println("JUM'AT");
    break;
  case 7:
    Thermal.println("SABTU");
    break;
  }
}


void loop() {
 
//update waktu 
//displayTime();

  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  Serial.println(distance);
  delay(200);
 
//untuk deteksi tombol 
  btresetx = digitalRead(btreset);
  btstartx = digitalRead(btstart);
  btfinishx = digitalRead(btfinish);
  btprintx = digitalRead(btprint);

//jika sensor bernilai high atau ada tegangan 5v maka counter + 1 
  if((distance <= 20)&&(mark == 1)&&(tanda == 0)){
  delay(100); 
  cacah++;
  tanda = 1;
  }
 
  if((distance > 20)&&(mark == 1)&&(tanda == 1)){
  delay(100); 
  tanda = 0;
  } 

//untuk menampilkan nilai counter   
lcd.setCursor(0,1);
lcd.print("X= ");
lcd.print(cacah);

//untuk menampilkan mode start
if(mark == 1){
//lcd.setCursor(0,1);
//lcd.print("START        ");
}

//untuk menampilkan mode finish
if(mark == 0){
//lcd.setCursor(0,1);
//lcd.print("FINISH         ");
}
    
delay(200);

//saat tombol reset ditekan nilai counter = 0
 if (btresetx == LOW ) {
 delay(200);
 lcd.clear();
 cacah = 0;
 }

 //saat tombol start ditekan
 if (btstartx == LOW ) {
 delay(200);
 mark = 1;
 }

 //saat tombol finish ditekan
 if (btfinishx == LOW ) {
 delay(200);
 mark = 0;
 }
 
 //saat tombol print ditekan
 if (btprintx == LOW ) {    

   Serial.println("print ready");
   Serial.println("printing....");
   delay(1000);

  //UNDERLINE MODE
  Thermal.write(27);
  Thermal.write(45);
  Thermal.write(1);
  Thermal.println(" HASIL HITUNGAN BARANG ");
  Thermal.write(10);

  //TURN OFF UNDERLINE MODE
  Thermal.write(27);
  Thermal.write(45);
  Thermal.write(zero);
  delay(3000);

  //NORMAL MODE
  Thermal.println("REKAP DATA");
  Thermal.write(10);

  //print waktu
  printTime();
  Thermal.write(10);

  //print suhu
  Thermal.print("Jumlah = ");
  Thermal.print(cacah);
  Thermal.println(" pcs");
  Thermal.write(10);
  Thermal.write(10);
 
  }
   
}





e. VIDEO HASILNYA










ARDUINO PID Control Tutorial Kendali Kecepatan Motor DC (RPM) dilengkapi Keypad 4x4 dan LCD 16x2

ARDUINO PID Control Tutorial Kendali Kecepatan Motor DC (RPM) dilengkapi Keypad 4x4 dan LCD 16x2


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk pelatihan PID Control menggunakan Arduino. Alat ini difungsikan untuk mengendalikan kecepatan putaran motor (RPM) dengan menggunakan PWM yang merupakan output dari PID. alat ini dilengkapi dengan keypad 4x4 sebagai input pemilihan menu kemudian sebuah encoder untuk menghitung RPM serta sebuah LCD 16x2 sebagai penampilnya. device pengendali kecepatan motornya menggunakan driver modul L298N. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno





b. Keypad Matrix 4x4





c. Motor DC + Encoder





c. Lcd 16x2 + I2C Shield





d. Modul Driver L298N






e. Program Arduino IDE

#include <Keypad.h>
#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

volatile byte half_revolutions; //variabel tipe data byte
unsigned int rpmku; //variabel tipe data integer
unsigned long timeold; //variabel tipe data long

int kalibrasi;

char customKey;
const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
{'D', 'C', 'B', 'A'},
{'#', '9', '6', '3'},
{'0', '8', '5', '2'},
{'*', '7', '4', '1'}
};
byte rowPins[ROWS] = {4,5,6,7};
byte colPins[COLS] = {8,9,10,11};

int x = 0;

Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

int speedx = 3;

float kp;
float nilaikp;
float ki;
float nilaiki;
float kd;
float nilaikd;
float sp;
float nilaisp;
float error,errorx,sumerr;
float p,i,d,pid,rpmfix;
float selisih;

void setup()
{
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
 attachInterrupt(0, rpm_fun, RISING); //mengambil sinyal high pada pin 2
 half_revolutions = 0; //memberikan nilai 0 pada viariabel
 rpmku = 0;
 timeold = 0;
 kalibrasi = 0;

 pinMode(A0,OUTPUT);
 pinMode(A1,OUTPUT);
 pinMode(speedx,OUTPUT);
 pinMode(2,INPUT);
 
 digitalWrite(A0,HIGH);
 digitalWrite(A1,LOW);
}


void loop()
{
  customKey = customKeypad.getKey();

if(x == 0){
  lcd.setCursor(0,0);
  lcd.print("1.SET PID       ");
}

if(x == 1){
  lcd.setCursor(0,0);
  lcd.print("2.MULAI        ");
}

if(x == 2){
  lcd.setCursor(0,0);
  lcd.print("3.CEK PID     ");
}

 
  switch(customKey)
  {
  case '0' ... '9':
    break;
   
  case '#':
    break;

  case '*':
    break;
 
  case 'A':
  x++; 
    break;
   
  case 'B':
  x--;
    break;
   
  case 'C':
    break;
   
  case 'D':
  if(x == 0){
  lcd.clear();
  setkp();
  setki();
  setkd();
  setsp();
  cekpid();
  }
  if(x == 1){
  lcd.clear();
  mulai();
  }
  if(x == 2){
  lcd.clear();   
  cekpid();
  } 
    break;
  }
 
if(x > 2){
x = 0;
}

if(x < 0){
x = 2;
}
 
}

void setkp(){
  lcd.setCursor(0,0);
  lcd.print("SET KP     ");

  customKey = customKeypad.getKey();
 
  if(customKey >= '0' && customKey <= '9')
    {
      kp = kp * 10 + (customKey - '0');
      lcd.setCursor(0,1);
      lcd.print(kp);

    }
  
   if(customKey == 'A'){         
      lcd.clear();
      delay(1000);
      kp = kp/100;
      nilaikp = kp;     
      return;    
    }
   
    if(customKey == 'B'){         
      lcd.clear();
      delay(1000);
      kp = kp/1000;
      nilaikp = kp;     
      return;    
    }
   
    if(customKey == '*'){         
      lcd.clear();
      delay(1000);
      nilaikp = kp;     
      return;
    }

setkp();
}

void setki(){
  lcd.setCursor(0,0);
  lcd.print("SET KI     ");

  customKey = customKeypad.getKey();
 
  if(customKey >= '0' && customKey <= '9')
    {
      ki = ki * 10 + (customKey - '0');
      lcd.setCursor(0,1);
      lcd.print(ki);

    }
  
     if(customKey == 'A'){         
      lcd.clear();
      delay(1000);
      ki = ki/100;
      nilaiki = ki;     
      return;
    }
   
    if(customKey == 'B'){         
      lcd.clear();
      delay(1000);
      ki = ki/1000;
      nilaiki = ki;     
      return;
    }
  
    if(customKey == '*'){         
      lcd.clear();
      delay(1000);
      nilaiki = ki;     
      return;
    }

setki();
}

void setkd(){
  lcd.setCursor(0,0);
  lcd.print("SET KD     ");

  customKey = customKeypad.getKey();
 
  if(customKey >= '0' && customKey <= '9')
    {
      kd = kd * 10 + (customKey - '0');
      lcd.setCursor(0,1);
      lcd.print(kd);

    }
  
     if(customKey == 'A'){         
      lcd.clear();
      delay(1000);
      kd = kd/100;
      nilaikd = kd;     
      return;
    }
   
    if(customKey == 'B'){         
      lcd.clear();
      delay(1000);
      kd = kd/1000; 
      nilaikd = kd;     
      return;
    }
  
    if(customKey == '*'){         
      lcd.clear();
      delay(1000);
      nilaikd = kd;     
      return;
    }

setkd();
}

void setsp(){
  lcd.setCursor(0,0);
  lcd.print("SET SP     ");

  customKey = customKeypad.getKey();
 
  if(customKey >= '0' && customKey <= '9')
    {
      sp = sp * 10 + (customKey - '0');
      lcd.setCursor(0,1);
      lcd.print(sp);

    }
  
    if(customKey == '*'){         
      lcd.clear();
      delay(1000);
      nilaisp = sp;     
      return;
    }

setsp();
}

void cekpid(){

  lcd.setCursor(0,0);
  lcd.print("KP");
  lcd.print(nilaikp,2);
  lcd.print("-KI");
  lcd.print(nilaiki,2);
 
  lcd.setCursor(0,1);
  lcd.print("KD");
  lcd.print(nilaikd,2);
  lcd.print("-SP");
  lcd.print(nilaisp,2);
 
  customKey = customKeypad.getKey();
    
    if(customKey == '*'){         
      lcd.clear();
      delay(1000);   
      return;
    }
 
cekpid(); 
}

void mulai(){
   
analogWrite(speedx,pid);

  error = nilaisp - rpmfix;
  p = error * nilaikp;
  sumerr = error + errorx;
  i = nilaiki * sumerr;
  selisih = error - errorx;
  d = nilaikd * selisih;
  pid = p + i + d;

  if(pid < 0){
  pid = 0;
  }
 

  rpmku = 30*1000/(millis() - timeold)*half_revolutions; //mengaktifkan counter millis
  timeold = millis(); //hasil counter dimasukkan ke variabel timeold
  half_revolutions = 0; //reset variabel
 
  kalibrasi = (rpmku - 150)/109;  //rumus kalibrasi
  rpmfix = kalibrasi * 10;
 
  if(rpmfix > 2000){
  rpmfix = 0;
  } 
 
  //menampilkan nilai pada lcd
  lcd.setCursor(0, 0);
  lcd.print("RPM= ");
  lcd.print(rpmfix);
  lcd.print("       ");
  lcd.setCursor(0, 1);
  lcd.print("PID= ");
  lcd.print(pid);
  lcd.print("       ");
 
  delay(200);
  customKey = customKeypad.getKey();
    
    if(customKey == '*'){         
      lcd.clear();
      kp = 0;
      ki = 0;
      kd = 0;
      sp = 0;
      analogWrite(speedx,0);
      delay(1000);   
      return;
    }
   
errorx = error;   
mulai();
}


void rpm_fun(){
   half_revolutions++; //counter interupt
}



 
f. VIDEO HASILNYA

 








Membuat Alat Monitor Suhu / Temperature Menggunakan Sensor DHT11 dan Arduino UNO via Wireless WIFI dan Handphone Android / Browser

Membuat Alat Monitor Suhu / Temperature Menggunakan Sensor DHT11 dan Arduino UNO via Wireless WIFI dan Handphone Android / Browser


             Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk monitoring suhu via wifi wireless dengan perangkat handphone android, alat ini difungsikan hanya untuk monitor suhu saja tanpa menggunakan kelembaban sebagaimana yang diketahui kalau DHT11 memiliki 2 buah output yaitu suhu dan kelembaban. sensor yang digunakan adalah 2 buah DHT11 dengan board bikinan sendiri. sebenarnya ada dua mode untuk bisa melihat data dari WIFI ini yaitu dengan menggunakan browser dan menggunakan software aplikasi Android. alat ini dilengkapi dengan router untuk pemancar WIFI-nya. untuk lebih jelasnya berikut adalah skema dan programnya.



 a. Arduino Uno





b. Ethernet Shield





c. Sensor DHT11





d. Router 





e. Modul Relay






f. Program Android







g. Program Arduino IDE

#include <Wire.h>  
#include "DHT.h"
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,88);

EthernetServer server(80);
String readString;  

int suhu1;
int suhu2;
int kipas = 6;
int lampu = 7;

void setup()
{
pinMode(kipas,OUTPUT);
pinMode(lampu,OUTPUT);

 Serial.begin(9600);
   while (!Serial) {
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
}

void loop()
{
 
suhusatu();
suhudua();
kirim();
delay(200);
}


void suhusatu(){

#define DHTPIN1 2
#define DHTTYPE DHT11  
DHT dht(DHTPIN1, DHTTYPE);
dht.begin();

 float h1 = dht.readHumidity();
 float t1 = dht.readTemperature();
 float f1 = dht.readTemperature(true);

 int hum1 = h1;
  suhu1 = t1;

  if (isnan(h1) || isnan(t1) || isnan(f1)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  float hif = dht.computeHeatIndex(f1, h1);
  float hic = dht.computeHeatIndex(t1, h1, false);

  Serial.print("suhu 1=");
  Serial.println(suhu1);

}



void suhudua(){

#define DHTPIN2 3
#define DHTTYPE DHT11  
DHT dht(DHTPIN2, DHTTYPE);
dht.begin();

 float h2 = dht.readHumidity();
 float t2 = dht.readTemperature();
 float f2 = dht.readTemperature(true);

 int hum2 = h2;
  suhu2 = t2;

  if (isnan(h2) || isnan(t2) || isnan(f2)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  float hif = dht.computeHeatIndex(f2, h2);
  float hic = dht.computeHeatIndex(t2, h2, false);

  Serial.print("suhu 2=");
  Serial.println(suhu2);

}



void kirim(){

           if((suhu1  > 33)&&(suhu2  > 33)){
            digitalWrite(kipas,LOW);
            digitalWrite(lampu,HIGH);
            }
            else if((suhu1  <= 33)&&(suhu2  <= 33)){
            digitalWrite(kipas,HIGH);
            digitalWrite(lampu,LOW);
            }
            else{
            digitalWrite(kipas,LOW);
            digitalWrite(lampu,HIGH);
            }
           
 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
     if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 1");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println(" ");
          client.println("<title> Monitor Suhu </title> ");    
          client.println("<body bgcolor = #000000>");    
          client.println("<center>");
            client.println("<font color = yellow><center><h1>MONITOR SUHU DHT11</h1></center><br></font>");
            client.println("<font color = #FFFFFF>");
            client.println("<h2>");
            client.println("Suhu1 = ##");
            client.print(suhu1);
            client.println(" <br />");
            client.println("Suhu2 = ###");
            client.print(suhu2);
            client.println("<br />");
           
            if((suhu1  > 33)&&(suhu2  > 33)){
            client.println("####ON ");
            }
            else if((suhu1  <= 33)&&(suhu2  <= 33)){
            client.println("####OFF");
            }
            else{
            client.println("####ON ");
            }
           
            client.println("</h2>");     
          client.println("</font>");
          client.println("</center>");
          client.println("</body>");
          client.println("</html>");
           
          break;      
        }   
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }

   readString="";
  
}





h. VIDEO HASILNYA








Membuat Alat Deteksi Kebakaran / ASAP / GAS Arduino FUZZY LOGIC Controller Mamdani SMS GATEWAY

Membuat Alat Deteksi Kebakaran / ASAP / GAS Arduino FUZZY LOGIC Controller Mamdani SMS GATEWAY


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat dengan menggunakan fuzzy logic untuk deteksi kebakaran, jadi alat ini fungi utamanya yaitu untuk deteksi kebakaran dengan menggunakan sensor api, sensor suhu ds18b20 dan sensor asap atau smoke. alat ini dilengkapi dengan sms dan missed call untuk pemberitahuan kepada user atau pemilik rumah, serta dilengkapi dengan kipas angin atau blower AC sehingga saat terjadi kebakaran akan mengaktifkan kipas dan mengirimkan sms serta missed call. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Mega





b. Sensor Asap / Smoke





c. Sensor Api





d. Sensor Suhu DS18b20





e. Modul sms SIM900A





f. Modul relay





g. Skema FUZZY Rule









h. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
#include <OneWire.h>
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;

LiquidCrystal_I2C lcd(0x3F, 16, 2);

OneWire  ds(4);

int mark = 0;

const int AOUTpin1=1;
int adc0;
int suhu;
float h;
float T;
int output;
float dimming;

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
 
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 Cog;
float lb1, lb2, lb3;
float sd1, sd2, sd3;
float ke1, ke2, ke3;

int buzzer = 7; 
int relay1 = 14;
int relay2 = 15;
int relay3 = 16;

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];


void setup()
{
   digitalWrite(relay1,HIGH);
   digitalWrite(relay2,HIGH);
   digitalWrite(relay3,HIGH);
  
  Serial.begin(9600);
 
       Serial.println("GSM Shield testing.");
     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

     if(started) {
          //gsm.call("085726496789",10000); //miss call
          //delay (3000);
          if (sms.SendSMS("085726496789", "Alat Ready"))
          Serial.println("\nSMS sent OK");
     }
 
 
  lcd.begin();

  pinMode(buzzer,OUTPUT);
  pinMode(relay1,OUTPUT);
  pinMode(relay2,OUTPUT);
  pinMode(relay3,OUTPUT);
 
}



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
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

  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;
  T = celsius;
  lcd.setCursor(0,0);
  lcd.print("T=");
  lcd.print(celsius,1);


   h = 1.953125 *(analogRead(AOUTpin1));
   lcd.setCursor (0,1);
   lcd.print ("G=");
   lcd.print (h,1);
   lcd.print ("   ");




   //======================
   //   fuzzyfikasi suhu
   //======================
  
   if(T <= 25){
   dingin = 1;
   hangat = 0;
   panas = 0;
   }
   else if(T >= 35){
   panas = 1;
   hangat = 0;
   dingin = 0;
   }
   else if(T == 30){
   hangat = 1;
   dingin = 0;
   panas = 0;
   }
   else if((T > 25)&&(T < 30)){
   hangat = (T - 25)/5;
   dingin = 1-(T - 25)/5;
   panas = 0;
   }
   else if((T > 30)&&(T < 35)){
   panas = (T - 30)/5;
   hangat = 1-(T - 30)/5;
   dingin = 0;
   }
  
  
 //  Serial.print("panas= ");  
 //  Serial.println(panas);
 //  Serial.print("hangat= ");  
 //  Serial.println(hangat);
 //  Serial.print("dingin= ");  
 //  Serial.println(dingin);
     
   //===============================
   //       fuzzyfikasi gas
   //===============================
  
   if(h <= 150){
   sedikit = 1;
   sedang = 0;
   banyak = 0;
   }
   else if(h >= 300){
   banyak = 1;
   sedang = 0;
   sedikit = 0;
   }
   else if(h == 200){
   banyak = 0;
   sedang = 1;
   sedikit = 0;
   }
   else if((h > 150)&&(h < 200)){
   sedang = (h - 150)/50;
   sedikit = 1-(h - 150)/50;
   banyak = 0;
   }
   else if((h > 200)&&(h < 300)){
   sedang = (h - 200)/100;
   banyak = 1-(h - 200)/100;
   sedikit = 0;
   }
  
 //  Serial.print("Sedikit= ");  
 //  Serial.println(sedikit);
 //  Serial.print("sedang= ");  
 //  Serial.println(sedang);
 //  Serial.print("banyak= ");  
 //  Serial.println(banyak);
   
  
  
  
   //==================================
   //           fuzzy rule
   //===================================
     
   //============================================================================
   if((T <= 25 )&&(h <= 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((T <= 25 )&&(h > 150)&&(h < 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((T <= 25 )&&(h > 200)&&(h < 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((T <= 25 )&&(h >= 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((T > 25 )&&(T < 30 )&&(h <= 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((T > 25 )&&(T < 30 )&&(h > 150)&&(h < 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((T > 25)&&(T < 30)&&(h > 200)&&(h < 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((T > 25)&&(T < 30)&&(h >= 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 ((T == 30) && (h <= 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 ((T == 30) && (h > 150) && (h < 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 ((T == 30) && (h > 200) && (h < 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 ((T == 30) && (h >= 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 ((T > 30) && (T < 35) && (h <= 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 ((T > 30) && (T < 35) && (h > 150) && (h < 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 ((T > 30) && (T < 35) && (h > 200) && (h < 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 ((T > 30) && (T < 35) && (h >= 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 ((T >= 35) && (h <= 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 ((T >= 35) && (h > 150) && (h < 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 ((T >= 35) && (h > 200) && (h < 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 ((T >= 35) && (h >= 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 ((T <= 25) && (h == 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 ((T > 25) && (T < 30) && (h == 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 ((T == 30) && (h == 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 ((T > 30) && (T < 35) && (h == 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 ((T >= 35) && (h == 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
//==================================================


//0-10-20-30
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);

Cog = Totalkom / Totalpen;
     
   //Serial.print("Totalkom= ");
   //Serial.println(Totalkom);
   //Serial.print("Totalpen= ");
   //Serial.println(Totalpen);
   //Serial.print("COG= ");
   //Serial.println(Cog);
  
   lcd.setCursor (9,0);
   lcd.print ("C=");
   lcd.print (Cog,1);
   lcd.print ("  ");
  
   int adcapi = analogRead(A2);
  
   lcd.setCursor (9,1);
   lcd.print ("A=");
   lcd.print (adcapi);
   lcd.print ("    ");
  
   delay(100);
  
   if(adcapi < 100){
   digitalWrite(buzzer,HIGH);
   }
   if(adcapi > 100){
   digitalWrite(buzzer,LOW);
   }
  
   if((Cog <= 80)&&(mark == 0)){
   digitalWrite(relay1,LOW);
   digitalWrite(relay2,HIGH);
   digitalWrite(relay3,HIGH); 
   //mark = 0;
   }
  
   if((Cog > 80)&&(Cog <= 90)&&(mark == 0)){
   digitalWrite(relay1,HIGH);
   digitalWrite(relay2,LOW);
   digitalWrite(relay3,HIGH);
       
   mark = 0;
   }
  
   if((Cog > 80)&&(Cog <= 90)&&(mark == 1)){
   digitalWrite(relay1,HIGH);
   digitalWrite(relay2,HIGH);
   digitalWrite(relay3,HIGH);
   delay(2000);
   digitalWrite(relay1,HIGH);
   digitalWrite(relay2,LOW);
   digitalWrite(relay3,HIGH);
       
   mark = 0;
   }
  
  
   if((Cog > 90)&&(mark == 0)){
   digitalWrite(relay1,HIGH);
   digitalWrite(relay2,HIGH);
   digitalWrite(relay3,HIGH);
  
     Serial.println("kirim sms kondisi bahaya");
     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

     if(started) {
          gsm.call("+6285726496789",10000); //Set Number & Dial Duration
          delay (3000);
          if (sms.SendSMS("085726496789", "KONDISI BAHAYA"))
          Serial.println("\nSMS sent OK");
     }
    
   digitalWrite(relay1,HIGH);
   digitalWrite(relay2,HIGH);
   digitalWrite(relay3,LOW);
   mark = 1;
   
   }
  
 
}




i. VIDEO HASILNYA