#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT11 atau DHT22)
#define DHT_PIN 7 // Pin yang terhubung dengan sensor DHT22
#define TRIGGER_PIN 6 // Pin trigger sensor ultrasonik
#define ECHO_PIN 5 // Pin echo sensor ultrasonik
#define BUZZER_PIN 4 // Pin untuk buzzer
#define LED_PIN 3 // Pin untuk lampu LED
#define PH_SENSOR_PIN A1 // Pin yang terhubung dengan sensor pH
#define BATAS_PH_BAWAH 5.5 // Batas bawah pH yang ditentukan
#define BATAS_PH_ATAS 6.5 // Batas atas pH yang ditentukan
#define BATAS_SUHU_BAWAH 18.0 // Batas bawah suhu yang ditentukan
#define BATAS_SUHU_ATAS 24.0 // Batas atas suhu yang ditentukan
#define BATAS_KELEMBAPAN_BAWAH 40 // Batas bawah kelembapan yang ditentukan
#define BATAS_KELEMBAPAN_ATAS 60 // Batas atas kelembapan yang ditentukan
#define BATAS_JARAK 1.0 // Batas jarak ultrasonik yang ditentukan (1cm)
DHT dht(DHT_PIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C: 0x27, Ukuran LCD: 16x2
int currentDisplay = 0; // Indeks tampilan saat ini
const int numDisplays = 2; // Jumlah tampilan yang ingin ditampilkan
void setup() {
lcd.backlight();
Serial.begin(9600);
dht.begin();
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.println("Sistem Monitoring");
Serial.println("Tanaman Hidroponik");
lcd.init();
int positionCounter;
lcd.setCursor(2, 0);
lcd.print("Sistem Monitoring");
lcd.setCursor(2, 1);
lcd.print("Tanaman Hidroponik");
for (positionCounter = 0; positionCounter < 26; positionCounter++) {
lcd.scrollDisplayLeft();
delay (200);
}
lcd.clear();
}
void loop() {
// Membaca suhu dan kelembaban dari sensor DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Membaca nilai pH dari sensor pH
float pH_value = analogRead(PH_SENSOR_PIN);
// Mengkonversi nilai pH dari rentang 0-1023 ke rentang 0-14
pH_value = map(pH_value, 0, 1023, 0, 14);
// Mengukur jarak dengan sensor ultrasonik
float duration, distance;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Menampilkan data pada LCD
lcd.clear();
lcd.setCursor(0, 0);
// Memilih tampilan berdasarkan currentDisplay
switch (currentDisplay) {
case 0:
lcd.setCursor(0, 0); // Mengatur posisi kursor pada baris pertama
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1); // Mengatur posisi kursor pada baris kedua
lcd.print("Kelembapan: ");
lcd.print(humidity);
lcd.print("%");
break;
case 1:
lcd.setCursor(0, 0); // Mengatur posisi kursor pada baris pertama
lcd.print("pH: ");
lcd.print(pH_value, 2); // Mencetak nilai pH dengan 2 angka di belakang koma
lcd.setCursor(0, 1); // Mengatur posisi kursor pada baris kedua
lcd.print("Jarak Air: ");
lcd.print(distance);
lcd.print("cm");
break;
}
// Pindah ke tampilan selanjutnya
currentDisplay = (currentDisplay + 1) % numDisplays;
// Delay untuk menghindari pembacaan berulang yang terlalu cepat
delay(2000);
}