Translate

Kendali Pagar MANUAL / OTOMATIS via Sensor PIR dan IOT BLYNK 2.0

Kendali Pagar MANUAL / OTOMATIS via Sensor PIR dan IOT BLYNK 2.0


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengendalikan sebuah pintu pagar dengan 2 mode yaitu manual dan otomatis. untuk cara manual yaitu dengan menggunakan fitur IOT blynk yang terdapat 2 buah tombol untuk kendalinya sedangkan untuk fitur otomatis yaitu buka tutup pagar dengan menggunakan sensor PIR. untuk lebih jelasnya berikut adalah koding dan skemanya.



a. Skema

Sumber: 
https://projectiot123.com/product/ibt2-bts7960b-bts7960-43a-h-bridge-motor-driver-in-pakistan/




b. Program Arduino IDE

#define BLYNK_TEMPLATE_ID "TMPL6wOC--xxx"
#define BLYNK_TEMPLATE_NAME "monitor daya"
#define BLYNK_AUTH_TOKEN "VOK0cWiFN5ycHj3SV_snEDXTfTfeixxx"
#define BLYNK_PRINT Serial  

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

LiquidCrystal_I2C lcd(0x27,16,2);

//int buzzer = D3;
int sw1 = D7;
int sw2 = D3;
int sw1x = 0;
int sw2x = 0;

int pwm1 = D5;
int pwm2 = D6;
int mark = 0;
int pinValue;
int pinValue2;
int sensorpir;
int tanda;

BlynkTimer timer;

char ssid[] = "hotspothpku";
char pass[] = "12345678";

BLYNK_WRITE(V0)
{
  pinValue = param.asInt();   

  if((pinValue == 1)&&(tanda == 1)){
    lcd.clear();
    bukapagarx();
  }
  
  if((pinValue == 0)&&(tanda == 1)) {
     lcd.clear(); 
    tutuppagarx(); 
  }
  
//  Serial.print("button value is: "); 
//  Serial.println(pinValue);
}

BLYNK_WRITE(V1)
{
  pinValue2 = param.asInt();   

  if(pinValue2 == 1){
    tanda = 1;
  }
  
  if(pinValue2 == 0) {
    tanda = 0;
  }

}

void sendSensor()
{ 
 delay(100);
}

void setup() {
  // put your setup code here, to run once:
  lcd.begin();
  lcd.clear();
  lcd.noCursor();

  //pinMode(buzzer,OUTPUT);
  //digitalWrite(buzzer,LOW);
  pinMode(sw1,INPUT_PULLUP);
  pinMode(sw2,INPUT_PULLUP);

  pinMode(pwm1,OUTPUT);
  pinMode(pwm2,OUTPUT);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  timer.setInterval(1000L, sendSensor);
}

void loop() {

sensorpir = analogRead(A0);
sw1x = digitalRead(sw1);
sw2x = digitalRead(sw2);

  lcd.setCursor(0,0);
  lcd.print("SW1= ");
  lcd.print(sw1x);
  lcd.print("  SW2= ");
  lcd.print(sw2x);

  lcd.setCursor(0,1);
  lcd.print("PIR= ");
  lcd.print(sensorpir);
  lcd.print("  ");
  lcd.print(tanda);
  
//buka pagar
if((sensorpir >= 100)&&(mark == 0)&&(tanda == 0)){
 lcd.clear(); 
 bukapagar(); 
 delay(5000); 
}

//tutup pagar
if((sensorpir < 100)&&(mark == 1)&&(tanda == 0)){
 lcd.clear(); 
 tutuppagar();  
}

  Blynk.run();
  timer.run();
  delay(200);  
}

void bukapagar(){
lcd.setCursor(0,1);
lcd.print("BUKA    ");

analogWrite(pwm1,100);  
analogWrite(pwm2,0);  

sw1x = digitalRead(sw1);

if(sw1x == 1){
analogWrite(pwm1,0);  
analogWrite(pwm2,0);
mark = 1;
lcd.clear(); 
return; 
}
  
bukapagar();  
}

void tutuppagar(){
lcd.setCursor(0,1);
lcd.print("TUTUP  ");
  
analogWrite(pwm1,0);  
analogWrite(pwm2,100);  

sw2x = digitalRead(sw2);

if(sw2x == 1){
analogWrite(pwm1,0);  
analogWrite(pwm2,0);
mark = 0;
//digitalWrite(buzzer,HIGH);
//delay(3000);
//digitalWrite(buzzer,LOW);
lcd.clear(); 
return; 
}
  
tutuppagar();  
}

void bukapagarx(){
lcd.setCursor(0,1);
lcd.print("BUKA    ");

analogWrite(pwm1,100);  
analogWrite(pwm2,0);  

sw1x = digitalRead(sw1);

if(sw1x == 1){
analogWrite(pwm1,0);  
analogWrite(pwm2,0);
lcd.clear(); 
return; 
}
  
bukapagarx();  
}

void tutuppagarx(){
lcd.setCursor(0,1);
lcd.print("TUTUP  ");
  
analogWrite(pwm1,0);  
analogWrite(pwm2,100);  

sw2x = digitalRead(sw2);

if(sw2x == 1){
analogWrite(pwm1,0);  
analogWrite(pwm2,0);
//digitalWrite(buzzer,HIGH);
//delay(3000);
//digitalWrite(buzzer,LOW);
lcd.clear(); 
return; 
}
  
tutuppagarx();  
}



c. Interface IOT BLYNK


d. VIDEO HASILNYA





Simulasi Kendali Motor DC Menggunakan Proteus 7 dan Fitur EEPROM

Simulasi Kendali Motor DC Menggunakan Proteus 7 dan Fitur EEPROM


       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah simulasi dengan menggunakan Arduino untuk mengendalikan putaran motor DC yang dikendalkan kecepatannya dari pelan hingga cepat kemudian dari cepat ke pelan dan stop. untuk lebih jelasnya berikut adalah skema dan kodingnya.



a. Skema Alat




b. VIDEO HASILNYA




c. Program Arduino IDE versi 1

