Translate

Alat Kendali Dimmer dan Timer Interface LCD TFT

Alat Kendali Dimmer dan Timer Interface LCD TFT



       Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan dimmer modul dan timer sebagi fitur utamanya. interface menggunakan LCD TFT dan terdapat pula fitur EEprom sehingga data tidak hilang ketika di simpan. untuk lebih jelasnya berikut adalah koding dan komponennya.


1. Modul Dimmer



2. Program Arduino IDE

#include "SPI.h"
#include <Adafruit_GFX.h>
#include <ILI9488.h>
#include <max6675.h>   
#include <RBDdimmer.h>
#include <EEPROM.h>

#define TFT_CS         10
#define TFT_DC         8
//#define TFT_LED      5v
#define TFT_RST        9
#define TFT_MOSI       11
#define TFT_CLK        13
#define TFT_MISO       12

ILI9488 tft = ILI9488(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

int addr1 = 0;
int addr2 = 1;
int addr3 = 2;
int addr4 = 3;
int addr5 = 4;

int timerinfusion;
int ssr1 = 30;
int ssr2 = 31;

#define outputPin  7 
#define zerocross  2 // for boards with CHANGEBLE input pins

dimmerLamp dimmer(outputPin); //initialase port for dimmer for MEGA, Leonardo, UNO, Arduino M0, Arduino Zero

int waktu = 10;

int thermoDO1 = 16; //bisa juga S0
int thermoCS1 = 15;
int thermoCLK1 = 14; //bisa juga SCK
MAX6675 thermocouple1(thermoCLK1, thermoCS1, thermoDO1);

int thermoDO2 = 19; //bisa juga S0
int thermoCS2 = 18;
int thermoCLK2 = 17; //bisa juga SCK
MAX6675 thermocouple2(thermoCLK2, thermoCS2, thermoDO2);

int thermoDO3 = 22; //bisa juga S0
int thermoCS3 = 21;
int thermoCLK3 = 20; //bisa juga SCK
MAX6675 thermocouple3(thermoCLK3, thermoCS3, thermoDO3);

int x1 = 0;
int y1 = 150;
int x2 = 500;
int y2 = 150;
int suhu1, suhu2, suhu3;

int btset = A0;
int btup = A1;
int btdown = A2;
int btok = A3;

int bton1 = A4;
int btoff1 = A5;
int bton2 = A6;
int btoff2 = A7;

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

int bton1x;
int btoff1x;
int bton2x;
int btoff2x;

int cacah;

int timepreheat1;
int pwm1;
int pwm2;
int sp1;
int sp2;
int convpwm;

unsigned long start;

  
void setup() {

timepreheat1 = EEPROM.read(addr1);
pwm1 = EEPROM.read(addr2);
pwm2 = EEPROM.read(addr3);
sp1 = EEPROM.read(addr4);
sp2 = EEPROM.read(addr5);
  
  Serial.begin(9600);
  pinMode(6,OUTPUT); 
  pinMode(7,OUTPUT); 
  pinMode(ssr1,OUTPUT);
  pinMode(ssr2,OUTPUT);
  pinMode(btset,INPUT_PULLUP);
  pinMode(btup,INPUT_PULLUP);
  pinMode(btdown,INPUT_PULLUP);
  pinMode(btok,INPUT_PULLUP);

  pinMode(bton1,INPUT_PULLUP);
  pinMode(btoff1,INPUT_PULLUP);
  pinMode(bton2,INPUT_PULLUP);
  pinMode(btoff2,INPUT_PULLUP);
  
  tft.begin();
  tft.fillScreen(ILI9488_BLACK);
  tft.setRotation(1);
  tft.setTextSize(2);
  
delay(500);
}


void loop() {

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

bton1x = digitalRead(bton1);
btoff1x = digitalRead(btoff1);
bton2x = digitalRead(bton2);
btoff2x = digitalRead(btoff2);

if(bton1x == 0){
  delay(1);
  tft.fillScreen(ILI9488_BLACK);
  mulai1();
}

if(bton2x == 0){
  delay(1);
  tft.fillScreen(ILI9488_BLACK);
  mulai2();
}

if(btsetx == 0){
  delay(1);
  cacah++;
}

if(btokx == 0){
  delay(1);
  cacah--;
}

if(cacah > 4){
  cacah = 0;
}

if(cacah < 0){
  cacah = 0;
}
 
  suhu1 = thermocouple1.readCelsius();
  suhu2 = thermocouple2.readCelsius();
  suhu3 = thermocouple3.readCelsius();
  
  tft.setCursor(5, 10);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu1: ");  
  tft.print(suhu1);  
  tft.print(" C ");  

  tft.setCursor(5, 40);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu2: ");
  tft.print(suhu2);    
  tft.print(" C ");  

  tft.setCursor(5, 70);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu3: ");
  tft.print(suhu3);    
  tft.print(" C ");  

  if(cacah == 0){
  EEPROM.write(addr1, timepreheat1);
  timerinfusion = timepreheat1;
  if(btupx == 0){
    delay(1);
    timepreheat1 = timepreheat1 + 1; 
  }

  if(btdownx == 0){
    delay(1);
    timepreheat1 = timepreheat1 - 1; 
  }
      
  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("-> Time Pre Infusion: ");
  tft.print(timepreheat1);    
  tft.print("     "); 
 
  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 1: ");
  tft.print(pwm1);    
  tft.print("      "); 

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 2: ");
  tft.print(pwm2);    
  tft.print("      ");

  tft.setCursor(5, 210);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU1: ");
  tft.print(sp1);    
  tft.print("      "); 

  tft.setCursor(5, 240);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU2: ");
  tft.print(sp2);    
  tft.print("      ");
  
  }


  if(cacah == 1){
  EEPROM.write(addr2, pwm1);
  if(btupx == 0){
    delay(1);
    pwm1 = pwm1 + 1; 
  }

  if(btdownx == 0){
    delay(1);
    pwm1 = pwm1 - 1;; 
  }
      
  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("Time Pre Infusion: ");
  tft.print(timepreheat1);    
  tft.print("     "); 
 
  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("-> PWM 1: ");
  tft.print(pwm1);    
  tft.print("      "); 

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 2: ");
  tft.print(pwm2);    
  tft.print("      ");

  tft.setCursor(5, 210);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU1: ");
  tft.print(sp1);    
  tft.print("      "); 

  tft.setCursor(5, 240);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU2: ");
  tft.print(sp2);    
  tft.print("      ");
  }


  if(cacah == 2){
  EEPROM.write(addr3, pwm2);
  if(btupx == 0){
    delay(1);
    pwm2 = pwm2 + 1;  
  }

  if(btdownx == 0){
    delay(1);
    pwm2 = pwm2 - 1;  
  }
      
  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("Time Pre Infusion: ");
  tft.print(timepreheat1);    
  tft.print("     "); 
 
  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 1: ");
  tft.print(pwm1);    
  tft.print("      "); 

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("-> PWM 2: ");
  tft.print(pwm2);    
  tft.print("      ");

  tft.setCursor(5, 210);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU1: ");
  tft.print(sp1);    
  tft.print("      "); 

  tft.setCursor(5, 240);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU2: ");
  tft.print(sp2);    
  tft.print("      ");
  }

  if(cacah == 3){
  EEPROM.write(addr4, sp1);
  if(btupx == 0){
    delay(1);
    sp1 = sp1 + 1;  
  }

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

      
  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("Time Pre Infusion: ");
  tft.print(timepreheat1);    
  tft.print("     "); 
 
  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 1: ");
  tft.print(pwm1);    
  tft.print("      "); 

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 2: ");
  tft.print(pwm2);    
  tft.print("      ");

  tft.setCursor(5, 210);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("-> SP SUHU1: ");
  tft.print(sp1);    
  tft.print("      "); 

  tft.setCursor(5, 240);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU2: ");
  tft.print(sp2);    
  tft.print("      ");
  }


  if(cacah == 4){
  EEPROM.write(addr5, sp2);
  if(btupx == 0){
    delay(1);
    sp2 = sp2 + 1;  
  }

  if(btdownx == 0){
    delay(1);
    sp2 = sp2 - 1;  
  }
      
  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("Time Pre Infusion: ");
  tft.print(timepreheat1);    
  tft.print("     "); 
 
  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 1: ");
  tft.print(pwm1);    
  tft.print("      "); 

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 2: ");
  tft.print(pwm2);    
  tft.print("      ");

  tft.setCursor(5, 210);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU1: ");
  tft.print(sp1);    
  tft.print("      "); 

  tft.setCursor(5, 240);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("-> SP SUHU2: ");
  tft.print(sp2);    
  tft.print("      ");
  } 

delay(1);
 
}

void mulai1(){
dimmer.begin(NORMAL_MODE, ON); 

  suhu1 = thermocouple1.readCelsius();
  suhu2 = thermocouple2.readCelsius();
  suhu3 = thermocouple3.readCelsius();
  
  tft.setCursor(5, 10);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu1: ");  
  tft.print(suhu1);  
  tft.print(" C ");  

  tft.setCursor(5, 40);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu2: ");
  tft.print(suhu2);    
  tft.print(" C ");  

  tft.setCursor(5, 70);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu3: ");
  tft.print(suhu3);    
  tft.print(" C "); 

  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("Time Pre Infusiom: ");
  tft.print(timerinfusion);    
  tft.print("     ");   
 
  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 1: ");
  tft.print(pwm1);    
  tft.print("      ");

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU1: ");
  tft.print(sp1);    
  tft.print("      ");

  timerinfusion--;
  if(timerinfusion > 0){
  dimmer.setPower(20);
  }
  
  if(timerinfusion <= 0){
    timerinfusion = 0;
    dimmer.setPower(pwm1);
  }

  if(suhu1 > sp1){
    digitalWrite(ssr1,HIGH);
  }

  if(suhu1 < sp1){
    digitalWrite(ssr1,LOW);
  }  

delay(1000);
mulai1();  
}

void mulai2(){

bton1x = digitalRead(bton1);
btoff1x = digitalRead(btoff1);
bton2x = digitalRead(bton2);
btoff2x = digitalRead(btoff2);

if(btoff2x == 0){
  delay(1);
  analogWrite(6, 0);
  tft.fillScreen(ILI9488_BLACK);
  return;
}
  
convpwm = pwm2 * 2.55;

  suhu1 = thermocouple1.readCelsius();
  suhu2 = thermocouple2.readCelsius();
  suhu3 = thermocouple3.readCelsius();
  
  tft.setCursor(5, 10);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu1: ");  
  tft.print(suhu1);  
  tft.print(" C ");  

  tft.setCursor(5, 40);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu2: ");
  tft.print(suhu2);    
  tft.print(" C ");  

  tft.setCursor(5, 70);
  tft.setTextColor(ILI9488_YELLOW,ILI9488_BLACK);  
  tft.print("Suhu3: ");
  tft.print(suhu3);    
  tft.print(" C ");  
 
  tft.setCursor(5, 120);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("Time Pre Infusiom: ");
  tft.print(waktu);    
  tft.print("     "); 

  tft.setCursor(5, 150);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("PWM 2: ");
  tft.print(pwm2);    
  tft.print("      "); 

  tft.setCursor(5, 180);
  tft.setTextColor(ILI9488_GREEN,ILI9488_BLACK);  
  tft.print("SP SUHU2: ");
  tft.print(sp2);    
  tft.print("      "); 

  if(waktu > 0){
  waktu--;
  analogWrite(6,50);
  }
  
  if(waktu <= 0){
    waktu = 0;
    analogWrite(6, convpwm);
  }

  if(suhu2 > sp2){
    digitalWrite(ssr2,HIGH);
  }

  if(suhu2 < sp2){
    digitalWrite(ssr2,LOW);
  }

delay(1000);
mulai2();  
}
 
 
3. VIDEO HASILNYA
 




Alat Penghitung Putaran CW / CCW Sensor HMC5883L LCD OLED

Alat Penghitung Putaran CW / CCW Sensor HMC5883L LCD OLED
 

       Pada kesempatakn kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa menghitung jumlah putaran dalam rotasi, jadi saat alat ini berputar dia akan menghitung +1 jika CW, namun jika CCW maka akan -1 namun harus tekan tombol setting dulu untuk pemilihan arah putarnya. untuk lebih jelasnya berikut adalah komponen dan kodingnya.
 
 
1. Komponen
 
 
 
2. Program Arduino IDE
 
#include <Wire.h>
#include <HMC5883L.h>
#include <MPU6050.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);   

//rorasi 156 timur, barat 55
//TILT -500 datar, 1000 miring

int x, y, rotasi, kemiringan, sudut;
char tmp_string1[8];
char tmp_string2[8];
char tmp_string3[8];
char tmp_string4[8];
char tmp_string5[8];
char tmp_string6[8];
float headingDegrees;

HMC5883L compass;
MPU6050 mpu;

int bt1 = 2;
int bt2 = 3;
int bt3 = 4;
int bt4 = 5;
int mark, mark2;

int bt1x;
int bt2x;
int bt3x;
int bt4x;
int tambah, kurang, tambah2, kurang2;
int rotasitotal;
int fullrotasi;

void draw(void) {
 
  //float dua angka dibelakang koma
  dtostrf(headingDegrees, 4, 2, tmp_string1);
  dtostrf(sudut, 4, 2, tmp_string2);
  dtostrf(rotasitotal, 4, 0, tmp_string3);
  dtostrf(fullrotasi, 4, 0, tmp_string4);
  dtostrf(tambah, 4, 0, tmp_string5);
  dtostrf(kurang, 4, 0, tmp_string6);
 
  // graphic commands to redraw the complete screen should be placed here 
  
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr(0, 15, "Rotasi= ");
  u8g.drawStr(60, 15, tmp_string1);
  u8g.drawStr(0, 30, "FULL= ");
  u8g.drawStr(60, 30, tmp_string2);

  u8g.drawStr(0, 45, "R%= ");
  u8g.drawStr(10, 45, tmp_string3);
  u8g.drawStr(0, 60, "T%= ");
  u8g.drawStr(10, 60, tmp_string4);

  u8g.drawStr(81, 45, "+");
  u8g.drawStr(83, 45, tmp_string5);
  u8g.drawStr(81, 60, "-");
  u8g.drawStr(83, 60, tmp_string6);
     
}

void setup(void) {

  Serial.begin(9600);
  pinMode(bt1,INPUT_PULLUP);
  pinMode(bt2,INPUT_PULLUP);
  pinMode(bt3,INPUT_PULLUP);
  pinMode(bt4,INPUT_PULLUP);
        
  //Serial.println("Initialize MPU6050");
  
  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    //Serial.println("tidak ada sensor MPU6050 yang terpasang!");
    delay(500);
  }
 
  //Kalibrasi gyrometer
  mpu.calibrateGyro();
  mpu.setThreshold(3);
  

 // Initialize Initialize HMC5883L
  Serial.println("Initialize HMC5883L");
  while (!compass.begin())
  {
    Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
    delay(500);
  }

  // Set measurement range
  compass.setRange(HMC5883L_RANGE_1_3GA);

  // Set measurement mode
  compass.setMeasurementMode(HMC5883L_CONTINOUS);

  // Set data rate
  compass.setDataRate(HMC5883L_DATARATE_30HZ);

  // Set number of samples averaged
  compass.setSamples(HMC5883L_SAMPLES_8);

  // Set calibration offset. See HMC5883L_calibration.ino
  compass.setOffset(0, 0); 
 
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(void) {

bt1x = digitalRead(bt1);
bt2x = digitalRead(bt2);
bt3x = digitalRead(bt3);
bt4x = digitalRead(bt4);

rotasitotal = (100 * rotasi) / fullrotasi;

if(bt1x == 0){
tambah = 1;
kurang = 0;
}

if(bt2x == 0){
kurang = 1;
tambah = 0;
}

if(bt3x == 0){
 delay(200); 
fullrotasi++;
}

if(bt4x == 0){
 delay(200); 
fullrotasi--;
}

  Vector rawAccel = mpu.readRawAccel();
  sudut = rawAccel.XAxis;
      

  Vector norm = compass.readNormalize();

  // Calculate heading
  float heading = atan2(norm.YAxis, norm.XAxis);

  float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
  heading += declinationAngle;

  // Correct for heading < 0deg and heading > 360deg
  if (heading < 0)
  {
    heading += 2 * PI;
  }

  if (heading > 2 * PI)
  {
    heading -= 2 * PI;
  }

  // Convert to degrees
  headingDegrees = heading * 180/M_PI; 
 
  // picture loop
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );


if((headingDegrees > 100)&&(headingDegrees < 160)&&(mark == 0)&&(tambah == 1)){
  mark = 1;
}

if((headingDegrees > 50)&&(headingDegrees < 100)&&(mark == 1)&&(tambah == 1)){
  mark = 0;
  rotasi++;
}

if((headingDegrees > 100)&&(headingDegrees < 160)&&(mark == 0)&&(kurang == 1)){
  mark = 1;
}

if((headingDegrees > 50)&&(headingDegrees < 100)&&(mark == 1)&&(kurang == 1)){
  mark = 0;
  rotasi--;
}

if((sudut > -700)&&(sudut < -400)&&(mark2 == 0)&&(tambah2 == 1)){
  mark2 = 1;
}

if((sudut > 800)&&(sudut < 1200)&&(mark2 == 1)&&(tambah2 == 1)){
  mark2 = 0;
  kemiringan++;
}

if((sudut > -700)&&(sudut < -400)&&(mark2 == 0)&&(kurang2 == 1)){
  mark2 = 1;
}

if((sudut > 800)&&(sudut < 1200)&&(mark2 == 1)&&(kurang2 == 1)){
  mark2 = 0;
  kemiringan--;
}
  
  // rebuild the picture after some delay
  delay(500);
 
 
 
3. VIDEO HASILNYA
 

 

Deteksi Warna TCS3200 Kendali Servo

Deteksi Warna TCS3200 Kendali Servo
 

           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mendeteksi warna kemuan dari nilai warna tesebut menghasilkan output berupa gerakan servo. jadi terdapat beberapa warna yang mana tiap-tiap warna mewakili gerakan servo tertentu. untuk lebih jelasnya berikut adalah koding dan komponennya.
 
  
1. Komponen
 

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

Servo myservo1;

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

int btset = A0;
int btsetx = 0;

int fmerah;
int fgreen;
int fblue;
int kal;

int simfmerah1,simfmerah2,simfmerah3,simfmerah4,simfmerah5,simfmerah6,simfmerah7,simfmerah8;
int simfgreen1,simfgreen2,simfgreen3,simfgreen4,simfgreen5,simfgreen6,simfgreen7,simfgreen8;
int simfblue1,simfblue2,simfblue3,simfblue4,simfblue5,simfblue6,simfblue7,simfblue8;

int fmerahatas1,fmerahatas2,fmerahatas3,fmerahatas4,fmerahatas5,fmerahatas6,fmerahatas7,fmerahatas8; 
int fmerahbawah1,fmerahbawah2,fmerahbawah3,fmerahbawah4,fmerahbawah5,fmerahbawah6,fmerahbawah7,fmerahbawah8; 
int fgreenatas1,fgreenatas2,fgreenatas3,fgreenatas4,fgreenatas5,fgreenatas6,fgreenatas7,fgreenatas8; 
int fgreenbawah1,fgreenbawah2,fgreenbawah3,fgreenbawah4,fgreenbawah5,fgreenbawah6,fgreenbawah7,fgreenbawah8; 
int fblueatas1,fblueatas2,fblueatas3,fblueatas4,fblueatas5,fblueatas6,fblueatas7,fblueatas8; 
int fbluebawah1,fbluebawah2,fbluebawah3,fbluebawah4,fbluebawah5,fbluebawah6,fbluebawah7,fbluebawah8;
int range = 20;

void setup()
{
 myservo1.attach(9);
 lcd.begin();
 lcd.clear();
 lcd.noCursor();

  pinMode(btset, INPUT_PULLUP);
 
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);

  digitalWrite(S0,HIGH);
  digitalWrite(S1,LOW);
  
  myservo1.write(150);
  
}

