Translate

Tutorial ESP32-CAM Membuat CCTV dan Connect to Blynk

Tutorial ESP32-CAM Membuat CCTV dan Connect to Blynk
 
        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses ESP32-CAM untuk menjadi CCTV dan bisa terhubung ke aplikasi Blynk secara wireless, untuk melakukan percobaan ini yang dibutuhkan yaitu ESP32-CAM dan modul downloadernya kemudian handphone yang sudah terinstal aplikasi Blynk. untuk lebih jelasnya berikut adalah komponen dan kodingnya. 
 
 
 
 
a. ESP32-CAM + Downloader



b. Program Arduino ESP32-CAM Camera WebServer 

#include "esp_camera.h"
#include <WiFi.h>

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER

#include "camera_pins.h"

const char* ssid = "hotspot hpku";
const char* password = "123456789";

void startCameraServer();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  //initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1);//flip it back
    s->set_brightness(s, 1);//up the blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10000);
}


 
 
c. Program Arduino ESP32-CAM Connect to Blynk
 
#include "src/OV2640.h"
#include <WiFi.h>
#include <WebServer.h>
#include <WiFiClient.h>

#define CAMERA_MODEL_AI_THINKER

#include "camera_pins.h"

#define SSID1 "hotspot hpku"
#define PWD1 "123456789"

OV2640 cam;

WebServer server(80);

const char HEADER[] = "HTTP/1.1 200 OK\r\n" \
                      "Access-Control-Allow-Origin: *\r\n" \
                      "Content-Type: multipart/x-mixed-replace; boundary=123456789000000000000987654321\r\n";
const char BOUNDARY[] = "\r\n--123456789000000000000987654321\r\n";
const char CTNTTYPE[] = "Content-Type: image/jpeg\r\nContent-Length: ";
const int hdrLen = strlen(HEADER);
const int bdrLen = strlen(BOUNDARY);
const int cntLen = strlen(CTNTTYPE);

void handle_jpg_stream(void)
{
  char buf[32];
  int s;

  WiFiClient client = server.client();

  client.write(HEADER, hdrLen);
  client.write(BOUNDARY, bdrLen);

  while (true)
  {
    if (!client.connected()) break;
    cam.run();
    s = cam.getSize();
    client.write(CTNTTYPE, cntLen);
    sprintf( buf, "%d\r\n\r\n", s );
    client.write(buf, strlen(buf));
    client.write((char *)cam.getfb(), s);
    client.write(BOUNDARY, bdrLen);
  }
}

const char JHEADER[] = "HTTP/1.1 200 OK\r\n" \
                       "Content-disposition: inline; filename=capture.jpg\r\n" \
                       "Content-type: image/jpeg\r\n\r\n";
const int jhdLen = strlen(JHEADER);

void handle_jpg(void)
{
  WiFiClient client = server.client();

  cam.run();
  if (!client.connected()) return;

  client.write(JHEADER, jhdLen);
  client.write((char *)cam.getfb(), cam.getSize());
}

void handleNotFound()
{
  String message = "Server is running!\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  server.send(200, "text / plain", message);
}

void setup()
{

  Serial.begin(115200);
  //while (!Serial);            //wait for serial connection.

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

/*
 if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
*/

  // Frame parameters
  //  config.frame_size = FRAMESIZE_UXGA;
  config.frame_size = FRAMESIZE_QVGA; //UXGA,SXGA,XGA,SVGA,VGA,CIF,QVGA,HQVGA,QQVGA
  config.jpeg_quality = 12;
  config.fb_count = 2;


#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  cam.init(config);

  IPAddress ip;

  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID1, PWD1);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(F("."));
  }
  ip = WiFi.localIP();
  Serial.println(F("WiFi connected"));
  Serial.println("");
  Serial.println(ip);
  Serial.print("Stream Link: http://");
  Serial.print(ip);
  Serial.println("/mjpeg/1");
  server.on("/mjpeg/1", HTTP_GET, handle_jpg_stream);
  server.on("/jpg", HTTP_GET, handle_jpg);
  server.onNotFound(handleNotFound);
  server.begin();
}

void loop()
{
  server.handleClient();
}
 
 
 
 
d. VIDEO TUTORIALNYA
 




 
 
Link Sumber: 
https://www.youtube.com/watch?v=ukWvHX-JTgI
 
 
 
 

Monitor TDS / NTU / Turbidity dan PH ONLINE Blynk FUZZY LOGIC CONTROL MAMDANI

