Merhaba
Arduino nano ve shield 2x16 kart ile
Kuluçka makinesinim yazılımını olyşturduk.
include <LiquidCrystal.h>
#include <DHT.h>
#include <Servo.h>
#define DHTPIN A0 // DHT sensör veri pini
#define DHTTYPE DHT22 // DHT11 kullanıyorsanız DHT11 yapın
#define RELAY_PIN 13 // Isıtıcı röle pini
#define SERVO1_PIN 9 // Birinci servo motor pini
#define SERVO2_PIN 10 // İkinci servo motor pini
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
DHT dht(DHTPIN, DHTTYPE);
Servo servo1;
Servo servo2;
const float TARGET_TEMP = 39.0;
const float HYSTERESIS = 0.2;
unsigned long previousRotateTime = 0;
const unsigned long ROTATE_INTERVAL = 14400000UL;
const int ANGLE_LEFT = 45;
const int ANGLE_CENTER = 90;
const int ANGLE_RIGHT = 135;
bool currentPositionLeft = true;
unsigned long previousSensRead = 0;
const unsigned long SENS_INTERVAL = 2000;
float currentTemp = 0.0;
float currentHum = 0.0;
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
lcd.begin(16, 2);
lcd.print("PULSE QRP ARGE");
lcd.setCursor(0, 1);
lcd.print("Baslatiliyor...");
dht.begin();
servo1.attach(SERVO1_PIN);
servo2.attach(SERVO2_PIN);
servo1.write(ANGLE_CENTER);
servo2.write(ANGLE_CENTER);
delay(2000);
lcd.clear();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousSensRead >= SENS_INTERVAL) {
previousSensRead = currentMillis;
float t = dht.readTemperature();
float h = dht.readHumidity();
if (!isnan(t) && !isnan(h)) {
currentTemp = t;
currentHum = h;
lcd.setCursor(0, 0);
lcd.print("Sicaklik: ");
lcd.print(currentTemp, 1);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Nem: %");
lcd.print(currentHum, 1);
lcd.print(" ");
if (digitalRead(RELAY_PIN) == HIGH) {
lcd.print("[ON] ");
} else {
lcd.print("[OFF]");
}
}
}
if (currentTemp < (TARGET_TEMP - HYSTERESIS)) {
digitalWrite(RELAY_PIN, HIGH);
} else if (currentTemp >= TARGET_TEMP) {
digitalWrite(RELAY_PIN, LOW);
}
if (currentMillis - previousRotateTime >= ROTATE_INTERVAL) {
previousRotateTime = currentMillis;
if (currentPositionLeft) {
rotateServos(ANGLE_RIGHT);
currentPositionLeft = false;
} else {
rotateServos(ANGLE_LEFT);
currentPositionLeft = true;
}
}
}
void rotateServos(int targetAngle) {
int currentAngle = servo1.read();
int step = (targetAngle > currentAngle) ? 1 : -1;
for (int pos = currentAngle; pos != targetAngle; pos += step) {
servo1.write(pos);
servo2.write(pos);
delay(20);
}
}