void loop(){

  btsetx = digitalRead(btset);
 
  if(btsetx == 0){
  lcd.clear();  
  delay(2000);
  scanning1();
  scanning2();
  scanning3();
  scanning4();
  scanning5();
  scanning6();
  scanning7();
  scanning8();
  }
 
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(800);
 
  fmerahatas1 = simfmerah1 + range;  fmerahatas2 = simfmerah2 + range;  fmerahatas3 = simfmerah3 + range;  fmerahatas4 = simfmerah4 + range;  fmerahatas5 = simfmerah5 + range;  fmerahatas6 = simfmerah6 + range;  fmerahatas7 = simfmerah7 + range;  fmerahatas8 = simfmerah8 + range;  
  fmerahbawah1 = simfmerah1 - range; fmerahbawah2 = simfmerah2 - range; fmerahbawah3 = simfmerah3 - range; fmerahbawah4 = simfmerah4 - range; fmerahbawah5 = simfmerah5 - range; fmerahbawah6 = simfmerah6 - range; fmerahbawah7 = simfmerah7 - range; fmerahbawah8 = simfmerah8 - range;
  fgreenatas1 = simfgreen1 + range; 
  fgreenbawah1 = simfgreen1 - range; 
  fblueatas1 = simfblue1 + range; 
  fbluebawah1 = simfblue1 - range; 

  fgreenatas2 = simfgreen2 + range; 
  fgreenbawah2 = simfgreen2 - range; 
  fblueatas2 = simfblue2 + range; 
  fbluebawah2 = simfblue2 - range; 

  fgreenatas3 = simfgreen3 + range; 
  fgreenbawah3 = simfgreen3 - range; 
  fblueatas3 = simfblue3 + range; 
  fbluebawah3 = simfblue3 - range; 

  fgreenatas4 = simfgreen4 + range; 
  fgreenbawah4 = simfgreen4 - range; 
  fblueatas4 = simfblue4 + range; 
  fbluebawah4 = simfblue4 - range; 

  fgreenatas5 = simfgreen5 + range; 
  fgreenbawah5 = simfgreen5 - range; 
  fblueatas5 = simfblue5 + range; 
  fbluebawah5 = simfblue5 - range; 

  fgreenatas6 = simfgreen6 + range; 
  fgreenbawah6 = simfgreen6 - range; 
  fblueatas6 = simfblue6 + range; 
  fbluebawah6 = simfblue6 - range; 

  fgreenatas7 = simfgreen7 + range; 
  fgreenbawah7 = simfgreen7 - range; 
  fblueatas7 = simfblue7 + range; 
  fbluebawah7 = simfblue7 - range; 

  fgreenatas8 = simfgreen8 + range; 
  fgreenbawah8 = simfgreen8 - range; 
  fblueatas8 = simfblue8 + range; 
  fbluebawah8 = simfblue8 - range; 

  if(kal == 1){           
  if((fmerah < fmerahatas1)&&(fmerah > fmerahbawah1)&&(fgreen < fgreenatas1)&&(fgreen > fgreenbawah1)&&(fblue < fblueatas1)&&(fblue > fbluebawah1)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 1");
    myservo1.write(70);
  } 

  if((fmerah < fmerahatas2)&&(fmerah > fmerahbawah2)&&(fgreen < fgreenatas2)&&(fgreen > fgreenbawah2)&&(fblue < fblueatas2)&&(fblue > fbluebawah2)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 2"); 
    myservo1.write(100);
  }

  if((fmerah < fmerahatas3)&&(fmerah > fmerahbawah3)&&(fgreen < fgreenatas3)&&(fgreen > fgreenbawah3)&&(fblue < fblueatas3)&&(fblue > fbluebawah3)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 3");
    myservo1.write(130);
  }

  if((fmerah < fmerahatas4)&&(fmerah > fmerahbawah4)&&(fgreen < fgreenatas4)&&(fgreen > fgreenbawah4)&&(fblue < fblueatas4)&&(fblue > fbluebawah4)){
     lcd.setCursor(0,0);
    lcd.print(" WARNA 4");   
    myservo1.write(160);
  }

  if((fmerah < fmerahatas5)&&(fmerah > fmerahbawah5)&&(fgreen < fgreenatas5)&&(fgreen > fgreenbawah5)&&(fblue < fblueatas5)&&(fblue > fbluebawah5)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 5"); 
    myservo1.write(180);
  }

  if((fmerah < fmerahatas6)&&(fmerah > fmerahbawah6)&&(fgreen < fgreenatas6)&&(fgreen > fgreenbawah6)&&(fblue < fblueatas6)&&(fblue > fbluebawah6)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 6"); 
    myservo1.write(200);
  }

  if((fmerah < fmerahatas7)&&(fmerah > fmerahbawah7)&&(fgreen < fgreenatas7)&&(fgreen > fgreenbawah7)&&(fblue < fblueatas7)&&(fblue > fbluebawah7)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 7");
    myservo1.write(50);
  }

  if((fmerah < fmerahatas8)&&(fmerah > fmerahbawah8)&&(fgreen < fgreenatas8)&&(fgreen > fgreenbawah8)&&(fblue < fblueatas8)&&(fblue > fbluebawah8)){
    lcd.setCursor(0,0);
    lcd.print(" WARNA 8");  
    myservo1.write(220);
  }
  }
      
}