Monitor TDS / NTU / Turbidity dan PH ONLINE Blynk FUZZY LOGIC CONTROL MAMDANI


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan metode fuzzy logic mamdani untuk input sensot PH dan turbidity. alat ini menggunakan lcd sebagai interface dan juga bisa dimonitor melalui aplikasi blynk. untuk lebih jelasnya berikut adalah koding dan komponennya.



a. Arduino Mega




b. Nodemcu esp8266




c. Sensor PH




d. Sensor Turbidity






e. Membership Function





f. Fuzzy Rule




g. Defuzzifikasi






h. Program Arduino IDE

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

float pHValue;
float ntu;
int ntunew;
int adcntu;
int adcPH;
float T;
int h;
int golongan;

int dryValue = 957;
int wetValue = 56;
int friendlyDryValue = 0;
int friendlyWetValue = 100;
int rawValue;

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;
 
void setup()
{
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
}

void loop()
{

adcPH = analogRead(A0); //menggunakan pin A0 untuk membaca output sensor pH
pHValue = (adcPH - 1105.6)/ -34.4;
T = pHValue;
  
adcntu = analogRead(A1);             
ntunew = map(adcntu, dryValue, wetValue, friendlyDryValue, friendlyWetValue);
//ntu = (adcntu - 912.5)/-0.279;
h = ntunew;


   lcd.setCursor (0,0);
   lcd.print ("N=");
   lcd.print (h);
   lcd.print ("  ");
   lcd.setCursor (0,1);
   lcd.print ("P=");
   lcd.print (T,1);
   lcd.print (" ");

   //======================
   //   fuzzyfikasi PH
   //======================
   //dingin = asam , hangat = netral , panas = basa
   
   if(T <= 6){
   dingin = 1;
   hangat = 0;
   panas = 0;
   }
   else if(T >= 8){
   panas = 1;
   hangat = 0;
   dingin = 0;
   }
   else if(T == 7){
   hangat = 1;
   dingin = 0;
   panas = 0;
   }
   else if((T > 6)&&(T < 7)){
   hangat = (T - 6)/1;
   dingin = 1-(T - 6)/1;
   panas = 0;
   }
   else if((T > 7)&&(T < 8)){
   panas = (T - 7)/1;
   hangat = 1-(T - 7)/1;
   dingin = 0;
   }
  
  
 //  Serial.print("panas= ");  
 //  Serial.println(panas);
 //  Serial.print("hangat= ");  
 //  Serial.println(hangat);
 //  Serial.print("dingin= ");  
 //  Serial.println(dingin);
     
   //===============================
   //       fuzzyfikasi TDS/NTU
   //===============================
   //sedikit = rendah , sedang = sedang , banyak = tinggi
   
   if(h <= 25){
   sedikit = 1;
   sedang = 0;
   banyak = 0;
   }
   else if(h >= 50){
   banyak = 1;
   sedang = 0;
   sedikit = 0;
   }
   else if(h == 37){
   banyak = 0;
   sedang = 1;
   sedikit = 0;
   }
   else if((h > 25)&&(h < 37)){
   sedang = (h - 25)/12;
   sedikit = 1-(h - 25)/12;
   banyak = 0;
   }
   else if((h > 37)&&(h < 50)){
   sedang = (h - 37)/13;
   banyak = 1-(h - 37)/13;
   sedikit = 0;
   }
  
 //  Serial.print("Sedikit= ");  
 //  Serial.println(sedikit);
 //  Serial.print("sedang= ");  
 //  Serial.println(sedang);
 //  Serial.print("banyak= ");  
 //  Serial.println(banyak);
   
  
   //==================================
   //           fuzzy rule
   //===================================
   // lb = GOL A , sd = GOL B , ke = GOL C   
   //===============================================================================
   
   if((T <= 6 )&&(h <= 25)){ //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 <= 6 )&&(h > 25)&&(h < 37)){ //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 <= 6 )&&(h > 37)&&(h < 50)){ //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 <= 6 )&&(h >= 50)){ //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 > 6 )&&(T < 7 )&&(h <= 25)){ //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 > 6 )&&(T < 7 )&&(h > 25)&&(h < 37)){ //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 > 6)&&(T < 7)&&(h > 37)&&(h < 50)){ //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 > 6)&&(T < 7)&&(h >= 50)){ //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 == 7) && (h <= 25)){ //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 == 7) && (h > 25) && (h < 37)){ //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 == 7) && (h > 37) && (h < 50)){ //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 == 7) && (h >= 50)){  //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 > 7) && (T < 8) && (h <= 25)){ //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 > 7) && (T < 8) && (h > 25) && (h < 37)){  //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 > 7) && (T < 8) && (h > 37) && (h < 50)){ //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 > 7) && (T < 8) && (h >= 50)){ //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 >= 8) && (h <= 25)){  //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 >= 8) && (h > 25) && (h < 37)){  //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 >= 8) && (h > 37) && (h < 50)){ //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 >= 8) && (h >= 50)){ //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 <= 6) && (h == 37)){ //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 > 6) && (T < 7) && (h == 37)){ //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 == 7) && (h == 37)){ //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 > 7) && (T < 8) && (h == 37)){ //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 >= 8) && (h == 37)){  //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;

/*
//0-10-20-30-40-50
Coglb = 150;
Cogxlb = 6;

//60-70-80-90-100-110-120
Cogsd = 630;
Cogxsd = 7;

//130-140-150-160-170-180-190-200
Cogke = 1320;
Cogxke = 8;
*/
//Komlb = Coglb * hasillb;
//Komsd = Cogsd * hasilsd;
//Komke = Cogke * hasilke;

//Totalkom = Komlb + Komsd;
//Totalkom = Totalkom + Komke;

//Penlb = hasillb * Cogxlb;
//Pensd = hasilsd * Cogxsd;
//Penke = hasilke * Cogxke;

//Totalpen = Penlb + Pensd;
//Totalpen = Totalpen + Penke;

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,0);
   lcd.print ("  ");
    
   if(Cog < 50){
   lcd.setCursor (9,1);
   lcd.print ("GOL A");
   golongan = 1;
   }
  
   if((Cog >= 50)&&(Cog < 80)){
   lcd.setCursor (9,1);
   lcd.print ("GOL B");
   golongan = 2;
   } 
   
   if(Cog >= 80){
   lcd.setCursor (9,1);
   lcd.print ("GOL C");
   golongan = 3;
   }
    
    
   Serial.print("*");
   Serial.print(T);
   Serial.print(",");
   Serial.print(h*100.0);
   Serial.print(",");
   Serial.print(Cog);
   Serial.print(",");
   Serial.print(golongan);
   Serial.println("#"); 
 
   delay(200);

}



