Pada postingan kali ini saya ingin merubah timer mesin cuci saya dari analog menjadi digital, dikarenakan timer analognya kadang mati sendiri ditengah jalan sepertinya spinnya sudah lemah, setelah saya cari di pasaran untuk tipe spin yang dipakai pada mesin cuci saya itu tidak ada yang sama, jadi dari pada pusing-pusing langsung saja saya ganti menjadi digital menggunakan arduino. dengan begi mesin cuci yang sudah menyebalkan menjadi menyenangkan untuk pengoprasiannya. Oke langsung aja kita ke cara membuatnya.

Pertama Persiapkan alatnya terlebih dahulu:

  1. Arduino Nano
  2. Module Relay 2 Channel
  3. LCD I2C 16×2
  4. Push Button (x4 Buah)
  5. Buzzer
  6. Buat PCB sendiri/Atau disolder langsung untuk semua komponennya juga boleh

Kemudian kalian rangkai alat tersebut seperti pada rangkaian berikut ini.

Setelah itu kalian bisa copykan program berikut ini/kalian bisa download semua filenya di bawah postingan ini.

//Program by: Alim Mulyadi
//tgl: 27/03/2023
//Program: Mesin Cuci digital

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

//---Configurasi Setting Pins dan Lainnya---//
const byte relay_power = 3;
const byte relay_putar = 2;
const byte buzzer = 8;
const byte btn_startpause = 10;
const byte btn_reset = 11;
const byte btn_3 = 12;
const byte btn_4 = 6;
const byte i2c_lcd = 0x27;
#define hidup HIGH
#define mati LOW

//---Variable yang digunakan---///
bool s_btn1 = LOW;
bool s_btn2 = LOW;
bool s_btn3 = LOW;
bool s_btn4 = LOW;
bool sp_btn1 = LOW;
bool sp_btn2 = LOW;
bool sp_btn3 = LOW;
bool sp_btn4 = LOW;
bool p_btn1 = LOW;
bool p_btn2 = LOW;
bool p_btn3 = LOW;
bool p_btn4 = LOW;
bool pause_set = false;

byte eeprom_awal = 0;
int count_putar = 0;
int count = 0;
int count_menu = 0;

unsigned long millis_putar, lastmillis;
int set_jam = 0;
int set_menit = 0;
int set_detik = 0;
time_t set_time = 0;
int current_jam = 0;
int current_menit = 0;
int current_detik = 0;
time_t current_time = 0;
int pause_jam = 0;
int pause_menit = 0;
int pause_detik = 0;
time_t pause_time = 0;
time_t start_time = 0;

String mode = "utama";

//---Mendefinisikan Library---//
LiquidCrystal_I2C lcd(i2c_lcd, 16, 2);