void scanning1(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 1");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
if(btsetx == 0){
delay(200);

simfmerah1 = fmerah;
simfgreen1 = fgreen;
simfblue1 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning1();
}

void scanning2(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 2");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
if(btsetx == 0){
delay(200);

simfmerah2 = fmerah;
simfgreen2 = fgreen;
simfblue2 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning2();
}

void scanning3(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 3");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah3 = fmerah;
simfgreen3 = fgreen;
simfblue3 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning3();
}


void scanning4(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 4");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah4 = fmerah;
simfgreen4 = fgreen;
simfblue4 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning4();
}



void scanning5(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 5");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah5 = fmerah;
simfgreen5 = fgreen;
simfblue5 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning5();
}



void scanning6(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 6");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah6 = fmerah;
simfgreen6 = fgreen;
simfblue6 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning6();
}



void scanning7(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 7");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah7 = fmerah;
simfgreen7 = fgreen;
simfblue7 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
return;
}

scanning7();
}



void scanning8(){

btsetx = digitalRead(btset); 
 
  lcd.setCursor(0,0);
  lcd.print("SCAN WARNA 8");

  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  frequency = pulseIn(sensorOut, LOW);
  fmerah = frequency;
 
  lcd.setCursor(0,1);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  delay(100);
 
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fgreen = frequency;

  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  delay(100);

  digitalWrite(S2,LOW);
  digitalWrite(S3,HIGH);
  frequency = pulseIn(sensorOut, LOW);
  fblue = frequency;
 
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("     ");
  delay(100);
 
 
if(btsetx == 0){
delay(200);

simfmerah8 = fmerah;
simfgreen8 = fgreen;
simfblue8 = fblue;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("R=");
  lcd.print(fmerah);
  lcd.print(" ");
  lcd.print("G=");
  lcd.print(fgreen);
  lcd.print(" ");
  lcd.print("B=");
  lcd.print(fblue);
  lcd.print("    ");
  delay(3000);
  lcd.clear();
  kal = 1;
return;
}

scanning8();
}
 
 
 
3. VIDEO HASILNYA
 

 
 

Monitor Suhu Kelembaban dan Soil Moisture IOT Blynk 2.0

Monitor Suhu Kelembaban dan Soil Moisture IOT Blynk 2.0


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah alat yang dapat memonitor suhu kelembaban dengan menggunakan sensor DHT22 dan kelembaban tanah soil moisture dengan IOT Blynk 2.0. alat ini menggunakan ESP8266 sebagai mikrokontrollernya. untuk lebih jelasnya berikut adalah koding dan komponenya.


1. Komponen




2. Program Arduino IDE

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

#include <SPI.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <LiquidCrystal_I2C.h> 
#include "DHT.h"

#define DHTPIN D3     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 11

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

int relay1 = D5;
int relay2 = D6;
int buzzer = D0;

int t, h;
int pinValue1, pinValue2;
int soil;
int soilx;

BlynkTimer timer;

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

BLYNK_WRITE(V3)
{
  pinValue1 = param.asInt();   

  if(pinValue1 == 1){
    digitalWrite(relay1, LOW);
  }
  
  if(pinValue1 == 0) {
    digitalWrite(relay1, HIGH);
  }
  
}

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

  if(pinValue2 == 1){
    digitalWrite(relay2, LOW);
  }
  
  if(pinValue2 == 0) {
    digitalWrite(relay2, HIGH);
  }
  
}

