// NAMA : LIYA NUR AFIDAH
// NPM : 203510422
#include <LiquidCrystal_I2C.h> //mengendalikan LCD dengan koneksi I2C
#include <RTClib.h> //mengakses modul RTC DS1307
#include <DHTesp.h> //untuk sensor suhu dan kelembapan DHT
#define MQ2pin (13) //mendefinisikan pin untuk sensor gas MQ2 dengan pin 13
const int DHT_PIN = 15; //mendefinisikan pin untuk sensor suhu dan kelembapan DHT22 dengan pin 15
DHTesp dhtSensor; //membuat objek dhtSensor dari kelas DHTesp untuk berkomunikasi dengan sensor DHT
float sensorValue; //mendeklarasikan variabel sensorValue sebagai float untuk menyimpan nilai pembacaan sensor gas MQ
LiquidCrystal_I2C lcd(0x27,21, 22); //membuat objek lcd dari kelas LiquidCrystal_I2C dengan alamat I2C 0x27, dan parameter 21 dan 22 menentukan pin SDA dan SCL
RTC_DS1307 rtc; //membuat objek rtc dari kelas RTC_DS1307 untuk berkomunikasi dengan modul RTC DS1307
char daysOfTheWeek[7][12] = {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}; //untuk menyimpan nama hari dalam seminggu
void setup() {
Serial.begin(115200); //Inisialisasi komunikasi serial dengan kecepatan baud rate 115200
if (! rtc.begin()) { //Memulai komunikasi dengan modul RTC DS1307 menggunakan fungsi begin() dari objek RTC (rtc)
// jika modul RTC tidak dapat ditemukan, pesan kesalahan ("Couldn't find RTC") akan dicetak ke Serial, lalu buffer Serial akan di-flush, dan program akan dihentikan
Serial.println("Couln't find RTC");
Serial.flush();
abort();
}
lcd.init(); // menginisialisasi objek LCD
lcd.backlight(); // mengaktifkan backlight pada LCD
lcd.begin(16, 2); // menentukan dimensi LCD (16 kolom, 2 baris)
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // inisialisasi sensor DHT
}
void Date() {
DateTime now = rtc.now(); //Mendapatkan waktu saat ini dari modul RTC
lcd.setCursor(0,0); //Menetapkan posisi kursor LCD ke baris 0, kolom 0
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); //Menampilkan hari dalam seminggu
lcd.print(" "); //Menampilkan spasi pada LCD
lcd.print(now.hour(), DEC); //Menampilkan jam pada LCD
lcd.print(':'); //Menampilkan karakter ":" pada LCD
lcd.print(now.minute(), DEC); //Menampilkan menit pada LCD
lcd.print(':'); //Menampilkan karakter ":" pada LCD
lcd.print(now.second(), DEC); //Menampilkan detik pada LCD
// Mencetak informasi tanggal ke Serial Monitor
Serial.print("Date: ");
Serial.print(now.year(), DEC);
Serial.print("-");
Serial.print(now.month(), DEC);
Serial.print("-");
Serial.print(now.day(), DEC);
//Mencetak informasi waktu ke Serial Monitor
Serial.print(" Time: ");
Serial.print(now.hour(), DEC);
Serial.print(":");
Serial.print(now.minute(), DEC);
Serial.print(":");
Serial.println(now.second(), DEC);
}
void Oxygen() {
sensorValue = analogRead(MQ2pin); //Membaca nilai analog dari sensor gas MQ2
// Mencetak informasi konsentrasi gas ke Serial Monitor
Serial.print("Konsentrasi gas: ");
Serial.println(sensorValue);
lcd.setCursor(12,0); // Menetapkan posisi kursor pada LCD (kolom 12, baris 0)
lcd.print(sensorValue); // Menampilkan nilai sensor gas pada LCD
//delay(2000); // Menunda eksekusi selama 2 detik
}
void Temp() {
lcd.setCursor(0,1); // Menetapkan posisi kursor pada LCD ke kolom 0, baris 1
TempAndHumidity data = dhtSensor.getTempAndHumidity(); //Mengambil data suhu dan kelembapan dari sensor DHT22
lcd.print("Temp:" + String(data.temperature, 0) + "C|" + String(data.humidity, 1)); // Menampilkan informasi suhu dan kelembapan pada LCD
// Mencetak informasi suhu pada Serial Monitor
Serial.print("Temp: ");
Serial.print(data.temperature, 0);
Serial.println("°C");
Serial.print("Kelembapan: ");
Serial.println(data.humidity, 1);
}
void loop() {
Date(); // Memanggil fungsi Date() untuk menampilkan tanggal dan waktu
Temp(); // Memanggil fungsi Temp() untuk menampilkan suhu dan kelembapan
Oxygen(); // Memanggil fungsi Oxygen() untuk menampilkan konsentrasi gas
delay(5000); // Menunda eksekusi program selama 5 detik
}