i. Program Nodemcu

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

int T = 0;
float h = 0;
int Cog = 0;
int golongan = 0;

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

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

char auth[] = "jhfghjfhgfhiiyiutuytgghhqewqejhjhjytytdfftfr";
char ssid[] = "hotspothpku";
char pass[] = "123456789";

SimpleTimer timer;

void sendSensor()
{

 Blynk.virtualWrite(V5, T);
 Blynk.virtualWrite(V6, h);
 Blynk.virtualWrite(V7, Cog);
 Blynk.virtualWrite(V8, golongan);
 
delay(1000);
}

void setup()
{
 
  dataIn="";
  // Debug console
  Serial.begin(9600);
   
  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();

 T = datain1 / 1;
 h = datain2 / 100;
 Cog = datain3 / 1;
 golongan = datain4 / 1;

//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");

}




j. VIDEO HASILNYA






Monitor Daya Tegangan Arus DC dan RPM

Monitor Daya Tegangan Arus DC dan RPM


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor daya (tegangan dan arus) DC dengan menggunakan arduino. alat ini sangat sederhana yaitu hanya monitor tegangan arus dan rpm lalu menampilkannya ke lcd. untuk lebih jelasnya berikut adalah koding dan komponennya.


a. Arduno Uno




b. Sensor Tegangan DC




c. Sensor Arus Acs712




d. Sensor RPM





e. Program Arduino IDE

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

volatile byte half_revolutions;
unsigned int rpm;
unsigned long timeold;

int adcteg;
float tegangan;
int adcarus;
float v;
float arus;
boolean state=false;
char c;
float daya;

int teganganx;
int arusx;
int rpmx;

void setup(){
  
Serial.begin(9600);

attachInterrupt(0, rpm_fun, RISING);
half_revolutions = 0;
rpm = 0;
timeold = 0;
 
lcd.begin();  
lcd.clear();
lcd.noCursor();

}