/*
Tombol 1 pin no - 6
Tombol 2 pin no - 5
Tombol 3 pin no 4
Tombol 4 pin no - 3
Driver Motor 1 RPWM pin no - 11
Driver Motor 1 LapWM pin no - 10
Driver Motor 2 RPWM pin no - 9
Driver Motor 2 LPWM pin no 8
Sensor motor 1 a pin no A0 start
Sensor motor 1 b pin no A1 stop
Sensor motor 2 a pin no A2 start
Sensor motor 2 b pin no A3 stop
LCD SDA pin A4
LCD SCL pin A5
*/

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

int dataadc1;
int dataadc2;
int dataadc3;
int dataadc4;

int btset = 3;
int btok = 4;
int btup = 6;
int btdown = 5;
int motor1a = 12;
int motor1b = 13;
int ena = 10;

int motor2a = 7;
int motor2b = 8;
int enb = 9;

int key = 2;

int btsetx;
int btokx;
int btupx;
int btdownx;

int vslowstart1;
int vforwardspeed1;
int vreversespeed1;
int vslowstop1;

int vdelaystart2;
int vslowstart2;
int vforwardspeed2;
int vreversespeed2;
int vslowstop2;
int kec1;
int kec2;
int keyx;
int waktu;

int addr1 = 0;
int addr2 = 1;
int addr3 = 2;
int addr4 = 3;
int addr5 = 4;
int addr6 = 5;
int addr7 = 6;
int addr8 = 7;
int addr9 = 8;
int addr10 = 9;

int simvslowstart1;
int simvforwardspeed1;
int simvreversespeed1;
int simvslowstop1;
int simvslowstart2;
int simvforwardspeed2;
int simvreversespeed2;
int simvslowstop2;
int simvdelaystart2;
int simpan10;


void setup() {
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  pinMode(btset,INPUT_PULLUP);
  pinMode(btok,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(key,INPUT_PULLUP);
  pinMode(motor1a,OUTPUT);
  pinMode(motor1b,OUTPUT);
  pinMode(motor2a,OUTPUT);
  pinMode(motor2b,OUTPUT);
  pinMode(ena,OUTPUT);
  pinMode(enb,OUTPUT);
  pinMode(A0,INPUT_PULLUP);
  pinMode(A1,INPUT_PULLUP);
  pinMode(A2,INPUT_PULLUP);
  pinMode(A3,INPUT_PULLUP);
  
  simvslowstart1 = EEPROM.read(addr1);
  simvforwardspeed1 = EEPROM.read(addr2);
  simvreversespeed1 = EEPROM.read(addr3);
  simvslowstop1 = EEPROM.read(addr4);
  simvslowstart2 = EEPROM.read(addr5);
  simvforwardspeed2 = EEPROM.read(addr6);
  simvreversespeed2 = EEPROM.read(addr7);
  simvslowstop2 = EEPROM.read(addr8);
  simvdelaystart2 = EEPROM.read(addr9);

  vslowstart1 = simvslowstart1;
  vforwardspeed1 = simvforwardspeed1;
  vreversespeed1 = simvreversespeed1;
  vslowstop1 = simvslowstop1;
  vslowstart2 = simvslowstart2;
  vforwardspeed2 = simvforwardspeed2;
  vreversespeed2 = simvreversespeed2;    
  vslowstop2 = simvslowstop2; 
  vdelaystart2 = simvdelaystart2; 

}


void loop() {

 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 lcd.setCursor(0,0);
 lcd.print("PILIH SETTING");
 lcd.setCursor(0,1);
 lcd.print("1. SET MOTOR 1");
 lcd.setCursor(0,2);
 lcd.print("2. SET MOTOR 2");

 if(btupx == 0){
 delay(2000);
 lcd.clear();
 slowstart1();
 forwardspeed1();
 reversespeed1();
 slowstop1(); 
 }

 if(btdownx == 0){
 delay(2000);
 lcd.clear();
 delaystart2();
 slowstart2();
 forwardspeed2();
 reversespeed2();
 slowstop2(); 
 }

 if(btsetx == 0){
 delay(2000);
 lcd.clear();
 waktu = 0;
 mulaistart();
 mulaistop();
 mulaistart2();
 mulaistop2();
 }
 
 delay(200);
}



void slowstart1(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW START 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstart1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstart1 < 0){
  vslowstart1 = 100;
  }

 if(vslowstart1 > 100){
  vslowstart1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstart1 = vslowstart1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstart1 = vslowstart1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr1, vslowstart1);
  return;
  }   

slowstart1();  
}


void forwardspeed1(){
 lcd.setCursor(0,0);
 lcd.print("SET FORWARD SPEED 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vforwardspeed1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vforwardspeed1 < 0){
  vforwardspeed1 = 100;
  }

 if(vforwardspeed1 > 100){
  vforwardspeed1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vforwardspeed1 = vforwardspeed1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vforwardspeed1 = vforwardspeed1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  vforwardspeed1 = vforwardspeed1 * 2;
  EEPROM.write(addr2, vforwardspeed1);
  return;
  }   

forwardspeed1();  
}


void reversespeed1(){
 lcd.setCursor(0,0);
 lcd.print("SET REVERSE SPEED 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vreversespeed1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vreversespeed1 < 0){
  vreversespeed1 = 100;
  }

 if(vreversespeed1 > 100){
  vreversespeed1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vreversespeed1 = vreversespeed1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vreversespeed1 = vreversespeed1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  vreversespeed1 = vreversespeed1 * 2;
  EEPROM.write(addr3, vreversespeed1);
  return;
  }   

reversespeed1();  
}


void slowstop1(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW STOP 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstop1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstop1 < 0){
  vslowstop1 = 100;
  }

 if(vslowstop1 > 100){
  vslowstop1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstop1 = vslowstop1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstop1 = vslowstop1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr4, vslowstop1);
  return;
  }   

slowstop1();  
}


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

void slowstart2(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW START 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstart2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstart2 < 0){
  vslowstart2 = 100;
  }

 if(vslowstart2 > 100){
  vslowstart2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstart2 = vslowstart2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstart2 = vslowstart2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr5, vslowstart2);
  return;
  }   

slowstart2();  
}


void forwardspeed2(){
 lcd.setCursor(0,0);
 lcd.print("SET FORWARD SPEED 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vforwardspeed2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vforwardspeed2 < 0){
  vforwardspeed2 = 100;
  }

 if(vforwardspeed2 > 100){
  vforwardspeed2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vforwardspeed2 = vforwardspeed2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vforwardspeed2 = vforwardspeed2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  vforwardspeed2 = vforwardspeed2 * 2;
  EEPROM.write(addr6, vforwardspeed2);
  return;
  }   

forwardspeed2();  
}