void kirimdata()
{
  Blynk.virtualWrite(V0,soilx);
  Blynk.virtualWrite(V1,t);
  Blynk.virtualWrite(V2,h);
}

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

 Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
 timer.setInterval(1000L, kirimdata); 
}

void loop()
{
 
 h = dht.readHumidity();
 t = dht.readTemperature();
 soil = analogRead(A0);
 soilx = map(soil, 1024, 0, 0, 100);
 
  lcd.setCursor(0,0);
  lcd.print("T/H= ");
  lcd.print(t);
  lcd.print(" / ");
  lcd.print(h);
  lcd.print("   ");
  
  lcd.setCursor(0,1);
  lcd.print("S= ");
  lcd.print(soilx);
  lcd.print(" %   ");

  if(soilx > 20){
    digitalWrite(buzzer,HIGH);
  }
  if(soilx <= 20){
    digitalWrite(buzzer,LOW);
  } 
    
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
   
delay(100);

}



3. VIDEO HASILNYA




Monitoring PH, Suhu, Turbidity, Jarak IOT Notif Telegram ESP32

Monitoring PH, Suhu, Turbidity, Jarak IOT Notif Telegram ESP32 


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa memonitor PH, Suhu, Turbidity, Jarak via IOT Telegram, alat ini menggunakan ESP32 sehingga bagus untuk melakukan pengujian data secara online. untuk lebih jelasnya berikut adalah koding dan komponennya.


