#define LuminancePin 33
#define TermoSensPin 25
#define PIRPin 23
#define LampsPin 17
#define AirConditionerPin 16
const float BETA = 3950;
const float GAMMA = 0.7;
const float RL10 = 50;
float luminance = 0;
float temperatureCelsius = 0;
void config() {
pinMode(LuminancePin, INPUT);
pinMode(TermoSensPin, INPUT);
pinMode(PIRPin, INPUT);
pinMode(LampsPin, OUTPUT);
pinMode(AirConditionerPin, OUTPUT);
digitalWrite(LampsPin, LOW);
digitalWrite(AirConditionerPin, LOW);
}
void setup() {
config();
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void getSensorData() {
int analogValue = analogRead(TermoSensPin);
temperatureCelsius = 1 / (log(1 / (4096.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
int analogValueLuminance = analogRead(LuminancePin);
float voltage = analogValueLuminance / 4096.0 * 3.3;
float resistance = 2000 * voltage / (3.3 - voltage);
luminance = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.println("New data:");
Serial.print("Room temperature: ");
Serial.print(temperatureCelsius);
Serial.println(" °C");
Serial.print("Room luminance: ");
Serial.print(luminance);
Serial.println(" lx");
Serial.print("PIR state: ");
Serial.println(digitalRead(PIRPin));
}
void startStopLamps(bool OnOff) {
digitalWrite(LampsPin, OnOff);
Serial.print("Lamps turned ");
Serial.println(OnOff ? "ON" : "OFF");
}
void startStopAirConditioner(bool OnOff) {
digitalWrite(AirConditionerPin, OnOff);
Serial.print("Air conditioner turned ");
Serial.println(OnOff ? "ON" : "OFF");
}
void loop() {
getSensorData();
if (luminance > 80) {
startStopLamps(false);
} else if (luminance <= 80 && digitalRead(PIRPin) == HIGH) {
startStopLamps(true);
}
if (temperatureCelsius > 28.0) {
startStopAirConditioner(true);
} else if (temperatureCelsius <= 22.0) {
startStopAirConditioner(false);
}
delay(1000);
}