#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 = 2000;
#define DHTPIN 4
#define DHTTYPE DHT22
#define BUTTON_PIN_1 7
#define BUTTON_PIN_2 8
int CS_pin = 10;
LiquidCrystal_I2C lcd(0x27,16,2);
Stepper fan(stepsPerRevolution, 3, 5, 6, 9);
DHT dht(DHTPIN, DHTTYPE);
File sd_file;
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
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("Ruang Operasi");
lcd.setCursor(0,1);
lcd.print("Faris");
lcd.setCursor(6,1);
lcd.print("33421309");
dht.begin();
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();
}
Serial.println(F("Cek Suhu dan Kelembaban"));
}
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 (humidity > 60) {
fan.setSpeed(255);
fan.step(stepsPerRevolution);
}
else if (humidity >= 45 && humidity <= 60) {
int speed = map (humidity, 45, 60, 0, 255);
fan.setSpeed(speed);
fan.step(stepsPerRevolution);
}
if (timeNow - lastTimeSerialPrint > delayBetweenSerialPrint) {
Serial.print("Tangal ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" jam ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println(F("Suhu dan Kelembapan sekarang: "));
Serial.print(F("Kelembapan: "));
Serial.print(humidity);
Serial.print(F("% Suhu: "));
Serial.print(temperature);
Serial.println(F("°C "));
Serial.println("");
sd_file.print("Data pada tanggal ");
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(" jam ");
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("Kelambapan: "));
sd_file.print(humidity);
sd_file.print(F("% Suhu: "));
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("Isi dari data.txt: ");
while (xsd_file.available()) {
Serial.write(xsd_file.read());
}
lastTimeSerialPrint = timeNow;
}
xsd_file.close();
}
}
}
Kiri Sensor
Kanan SD Card
Ini Kipas
berbasis stepper motor