#include <LiquidCrystal_I2C.h>
#include <math.h>
#include <DHT.h>
#include "RTClib.h"
RTC_DS1307 rtc;
const int dhtPin = 2;
DHT dht(2, DHT22);
const int ldrPin = A1; // Пин фоторезистора
const int ledPin2 = 12; // Пин второго светодиода
int ldrValue = 0; // Переменная для хранения значения освещенности
const float GAMMA = 0.7;
const float RL10 = 50;
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
dht.begin();
pinMode(ledPin2, OUTPUT); // Настройка пина второго светодиода как выхода
Serial.begin(9600); // Инициализация серийного порта
// Init
lcd.init();
lcd.backlight();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
DateTime now = rtc.now();
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(h);
Serial.println(" %");
Serial.print("Date: ");
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.println(now.year(), DEC);
Serial.print("Time: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
ldrValue = analogRead(ldrPin); // Чтение значения с фоторезистора
float voltage = ldrValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("LDR Value: ");
Serial.print(lux);
if (lux < 500) { // Если освещенность ниже порогового значения
digitalWrite(ledPin2, HIGH); // Включаем второй светодиод
Serial.println(" [NIGHT]");
} else {
digitalWrite(ledPin2, LOW); // Выключаем второй светодиод
Serial.println(" [DAY]");
}
delay(1000); // Задержка 1 секунда
lcd.setCursor(0, 0);
lcd.print("LDR: ");
lcd.setCursor(5, 0);
lcd.print(lux);
lcd.println(" lux");
lcd.setCursor(0, 1);
lcd.print("Tem: ");
lcd.setCursor(5, 1);
lcd.print(t);
lcd.println(" C");
lcd.setCursor(0, 2);
lcd.print("Hum: ");
lcd.setCursor(5, 2);
lcd.print(h);
lcd.println(" %");
lcd.setCursor(0, 3);
lcd.print("Date: ");
lcd.setCursor(6, 3);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
}