Reza Infor — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by reyza063.

Components

Sketch code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myServo;

const int ledPin = 4;
const int servoPin = 9;
const int soilPin = A0; // Pin analog untuk sensor Soil Moisture

void setup() {
  pinMode(ledPin, OUTPUT);
  Wire.begin();
  lcd.init();
  lcd.backlight();

  myServo.attach(servoPin);
  myServo.write(0); // Posisi awal katup tertutup
}

void loop() {
  // 1. Membaca nilai dari sensor kelembapan tanah
  int soilValue = analogRead(soilPin);

  // 2. Mengonversi nilai analog ke persentase (0% - 100%)
  // Catatan: Pada sensor fisik asli, nilai 1023 seringkali berarti kering dan 0 basah. 
  // Jika pembacaan terbalik di simulator, ubah menjadi map(soilValue, 1023, 0, 0, 100);
  int moisturePercent = map(soilValue, 0, 1023, 0, 100);

  // 3. Menampilkan status kelembapan di baris pertama LCD
  lcd.setCursor(0, 0);
  lcd.print("Soil: ");
  lcd.print(moisturePercent);
  lcd.print("%      ");

  // 4. Logika Penyiraman: Jika kelembapan di bawah 40% (Tanah Kering)
  if (moisturePercent > 40) {
    digitalWrite(ledPin, HIGH); // Indikator pompa/sistem aktif
    lcd.setCursor(0, 1);
    lcd.print("Status: KERING ");

    // Servo bergerak membuka (menyiram)
    for (int pos = 0; pos <= 180; pos++) {
      myServo.write(pos);
      delay(15); 
    }
    delay(1000); 

    // Servo bergerak menutup kembali
    for (int pos = 180; pos >= 0; pos--) {
     myServo.write(pos);
     delay(15);
   }
  } 
  // Jika tanah sudah cukup basah (40% ke atas)
  else {
    digitalWrite(ledPin, LOW); // Indikator mati
    myServo.write(0);          // Katup tetap tertutup
    
    lcd.setCursor(0, 1);
    lcd.print("Status: BASAH  ");
    delay(1000); // Jeda sebelum membaca ulang
  }
}