#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <Servo.h>
Servo myservo;
int servoPin = 9;
int servoAngle = 0;
#define POT1_PIN A3
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 24, 4);
const float GAMMA = 0.7;
const float RL10 = 50;
const int ledPin = 8;
#define PIN_TRIG 3
#define PIN_ECHO 4
int myRelay1 = 12;
int myRelay2 = 11;
volatile byte relayState = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(myRelay1, OUTPUT);
pinMode(myRelay2, OUTPUT);
myservo.attach(servoPin);
myservo.write(servoAngle);
lcd.init();
lcd.backlight();
lcd.clear();
Serial.begin(9600);
dht.begin();
}
void loop() {
int analogValue = analogRead(A0);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
if(lux<400){
digitalWrite(ledPin, HIGH);
} else{
digitalWrite(ledPin, LOW);
}
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
Serial.print("Distance in CM: ");
Serial.println(duration / 58);
float h = dht.readHumidity();
float t = dht.readTemperature();
if(t > 40) {
digitalWrite(myRelay1, HIGH);
digitalWrite(myRelay2, LOW);
} else if(t < 10) {
digitalWrite(myRelay2, HIGH);
digitalWrite(myRelay1, LOW);
} else {
digitalWrite(myRelay1, LOW);
digitalWrite(myRelay2, LOW);
}
int pot1Value = analogRead(POT1_PIN);
servoAngle = map(pot1Value, 0, 1023, 0, 180);
myservo.write(servoAngle);
Serial.print("Освітленість: ");
Serial.print(lux);
Serial.println(" lux ");
Serial.print("Вологість: ");
Serial.print(h);
Serial.print(" % Температура: ");
Serial.print(t);
Serial.println(" °C ");
lcd.setCursor(0, 0);
lcd.print("T: ");
lcd.print(t);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(h);
lcd.print(" % ");
lcd.setCursor(0, 2);
lcd.print("P: ");
lcd.print(lux);
lcd.print(" lux");
delay(2000);
}