void loop() {
     
adcteg = analogRead(A0);
tegangan = adcteg * (5.0 / 1023.0) * 4.8;

adcarus = analogRead(A1);
v = adcarus * (4.8 / 1023.0);
arus = (v - 2.4)/0.1;
daya = tegangan * arus;

detachInterrupt(0);  
rpm = 30*1000/(millis() - timeold)*half_revolutions;
timeold = millis();
half_revolutions = 0;
attachInterrupt(0, rpm_fun, RISING);

lcd.setCursor(0,0);
lcd.print("V=");
lcd.print(tegangan);
lcd.print("  ");
lcd.setCursor(9,0);
lcd.print("R=");
lcd.print(rpm,DEC);
lcd.print("   ");
lcd.setCursor(0,1);
lcd.print("I=");
lcd.print(arus);
lcd.print("   ");
lcd.setCursor(9,1);
lcd.print("P=");
lcd.print(daya,1);
lcd.print("   ");

teganganx = tegangan * 100;
arusx = arus * 100;
rpmx = rpm * 1;

delay(1000);

}

void rpm_fun()
{
   half_revolutions++;
}
 
 

f. VIDEO HASILNYA





Alat Deteksi Warna TCS3200 dan Barcode Scanner Mini-Pos MP6200 Arduino

Alat Deteksi Warna TCS3200 dan Barcode Scanner Mini-Pos MP6200 


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mendeteksi warna dan barcode. nilai barcode akan tertampil pada lcd serta warna yang terdeteksi oleh sensor tcs3200. untuk lebih jelasnya berikut adalah koding dan programnya.



a. Arduino Uno




b. USB Host Shield




c. LCD 16x2 + I2C




d. Barcode Reader Mini-Pos




e. Sensor Warna TCS3200






f. Program Arduino IDE

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

#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
int frequency = 0;
int frequencyr;
int frequencyg;
int frequencyb;

int mark;
int aa;
int bb;
int cc;
int dd;
int ee;
int ff;
int gg;
int hh;
int ii;
int jj;
int kk;
int ll;
int mm;
int nn;

class MyParser : public HIDReportParser {
  public: 
    MyParser();
    void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
};

MyParser::MyParser() { 
  }

USB          Usb;
USBHub       Hub(&Usb);
HIDUniversal Hid(&Usb);
MyParser     Parser;


void setup() {

  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
 
  // Setting frequency-scaling to 20%
  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
 
  Serial.begin(9600);
  
  if (Usb.Init() == -1)
  Serial.println("OSC did not start.");

  delay( 200 );

  Hid.SetReportParser(0, &Parser);
}


void loop() {

  // Setting red filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  // Reading the output frequency
  frequencyr = pulseIn(sensorOut, LOW);
  delay(100);
  
  // Setting Green filtered photodiodes to be read
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequencyg = pulseIn(sensorOut, LOW);
  delay(100);
  
  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  // Reading the output frequency
  frequencyb = pulseIn(sensorOut, LOW);
  delay(100);

if((frequencyr > 100)&&(frequencyr < 200)&&(frequencyg > 100)&&(frequencyg < 200)&&(frequencyb > 100)&&(frequencyb < 200)){
//warna  
lcd.setCursor(0,0);
lcd.print("PUTIH  ");
}

if((frequencyr > 250)&&(frequencyr < 300)&&(frequencyg > 220)&&(frequencyg < 270)&&(frequencyb > 210)&&(frequencyb < 250)){
//warna  
lcd.setCursor(0,0);
lcd.print("HIJAU  ");
}

if((frequencyr > 300)&&(frequencyr < 350)&&(frequencyg > 200)&&(frequencyg < 250)&&(frequencyb > 100)&&(frequencyb < 200)){
//warna 
lcd.setCursor(0,0);
lcd.print("BIRU   "); 
}

/*
lcd.setCursor(0,1);
lcd.print(frequencyr);
lcd.print("/");
lcd.print(frequencyg);
lcd.print("/");
lcd.print(frequencyb);
lcd.print("   ");
*/

Usb.Task();
}


