PulseQrpArge

arduino ve türevleri uygulamalar => c yazılım uygulamaları => Konuyu başlatan: Yörük - Ağu 08, 2026, 07:50 ÖS

Başlık: ARDUINO KULUÇKA MAKİNESİ YAPIMI
Gönderen: Yörük - Ağu 08, 2026, 07:50 ÖS
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);
}
}