void setup() {
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(0x3F);
  if (Wire.endTransmission()) {
    lcd = LiquidCrystal_I2C(0x27, 16, 2);
  }
  lcd.begin();
  lcd.backlight();

  //---Definisi Pin---//
  pinMode(relay_power, OUTPUT);
  pinMode(relay_putar, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(btn_startpause, INPUT_PULLUP);
  pinMode(btn_reset, INPUT_PULLUP);
  pinMode(btn_3, INPUT_PULLUP);
  pinMode(btn_4, INPUT_PULLUP);
  digitalWrite(relay_power, mati);
  digitalWrite(relay_putar, mati);
  digitalWrite(buzzer, mati);

  if (EEPROM.read(eeprom_awal) != 78) {
    EEPROM.write(0, 78);
    EEPROM.write(1, 0);
    EEPROM.write(2, 15);
    EEPROM.write(3, 0);
    EEPROM.write(4, 2);
    delay(50);
    eeprom_read();
  }
  else {
    eeprom_read();
  }

}

void loop() {
  //  lcd.setCursor(0, 0);
  //  lcd.print(F("Hello"));
  cek_button();

  if (mode == "utama") {
    lcd.setCursor(0, 0);
    lcd.print(F("Mesin Digital"));
    if (pause_jam != 0 || pause_menit != 0 || pause_detik != 0) {
      lcd.setCursor(0, 1);
      display_position(pause_jam);
      lcd.print(":");
      lcd.setCursor(3, 1);
      display_position(pause_menit);
      lcd.print(":");
      lcd.setCursor(6, 1);
      display_position(pause_detik);
    }
    else {
      lcd.setCursor(0, 1);
      display_position(current_jam);
      lcd.print(":");
      lcd.setCursor(3, 1);
      display_position(current_menit);
      lcd.print(":");
      lcd.setCursor(6, 1);
      display_position(current_detik);
    }

    if (p_btn1) {
      if (pause_jam != 0 || pause_menit != 0 || pause_detik != 0) {
        set_time = pause_detik + (60 * pause_menit) + (3600 * pause_jam);
        pause_set = true;
      }
      else {
        set_time = set_detik + (60 * set_menit) + (3600 * set_jam);
        pause_set = false;
      }
      start_time = now();
      millis_putar = millis();
      lcd.clear();
      delay(50);
      mode = "running";
    }
    if (p_btn2) {
      eeprom_read();
    }
    if (p_btn3) {
      mode = "setting";
    }
  }
  else if (mode == "running") {
    //tampilan
    current_time = set_time - (now() - start_time);

    if (current_time <= 0) {
      lcd.clear();
      delay(50);
      mode = "habis";
    }

    if (minute(current_time) >= 5) {
      if (millis() - millis_putar >= 10000) {
        if (count_putar > 2) {
          count_putar = 0;
        }
        else {
          count_putar++;
        }
        //digitalWrite(indi_utama, !digitalRead(indi_utama));
        millis_putar = millis();
      }
    }
    else {
      if (millis() - millis_putar >= 5000) {
        if (count_putar > 2) {
          count_putar = 0;
        }
        else {
          count_putar++;
        }
        //digitalWrite(indi_utama, !digitalRead(indi_utama));
        millis_putar = millis();
      }
    }

    if (count_putar == 0) {
      digitalWrite(relay_power, hidup);
      digitalWrite(relay_putar, mati);
    }
    else if (count_putar == 1) {
      digitalWrite(relay_power, mati);
      digitalWrite(relay_putar, mati);
    }
    else if (count_putar == 2) {
      digitalWrite(relay_power, hidup);
      digitalWrite(relay_putar, hidup);
    }
    else if (count_putar == 3) {
      digitalWrite(relay_power, mati);
      digitalWrite(relay_putar, mati);
    }

    if (millis() - lastmillis >= 500) {
      if (count == 2) {
        count = 1;
      }
      else {
        count++;
      }

      if (count == 1) {
        lcd.setCursor(2, 1);
        lcd.print(":");
        lcd.setCursor(5, 1);
        lcd.print(":");
      }
      else {
        lcd.setCursor(2, 1);
        lcd.print(" ");
        lcd.setCursor(5, 1);
        lcd.print(" ");
      }

      lastmillis = millis();
    }
    lcd.setCursor(0, 0);
    lcd.print("Counting down...");
    lcd.setCursor(0, 1);
    display_position(hour(current_time));
    //lcd.print(":");
    lcd.setCursor(3, 1);
    display_position(minute(current_time));
    //lcd.print(":");
    lcd.setCursor(6, 1);
    display_position(second(current_time));

    if (p_btn1) {
      if (hour(current_time) != 0 || minute(current_time) != 0 || second(current_time) != 0) {
        digitalWrite(relay_power, mati);
        digitalWrite(relay_putar, mati);
        pause_jam = hour(current_time);
        pause_menit = minute(current_time);
        pause_detik = second(current_time);
      }
      mode = "utama";
    }
  }
  else if (mode == "habis") {
    digitalWrite(relay_power, mati);
    digitalWrite(relay_putar, mati);
    digitalWrite(buzzer, hidup);

    if (p_btn2) {
      digitalWrite(buzzer, mati);
      eeprom_read();
      lcd.clear();
      delay(50);
    }
  }
  else if (mode == "setting") {
    lcd.setCursor(0, 0);
    lcd.print(F("Setting Time:"));
    if (millis() - lastmillis >= 300) {
      if (count == 2) {
        count = 1;
      }
      else {
        count++;
      }

      if (count == 1) {
        if (count_menu == 0) {
          lcd.setCursor(0, 1);
          display_position(set_jam);
        }
        else if (count_menu == 1) {
          lcd.setCursor(3, 1);
          display_position(set_menit);
        }
        else if (count_menu == 2) {
          lcd.setCursor(6, 1);
          display_position(set_detik);
        }
      }
      else {
        if (count_menu == 0) {
          lcd.setCursor(0, 1);
          lcd.print(F("  "));
        }
        if (count_menu == 1) {
          lcd.setCursor(3, 1);
          lcd.print(F("  "));
        }
        if (count_menu == 2) {
          lcd.setCursor(6, 1);
          lcd.print(F("  "));
        }
      }
      lastmillis = millis();
    }
    
    lcd.setCursor(2, 1);
    lcd.print(F(":"));
    lcd.setCursor(5, 1);
    lcd.print(F(":"));
    
    if (count_menu == 0) {
      lcd.setCursor(3, 1);
      display_position(set_menit);
      lcd.setCursor(6, 1);
      display_position(set_detik);
    }
    else if(count_menu == 1){
      lcd.setCursor(0, 1);
      display_position(set_jam);
      lcd.setCursor(6, 1);
      display_position(set_detik);
    }
    else if(count_menu == 2){
      lcd.setCursor(0, 1);
      display_position(set_jam);
      lcd.setCursor(3, 1);
      display_position(set_menit);
    }


    if (count_menu == 0) {
      if (p_btn1) {
        if (set_jam >= 99) {
          set_jam = 0;
        }
        else {
          set_jam++;
        }
      }
      if (p_btn2) {
        if (set_jam <= 0) {
          set_jam = 99;
        }
        else {
          set_jam--;
        }
      }
      if (p_btn3) {
        count_menu++;
      }
    }
    else if (count_menu == 1) {
      if (p_btn1) {
        if (set_menit >= 99) {
          set_menit = 0;
        }
        else {
          set_menit++;
        }
      }
      if (p_btn2) {
        if (set_menit <= 0) {
          set_menit = 99;
        }
        else {
          set_menit--;
        }
      }
      if (p_btn3) {
        count_menu++;
      }
    }
    else if (count_menu == 2) {
      if (p_btn1) {
        if (set_detik >= 59) {
          set_detik = 0;
        }
        else {
          set_detik++;
        }
      }
      if (p_btn2) {
        if (set_detik <= 0) {
          set_detik = 59;
        }
        else {
          set_detik--;
        }
      }
      if (p_btn3) {
        count_menu = 0;
        EEPROM.write(1, set_jam);
        EEPROM.write(2, set_menit);
        EEPROM.write(3, set_detik);
        delay(50);
        lcd.setCursor(0, 1);
        lcd.print(F("Saving"));
        for (int i = 6; i < 9; i++) {
          lcd.setCursor(i, 1);
          lcd.print(F("."));
          delay(200);
        }
        eeprom_read();
        lcd.clear();
        delay(50);
      }
    }
  }


  //  if(digitalRead(btn_startpause) == LOW){
  //    digitalWrite(relay_putar, !digitalRead(relay_putar));
  //    delay(500);
  //  }
  //  if(digitalRead(btn_reset) == LOW){
  //    digitalWrite(relay_putar, !digitalRead(relay_putar));
  //    delay(500);
  //  }
  //  if(digitalRead(btn_3) == LOW){
  //    digitalWrite(relay_putar, !digitalRead(relay_putar));
  //    delay(500);
  //  }
  //  if(digitalRead(btn_4) == LOW){
  //    digitalWrite(relay_putar, !digitalRead(relay_putar));
  //    delay(500);
  //  }
  //  digitalWrite(relay_power, hidup);
  //  digitalWrite(relay_putar, hidup);
  //  delay(5000);
  //  digitalWrite(relay_power, mati);
  //  digitalWrite(relay_putar, mati);
  //  delay(5000);

}

void cek_button() {
  p_btn1 = false;
  p_btn2 = false;
  p_btn3 = false;
  p_btn4 = false;
  s_btn1 = digitalRead(btn_startpause);
  s_btn2 = digitalRead(btn_reset);
  s_btn3 = digitalRead(btn_3);
  s_btn4 = digitalRead(btn_4);

  if (s_btn1 != sp_btn1) {
    p_btn1 = s_btn1 == LOW;
    sp_btn1 = s_btn1;
  }
  if (s_btn2 != sp_btn2) {
    p_btn2 = s_btn2 == LOW;
    sp_btn2 = s_btn2;
  }
  if (s_btn3 != sp_btn3) {
    p_btn3 = s_btn3 == LOW;
    sp_btn3 = s_btn3;
  }

  if (p_btn1) {
    //digitalWrite(relay_putar, !digitalRead(relay_putar));
    //delay(500);
  }
  if (p_btn2) {
    //digitalWrite(relay_putar, !digitalRead(relay_putar));
    //delay(500);
  }
}

void eeprom_read() {
  set_jam = EEPROM.read(1);
  set_menit = EEPROM.read(2);
  set_detik = EEPROM.read(3);

  current_jam = set_jam;
  current_menit = set_menit;
  current_detik = set_detik;

  pause_jam = 0;
  pause_menit = 0;
  pause_detik = 0;

  set_time = set_detik + (60 * set_menit) + (3600 * set_jam);
  mode = "utama";
  delay(50);
}

void display_position(int digits) {
  if (digits < 10)
    lcd.print("0");
  lcd.print(digits);
}

Jika sudah diupload disini saya buatkan untuk casingnya menggunakan 3D printer dan saya pasangkan pada mesin cucinya.

Untuk lebih lengkap Mengenai project tersebut kalian bisa lihat video youtube saya berikut ini.

Untuk file lengkapnya kalian bisa download dibawah ini.

Mambuat Timer Mesin Cuci Analog Menjadi Digital

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *