Advertisement
AnshorFalahi

Untitled

Sep 5th, 2024
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 3.25 KB | Source Code | 0 0
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. #define MOISTURE_SENSOR_PIN A0
  5. #define RELAY_PIN 2
  6.  
  7. LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat I2C untuk LCD (pastikan alamat I2C benar) 0x3F/0x27
  8.  
  9. unsigned long previousMillis = 0;     // Untuk melacak waktu sebelumnya
  10. const long relayOnDuration = 5000;    // Durasi relay ON dalam milidetik
  11. const int thresholdLow = 700;         // Nilai threshold pertama untuk kelembaban tanah
  12. const int thresholdHigh = 900;        // Nilai threshold kedua untuk kelembaban tanah
  13.  
  14. void setup() {
  15.   Serial.begin(9600);                // Memulai komunikasi Serial dengan baud rate 9600
  16.   pinMode(RELAY_PIN, OUTPUT);
  17.   digitalWrite(RELAY_PIN, HIGH);     // Pastikan relay mati pada awalnya
  18.  
  19.   // Inisialisasi LCD
  20.   lcd.begin(16, 12);
  21.   lcd.backlight();                   // Aktifkan backlight LCD
  22.   lcd.setCursor(0, 0);               // Mengatur kursor di baris pertama kolom pertama
  23.   lcd.print("Bismillah");            // Menampilkan pesan awal di baris pertama
  24.   delay(10000);                       // Menunda untuk menampilkan pesan awal
  25.   lcd.clear();                       // Membersihkan layar LCD setelah pesan awal
  26.   Serial.println("Bismillah");
  27. }
  28.  
  29. void loop() {
  30.   unsigned long currentMillis = millis();  // Mendapatkan waktu saat ini
  31.   int moistureLevel = analogRead(MOISTURE_SENSOR_PIN);
  32.  
  33.   // Cetak nilai kelembaban tanah ke Serial Monitor
  34.   Serial.print("Moisture Level: ");
  35.   Serial.println(moistureLevel);
  36.  
  37.   // Tampilkan nilai sensor kelembaban tanah di baris kedua LCD
  38.   lcd.setCursor(0, 1);               // Atur kursor di baris kedua
  39.   lcd.print("Moisture: ");           // Tampilkan label
  40.   lcd.print(moistureLevel);          // Tampilkan nilai kelembaban tanah
  41.  
  42.   if (moistureLevel > thresholdHigh) {
  43.     // Tanah sangat kering, aktifkan penyiraman
  44.     lcd.setCursor(0, 0);              // Atur kursor di baris pertama
  45.     lcd.print("Tanah Kering"); // Tampilkan pesan
  46.     digitalWrite(RELAY_PIN, LOW);     // Hidupkan relay (penyiraman ON)
  47.     Serial.println("Status: Tanah Sangat Kering, Penyiraman ON");
  48.     previousMillis = currentMillis;   // Setel waktu saat relay dinyalakan
  49.   } else if (moistureLevel > thresholdLow) {
  50.     // Tanah agak kering, tampilkan pesan
  51.     lcd.setCursor(0, 0);              // Atur kursor di baris pertama
  52.     lcd.print("Tanah Sedang");   // Tampilkan pesan
  53.     Serial.println("Status: Tanah Agak Kering, Penyiraman OFF");
  54.  
  55.     // Matikan relay jika relay sudah menyala sebelumnya
  56.     if (digitalRead(RELAY_PIN) == LOW) {
  57.       digitalWrite(RELAY_PIN, HIGH);  // Matikan penyiraman
  58.       Serial.println("Relay dimatikan, Penyiraman OFF");
  59.     }
  60.   } else {
  61.     // Tanah lembab, matikan penyiraman
  62.     lcd.setCursor(0, 0);              // Atur kursor di baris pertama
  63.     lcd.print("Tanah Lembab");        // Tampilkan pesan
  64.     Serial.println("Status: Tanah Lembab, Penyiraman OFF");
  65.  
  66.     // Matikan relay jika relay sudah menyala sebelumnya
  67.     if (digitalRead(RELAY_PIN) == LOW) {
  68.       digitalWrite(RELAY_PIN, HIGH);  // Matikan penyiraman
  69.       Serial.println("Relay dimatikan, Penyiraman OFF");
  70.     }
  71.   }
  72.  
  73.   Serial.println("=====================================");
  74.   delay(2000);  // Tambahkan sedikit jeda untuk menghindari pengulangan terlalu cepat
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement