Merhaba arkadaşlar! Yoğun istek üzerine Arduino kuluçka makinesi V2 kodlarını ve şemasını paylaşıyoruz. Bu projede kuluçka makinesi kodları basit kodlama ile sizlerin anlaması için güncellenmiştir. If-else mantığı ile yapılan bu sistem, isterseniz for döngüsü ya da farklı metotlarla geliştirebilirsiniz.
| Sıra | Malzeme | Adet | Fonksiyon |
|---|---|---|---|
| 1 | Arduino Uno R3 | 1 | Ana kontrolcü |
| 2 | DHT11 (DHT22 isteğe bağlı) | 1 | Sıcaklık ve nem ölçümü |
| 3 | Yumurta Viyolü | 1 | Otomatik çevirme sistemi |
| 4 | Bozuk İçi Temiz Buzdolabı/Dondurucu | 1 | Ana kabin |
| 5 | Halı Isıtıcısı veya Yüksek Watlı Ampül | 1 | Isı kaynağı |
| 6 | 220V Solid State Röle (SSR) | 1 | Güvenli 220V kontrol |
| 7 | Fan (Bilgisayar Fanı) | 1 | Hava sirkülasyonu |
| Özellik | DHT11 | DHT22 |
|---|---|---|
| Sıcaklık Aralığı | 0-50°C | -40°C to 80°C |
| Sıcaklık Hassasiyeti | ±2°C | ±0.5°C |
| Nem Aralığı | 20-90% RH | 0-100% RH |
| Nem Hassasiyeti | ±5% RH | ±2-5% RH |
| Fiyat | Ekonomik | Pahalı |
DHT11 Sensörü --> Arduino Uno
VCC --> 5V
GND --> GND
DATA --> Digital Pin 2
Önemli Not: VCC ile veri pimi arasına 10K ohm’luk bir pull-up direnci yerleştirmeniz gerekmektedir.
100W gücündeki bir ampul yaklaşık olarak 0,45A akım çekecektir. Mekanik rölelere göre SSR’nin avantajları:
SSR Avantajları:
SSR Modülü --> Arduino + 220V
DC+ (3-32V) --> Arduino Digital Pin 3
DC- --> Arduino GND
AC Load 1 --> 220V Fazı
AC Load 2 --> Isıtıcı/Ampül
Kuluçka makinesi kullanımında ısı ve nem değerlerinden sonra en önemli faktör yumurtaların çevirme hızıdır.
Çevirme Hızı Tablosu:
| Yumurta Türü | Çevirme Periyodu | Sebep |
|---|---|---|
| Bıldırcın | 1 saatte bir | Küçük boyut, sarı kabuk zarına yakın |
| Tavuk | 2 saatte bir | Standart boyut |
| Ördek | 3 saatte bir | Tavuktan büyük |
| Kaz/Hindi | 4 saatte bir | Büyük boyut, zarın bozulmasını önler |
// Gerekli kütüphaneler
#include "DHT.h"
#include <LiquidCrystal.h>
DHT Kütüphanesi Kurulumu: Arduino IDE’de Taslak → library ekle → Kitaplıkları Yönet… → “dht” arayın ve “Adafruit’ten DHT sensör kitaplığı”nı yükleyin.
#include "DHT.h"
#include <LiquidCrystal.h>
// Pin tanımlamaları
#define DHT_PIN 2 // DHT11 veri pini
#define DHT_TYPE DHT11 // Sensör tipi (DHT11 veya DHT22)
#define HEATER_PIN 3 // Isıtıcı SSR pini
#define FAN_PIN 4 // Fan kontrol pini
#define TURN_PIN 5 // Viyol çevirme motoru pini
#define HUMIDIFIER_PIN 6 // Nemlendirici pini
// LCD bağlantıları (RS, Enable, D4, D5, D6, D7)
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// DHT sensör objesi
DHT dht(DHT_PIN, DHT_TYPE);
// Hedef değerler
float TARGET_TEMP = 37.5; // Hedef sıcaklık (°C)
float TARGET_HUMIDITY = 60.0; // Hedef nem (%)
// Tolerans değerleri
float TEMP_TOLERANCE = 0.5; // Sıcaklık toleransı
float HUM_TOLERANCE = 5.0; // Nem toleransı
// Zaman değişkenleri
unsigned long lastTurnTime = 0;
unsigned long lastReadTime = 0;
unsigned long TURN_INTERVAL = 7200000; // 2 saat (milisaniye)
unsigned long READ_INTERVAL = 2000; // 2 saniye
// Durum değişkenleri
bool heaterState = false;
bool fanState = false;
bool humidifierState = false;
bool turnDirection = true; // true: sağa, false: sola
void setup() {
Serial.begin(9600);
// Pin modları
pinMode(HEATER_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
pinMode(TURN_PIN, OUTPUT);
pinMode(HUMIDIFIER_PIN, OUTPUT);
// Başlangıçta tüm çıkışlar kapalı
digitalWrite(HEATER_PIN, LOW);
digitalWrite(FAN_PIN, LOW);
digitalWrite(TURN_PIN, LOW);
digitalWrite(HUMIDIFIER_PIN, LOW);
// LCD başlatma
lcd.begin(16, 2);
lcd.print("Arduino Kulucka");
lcd.setCursor(0, 1);
lcd.print("Makinesi V2.0");
delay(2000);
lcd.clear();
// DHT sensör başlatma
dht.begin();
Serial.println("Arduino Kuluçka Makinesi V2 Başlatıldı");
Serial.println("Hedef Sıcaklık: " + String(TARGET_TEMP) + "°C");
Serial.println("Hedef Nem: " + String(TARGET_HUMIDITY) + "%");
}
void loop() {
// Sensör okuma kontrolü
if (millis() - lastReadTime >= READ_INTERVAL) {
readSensorsAndControl();
lastReadTime = millis();
}
// Yumurta çevirme kontrolü
if (millis() - lastTurnTime >= TURN_INTERVAL) {
turnEggs();
lastTurnTime = millis();
}
delay(100);
}
void readSensorsAndControl() {
// DHT11 sensöründen veri oku
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Veri geçerliliği kontrolü
if (isnan(humidity) || isnan(temperature)) {
Serial.println("DHT sensör okuma hatası!");
lcd.setCursor(0, 0);
lcd.print("Sensor Hatasi! ");
return;
}
// LCD ekranda göster
lcd.setCursor(0, 0);
lcd.print("T:" + String(temperature, 1) + "C H:" + String(humidity, 1) + "%");
// Kontrol durumlarını göster
lcd.setCursor(0, 1);
String status = "";
if (heaterState) status += "H";
if (fanState) status += "F";
if (humidifierState) status += "N";
lcd.print(status + " ");
// Sıcaklık kontrolü
temperatureControl(temperature);
// Nem kontrolü
humidityControl(humidity);
// Fan kontrolü (sıcaklık farkı varsa)
fanControl(temperature);
// Serial monitör çıktısı
Serial.println("Sıcaklık: " + String(temperature, 2) + "°C, Nem: " + String(humidity, 2) + "%");
Serial.println("Isıtıcı: " + String(heaterState) + ", Fan: " + String(fanState) + ", Nemlendirici: " + String(humidifierState));
}
void temperatureControl(float currentTemp) {
// Basit if-else kontrolü (istediğiniz gibi PID ile değiştirebilirsiniz)
if (currentTemp < (TARGET_TEMP - TEMP_TOLERANCE)) {
// Sıcaklık düşük - ısıtıcıyı aç
if (!heaterState) {
digitalWrite(HEATER_PIN, HIGH);
heaterState = true;
Serial.println("Isıtıcı AÇILDI");
}
}
else if (currentTemp > (TARGET_TEMP + TEMP_TOLERANCE)) {
// Sıcaklık yüksek - ısıtıcıyı kapat
if (heaterState) {
digitalWrite(HEATER_PIN, LOW);
heaterState = false;
Serial.println("Isıtıcı KAPANDI");
}
}
// Tolerans aralığında ise durumu değiştirme
}
void humidityControl(float currentHum) {
if (currentHum < (TARGET_HUMIDITY - HUM_TOLERANCE)) {
// Nem düşük - nemlendiriciyi aç
if (!humidifierState) {
digitalWrite(HUMIDIFIER_PIN, HIGH);
humidifierState = true;
Serial.println("Nemlendirici AÇILDI");
}
}
else if (currentHum > (TARGET_HUMIDITY + HUM_TOLERANCE)) {
// Nem yüksek - nemlendiriciyi kapat
if (humidifierState) {
digitalWrite(HUMIDIFIER_PIN, LOW);
humidifierState = false;
Serial.println("Nemlendirici KAPANDI");
}
}
}
void fanControl(float currentTemp) {
// Fan sürekli açık (hava sirkülasyonu için)
// İsteğe bağlı: sadece ısıtıcı çalışırken fan çalışsın
if (heaterState) {
if (!fanState) {
digitalWrite(FAN_PIN, HIGH);
fanState = true;
Serial.println("Fan AÇILDI");
}
} else {
if (fanState) {
digitalWrite(FAN_PIN, LOW);
fanState = false;
Serial.println("Fan KAPANDI");
}
}
}
void turnEggs() {
Serial.println("Yumurta çevirme başlıyor...");
// LCD'de göster
lcd.setCursor(0, 1);
lcd.print("Cevirme... ");
if (turnDirection) {
// Sağa çevir
digitalWrite(TURN_PIN, HIGH);
delay(3000); // 3 saniye çevir
digitalWrite(TURN_PIN, LOW);
Serial.println("Yumurtalar SAĞA çevrildi");
} else {
// Sola çevir (reverse için farklı pin kullanabilirsiniz)
// Burada basit olarak aynı pini kullanıyoruz
digitalWrite(TURN_PIN, HIGH);
delay(3000);
digitalWrite(TURN_PIN, LOW);
Serial.println("Yumurtalar SOLA çevrildi");
}
// Yön değiştir
turnDirection = !turnDirection;
delay(1000);
}
// Manuel ayar fonksiyonları (Serial komutlarıyla)
void checkSerialCommands() {
if (Serial.available() > 0) {
String command = Serial.readString();
command.trim();
if (command.startsWith("TEMP:")) {
TARGET_TEMP = command.substring(5).toFloat();
Serial.println("Yeni hedef sıcaklık: " + String(TARGET_TEMP) + "°C");
}
else if (command.startsWith("HUM:")) {
TARGET_HUMIDITY = command.substring(4).toFloat();
Serial.println("Yeni hedef nem: " + String(TARGET_HUMIDITY) + "%");
}
else if (command == "TURN") {
turnEggs();
}
else if (command == "STATUS") {
printStatus();
}
}
}
void printStatus() {
Serial.println("=== KULUÇKA MAKİNESİ DURUMU ===");
Serial.println("Hedef Sıcaklık: " + String(TARGET_TEMP) + "°C");
Serial.println("Hedef Nem: " + String(TARGET_HUMIDITY) + "%");
Serial.println("Isıtıcı: " + String(heaterState ? "AÇIK" : "KAPALI"));
Serial.println("Fan: " + String(fanState ? "AÇIK" : "KAPALI"));
Serial.println("Nemlendirici: " + String(humidifierState ? "AÇIK" : "KAPALI"));
Serial.println("Son çevirme: " + String((millis() - lastTurnTime) / 1000) + " saniye önce");
Serial.println("================================");
}
Halı Isıtıcısı Kurulumu:
Ampül Alternativi:
Fan Yerleşimi:
├── Üst Fan: Sıcak havanın dağıtımı
├── Alt Fan: Soğuk hava girişi
└── Yan Fan: Yatay sirkülasyon
| Parametre | Değer | Tolerans |
|---|---|---|
| Sıcaklık | 37.5°C | ±0.5°C |
| Nem (1-18. gün) | 55-60% | ±5% |
| Nem (19-21. gün) | 65-70% | ±5% |
| Çevirme | 2 saatte bir | 45° açı |
| Hava Değişimi | Saatte 4-6 kez | Sürekli |
Bıldırcın Yumurtası:
Ördek Yumurtası:
// 16x2 LCD ekran bağlantısı
// VSS -> GND, VDD -> 5V, V0 -> 10K pot orta bacak
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Özel karakterler (yumurta, termometre vb.)
byte thermometer[8] = {
0b00100, 0b01010, 0b01010, 0b01110,
0b11111, 0b11111, 0b01110, 0b00000
};
#include <WiFi.h>
#include <WebServer.h>
// ESP32 için WiFi kuluçka kontrolü
WebServer server(80);
void handleRoot() {
String html = "<html><body>";
html += "<h1>Kuluçka Makinesi Durumu</h1>";
html += "<p>Sıcaklık: " + String(temperature) + "°C</p>";
html += "<p>Nem: " + String(humidity) + "%</p>";
html += "</body></html>";
server.send(200, "text/html", html);
}
#include <SD.h>
void logData(float temp, float hum) {
File dataFile = SD.open("kulucka_log.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(millis() / 1000);
dataFile.print(",");
dataFile.print(temp);
dataFile.print(",");
dataFile.println(hum);
dataFile.close();
}
}
Bu Arduino kuluçka makinesi projesi şu popüler aramalara yanıt veriyor:
🚨 ÖNEMLİ UYARILAR:
Arduino ile Kuluçka Makinesi V2 projesi, yoğun istek üzerine hazırlanmış ve basit kodlama ile anlaşılır hale getirilmiştir. If-else mantığı ile çalışan bu sistem, for döngüsü veya PID kontrolcü ile geliştirilebilir.
✅ Düşük Maliyet: Bozuk buzdolabı dönüştürme ✅ Kolay Anlama: Basit if-else kodlaması ✅ Güvenli Kontrol: Solid State Röle kullanımı ✅ Hassas Ölçüm: DHT11/DHT22 sensör desteği ✅ Otomatik Çevirme: Viyol sistemi entegrasyonu
Bu Arduino kuluçka makinesi projesi ile tavuk, bıldırcın, ördek ve diğer kanatlı hayvan yumurtalarını başarıyla döllendirme şansınız artacaktır.
Şimdiden iyi çalışmalar dileriz! 🐣
🔖 Etiketler: Arduino Uno, Kuluçka Makinesi, DHT11, DHT22, Solid State Röle, Yumurta Viyolü, Sıcaklık Kontrolü, Nem Kontrolü, İnkübatör, Otomatik Çevirme, 220V Arduino Kontrol