1. Komponen



2. Program Arduino IDE

#include <Wire.h> 
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define ONE_WIRE_BUS 25
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const int trigPin = 33;
const int echoPin = 32;
long cm;

//define sound speed in cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
float distance;
float distanceInch,distanceInch2;
float TempC;
float pHValue;
//deklarasi pin analog
int ntu;
int adctds,tds,tdsx;
int adcPH;
float TempCx;
int pHValuex;
int ntux;
float ntufix;
float temperature = 25,tdsValue = 0;

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

#define BOTtoken "7147669669:AAGLKDRroiHhS1Fao1skULzZhiRPmxxxxxx" //token bot telegram
#define idChat "1148812345" //idbot

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);


void setup() {
  Serial.begin(9600);
  Wire.begin();  
  lcd.begin();
  lcd.clear();
  lcd.noCursor();
  sensors.begin();
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input

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

 adctds = analogRead(35);             
 tds = map(adctds, 4096, 1, 0, 100);

 adcPH = analogRead(34); 
 pHValue = (adcPH - 123.026)/589.009;
 
 sensors.requestTemperatures();
 TempC = sensors.getTempCByIndex(0); // Celcius

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);

 cm = microsecondsToCentimeters(duration);

  lcd.setCursor(0,0);
  lcd.print("P/T= ");
  lcd.print(pHValue,1);
  lcd.print("/");
  lcd.print(tds);
  lcd.print("   ");
  lcd.setCursor(0,1);
  lcd.print("J/S= ");
  lcd.print(cm);
  lcd.print("/");
  lcd.print(TempC,1);
  lcd.print("     ");

    bot.sendChatAction(idChat, "Sedang mengetik...");
    delay(1000);
    String suhu = " Nilai ph : ";
    suhu += float(pHValue);
    suhu += " Turbidity: ";
    suhu += int(tds);
    suhu += " Suhu: ";
    suhu += float(TempC);
    suhu += " Jarak: ";
    suhu += int(cm);
    suhu += " cm Terimakasih\n";
    bot.sendMessage(idChat, suhu, "");
    Serial.print("Mengirim data sensor ke telegram");
    
  delay(1000);
}


