Translate

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










Jual Robot Hidrolik (Hydraulic) Manual Menggunakan Suntikan dan Air

Jual Robot Hidrolik (Hydraulic) Manual Menggunakan Suntikan dan Air


      Kami menjual robot hidrolik manual tanpa menggunakan microcontroller dan juga tanpa menggunakan elektrik dan listrik, jadi robot ini menggunakan prinsip hidrolik sebagai penggeraknya, hidrolik yang dipakai adalah suntikan yang kedap udara sehinga bisa dikendalikan dengan mudah arah pergerakannya. robot ini dilengkapi 4 buah kendali yaitu kendali hover kanan dan kiri, kendali up dan down, kendali naik dan turun serta yang terakhir yaitu buka dan tutup japit, bahan robot ini terbuat dari plastik atau akrilik. untuk lebih jelasnya berikut adalah gambar detailnya.


Harga = Rp. 1.500.000,00 (Belum Ongkir)



a. Gambar Detailnya











b. VIDEO TEST DRIVE








Membuat Robot Kendali Android Handphone via Bluetooth ARDUINO

Membuat Robot Kendali Android Handphone via Bluetooth ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah robot yang bisa dikendalikan pergerakannya menggunakan handphone Android, untuk IOS dan JAVA akan berbeda aplikasinya. jadi robot ini bisa bergerak maju, mundur, belok kanan dan kiri dengan kendali handphone OS Android. untuk jarak maksimal 10 meter. untuk pengembangan dari robot ini yaitu bisa digunakan sebagai robot pemantau kondisi suatu keadaan tergantung sensor yang dipakaikan pada robot ini. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno





b. Motor Driver L298





c. Motor DC + Gearbox





d. Bluetooth HC-05






e. Program Arduino IDE

#include <Wire.h>

String dataku;
int mtrkanan1 = 4;
int mtrkanan2 = 5;
int mtrkiri1  = 6;
int mtrkiri2  = 7;

int kecmtr1 = 9;
int kecmtr2 = 10;

void setup(){
  Serial.begin (9600);
  Serial.setTimeout (5);
  pinMode (mtrkanan1,OUTPUT);
  pinMode (mtrkanan2,OUTPUT);
  pinMode (mtrkiri1,OUTPUT);
  pinMode (mtrkiri2,OUTPUT);
  pinMode (kecmtr1,OUTPUT);
  pinMode (kecmtr2,OUTPUT);
}

void loop(){
  if (Serial.available()>0)
  {
    dataku = Serial.readString();
    Serial.println(dataku);
   
    if (dataku == "100"){
        analogWrite(kecmtr1,250);
        digitalWrite(mtrkanan1,LOW);
        digitalWrite(mtrkanan2,HIGH);
       
        analogWrite(kecmtr2,250);
        digitalWrite(mtrkiri1,HIGH);
        digitalWrite(mtrkiri2,LOW); 
    }
    if (dataku == "200"){
        analogWrite(kecmtr1,250);
        digitalWrite(mtrkanan1,HIGH);
        digitalWrite(mtrkanan2,LOW);
       
        analogWrite(kecmtr2,250);
        digitalWrite(mtrkiri1,LOW);
        digitalWrite(mtrkiri2,HIGH); 
    }
    if (dataku == "300"){
        analogWrite(kecmtr1,250);
        digitalWrite(mtrkanan1,LOW);
        digitalWrite(mtrkanan2,HIGH);
       
        analogWrite(kecmtr2,150);
        digitalWrite(mtrkiri1,LOW);
        digitalWrite(mtrkiri2,HIGH); 
    }
    if (dataku == "400"){
        analogWrite(kecmtr1,150);
        digitalWrite(mtrkanan1,HIGH);
        digitalWrite(mtrkanan2,LOW);
       
        analogWrite(kecmtr2,250);
        digitalWrite(mtrkiri1,HIGH);
        digitalWrite(mtrkiri2,LOW); 
    }
  if (dataku == "500"){
        analogWrite(kecmtr1,250);
        digitalWrite(mtrkanan1,LOW);
        digitalWrite(mtrkanan2,LOW);
       
        analogWrite(kecmtr2,250);
        digitalWrite(mtrkiri1,LOW);
        digitalWrite(mtrkiri2,LOW); 
  }
}  }





f. Program Android

Download APK disini LINK DOWNLOAD







g. VIDEO HASILNYA