#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Διαμόρφωση ακροδεκτών
const int DHT_PIN = 7;
const int HEATER_PIN = 4;
const int FAN_PIN = 8;
const int BUTTON_TEMP_UP_PIN = 2;
const int BUTTON_TEMP_DOWN_PIN = 3;
const int BUTTON_HUMIDITY_UP_PIN = 5;
const int BUTTON_HUMIDITY_DOWN_PIN = 6;
// Σταθερές τιμές
const float TEMP_MARGIN = 0.5;
float targetTemp = 37.5;
float targetHumidity = 50;
// Παράδειγμα DHT22
DHT dht(DHT_PIN, DHT22);
// Παράδειγμα I2C LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
//μοτερ αυγων
const int EGG_MOTOR_PIN = 13;
const unsigned long EGG_TURN_INTERVAL = 100000; // 2 ώρες σε χιλιοστά του δευτερολέπτου
const unsigned long EGG_TURN_DURATION = 6000; // 1 λεπτό σε χιλιοστά του δευτερολέπτου
int eggMotor=EGG_MOTOR_PIN;
unsigned long previousEggTurnTime = 0;
unsigned long eggTurnStartTime = 0;
bool eggTurning = false;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(HEATER_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
pinMode(BUTTON_TEMP_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_TEMP_DOWN_PIN, INPUT_PULLUP);
pinMode(BUTTON_HUMIDITY_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_HUMIDITY_DOWN_PIN, INPUT_PULLUP);
// Αρχικοποίηση LCD
lcd.init();
lcd.backlight();
pinMode(eggMotor,OUTPUT);
digitalWrite(eggMotor, LOW); // Αρχική θέση
}
void loop() {
// Διαβάστε τη θερμοκρασία και την υγρασία
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
// Έλεγχος θερμάστρας και ανεμιστήρα
if (temp < targetTemp - TEMP_MARGIN) {
digitalWrite(HEATER_PIN, HIGH);
} else {
digitalWrite(HEATER_PIN, LOW);
}
if (humidity < targetHumidity) {
digitalWrite(FAN_PIN, HIGH);
} else {
digitalWrite(FAN_PIN, LOW);
}
// Ελέγξτε τα κουμπιά και προσαρμόστε τη θερμοκρασία και την υγρασία
if (digitalRead(BUTTON_TEMP_UP_PIN) == LOW) {
targetTemp += 0.1;
delay(200);
}
if (digitalRead(BUTTON_TEMP_DOWN_PIN) == LOW) {
targetTemp -= 0.1;
delay(200);
}
if (digitalRead(BUTTON_HUMIDITY_UP_PIN) == LOW) {
targetHumidity += 1;
delay(200);
}
if (digitalRead(BUTTON_HUMIDITY_DOWN_PIN) == LOW) {
targetHumidity -= 1;
delay(200);
}
unsigned long currentTime = millis();
if (!eggTurning && currentTime - previousEggTurnTime >= EGG_TURN_INTERVAL) {
eggTurning = true;
eggTurnStartTime = currentTime;
digitalWrite(eggMotor, HIGH); // Ενεργοποίηση κινητήρα για να γυρίσει τα αυγά
}
if (eggTurning && currentTime - eggTurnStartTime >= EGG_TURN_DURATION) {
eggTurning = false;
previousEggTurnTime = currentTime;
digitalWrite(eggMotor, LOW); // Απενεργοποίηση κινητήρα και επιστροφή στην αρχική θέση
}
// Εμφάνιση θερμοκρασίας, υγρασίας και στόχων στην οθόνη LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T: ");
lcd.print(temp);
lcd.print(" C S:");
lcd.print(targetTemp);
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(humidity);
lcd.print(" % S:");
lcd.print(targetHumidity);
// Περιμένετε προτού διαβάσετε ξανά
delay(2000);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd:GND
lcd:VCC
lcd:SDA
lcd:SCL
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
led1:A
led1:C
r1:1
r1:2
led2:A
led2:C
r2:1
r2:2
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
led3:A
led3:C
r3:1
r3:2