#include <Wire.h> // Library untuk I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <DHT.h> // Library untuk sensor DHT22
#include <Servo.h>
Servo myservo;
#define DHTPIN 2 // Pin data sensor DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT22
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi objek DHT
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi objek LCD I2C dengan alamat 0x27, 16 kolom, dan 2 baris
const int dhtPin = 2;
const int LED_KUNING = 12; // pin LED kuning dihubungkan ke pin digital 4
const int LED_MERAH = 4; // pin LED merah dihubungkan ke pin digital 6
const int SERVO_PIN = 6; // Pin yang digunakan untuk servo
const int PIR_PIN = 7; // pin sensor PIR dihubungkan ke pin digital 8
const int BUZZER_PIN = 9; // pin buzzer dihubungkan ke pin digital 9
const int LDR_PIN = A0; // pin sensor LDR dihubungkan ke pin analog A0
int gerakan;
int cahaya;
int posisi = 0;
void setup() {
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
dht.begin(); // Inisialisasi sensor DHT22
myservo.attach(SERVO_PIN); // Servo dipasangkan pada pin 6 (PWM)
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(9600); // Inisialisasi komunikasi serial untuk Serial Monitor
lcd.setCursor(1, 0); // Pindahkan kursor ke kolom 0, baris 0
lcd.print("ZULFA ULINNUHA");
lcd.setCursor(0, 1);
lcd.print("INKUBATOR TELUR");
delay(1000);
}
void loop() {
// membaca gerakan dari sensor PIR
gerakan = digitalRead(PIR_PIN);
//servo
for (posisi = 0; posisi <= 180; posisi += 1) {//melakukan perualangan penambahan nilai pada variable posisi
//dan programnya dijalankan setiap penambahan (dalam hal ini setiap +1)
myservo.write(posisi); //membuat servo bergerak pada sudut sesuai nilai yg ada pada variable posisi
delay(20); //jeda 15ms untuk servo bergerak
}
for (posisi = 180; posisi >= 0; posisi -= 1) {//melakukan perualangan pengurangan nilai pada variable posisi
//dan programnya dijalankan setiap pengurangan (dalam hal ini setiap -1)
myservo.write(posisi); //membuat servo bergerak pada sudut sesuai nilai yg ada pada variable posisi
delay(20); //jeda 15ms untuk servo bergerak
}
// Baca suhu dan kelembaban dari sensor DHT22
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
// Tampilkan hasil pembacaan pada LCD
lcd.clear(); // Bersihkan tampilan LCD
lcd.setCursor(0, 0); // Pindahkan kursor ke kolom 0, baris 0
lcd.print("Suhu: "); // Tampilkan label "Suhu"
lcd.print(suhu); // Tampilkan suhu dalam derajat Celcius
lcd.print(" C"); // Tampilkan satuan Celcius
lcd.setCursor(0, 1);
lcd.print("Kelembaban: ");
lcd.print(kelembaban);
lcd.print(" %");
delay(5000); // Jeda selama 5 detik
lcd.clear(); // Bersihkan tampilan LCD
lcd.setCursor(0, 0);
lcd.print("Gerakan:");
lcd.print(gerakan);
lcd.setCursor(0, 1);
lcd.print("cahaya:");
lcd.print(cahaya);
lcd.print("Lux");
delay(5000); // Jeda selama 5 detik
// Menyalakan LED kuning jika suhu di bawah 37 derajat
if (suhu <= 37 && kelembaban <= 50 || cahaya < 20) {
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_MERAH, LOW);
}
// Menyalakan LED merah jika suhu di atas 39 derajat
else if (suhu >= 38 && kelembaban >= 60 || cahaya > 20) {
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH);
}
// jika terdeteksi gerakan, nyalakan buzzer selama 10 detik
if (gerakan == HIGH) {
digitalWrite(BUZZER_PIN, HIGH);
tone(9, 250);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Terdapat Gerakan ");
delay(10000);
noTone(9);
digitalWrite(BUZZER_PIN, LOW);
}
// Notifikasi ke Serial Monitor
Serial.println("INKUBATOR TELUR");
// membaca cahaya dari sensor LDR
cahaya = analogRead(LDR_PIN);
// Memantau kondisi suhu dan cahaya untuk notifikasi ke Serial Monitor
if ((suhu > 39 || suhu < 37 || kelembaban > 60 || kelembaban < 50 || cahaya < 20) && gerakan == LOW) {
Serial.println("Periksa Inkubator.");
}
}