Ağu 08, 2026, 10:35 ÖS

Haberler:

Dear site friends, our aim is to inform and develop the field of electronics. All messages containing links and advertisements, and members who share them, will be banned. With respect and love, PulseQRP R&D management.


ARDUINO KULUÇKA MAKİNESİ YAPIMI

Başlatan Yörük, Bugün, 07:50 ÖS

« önceki - sonraki »

0 Üye ve 5 Ziyaretçi konuyu incelemekte.

Yörük

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);
}
}