#include <Stepper.h>
#include "DHT.h"
#include <SD.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
unsigned long lastTimeSerialPrint = millis();
unsigned long delayBetweenSerialPrint = 2000;
const int stepsPerRevolution = 200;
#define DHTPIN 2
#define DHTTYPE DHT22
#define BUTTON_PIN_1 8
#define BUTTON_PIN_2 9
int i = 1;
int CS_pin = 10;
LiquidCrystal_I2C lcd(0x27,16,2);
Stepper myStepper(stepsPerRevolution, 4, 5, 6, 7);
DHT dht(DHTPIN, DHTTYPE);
File sd_file;
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup() {
Serial.begin(115200);
pinMode(CS_pin, OUTPUT);
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
lcd.init();
lcd.clear();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Otomatis Pendingin");
lcd.setCursor(0,1);
lcd.print("Kelas");
lcd.setCursor(6,1);
lcd.print("Ruang 1");
Serial.println(F("Cek Suhu dan Kelembaban"));
dht.begin();
myStepper.setSpeed(120);
if (SD.begin()) {
Serial.println("SD card is initialized. Ready to go");
}
else {
Serial.println("Failed");
return;
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
}
void loop() {
int value1 = digitalRead((BUTTON_PIN_1));
int value2 = digitalRead((BUTTON_PIN_2));
if (value1 == HIGH) {
File sd_file = SD.open("data.txt", FILE_WRITE);
if (sd_file) {
DateTime now = rtc.now();
unsigned long timeNow = millis();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
if (temperature > 24 || humidity > 60) {
myStepper.step(stepsPerRevolution);
if (timeNow - lastTimeSerialPrint > delayBetweenSerialPrint) {
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.print("Data ke: ");
Serial.println(i);
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println(F("Temperature & Humidity Realtime: "));
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.println(F("°C "));
Serial.println("");
sd_file.print("Data ke: ");
sd_file.println(i);
sd_file.print("Current time: ");
sd_file.print(now.year(), DEC);
sd_file.print('/');
sd_file.print(now.month(), DEC);
sd_file.print('/');
sd_file.print(now.day(), DEC);
sd_file.print(" (");
sd_file.print(daysOfTheWeek[now.dayOfTheWeek()]);
sd_file.print(") ");
sd_file.print(now.hour(), DEC);
sd_file.print(':');
sd_file.print(now.minute(), DEC);
sd_file.print(':');
sd_file.print(now.second(), DEC);
sd_file.println();
sd_file.print(F("Humidity: "));
sd_file.print(humidity);
sd_file.print(F("% Temperature: "));
sd_file.print(temperature);
sd_file.println(F("°C "));
sd_file.println("");
i++;
lastTimeSerialPrint = timeNow;
}
} else {
if (timeNow - lastTimeSerialPrint > delayBetweenSerialPrint) {
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.print("Data ke: ");
Serial.println(i);
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println(F("Temperature & Humidity Realtime: "));
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.println(F("°C "));
Serial.println("");
sd_file.print("Data ke: ");
sd_file.println(i);
sd_file.print("Current time: ");
sd_file.print(now.year(), DEC);
sd_file.print('/');
sd_file.print(now.month(), DEC);
sd_file.print('/');
sd_file.print(now.day(), DEC);
sd_file.print(" (");
sd_file.print(daysOfTheWeek[now.dayOfTheWeek()]);
sd_file.print(") ");
sd_file.print(now.hour(), DEC);
sd_file.print(':');
sd_file.print(now.minute(), DEC);
sd_file.print(':');
sd_file.print(now.second(), DEC);
sd_file.println();
sd_file.print(F("Humidity: "));
sd_file.print(humidity);
sd_file.print(F("% Temperature: "));
sd_file.print(temperature);
sd_file.println(F("°C "));
sd_file.println("");
lastTimeSerialPrint = timeNow;
}
}
sd_file.close();
}
}
else if (value2 == HIGH) {
File xsd_file = SD.open("data.txt");
if (xsd_file) {
unsigned long timeNow = millis();
if (timeNow - lastTimeSerialPrint > delayBetweenSerialPrint) {
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("");
Serial.println("Isi dari data.txt: ");
while (xsd_file.available()) {
Serial.write(xsd_file.read());
}
lastTimeSerialPrint = timeNow;
}
xsd_file.close();
}
}
}
Ini DHT22.
DHT22 digunakan untuk
menghitung suhu dan
kelembaban di dalam
ruangan.
Ini Pendingin .
Pendingin akan berputar ketika suhu diatas 24°
dan kelembaban diatas 60%.
Ini MicroSD Card.
MicroSD Card digunakan untuk
menyimpan file data.txt
yang berisi Log penghitungan
suhu dan kelembaban
Ini DS1307 RTC.
RTC digunakan untuk menghitung waktu
secara Realtime, dan pada rangkaian ini
digunakan sebagai data log secara realtime
Ini LCD 16x2 (I2C).
LCD digunakan untuk menampilkan nama
program, nama pembuat,
dan nomor induk
Ini Slide Switch.
Slide Switch digunakan untuk
mengubah mode dari membaca suhu
ke membaca MicroSD card, dan begitu
pula sebaliknya
Kiri
Mode
Membaca Suhu
Kanan
Mode Membaca
MicroSD Card