void reversespeed2(){
 lcd.setCursor(0,0);
 lcd.print("SET REVERSE SPEED 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vreversespeed2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vreversespeed2 < 0){
  vreversespeed2 = 100;
  }

 if(vreversespeed2 > 100){
  vreversespeed2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vreversespeed2 = vreversespeed2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vreversespeed2 = vreversespeed2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  vreversespeed2 = vreversespeed2 * 2;
  EEPROM.write(addr7, vreversespeed2);
  return;
  }   

reversespeed2();  
}


void slowstop2(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW STOP 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstop2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstop2 < 0){
  vslowstop2 = 100;
  }

 if(vslowstop2 > 100){
  vslowstop2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstop2 = vslowstop2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstop2 = vslowstop2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr8, vslowstop2);
  return;
  }   

slowstop2();  
}

void delaystart2(){
 lcd.setCursor(0,0);
 lcd.print("SET DELAY START 2");
 lcd.setCursor(0,1);
 lcd.print("Ms=: ");  
 lcd.print(vdelaystart2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vdelaystart2 < 0){
  vdelaystart2 = 5000;
  }

 if(vdelaystart2 > 5000){
  vdelaystart2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vdelaystart2 = vdelaystart2 + 1;
  }

 if(btdownx == 0){
  delay(200);
  vdelaystart2 = vdelaystart2 - 1;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr9, vdelaystart2);
  return;
  }   

delaystart2();  
}

//==============================================================================================
void mulaistart(){

 dataadc1 = digitalRead(A0);
 dataadc2 = digitalRead(A1);
 dataadc3 = digitalRead(A2);
 dataadc4 = digitalRead(A3);

 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);
 
 lcd.setCursor(0,0);
 lcd.print("FSPEED1:");
 lcd.print(vforwardspeed1);
 lcd.print("/");  
 lcd.print(vreversespeed1);
 lcd.print(" ");
 
 lcd.setCursor(0,1);
 lcd.print("FSPEED2:");
 lcd.print(vforwardspeed2);
 lcd.print("/");  
 lcd.print(vreversespeed2);
 lcd.print(" ");
 
 lcd.setCursor(0,2);
 lcd.print("T:");
 lcd.print(waktu);
 lcd.print("/");  
 lcd.print(vdelaystart2);
 lcd.print(" "); 
   
waktu++;  
vslowstart1 = vslowstart1 + 1;
kec1 = vslowstart1;

if(vslowstart1 >= vforwardspeed1){
   vslowstart1 = vforwardspeed1; 
   kec1 = vforwardspeed1; 
}

if(vslowstart2 > vforwardspeed2){
   vslowstart2 = vforwardspeed2; 
   kec2 = vforwardspeed2;  
}

  //arah CW
  digitalWrite(motor1a,HIGH);
  digitalWrite(motor1b,LOW);  
  analogWrite(ena,kec1);

if(waktu >= vdelaystart2){
  vslowstart2 = vslowstart2 + 1;
  kec2 = vslowstart2;
  waktu = vdelaystart2;
  
  //arah CW
  digitalWrite(motor2a,HIGH);
  digitalWrite(motor2b,LOW);  
  analogWrite(enb,kec2);
}

if(dataadc2 == 0){
  lcd.clear();
  return;
}

if(dataadc4 == 0){
  lcd.clear();
  return;
}

delay(100);

mulaistart();  
}

void mulaistop(){

 btsetx = digitalRead(btset);
 keyx = digitalRead(key);
  
 lcd.setCursor(0,0);
 lcd.print("SLOW1 :");
 lcd.print(vslowstart1);
 lcd.print("/");  
 lcd.print(vslowstop1);
 lcd.print("   ");

 lcd.setCursor(0,1);
 lcd.print("SLOW2 :");
 lcd.print(vslowstart2);
 lcd.print("/");  
 lcd.print(vslowstop2);
 lcd.print("   ");
 
 if(btokx == 0){
  lcd.clear();
  delay(2000);
  waktu = 0;
  return;
  } 

vforwardspeed1 = vforwardspeed1 - 1;
kec1 = vforwardspeed1;

vforwardspeed2 = vforwardspeed2 - 1; 
kec2 = vforwardspeed2; 

if(vforwardspeed1 <= 0){
kec1 = 0; 
vforwardspeed1 = 0; 
}

if(vforwardspeed2 <= 0){
kec2 = 0;  
vforwardspeed2 = 0;
}

  //arah CW
  digitalWrite(motor1a,HIGH);
  digitalWrite(motor1b,LOW);  
  analogWrite(ena,kec1);
    
  digitalWrite(motor2a,HIGH);
  digitalWrite(motor2b,LOW);  
  analogWrite(enb,kec2);
  
if(keyx == 1){
  lcd.clear();
  delay(1000);
  waktu = 0;
  return;
}

delay(100);
mulaistop();  
}

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

void mulaistart2(){

 dataadc1 = digitalRead(A0);
 dataadc2 = digitalRead(A1);
 dataadc3 = digitalRead(A2);
 dataadc4 = digitalRead(A3);

 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);
  
 lcd.setCursor(0,0);
 lcd.print("RSPEED :");
 lcd.print(vforwardspeed1);
 lcd.print("/");  
 lcd.print(vreversespeed1);
 lcd.print("   ");

 lcd.setCursor(0,1);
 lcd.print("RSPEED2 :");
 lcd.print(vforwardspeed2);
 lcd.print("/");  
 lcd.print(vreversespeed2);
 lcd.print("/");  
 lcd.print(vdelaystart2);
 lcd.print("   ");
   
waktu++;  
vslowstart1 = vslowstart1 + 1;
kec1 = vslowstart1 + 1;

if(vslowstart1 >= vreversespeed1){
vslowstart1 = vreversespeed1;    
kec1 = vreversespeed1;  
}

if(vslowstart2 >= vreversespeed2){
vslowstart2 = vreversespeed2;   
kec2 = vreversespeed2;  
}
 
  //arah CCW
  digitalWrite(motor1a,LOW);
  digitalWrite(motor1b,HIGH);  
  analogWrite(ena,kec1);

if(waktu >= vdelaystart2){
  vslowstart2 = vslowstart2 + 1;
  kec2 = vslowstart2;
  waktu = vdelaystart2;
  //arah CCW
  digitalWrite(motor2a,LOW);
  digitalWrite(motor2b,HIGH);  
  analogWrite(enb,kec2);
}

if(dataadc1 == 0){
  return;
}

if(dataadc3 == 0){
  return;
}

delay(1);
mulaistart2();  
}


void mulaistop2(){

 btsetx = digitalRead(btset);
 keyx = digitalRead(key);
  
 lcd.setCursor(0,0);
 lcd.print("SLOW1 :");
 lcd.print(vslowstart1);
 lcd.print("/");  
 lcd.print(vslowstop1);
 lcd.print("   ");

 lcd.setCursor(0,2);
 lcd.print("SLOW2 :");
 lcd.print(vslowstart2);
 lcd.print("/");  
 lcd.print(vslowstop2);
 lcd.print("   ");

vreversespeed1 = vreversespeed1 - 1; 
kec1 = vreversespeed1;
vreversespeed2 = vreversespeed2 - 1;
kec2 = vreversespeed2; 

if(vreversespeed1 <= 0){
kec1 = 0;  
vreversespeed1 = 0;
}

if(vreversespeed2 <= 0){
vreversespeed2 = 0;
kec2 = 0;  
}

  //arah CCW
  digitalWrite(motor1a,LOW);
  digitalWrite(motor1b,HIGH);  
  analogWrite(ena,kec1);
  digitalWrite(motor2a,LOW);
  digitalWrite(motor2b,HIGH);  
  analogWrite(enb,kec2);

if(keyx == 1){
  lcd.clear();
  delay(1000);
  waktu = 0;
  return;
}

delay(1);
mulaistop2();  
}



  
d. Program Arduino IDE versi 2

/*
Tombol 1 pin no - 6
Tombol 2 pin no - 5
Tombol 3 pin no 4
Tombol 4 pin no - 3
Driver Motor 1 RPWM pin no - 11
Driver Motor 1 LapWM pin no - 10
Driver Motor 2 RPWM pin no - 9
Driver Motor 2 LPWM pin no 8
Sensor motor 1 a pin no A0 start
Sensor motor 1 b pin no A1 stop
Sensor motor 2 a pin no A2 start
Sensor motor 2 b pin no A3 stop
LCD SDA pin A4
LCD SCL pin A5
*/

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

int dataadc1;
int dataadc2;
int dataadc3;
int dataadc4;

/*
int btset = 3;
int btok = 4;
int btup = 6;
int btdown = 5;
int motor1a = 12;
int motor1b = 13;
int ena = 10;

int motor2a = 7;
int motor2b = 8;
int enb = 9;
*/

int btset = 3;
int btok = 4;
int btup = 6;
int btdown = 5;
int motor1a = 11;
int motor1b = 10;
int motor2a = 9;
int motor2b = 8;

int key = 2;

int btsetx;
int btokx;
int btupx;
int btdownx;

int vslowstart1;
int vforwardspeed1;
int vreversespeed1;
int vslowstop1;

int vdelaystart2;
int vslowstart2;
int vforwardspeed2;
int vreversespeed2;
int vslowstop2;
int kec1;
int kec2;
int keyx;
int waktu;

int addr1 = 0;
int addr2 = 1;
int addr3 = 2;
int addr4 = 3;
int addr5 = 4;
int addr6 = 5;
int addr7 = 6;
int addr8 = 7;
int addr9 = 8;
int addr10 = 9;

int simvslowstart1;
int simvforwardspeed1;
int simvreversespeed1;
int simvslowstop1;
int simvslowstart2;
int simvforwardspeed2;
int simvreversespeed2;
int simvslowstop2;
int simvdelaystart2;
int simpan10;


void setup() {
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  pinMode(btset,INPUT_PULLUP);
  pinMode(btok,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(key,INPUT_PULLUP);
  pinMode(motor1a,OUTPUT);
  pinMode(motor1b,OUTPUT);
  pinMode(motor2a,OUTPUT);
  pinMode(motor2b,OUTPUT);
  //pinMode(ena,OUTPUT);
  //pinMode(enb,OUTPUT);
  pinMode(A0,INPUT_PULLUP);
  pinMode(A1,INPUT_PULLUP);
  pinMode(A2,INPUT_PULLUP);
  pinMode(A3,INPUT_PULLUP);
  
  simvslowstart1 = EEPROM.read(addr1);
  simvforwardspeed1 = EEPROM.read(addr2);
  simvreversespeed1 = EEPROM.read(addr3);
  simvslowstop1 = EEPROM.read(addr4);
  simvslowstart2 = EEPROM.read(addr5);
  simvforwardspeed2 = EEPROM.read(addr6);
  simvreversespeed2 = EEPROM.read(addr7);
  simvslowstop2 = EEPROM.read(addr8);
  simvdelaystart2 = EEPROM.read(addr9);

  vslowstart1 = simvslowstart1;
  vforwardspeed1 = simvforwardspeed1;
  vreversespeed1 = simvreversespeed1;
  vslowstop1 = simvslowstop1;
  vslowstart2 = simvslowstart2;
  vforwardspeed2 = simvforwardspeed2;
  vreversespeed2 = simvreversespeed2;    
  vslowstop2 = simvslowstop2; 
  vdelaystart2 = simvdelaystart2; 

}


void loop() {

 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);
 keyx = digitalRead(key);
 
 lcd.setCursor(0,0);
 lcd.print("PILIH SETTING");
 lcd.setCursor(0,1);
 lcd.print("1. SET MOTOR 1");
 lcd.setCursor(0,2);
 lcd.print("2. SET MOTOR 2");

 if(btupx == 0){
 delay(2000);
 lcd.clear();
 slowstart1();
 forwardspeed1();
 reversespeed1();
 slowstop1(); 
 }

 if(btdownx == 0){
 delay(2000);
 lcd.clear();
 delaystart2();
 slowstart2();
 forwardspeed2();
 reversespeed2();
 slowstop2(); 
 }

 if(keyx == 1){
 delay(2000);
 lcd.clear();
 waktu = 0;
 mulaistart();
 mulaistop();
 mulaistart2();
 mulaistop2();
 }
 
 delay(200);
}