void MyParser::Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) {
  // If error, return
  // I don't know why it starts on 2, I just following the example
  if (buf[2] == 1) return;

  // If empty, return
  // I check on 2 because the previous if check on 2 too
  if (buf[2] == 0) return;

  // Like above, WHY it starts on 2 ?
  // What is the purpose of bit in 0 and 1 ?
  for(uint8_t i = 2; i < 3; i++){
    Serial.print(buf[i]);
    Serial.print(" ");

if(mark == 0){
  if(buf[2] == 30){
    aa = 1;
    }
  if(buf[2] == 31){
    aa = 2;
    }
  if(buf[2] == 32){
    aa = 3;
    }
  if(buf[2] == 33){
    aa = 4;
    }
 if(buf[2] == 34){
    aa = 5;
    }
  if(buf[2] == 35){
    aa = 6;
    }
 if(buf[2] == 36){
    aa = 7;
    }
  if(buf[2] == 37){
    aa = 8;
    }
  if(buf[2] == 38){
    aa = 9;
    }
  if(buf[2] == 39){
    aa = 0;
    }
  if(buf[2] == 40){
    }
  }


if(mark == 1){
  if(buf[2] == 30){
    bb = 1;
    }
  if(buf[2] == 31){
    bb = 2;
    }
  if(buf[2] == 32){
    bb = 3;
    }
  if(buf[2] == 33){
    bb = 4;
    }
 if(buf[2] == 34){
    bb = 5;
    }
  if(buf[2] == 35){
    bb = 6;
    }
 if(buf[2] == 36){
    bb = 7;
    }
  if(buf[2] == 37){
    bb = 8;
    }
  if(buf[2] == 38){
    bb = 9;
    }
  if(buf[2] == 39){
    bb = 0;
    }
  if(buf[2] == 40){
    }
  }


if(mark == 2){
  if(buf[2] == 30){
    cc = 1;
    }
  if(buf[2] == 31){
    cc = 2;
    }
  if(buf[2] == 32){
    cc = 3;
    }
  if(buf[2] == 33){
    cc = 4;
    }
 if(buf[2] == 34){
    cc = 5;
    }
  if(buf[2] == 35){
    cc = 6;
    }
 if(buf[2] == 36){
    cc = 7;
    }
  if(buf[2] == 37){
    cc = 8;
    }
  if(buf[2] == 38){
    cc = 9;
    }
  if(buf[2] == 39){
    cc = 0;
    }
  if(buf[2] == 40){
    }
  }


if(mark == 3){
  if(buf[2] == 30){
    dd = 1;
    }
  if(buf[2] == 31){
    dd = 2;
    }
  if(buf[2] == 32){
    dd = 3;
    }
  if(buf[2] == 33){
    dd = 4;
    }
 if(buf[2] == 34){
    dd = 5;
    }
  if(buf[2] == 35){
    dd = 6;
    }
 if(buf[2] == 36){
    dd = 7;
    }
  if(buf[2] == 37){
    dd = 8;
    }
  if(buf[2] == 38){
    dd = 9;
    }
  if(buf[2] == 39){
    dd = 0;
    }
  if(buf[2] == 40){
    }
  }


if(mark == 4){
  if(buf[2] == 30){
    ee = 1;
    }
  if(buf[2] == 31){
    ee = 2;
    }
  if(buf[2] == 32){
    ee = 3;
    }
  if(buf[2] == 33){
    ee = 4;
    }
 if(buf[2] == 34){
    ee = 5;
    }
  if(buf[2] == 35){
    ee = 6;
    }
 if(buf[2] == 36){
    ee = 7;
    }
  if(buf[2] == 37){
    ee = 8;
    }
  if(buf[2] == 38){
    ee = 9;
    }
  if(buf[2] == 39){
    ee = 0;
    }
  if(buf[2] == 40){
    }
  }


if(mark == 5){
  if(buf[2] == 30){
    ff = 1;
    }
  if(buf[2] == 31){
    ff = 2;
    }
  if(buf[2] == 32){
    ff = 3;
    }
  if(buf[2] == 33){
    ff = 4;
    }
 if(buf[2] == 34){
    ff = 5;
    }
  if(buf[2] == 35){
    ff = 6;
    }
 if(buf[2] == 36){
    ff = 7;
    }
  if(buf[2] == 37){
    ff = 8;
    }
  if(buf[2] == 38){
    ff = 9;
    }
  if(buf[2] == 39){
    ff = 0;
    }
  if(buf[2] == 40){
    }
  }

if(mark == 6){
  if(buf[2] == 30){
    gg = 1;
    }
  if(buf[2] == 31){
    gg = 2;
    }
  if(buf[2] == 32){
    gg = 3;
    }
  if(buf[2] == 33){
    gg = 4;
    }
 if(buf[2] == 34){
    gg = 5;
    }
  if(buf[2] == 35){
    gg = 6;
    }
 if(buf[2] == 36){
    gg = 7;
    }
  if(buf[2] == 37){
    gg = 8;
    }
  if(buf[2] == 38){
    gg = 9;
    }
  if(buf[2] == 39){
    gg = 0;
    }
  if(buf[2] == 40){
    }
  }
 
if(mark == 7){
  if(buf[2] == 30){
    hh = 1;
    }
  if(buf[2] == 31){
    hh = 2;
    }
  if(buf[2] == 32){
    hh = 3;
    }
  if(buf[2] == 33){
    hh = 4;
    }
 if(buf[2] == 34){
    hh = 5;
    }
  if(buf[2] == 35){
    hh = 6;
    }
 if(buf[2] == 36){
    hh = 7;
    }
  if(buf[2] == 37){
    hh = 8;
    }
  if(buf[2] == 38){
    hh = 9;
    }
  if(buf[2] == 39){
    hh = 0;
    }
  if(buf[2] == 40){
    }
  }

if(mark == 8){
  if(buf[2] == 30){
    ii = 1;
    }
  if(buf[2] == 31){
    ii = 2;
    }
  if(buf[2] == 32){
    ii = 3;
    }
  if(buf[2] == 33){
    ii = 4;
    }
 if(buf[2] == 34){
    ii = 5;
    }
  if(buf[2] == 35){
    ii = 6;
    }
 if(buf[2] == 36){
    ii = 7;
    }
  if(buf[2] == 37){
    ii = 8;
    }
  if(buf[2] == 38){
    ii = 9;
    }
  if(buf[2] == 39){
    ii = 0;
    }
  if(buf[2] == 40){
    }
  }

if(mark == 9){
  if(buf[2] == 30){
    jj = 1;
    }
  if(buf[2] == 31){
    jj = 2;
    }
  if(buf[2] == 32){
    jj = 3;
    }
  if(buf[2] == 33){
    jj = 4;
    }
 if(buf[2] == 34){
    jj = 5;
    }
  if(buf[2] == 35){
    jj = 6;
    }
 if(buf[2] == 36){
    jj = 7;
    }
  if(buf[2] == 37){
    jj = 8;
    }
  if(buf[2] == 38){
    jj = 9;
    }
  if(buf[2] == 39){
    jj = 0;
    }
  if(buf[2] == 40){
    }
  }

if(mark == 10){
  if(buf[2] == 30){
    kk = 1;
    }
  if(buf[2] == 31){
    kk = 2;
    }
  if(buf[2] == 32){
    kk = 3;
    }
  if(buf[2] == 33){
    kk = 4;
    }
 if(buf[2] == 34){
    kk = 5;
    }
  if(buf[2] == 35){
    kk = 6;
    }
 if(buf[2] == 36){
    kk = 7;
    }
  if(buf[2] == 37){
    kk = 8;
    }
  if(buf[2] == 38){
    kk = 9;
    }
  if(buf[2] == 39){
    kk = 0;
    }
  if(buf[2] == 40){
    }
  }

if(mark == 11){
  if(buf[2] == 30){
    ll = 1;
    }
  if(buf[2] == 31){
    ll = 2;
    }
  if(buf[2] == 32){
    ll = 3;
    }
  if(buf[2] == 33){
    ll = 4;
    }
 if(buf[2] == 34){
    ll = 5;
    }
  if(buf[2] == 35){
    ll = 6;
    }
 if(buf[2] == 36){
    ll = 7;
    }
  if(buf[2] == 37){
    ll = 8;
    }
  if(buf[2] == 38){
    ll = 9;
    }
  if(buf[2] == 39){
    ll = 0;
    }
  if(buf[2] == 40){
    }
  }


if(mark == 12){
  if(buf[2] == 30){
    mm = 1;
    }
  if(buf[2] == 31){
    mm = 2;
    }
  if(buf[2] == 32){
    mm = 3;
    }
  if(buf[2] == 33){
    mm = 4;
    }
 if(buf[2] == 34){
    mm = 5;
    }
  if(buf[2] == 35){
    mm = 6;
    }
 if(buf[2] == 36){
    mm = 7;
    }
  if(buf[2] == 37){
    mm = 8;
    }
  if(buf[2] == 38){
    mm = 9;
    }
  if(buf[2] == 39){
    mm = 0;
    }
  if(buf[2] == 40){
    }
  }


mark++;        

if(mark > 13){

lcd.setCursor(0,1);
lcd.print(aa);
lcd.print(bb);
lcd.print(cc);
lcd.print(dd);
lcd.print(ee);
lcd.print(ff);
lcd.print(gg);
lcd.print(hh);
lcd.print(ii);
lcd.print(jj);
lcd.print(kk);
lcd.print(ll);
lcd.print(mm);

mark = 0;
delay(3000);
lcd.clear();
}
}
}



g. VIDEO HASILNYA