#include <Wire.h> // Library untuk I2C
#include <LiquidCrystal_I2C.h>
#include <DHT.h> // Library untuk sensor DHT22
#include <RTClib.h> // Library untuk RTC DS3231
#include <SD.h>
// menentukan sensor dan pin LCD
#define DHTPIN 7 // Pin data DHT 22 terhubung ke pin 7 arduino
#define DHTTYPE DHT22 // Jenis sensor DHT22
#define CS_PIN A0
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD
int relayPin = 8; // Pin kontrol Relay CH1
int indicatorPin = 11; // Pin lampu indikator L1
int relayPin2 = 9; // Pin relay CH2
int indicatorPin2 = 12; // Pin lampu indikator L2
RTC_DS1307 rtc;
File dataFile;
const int chipSelect = 53; // Sesuaikan dengan pin CS pada modul MicroSD
void setup() {
Serial.begin(9600);;
dht.begin();
lcd.init();
lcd.backlight();
rtc.begin();
pinMode(relayPin, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(indicatorPin, OUTPUT);
pinMode(indicatorPin2, OUTPUT);
digitalWrite(relayPin2, LOW); // Matikan relay awalnya
if (!rtc.isrunning()) {
Serial.println("RTC tidak berjalan! Atur waktu pada RTC terlebih dahulu.");
}
if (!rtc.begin()) {
Serial.println("Gagal menginisialisasi modul RTC.");
while (1);
}
// Inisialisasi kartu MicroSD
if (!SD.begin(chipSelect)) {
Serial.println("Gagal menginisialisasi kartu MicroSD.");
return;
}
// Inisialisasi RTC DS1307
Wire.begin();
if (!rtc.begin()) {
Serial.println("Gagal menginisialisasi modul RTC.");
while (1);
}
// Cek apakah RTC berjalan
if (!rtc.isrunning()) {
Serial.println("RTC tidak berjalan! Atur waktu pada RTC terlebih dahulu.");
}
// Buka atau buat file untuk ditulis
dataFile = SD.open("data.csv", FILE_WRITE);
// Cek apakah file berhasil dibuka
if (dataFile) {
Serial.println("File berhasil dibuka.");
// Menulis header ke file
dataFile.println("Waktu");
dataFile.close(); // Menutup file
} else {
Serial.println("Gagal membuka file.");
}
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
DateTime now = rtc.now();
lcd.setCursor(0, 2);
lcd.print("Date: ");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.day(), DEC);
lcd.setCursor(0, 3);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(2000); // Delay selama 2 detik sebelum pembacaan berikutnya
// Cek apakah sensor membaca data yang valid
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT22!");
return;
}
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println("°C");
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.println("%");
// Atur kondisi untuk mengaktifkan atau menonaktifkan relay dan lampu indikator pada Shoes dryer deodorizing
if (temperature >= 25.0) {
digitalWrite(relayPin, HIGH); // Relay aktif
digitalWrite(indicatorPin, HIGH); // Lampu indikator menyala
}
else {
digitalWrite(relayPin, LOW); // Relay non-aktif
digitalWrite(indicatorPin, LOW); // Lampu indikator mati
}
delay(1000); // Interval pembacaan sensor (1 detik)
// Kontrol kipas DC dan indikator berdasarkan suhu dan kelembaban
if (temperature > 40 && humidity > 50) {
digitalWrite(relayPin2, HIGH); // Hidupkan relay (nyalakan kipas DC)
digitalWrite(indicatorPin2, HIGH); // Nyalakan LED indikator
} else {
digitalWrite(relayPin2, LOW); // Matikan relay (matikan kipas DC)
digitalWrite(indicatorPin2, LOW); // Matikan LED indikator
}
delay(1000); // Baca suhu dan kelembaban setiap 1 detik
Serial.print("Tanggal dan Waktu: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
if (dataFile) {
dataFile.print(now.year(), DEC);
dataFile.print('/');
dataFile.print(now.month(), DEC);
dataFile.print('/');
dataFile.print(now.day(), DEC);
dataFile.print(" ");
dataFile.print(now.hour(), DEC);
dataFile.print(':');
dataFile.print(now.minute(), DEC);
dataFile.print(':');
dataFile.print(now.second(), DEC);
dataFile.println();
}
delay(1000);
Serial.print("Waktu: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
// Menulis data waktu ke file di kartu MicroSD
dataFile = SD.open("data.csv", FILE_WRITE);
if (dataFile) {
// Format data waktu sebagai CSV
String waktu = String(now.year()) + "-" + String(now.month()) + "-" + String(now.day()) + " " + String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second());
dataFile.println(waktu);
dataFile.close();
Serial.println("Data waktu telah disimpan di kartu MicroSD.");
} else {
Serial.println("Gagal membuka file.");
}
delay(1000); // Tunggu 1 detik sebelum membaca waktu lagi
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
bz1:1
bz1:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
relay3:VCC
relay3:GND
relay3:IN
relay3:NC
relay3:COM
relay3:NO
gnd3:GND
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
vcc1:VCC
gnd1:GND
vcc2:VCC
gnd2:GND
vcc4:VCC
gnd5:GND