void slowstart1(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW START 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstart1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstart1 < 0){
  vslowstart1 = 100;
  }

 if(vslowstart1 > 100){
  vslowstart1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstart1 = vslowstart1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstart1 = vslowstart1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr1, vslowstart1);
  return;
  }   

slowstart1();  
}


void forwardspeed1(){
 lcd.setCursor(0,0);
 lcd.print("SET FORWARD SPEED 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vforwardspeed1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vforwardspeed1 < 0){
  vforwardspeed1 = 100;
  }

 if(vforwardspeed1 > 100){
  vforwardspeed1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vforwardspeed1 = vforwardspeed1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vforwardspeed1 = vforwardspeed1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr2, vforwardspeed1);
  vforwardspeed1 = vforwardspeed1 * 2;
  return;
  }   

forwardspeed1();  
}


void reversespeed1(){
 lcd.setCursor(0,0);
 lcd.print("SET REVERSE SPEED 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vreversespeed1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vreversespeed1 < 0){
  vreversespeed1 = 100;
  }

 if(vreversespeed1 > 100){
  vreversespeed1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vreversespeed1 = vreversespeed1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vreversespeed1 = vreversespeed1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr3, vreversespeed1);
  vreversespeed1 = vreversespeed1 * 2;
  return;
  }   

reversespeed1();  
}


void slowstop1(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW STOP 1");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstop1);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstop1 < 0){
  vslowstop1 = 100;
  }

 if(vslowstop1 > 100){
  vslowstop1 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstop1 = vslowstop1 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstop1 = vslowstop1 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr4, vslowstop1);
  return;
  }   

slowstop1();  
}


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

void slowstart2(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW START 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstart2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstart2 < 0){
  vslowstart2 = 100;
  }

 if(vslowstart2 > 100){
  vslowstart2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstart2 = vslowstart2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstart2 = vslowstart2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr5, vslowstart2);
  return;
  }   

slowstart2();  
}


void forwardspeed2(){
 lcd.setCursor(0,0);
 lcd.print("SET FORWARD SPEED 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vforwardspeed2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vforwardspeed2 < 0){
  vforwardspeed2 = 100;
  }

 if(vforwardspeed2 > 100){
  vforwardspeed2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vforwardspeed2 = vforwardspeed2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vforwardspeed2 = vforwardspeed2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr6, vforwardspeed2);
  vforwardspeed2 = vforwardspeed2 * 2;
  return;
  }   

forwardspeed2();  
}


void reversespeed2(){
 lcd.setCursor(0,0);
 lcd.print("SET REVERSE SPEED 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vreversespeed2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vreversespeed2 < 0){
  vreversespeed2 = 100;
  }

 if(vreversespeed2 > 100){
  vreversespeed2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vreversespeed2 = vreversespeed2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vreversespeed2 = vreversespeed2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr7, vreversespeed2);
  vreversespeed2 = vreversespeed2 * 2;
  return;
  }   

reversespeed2();  
}


void slowstop2(){
 lcd.setCursor(0,0);
 lcd.print("SET SLOW STOP 2");
 lcd.setCursor(0,1);
 lcd.print("SPEED : ");  
 lcd.print(vslowstop2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vslowstop2 < 0){
  vslowstop2 = 100;
  }

 if(vslowstop2 > 100){
  vslowstop2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vslowstop2 = vslowstop2 + 5;
  }

 if(btdownx == 0){
  delay(200);
  vslowstop2 = vslowstop2 - 5;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr8, vslowstop2);
  return;
  }   

slowstop2();  
}



void delaystart2(){
 lcd.setCursor(0,0);
 lcd.print("SET DELAY START 2");
 lcd.setCursor(0,1);
 lcd.print("Ms=: ");  
 lcd.print(vdelaystart2);
 lcd.print("  ");  
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);

 if(vdelaystart2 < 0){
  vdelaystart2 = 5000;
  }

 if(vdelaystart2 > 5000){
  vdelaystart2 = 0;
  } 

 if(btupx == 0){
  delay(200);
  vdelaystart2 = vdelaystart2 + 1;
  }

 if(btdownx == 0){
  delay(200);
  vdelaystart2 = vdelaystart2 - 1;
  }

 if(btokx == 0){
  lcd.clear();
  delay(2000);
  EEPROM.write(addr9, vdelaystart2);
  return;
  }   

delaystart2();  
}

//==============================================================================================
void mulaistart(){

 dataadc1 = digitalRead(A0);
 dataadc2 = digitalRead(A1);
 dataadc3 = digitalRead(A2);
 dataadc4 = digitalRead(A3);
 
 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);
 
 lcd.setCursor(0,0);
 lcd.print("FSPEED1:");
 lcd.print(vforwardspeed1);
 lcd.print("/");  
 lcd.print(vreversespeed1);
 lcd.print(" ");
 
 lcd.setCursor(0,1);
 lcd.print("FSPEED2:");
 lcd.print(vforwardspeed2);
 lcd.print("/");  
 lcd.print(vreversespeed2);
 lcd.print(" ");
 
 lcd.setCursor(0,2);
 lcd.print("T:");
 lcd.print(waktu);
 lcd.print("/");  
 lcd.print(vdelaystart2);
 lcd.print(" "); 
   
waktu++;  
vslowstart1 = vslowstart1 + 1;
kec1 = vslowstart1;

if(vslowstart1 >= vforwardspeed1){
   vslowstart1 = vforwardspeed1; 
   kec1 = vforwardspeed1; 
}

if(vslowstart2 > vforwardspeed2){
   vslowstart2 = vforwardspeed2; 
   kec2 = vforwardspeed2;  
}

  //arah CW
  //digitalWrite(motor1a,HIGH);
  //digitalWrite(motor1b,LOW);  
  //analogWrite(ena,kec1);
  //arah CW
  analogWrite(motor1a,kec1);
  analogWrite(motor1b,0);

if(waktu >= vdelaystart2){
  vslowstart2 = vslowstart2 + 1;
  kec2 = vslowstart2;
  waktu = vdelaystart2;
  
  //arah CW
  //digitalWrite(motor2a,HIGH);
  //digitalWrite(motor2b,LOW);  
  //analogWrite(enb,kec2);
    //arah CW
  analogWrite(motor2a,kec2);
  analogWrite(motor2b,0);
}

if(dataadc2 == 1){
  lcd.clear();
  return;
}