long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}



3. VIDEO HASILNYA



Monitor jarak dan kecepatan Sensor HC-SRF04 dan HB100

Monitor jarak dan kecepatan Sensor HC-SRF04 dan HB100


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur kecepatan benda dan juga jarak benda dengan menggunakan sensor HB100, alat ini menggunakan Arduino mega dan sensor jarak dan hb100. untuk lebih jelasnya berikut adalah koding dan skemanya.


1. Skema




2. Program Arduino IDE

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

#define trigPin 2
#define echoPin 3
float spd, spdold, spdmax;
int buzzer = 4;
long duration, distance;
int tanda;
    
void setup()
{
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin();
  lcd.clear();
  Serial.begin(9600);
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop(){
 
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

 
 lcd.setCursor(0,1);
 lcd.print("S: ");
 lcd.print(distance);
 lcd.print(" cm  ");  

if(tanda == 1){   
  if (FreqMeasure.available()) {
    // average 30 readings together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      float frequency = FreqMeasure.countToFrequency(sum / count);
      spd = (frequency / 19.49) * 0.277778; //conversion from frequency to kilometers per hour (sorry, imperial guys :)
      //to improve speed, we update only the bottom row of the LCD
      
 if(spdmax > spdold){
  
  }

 if(spdmax < spdold){
   spdmax = spdold;
  }  

 lcd.setCursor(0,0);
 lcd.print("V: ");
 lcd.print(spdmax);
 lcd.print(" m/s ");
     
//      Serial.println(distance);
//      Serial.println(spd);
          
      sum = 0;
      count = 0;
    }
  }
}

  if(distance <= 10)
  {
  digitalWrite(buzzer, HIGH);
  delay(3000);
  tanda = 1;
  }

  if(distance > 10)
  {
  digitalWrite(buzzer, LOW);
  }
 
 spdold = spd;
   
}



