#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 15
#define LDR_PIN 36
const int pinLed_red = 23;
const int pinLed_yellow = 19;
const int pinLed_green = 18;
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
DHTesp dht;
int lightValue = 0;
const float GAMMA = 0.7;
const float RL10 = 50;
float RLDR;
float Vout;
float Lux = 0;
void setup() {
Serial.begin(115200);
setupLCD();
dht.setup(DHTPIN, DHTesp::DHT22);
setupPinLED();
}
void loop() {
cekSuhuRuangan();
sensorCahaya();
delay(1000);
}
void setupPinLED(){
pinMode(pinLed_red, OUTPUT);
pinMode(pinLed_yellow, OUTPUT);
pinMode(pinLed_green, OUTPUT);
}
void setupLCD(){
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Loading...");
delay(2000);
LCD.clear();
}
void cekSuhuRuangan(){
TempAndHumidity data = dht.getTempAndHumidity();
float temp = data.temperature;
Serial.println("Temperature = "+ String(temp));
LCD.setCursor(0, 0);
LCD.print("Suhu: "+String(temp)+" ");
delay(1000);
LCD.clear();
if (temp < 30){
digitalWrite(pinLed_green, HIGH);
digitalWrite(pinLed_yellow, LOW);
digitalWrite(pinLed_red, LOW);
LCD.setCursor(0, 0);
LCD.print("LED ON: Green");
}
else if (temp >= 30 && temp <= 50) {
digitalWrite(pinLed_green, LOW);
digitalWrite(pinLed_yellow, HIGH);
digitalWrite(pinLed_red, LOW);
LCD.setCursor(0, 0);
LCD.print("LED ON: Yellow");
}
else {
digitalWrite(pinLed_green, LOW);
digitalWrite(pinLed_yellow, LOW);
digitalWrite(pinLed_red, HIGH);
LCD.setCursor(0, 0);
LCD.print("LED ON: Red");
}
delay(1000);
}
void sensorCahaya(){
lightValue = analogRead(LDR_PIN);
float voltage = lightValue / 4095. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("LDR result Analog: ");
Serial.print(lightValue);
Serial.print(" \tLux: ");
Serial.println(lux);
LCD.setCursor(0, 1);
LCD.print("Lux: "+String(lux));
}