if(dataadc4 == 1){
  lcd.clear();
  return;
}

delay(100);

mulaistart();  
}



void mulaistop(){

 btsetx = digitalRead(btset);
 keyx = digitalRead(key);
  
 lcd.setCursor(0,0);
 lcd.print("SLOW1 :");
 lcd.print(vslowstart1);
 lcd.print("/");  
 lcd.print(vslowstop1);
 lcd.print("   ");

 lcd.setCursor(0,1);
 lcd.print("SLOW2 :");
 lcd.print(vslowstart2);
 lcd.print("/");  
 lcd.print(vslowstop2);
 lcd.print("   ");
 
 if(btokx == 0){
  lcd.clear();
  delay(2000);
  waktu = 0;
  return;
  } 

vforwardspeed1 = vforwardspeed1 - 1;
kec1 = vforwardspeed1;

vforwardspeed2 = vforwardspeed2 - 1; 
kec2 = vforwardspeed2; 

if(vforwardspeed1 <= 0){
kec1 = 0; 
vforwardspeed1 = 0; 
}

if(vforwardspeed2 <= 0){
kec2 = 0;  
vforwardspeed2 = 0;
}

  //arah CW
  //digitalWrite(motor1a,HIGH);
  //digitalWrite(motor1b,LOW);  
  //analogWrite(ena,kec1);
    
  //digitalWrite(motor2a,HIGH);
  //digitalWrite(motor2b,LOW);  
  //analogWrite(enb,kec2);
  
  //arah CW
  analogWrite(motor1a,kec1);
  analogWrite(motor1b,0);
  analogWrite(motor2a,kec2);
  analogWrite(motor2b,0);

if(keyx == 1){
  lcd.clear();
  delay(1000);
  waktu = 0;
  return;
}

delay(100);
mulaistop();  
}

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

void mulaistart2(){

 dataadc1 = digitalRead(A0);
 dataadc2 = digitalRead(A1);
 dataadc3 = digitalRead(A2);
 dataadc4 = digitalRead(A3);

 btsetx = digitalRead(btset);
 btokx = digitalRead(btok);
 btupx = digitalRead(btup);
 btdownx = digitalRead(btdown);
  
 lcd.setCursor(0,0);
 lcd.print("RSPEED :");
 lcd.print(vforwardspeed1);
 lcd.print("/");  
 lcd.print(vreversespeed1);
 lcd.print("   ");

 lcd.setCursor(0,1);
 lcd.print("RSPEED2 :");
 lcd.print(vforwardspeed2);
 lcd.print("/");  
 lcd.print(vreversespeed2);
 lcd.print("/");  
 lcd.print(vdelaystart2);
 lcd.print("   ");
   
waktu++;  
vslowstart1 = vslowstart1 + 1;
kec1 = vslowstart1 + 1;

if(vslowstart1 >= vreversespeed1){
vslowstart1 = vreversespeed1;    
kec1 = vreversespeed1;  
}

if(vslowstart2 >= vreversespeed2){
vslowstart2 = vreversespeed2;   
kec2 = vreversespeed2;  
}
 
  //arah CCW
  //digitalWrite(motor1a,LOW);
  //digitalWrite(motor1b,HIGH);  
  //analogWrite(ena,kec1);

  //arah CCW
  analogWrite(motor1a,0);
  analogWrite(motor1b,kec1);

if(waktu >= vdelaystart2){
  vslowstart2 = vslowstart2 + 1;
  kec2 = vslowstart2;
  waktu = vdelaystart2;
  //arah CCW
  //digitalWrite(motor2a,LOW);
  //digitalWrite(motor2b,HIGH);  
  //analogWrite(enb,kec2);
  analogWrite(motor2a,0);
  analogWrite(motor2b,kec2);
}

if(dataadc1 == 0){
  return;
}

if(dataadc3 == 0){
  return;
}

delay(1);
mulaistart2();  
}


void mulaistop2(){

 btsetx = digitalRead(btset);
 keyx = digitalRead(key);
  
 lcd.setCursor(0,0);
 lcd.print("SLOW1 :");
 lcd.print(vslowstart1);
 lcd.print("/");  
 lcd.print(vslowstop1);
 lcd.print("   ");

 lcd.setCursor(0,2);
 lcd.print("SLOW2 :");
 lcd.print(vslowstart2);
 lcd.print("/");  
 lcd.print(vslowstop2);
 lcd.print("   ");

vreversespeed1 = vreversespeed1 - 1; 
kec1 = vreversespeed1;
vreversespeed2 = vreversespeed2 - 1;
kec2 = vreversespeed2; 

if(vreversespeed1 <= 0){
kec1 = 0;  
vreversespeed1 = 0;
}

if(vreversespeed2 <= 0){
vreversespeed2 = 0;
kec2 = 0;  
}

  //arah CCW
  //digitalWrite(motor1a,LOW);
  //digitalWrite(motor1b,HIGH);  
  //analogWrite(ena,kec1);
  //digitalWrite(motor2a,LOW);
  //digitalWrite(motor2b,HIGH);  
  //analogWrite(enb,kec2);

  analogWrite(motor1a,0);
  analogWrite(motor1b,kec1);
  analogWrite(motor2a,0);
  analogWrite(motor2b,kec2);

if(keyx == 1){
  lcd.clear();
  delay(1000);
  waktu = 0;
  return;
}

delay(1);
mulaistop2();  
}


Monitor 6 Telur Bagus atau Jelek IOT BLYNK 2.0 Output Suara

Monitor 6 Telur Bagus atau Jelek IOT BLYNK 2.0 Output Suara


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor 6 buahtelur bagus atau jelek dengan fitur yaitu IOT Blynk sehingga bisa dimonitor secara jaak jauh dan juga terdapat fitur suara sehingga output dari 6 buah telut yang dicek akan di outputkan menggunakan suara. untuk lebih jelasnya berikut adalah kodingnya.



a. Komponen




b. Program Arduino IDE

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

SoftwareSerial mySerial(2, 3); // RX, TX

int x;
int telur1;
int telur2;
int telur3;
int telur4;
int telur5;
int telur6;
int tombol = 4;
int tombolx;
int batastelur = 960;