3. VIDEO HASILNYA



Monitoring Timbangan Berat dan Tinggi Badan 4 LoadCell Arduino

Monitoring Timbangan Berat dan Tinggi Badan 4 LoadCell Arduino    
 
       
          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat mengukur tinggi dan berat badan menggunakan 4 buah loadcell dan amplifier modul HX711 dengan Arduino uno. untuk sensor jarak yang dipakai bisa menggunakan HC-SRF04. untuk lebih jelasnya berikut adalah kodingdan skemanya.
 
 
1. Skema 4 Loadcell
 

 
2. Program Arduino IDE
 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "HX711.h"

// HX711.DOUT    - pin #9
// HX711.PD_SCK    - pin #8

#define trigPin 7
#define echoPin 6

int counter = 0;      //Variabel penghitung nilai
int aState;           //Variabel kondisi
int aLastState;       //Variabel kondisi terakhir

HX711 scale(9, 8);       

long duration, distance;
float tera = 0;
int berat;
float fix;
int x;
int jarak;
int sp = 30;
int tinggi;

void setup() {

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

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  scale.set_scale(2280.f);       // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();                  // reset the scale to 0

   lcd.setCursor (0,0);
   lcd.print ("LOADING... ");
   delay(5000);
   lcd.clear();
}

void loop() {
  
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  jarak = 200 - distance;
 
  berat = scale.get_units(10) * -1;
  fix = (berat - 2.1036)/8.978;

if(fix < 0){
  fix = 0;
  }
  
   lcd.setCursor (0,0);
   lcd.print ("W/H= ");
   lcd.print (fix);
   lcd.print (" /  ");
   lcd.print (jarak);
   lcd.print ("  ");   

   Serial.print(berat);
   Serial.print(",");
   Serial.println(jarak);
   
  scale.power_down();                  
  delay(100);
  scale.power_up();

  if (Serial.available() > 0) {
  String teststr = Serial.readString();
  lcd.setCursor(0,1);
  lcd.print(teststr);
  }
 
 
 
3. VIDEO HASILNYA