void setup() {

  Serial.begin(9600);
  mySerial.begin (9600);
  mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
  delay(1);  //wait 1ms for mp3 module to set volume
  mp3_set_volume (30);  //volume 0-30
  
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  pinMode(tombol,INPUT_PULLUP);
}

void loop() {
  
  //jika telur jelek adc 1023
  //jika telur bagus adc kurang dari 1023
  
  telur1 = analogRead(A0);
  telur2 = analogRead(A1);
  telur3 = analogRead(A2);
  telur4 = analogRead(A3);
  telur5 = analogRead(A6);
  telur6 = analogRead(A7);
 
   lcd.setCursor(0,0);
   lcd.print(telur1);
   lcd.print(" ");
   lcd.print(telur2);
   lcd.print(" ");
   lcd.print(telur3);
   lcd.print(" ");

   lcd.setCursor(0,1);
   lcd.print(telur4);
   lcd.print(" ");
   lcd.print(telur5);
   lcd.print(" ");
   lcd.print(telur6);
   lcd.print("    ");

tombolx = digitalRead(tombol);

if(tombolx == 0){
  
if((telur2 < batastelur)&&(telur3 < batastelur)&&(telur4 < batastelur)&&(telur5 < batastelur)&&(telur6 < batastelur)){
mp3_play(7);  //play music file 0007.mp3
delay(10000);
mp3_stop();
}

if((telur1 > batastelur)||(telur2 > batastelur)||(telur3 > batastelur)||(telur4 > batastelur)||(telur5 > batastelur)||(telur6 > batastelur)){
mp3_play(8);  
delay(5000);

if(telur1 > batastelur){
mp3_play(1);
delay(5000);
}

if(telur2 > batastelur){
mp3_play(2);
delay(5000);
}

if(telur3 > batastelur){
mp3_play(3);
delay(5000);
}

if(telur4 > batastelur){
mp3_play(4);
delay(5000);
}

if(telur5 > batastelur){
mp3_play(5);
delay(5000);
}

if(telur6 > batastelur){
mp3_play(6);
delay(5000);
}

}

}

Serial.print("*");
Serial.print(telur1);
Serial.print(",");
Serial.print(telur2);
Serial.print(",");
Serial.print(telur3);
Serial.print(",");
Serial.print(telur4);
Serial.print(",");
Serial.print(telur5);
Serial.print(",");
Serial.print(telur6);
Serial.println("#");
                                                                         
delay(1000);
}



c. Program Nodemcu ESP8266

#define BLYNK_TEMPLATE_ID "TMPL6CsQfbxxx"
#define BLYNK_TEMPLATE_NAME "monitor flow presure"
#define BLYNK_AUTH_TOKEN "aSUiRpTncCpKkoXfLqIM4Gq2ISlxxxxx"
#define BLYNK_PRINT Serial  

#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

int temp;
int x = 5;
int y;

int value1;
int value2;
int value3;
int value4;
int value5;
int value6;
int berat;

int telur1;
int telur2;
int telur3;
int telur4;
int telur5;
int telur6;

int datain1;
int datain2;
int datain3;
int datain4;
int datain5;
int datain6;
int datain7;

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

BlynkTimer timer;
char ssid[] = "hotspothpku";
char pass[] = "123456789";

void sendSensor()
{
 Blynk.virtualWrite(V0, telur1);
 Blynk.virtualWrite(V1, telur2);
 Blynk.virtualWrite(V2, telur3);
 Blynk.virtualWrite(V3, telur4);
 Blynk.virtualWrite(V4, telur5);
 Blynk.virtualWrite(V5, telur6);
 delay(1000);
}


void setup()
{
 
  dataIn="";
  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  timer.setInterval(1000L, sendSensor);

}

void loop()
{

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

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

void parsingData(){
int j=0;

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

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

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

 telur1 = datain1 / 1;
 telur2 = datain2 / 1;
 telur3 = datain3 / 1;
 telur4 = datain4 / 1;
 telur5 = datain5 / 1;
 telur6 = datain6 / 1;
 
}



d. VIDEO HASILNYA




Monitor Gula Darah Non Invasive Nofif Telegram

Monitor Gula Darah Non Invasive Nofif Telegram


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah alat yang menggunakan fitur notifikasi telegram untuk monitor gula darah secara non invasive. jadi alat ini konsepnya setelah melakukan pengukuran lalu akan mengirimkan notifikasi berupa data yang didapat ke telegram berupa chat. untuk lebih jelasnya berikut adalah koding dan skemanya.



a. Skema Alat



b. Program Arduino IDE

#include <Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

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

char ssid[ ] = "hotspothpku";
char pass[ ] = "123456789";//password wifi

#define BOTtoken "6479039xxx:AAEewLE_SoxTckygc_A1EgP8lXxxxxxxxxx" //token bot telegram
#define idChat "1234567899" //idbot

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

int bt = D4;
int btx = 0;
int adcsensor;
float fix;
int datafix;
int cacah = 0;
float kalibrasi;
int tanda = 0;

void setup() {
 
  Serial.begin(9600);
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  
  pinMode(bt,INPUT);
  digitalWrite(bt,HIGH);

  client.setInsecure();
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop(){
 delay(100);
   
 btx = digitalRead(bt);

 if(btx == 0){
   delay(200); 
   tanda = 1; 
   cacah = 0;
   lcd.clear();
   delay(1000);
 }

if(tanda == 0){ 
 lcd.setCursor(0,0);
 lcd.print("TEKAN MULAI");
 lcd.setCursor(0,1);
 lcd.print("mg/dl= ");
 lcd.print(fix);
 lcd.print("      "); 
}

if(tanda == 1){  
 datafix = 0;
 fix = 0;

adcsensor = analogRead(A0);

 lcd.setCursor(0,0);
 lcd.print("ADC= ");
 lcd.print(adcsensor);
 lcd.print("      ");

 cacah++;

 datafix = adcsensor + datafix;

 delay(100);

 if(cacah >= 20){
  fix = datafix / 20.0;
  //kalibrasi = (fix - 1022.1) / 0.0967;
  cacah = 0;
  lcd.clear(); 

    bot.sendChatAction(idChat, "Sedang mengetik...");
    Serial.print("Mg/dl : ");
    Serial.println(fix);
    delay(2000);
    
    String suhu = " Gula Darah : ";
    suhu += float(fix);
    suhu += " mg/dl\n";
    suhu += "Informasi Kesehatan Penyakit Tidak Menular Diabetes Militus, bisa akses di:https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxx \n";
    bot.sendMessage(idChat, suhu, "");
    Serial.print("Mengirim data sensor ke telegram");
   
  tanda = 0;
  }

}

}


c. Hasil Notif Telegram




d. VIDEO HASILNYA




e. Tutorial Kalibrasi







Monitor Kualitas Udara ( AIR QUALITY ) MICS-6814 dan DEBU (DUST) Winsen ZH03 ARDUINO IOT BLYNK 2.0

Monitor Kualitas Udara ( AIR QUALITY ) MICS-6814 dan DEBU (DUST) Winsen ZH03 ARDUINO IOT BLYNK 2.0


             Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat memonitor kualitas udara meliputi CO, NH3, NO2, dan Debu. alat ini menggunakan fitur IOT Blynk sehingga dapat memonitor udara dengan jarak jauh baik itu melalui handphone atau website. untuk lebih jelasnya berikut adalah koding skemanya.


a. Skema Alat


b. Program Arduino IDE

#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#include <WinsenZH03.h>
WinsenZH03 sensorZH;
#define DS3231_I2C_ADDRESS 0x68
LiquidCrystal_I2C lcd(0x27, 20, 4);
//mics-6814

const float max_volts = 5.0;
const float max_analog_steps = 1023.0;
int co, nh3, no2;  
int cox, nh3x, no2x;
int debu;
int cacah;
File myFile;

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}

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();
}

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());
}

void displayTime()
{
 
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
 /*
  lcd.setCursor(0,0);
  // send it to the serial monitor
  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);
 */   
}

void setup() {
  
  Serial.begin(9600);  //UART to pc
  Serial1.begin(9600); //UART to sensor
  sensorZH.begin(&Serial1);//configure the serial that the sensor will use
  sensorZH.setAs(QA);//configure the sensor QA mode 
  
  delay(1000);
  //Serial.println("Setup initializing");
  Wire.begin();
  Serial.begin(9600);
  // DS3231 seconds, minutes, hours, day, date, month, year
  // setDS3231time(0,1,18,6,19,4,24);
  
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
}

void loop() {
 displayTime();
    
  co = analogRead(A0);
  nh3 = analogRead(A1);
  no2 = analogRead(A2);

  cox = map (analogRead(A0), 0, 1023, 1, 1000); // Calcolo Monossido di Carbonio
  nh3x = map (analogRead(A1), 0, 1023, 1, 500); // Calcolo Ammoniaca
  no2x = (map (analogRead(A2), 0, 1023, 5, 1000)) / 100.0 ; // Calcolo Dios

  sensorZH.readOnce();//Every time a sample is taken, this function should be set, only in QA.
  debu = sensorZH.readPM2_5();

  /*
    Serial.print("PM1.0: ");
    Serial.print(sensorZH.readPM1_0());//
    Serial.println("  ug/m3");
    Serial.print("PM2.5: ");
    Serial.print(sensorZH.readPM2_5());
    Serial.println("  ug/m3");
    Serial.print("PM10: ");
    Serial.print(sensorZH.readPM10());
    Serial.println("  ug/m3");
    delay(1000);
  */
    
  lcd.setCursor(0,0);
  lcd.print("CO: ");
  lcd.print(cox);
  lcd.print(" ppm  ");
  lcd.setCursor(0,1);
  lcd.print("NH3: ");
  lcd.print(nh3x);
  lcd.print(" ppm  ");
  lcd.setCursor(0,2);
  lcd.print("NO2: ");
  lcd.print(no2x);
  lcd.print(" ppm  ");
  lcd.setCursor(0,3);
  lcd.print("PM2.5: ");
  lcd.print(debu);
  lcd.print(" ug/m3 ");

Serial.print("*");
Serial.print(cox);
Serial.print(",");
Serial.print(nh3x);
Serial.print(",");
Serial.print(no2x);
Serial.print(",");
Serial.print(debu);
Serial.println("#");  

delay(1000);

cacah++;
 
if(cacah >= 3){
  simpan();
  cacah = 0;
}
  
}

void simpan(){

  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
  pinMode(53, OUTPUT); 
  
  if (!SD.begin(53)) {
    Serial.println("initialization failed!");
    return;
  }
  
  Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {

    myFile.print("Tanggal:");
    myFile.print(dayOfMonth);
    myFile.print("/");
    myFile.print(month);
    myFile.print("/");
    myFile.println(year);
   
    myFile.print("Jam:");
    myFile.print(hour);
    myFile.print(":");
    myFile.print(minute);
    myFile.print(":");   
    myFile.println(second);
      
    myFile.print("CO: ");
    myFile.println(cox);
    myFile.print("NH3: ");
    myFile.println(nh3x);
    myFile.print("NO2: ");
    myFile.println(no2x);
    myFile.print("PM2.5: ");
    myFile.println(debu);
   
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

}



c. Program NODEMCU ESP8266

#define BLYNK_TEMPLATE_ID "TMPL6wOC--xxx"
#define BLYNK_TEMPLATE_NAME "monitor daya"
#define BLYNK_AUTH_TOKEN "VOK0cWiFN5ycHj3SV_snEDXTfTfeixxx"

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

int temp;
int x = 5;
int y;

int value1;
int value2;

int co = 0;
int nh3 = 0;
int no2 = 0;
int ppm = 0;

float datain1;
float datain2;
float datain3;
float datain4;
float datain5;
float datain6;

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

BlynkTimer timer;

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


void sendSensor()
{

 Blynk.virtualWrite(V0, co);
 Blynk.virtualWrite(V1, nh3);
 Blynk.virtualWrite(V2, no2);
 Blynk.virtualWrite(V3, ppm);
 delay(1000);
}


void setup()
{
  dataIn=""; 
  // Debug console
 Serial.begin(9600);
 Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
 timer.setInterval(1000L, sendSensor);
 pinMode(D6,OUTPUT);
 pinMode(D7,OUTPUT);
 pinMode(D8,OUTPUT);
}

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();

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

//Serial.print("data 3 : ");
//Serial.print(dt[2].toInt());
//Serial.print("\n\n");

 co = datain1 / 1;
 nh3 = datain2 / 1;
 no2 = datain3 / 1;
 ppm = datain4 / 1;

}



d. VIDEO HASILNYA