[VID]https://www.youtube.com/watch?v=krP0sNrzs8A[/VID]
Betta İmbellis
Canlı Türleri: Betta imbellis, kiraz karides
Bitki Türleri: Nymphaea lotus, Hydrocotyle, Bucephalandra, Bolbitis, Mostera adansonii
Tankın Yaşı: 1 ay (Aquasoil için 2 yıl)
Filtrasyon ve Işıklandırma: Sobo kafa motoru, Sera siporax, sünger / Yikeda RGB Led
Tasarım ve Dekorasyon: Aquasoil, silis kum, mangrov kökleri, guava ve meşe yaprakları
[IMG]https://foto.akvaryum.com/fotolar/290996/131020262015381.jpg[/IMG]
[IMG]https://foto.akvaryum.com/fotolar/290996/131020262015231.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/290996/131020262015311.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/290996/131020262015421.jpg[/IMG]
Sizce bu beta kesinlikle dişi mi? Dişi diye tahmin ediyorum (erkek olarak sipariş verdim, üretim amacım yok çünkü). İleride yanına küçük bir sivrisinek rasbora grubu ekleyebilir miyim?
Bu durumda birkaç tavsiye: Ben bu bettayı Hobihanem’den aldım, fiyat olarak oldukça uygun (tek eleştirim erkek istememe rağmen dişi göndermiş olması ama balık genç ve eski siparişlerimde problem yaşamadım) ancak wild olarak sadece imbellis var. Kışın daha çok tür bulabilirsiniz diye düşünüyorum. Ankara’dan antuta ilanı görmüştüm, çok güzel bir tür ama en azından 80 litrelik bir akvaryum gerekiyor. Nerite konusunda emin değilim çünkü su fazla asidik ve yumuşak gelebilir. Karidesleri de bettadan önce ekleyip biraz üremelerine fırsat verirseniz popülasyon sorunu yaşamazsınız.[/QUOTE] Öncelikle çok teşekkür ederim tavsiyeleriniz için. Şimdiye kadar tüm canlılarımı zaten Hobihanemden aldım çok iyi insanlar. Karides işine gelirsek evet bettadan önce bolca bitki alacağım karidesler ile, onun harici Kiraz Karides yada Green jelly alırım gibime geliyor ama tek tür alıcağım yoksa yabani renklere dönüyorlar. Onun harici Filtre olarak elimde olan Sumsun 602 b var onu mu taksam bilemiyorum yoksa Walstad da deneyebilirim ama walstad deneyimim olmadı önceden ondan muhtemelen direk Sumsun 302 byi geçiririm bu tankada çünkü 150 litrelik Malavi tankımda kullanıyorum filtreyi ve yetersiz olduğunu biliyorum ve üstüne üstlük çok fazla balık var bu nedenle SunSun HW-302ye geçeceğim en yakın zamanda.
🧿 En Güzel Fotoğraflarınızı Gösterin
[b]Tam resmi çekerken yumurta çatladı (en üstteki) kuyruğu çıktı [:)][/b]
[b][/b]
[b]
[/b][b][img]http://foto.akvaryum.com/fotolar/24552/Yumurtalar.JPG[/img]
[/b][b]
[/b][b]Sizinde böyle anlık resimleriniz varsa paylaşalım[/b] [b]BALIK-SEVER DOSTLARIM[/b][EDIT]Hoppala,2026-02-09 00:52:55[/EDIT]
[IMG]https://foto.akvaryum.com/fotolar/278143/241020261912081.jpg[/IMG]
Esp Tabanlı Akıllı Işık Ve Sıcaklık Ölçüm Sistemi
Kendi yaptığım sistem, LED'leri zamanı gelince otomatik olarak açıp kapatıyor. Ayrıca istediğim zaman telefondan manuel olarak da kontrol edebiliyorum. Eklediğim dijital sıcaklık sensörü ile telefondan anlık sıcaklık takibi yapabiliyor, istersem telefonuma bildirim bile gönderebiliyorum. Bu özelliklere sahip muadillerinin yarı, hatta çeyrek fiyatına mal ettiğim bu sistem üstelik gelişmeye çok açık. İstediğim zaman bir röle daha ekleyip fanla birlikte bir termostat devresine de dönüştürebilirim.
Büyük hobicilere ve Türk esnafına ricamdır: Bu işler böyle yürümez, yaptığınız kâr marjının haddi hesabı yok. Lütfen biraz daha insaflı olun.
Şimdi ise kurduğum sistemi basitçe anlatayım:
ESP8266 Geliştirme Kartı (Sistemin Kalbi): Bütçeniz varsa büyük abisi olan ESP32'yi de alabilirsiniz, aralarında 100-150 TL gibi bir fark var. Ben aldığım sırada stok yoktu, o yüzden tercih etmedim. Bu kartlar kendi içinde Wi-Fi özelliği bulunduruyor. Bu sayede telefona, bilgisayara, kısacası ekranı ve interneti olan her şeye uzaktan bağlanabiliyor. Tüm kodlamaları bu cihaza yaptım.
5V Low Level Trigger Röle Kartı: Bu parça, aldığı sinyalle kapanıp açılarak LED'lerimizi kontrol etmemizi sağlıyor. Normalde aklımda IRL44N gibi bir MOSFET alıp dimmer ayarı yapmak vardı ama stok bulamadım, olan yerlerde de fiyatlar çok uçuktu. O yüzden röle tercih ettim. Rölenin tek eksisi, her açılıp kapandığında "tık" diye ses çıkarması.
LM2596 Voltaj Regülatörü: Hem ESP8266'ya hem de röle kartına güç vermek için kullandım. Voltajı 12V'tan 5V'a düşürüyor, üzerindeki potansiyometre ile istediğiniz şekilde ayar yapabiliyorsunuz.
12V 2 Amper Adaptör: Elimde 12V 2A sigorta tipi bir adaptör vardı, onu değerlendirdim.
Dijital Sıcaklık Sensörü: Hassas ve sapma olmadan ölçüm yaptığı için anlık sıcaklık takibinde kullanıyorum. Kullanacaksanız; ESP8266'nın 3V pini ile kullandığınız veri pini (ben D2'yi kullandım) arasına 4.7K direnç ile köprü (pull-up) atmanız gerekiyor.
[IMG]https://foto.akvaryum.com/fotolar/240101/100620262244081.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/100620262244091.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/100620262244101.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/100620262244181.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/100620262244251.jpg[/IMG]
Bütün tesisatı elden geçirdim. Jumper kablolar ile modüler şekilde yaptım; bu sayede istediğim zaman değiştirmem çok kolay olacak. ESP'ye OTA (Over-The-Air) eklemesi yaptım, artık her güncelleme yapmak istediğimde plastik kutuyu açıp laptopu oraya taşımak zorunda değilim. İnternetten kodu doğrudan atabiliyorum. Bu sırada arayüzü de tamamen güncelledim.
Kodların bir kısmını kendim, bir kısmını yapay zekadan yardım alarak yazdım. Özellikle HTML ve arayüz kısmındaki animasyonları ona yaptırdım, çok başarılı bir şekilde yaptı. 192.168.1.100 üzerinden statik olarak hem bilgisayardan hem de telefondan erişilebiliyor. Telefon uygulaması da mevcut. APK paylaşmayacağım, kendiniz MIT App Inventor üzerinden yapabilirsiniz. Şart değil zaten; WebView şeklinde çalışıyor, yani web sitesini gösteriyor. Yerel ağdan çalıştırıyorum; böylece hem daha güvenli hem de stabil çalışıyor. Bu sefer kodu da paylaşacağım, kullanmak isteyen olursa kullanabilir.
[IMG]https://foto.akvaryum.com/fotolar/240101/241020261835101.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/241020261835091.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/241020261839551.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/241020261840051.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/240101/241020261840111.jpg[/IMG]
[QUOTE]
/*
Akvaryum Kontrol - ESP8266 (NodeMCU)
- D1 (GPIO5) : Isıtıcı rölesi (low trigger: LOW=çeker)
- D2 (GPIO4) : Işık rölesi (low trigger: LOW=çeker)
- D3 (GPIO0) : DS18B20 data (4.7k pull-up - 3.3V)
Kütüphaneler (Library Manager): OneWire, DallasTemperature
Kart: NodeMCU 1.0 (ESP-12E Module)
*/
#include ESP8266WiFi.h
#include ESP8266WebServer.h
#include OneWire.h
#include DallasTemperature.h
#include EEPROM.h
#include time.h
#include ArduinoOTA.h
// ======================= AĞ AYARLARI =======================
const char* WIFI_SSID=internetisminiz";
const char* WIFI_PASS=sifreniz";
IPAddress ipAddr (192, 168, 1, 100);
IPAddress gwAddr (192, 168, 1, 1); // Modem adresi (farklıysa değiştir)
IPAddress maskAddr(255, 255, 255, 0);
IPAddress dns1Addr(192, 168, 1, 1);
IPAddress dns2Addr(8, 8, 8, 8);
const long GMT_OFFSET_SEC=3 * 3600; // Türkiye UTC+3
// ======================= PİNLER =======================
const uint8_t PIN_HEATER=5; // D1
const uint8_t PIN_LIGHT =4; // D2
const uint8_t PIN_TEMP =0; // D3
#define RELAY_ON LOW
#define RELAY_OFF HIGH
// RÖLE SÜRME YÖNTEMİ
// 0=Klasik: AÇIK - LOW, KAPALI - HIGH (pin hep OUTPUT).
// Bu röle modüllerinde 3.3V HIGH rölenin bırakması için yetmiyor (hep açık kalıyor).
// 1=Açık-uçlu: AÇIK - LOW, KAPALI - pin boşa alınır (INPUT). Röleler bırakır.
// Not: Bu modda röle girişi kapalıyken ~4V'ta kalıp hafif ses çıkarabiliyor.
#define RELAY_OPEN_DRAIN 1
void relayWrite(uint8_t pin, bool on) {
#if RELAY_OPEN_DRAIN
if (on) {
digitalWrite(pin, LOW);
pinMode(pin, OUTPUT);
} else {
pinMode(pin, INPUT);
}
#else
digitalWrite(pin, on ? LOW : HIGH);
pinMode(pin, OUTPUT);
#endif
}
// ======================= ISITICI / GÜVENLİK AYARLARI =======================
const float TARGET_MIN =20.0; // Web'den ayarlanabilecek en düşük hedef
const float TARGET_MAX =32.0; // Web'den ayarlanabilecek en yüksek hedef
const float TARGET_DEFAULT =25.0;
const float HYSTERESIS =0.3; // Aç ile kapat arasındaki fark
const float EARLY_OFF =0.2; // Isıtıcıyı hedefin bu kadar altında kapat (cam ısı vermeye devam eder)
// 100W/15L için 0.2. 25-50W ısıtıcıda 0.0 yapabilirsin.
const float ABS_MAX_C =33.5; // Bunun üstünde ne olursa olsun ısıtıcı kapalı + alarm
const unsigned long MAX_ON_MS =10UL * 60UL * 1000UL; // Tam güç eşdeğeri en fazla 10 dk ısıtma (POWER_PCT düşükse süre orantılı uzar)
const unsigned long COOLDOWN_MS =3UL * 60UL * 1000UL; // Sonra 3 dk zorunlu mola
// GÜÇ SINIRI: Web arayüzünden seçilir (100=tam güç, 50=yarım güç) ve kaydedilir.
// Yarım güçte ısıtıcı, 5 dk'lık dilimlerin yarısı kadar açık kalır (2,5 dk açık, 2,5 dk kapalı).
// Tam güçte röle en az tıklar. Aşağıdaki değer sadece ilk kurulumdaki varsayılandır.
const uint8_t POWER_PCT_DEFAULT=50;
const unsigned long PULSE_PERIOD_MS=300000UL;
const unsigned long SENSOR_TIMEOUT_MS=10000; // 10 sn geçerli okuma yoksa kapat
const unsigned long READ_INTERVAL_MS =3000;
// ======================= KALICI AYARLAR =======================
struct Settings {
uint32_t magic;
float targetC;
uint16_t lightOn; // gece yarısından beri dakika
uint16_t lightOff;
uint8_t powerPct; // 50 veya 100
};
const uint32_t MAGIC=0xA11C0DE1;
Settings cfg;
// ======================= DURUM =======================
ESP8266WebServer server(80);
OneWire oneWire(PIN_TEMP);
DallasTemperature sensors(&oneWire);
float tempC=NAN;
bool haveReading=false;
bool sensorOk=false;
unsigned long lastGoodMs=0, lastRequest=0;
bool converting=false;
uint8_t badCount=0;
bool heaterOn=false;
unsigned long heaterOnSince=0;
bool demand=false; // Termostat "ısıt" diyor mu (röle çıkışından bağımsız)
unsigned long demandSince=0;
bool cooling=false;
unsigned long coolStart=0;
const char* hstate=idle";
// --- Sıcaklık kaydı: 5 dakikada bir ortalama nokta, son 24 saat (RAM'de tutulur) ---
const unsigned long LOG_INTERVAL_MS=5UL * 60UL * 1000UL;
const uint16_t LOG_SIZE=288; // 288 x 5 dk=24 saat
const int16_t LOG_INVALID=-32768;
int16_t logTemp[LOG_SIZE]; // 0.1 °C cinsinden
uint8_t logHeat[LOG_SIZE]; // o aralıkta ısıtıcının açık kaldığı yüzde
uint16_t logHead=0, logCount=0;
float accSum=0;
uint16_t accN=0;
unsigned long accHeatMs=0, lastAccMs=0, logStartMs=0;
int lastLogMin=-1; // son kaydın günün kaçıncı dakikası olduğu (-1: saat yok)
bool lightOn=false; // Işığın mantıksal durumu (arayüzde görünen)
bool lightRelay=false; // Rölenin fiziksel durumu
bool blinkInvert=false; // Alarm yanıp sönmesi sırasında röleyi tersler
// --- Alarm uyarısı: alarm varken ışık 3 kez yanıp söner ---
const unsigned long ALARM_REPEAT_MS=120000UL; // Alarm sürerken uyarıyı tekrar etme aralığı (2 dk)
const unsigned long BLINK_STEP_MS =400UL; // Her yanma/sönme süresi
int8_t blinkStep=-1; // -1: yanıp sönme yok
unsigned long blinkNext=0, lastAlarmBlink=0;
bool prevAlarm=false;
// --- Soğuma izleme: su hedeften soğuk kalıp ısınmıyorsa (ısıtıcı bozuk ya da fişi çıkık) alarm ---
const float COLD_MARGIN =1.0; // Hedefin bu kadar altına inince izlemeye başla
const float COLD_MIN_RISE=0.3; // İzleme süresinde en az bu kadar ısınmalı
const unsigned long COLD_WATCH_MS=60UL * 60UL * 1000UL; // 60 dk
bool coldWatch=false, coldAlarm=false;
unsigned long coldSince=0;
float coldRef=0;
// --- WiFi ile kod yükleme (OTA) ---
const char* OTA_HOSTNAME=akvaryum";
const char* OTA_PASSWORD=akvaryum"; // Arduino IDE yüklerken bu şifreyi sorar
bool otaBusy=false, otaStarted=false;
uint8_t lightMode=0; // 0=otomatik, 1=elle açık, 2=elle kapalı (açılışta otomatiğe döner)
// ======================= WEB ARAYÜZÜ =======================
const char INDEX_HTML[] PROGMEM=R"rawliteral(
!DOCTYPE html
html lang=tr"head
meta charset=utf-8"
meta content=width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"
meta content=#062b3a"
title🐠 Akvaryum Kontrol Merkezi/title
style
:root{--abyss:#062b3a;--tide:#13707f;--foam:#eaf7f5;--mute:#8dbdc3;--lamp:#f2c879;--coral:#ff8a5b;--ok:#7fe0d2;--bad:#ff6b7a}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
body{margin:0;min-height:100vh;min-height:100dvh;background:var(--abyss);color:var(--foam);
font:16px/1.45 ui-rounded,"SF Pro Rounded",Nunito,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
padding:max(12px,env(safe-area-inset-top)) 14px max(28px,env(safe-area-inset-bottom))}
button,input{font-family:inherit}
button:focus-visible,input:focus-visible{outline:2px solid var(--lamp);outline-offset:2px}
main{max-width:460px;margin:0 auto}
h1{font-size:20px;margin:6px 4px 12px;display:flex;align-items:center;gap:8px}
.dot{width:10px;height:10px;border-radius:50%;background:var(--bad);margin-left:auto}
.dot.ok{background:var(--ok)}
.alarm{margin:0 0 12px;padding:12px 14px;border-radius:16px;background:rgba(255,107,122,.18);border:1px solid var(--bad);font-weight:600}
.tank{position:relative;overflow:hidden;isolation:isolate;border-radius:30px;padding:28px 20px 22px;text-align:center;
background:linear-gradient(180deg,#0e6070 0%,#08394a 100%);border:1px solid rgba(255,255,255,.1)}
.tank::before,.tank::after{content:"";position:absolute;left:0;right:0;z-index:-1;opacity:0;transition:opacity .8s;pointer-events:none}
.tank::before{top:0;bottom:0;background:radial-gradient(120% 70% at 50% -10%,rgba(242,200,121,.5),transparent 65%)}
.tank::after{bottom:0;height:50%;background:linear-gradient(0deg,rgba(255,138,91,.5),transparent)}
.tank.lit::before,.tank.heating::after{opacity:1}
.bub{position:absolute;bottom:-20px;width:var(--s);height:var(--s);border-radius:50%;border:1.5px solid rgba(255,255,255,.4);
opacity:0;animation:rise var(--d) linear infinite;animation-delay:var(--w)}
.tank.heating .bub{opacity:1}
@keyframes rise{to{transform:translateY(-320px)}}
@media (prefers-reduced-motion:reduce){.bub{animation:none}}
.temp{font-size:84px;font-weight:800;letter-spacing:-3px;line-height:1;font-variant-numeric:tabular-nums}
.temp small{font-size:28px;font-weight:600;letter-spacing:0;margin-left:4px;opacity:.7}
.sub{margin:8px 0 16px;color:var(--mute);font-size:15px}
.pill{display:inline-block;padding:7px 14px;border-radius:999px;font-weight:600;font-size:15px;background:rgba(255,255,255,.12)}
.pill.hot{background:var(--coral);color:#3a1204}
.pill.ok{background:rgba(127,224,210,.2);color:var(--ok)}
.pill.warn,.pill.on{background:var(--lamp);color:#3a2a05}
.pill.bad{background:var(--bad);color:#3b0710}
.pill.sm{font-size:13px;padding:4px 10px;margin-left:auto}
.panel{margin-top:14px;padding:16px;border-radius:22px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.08)}
h2{font-size:17px;margin:0 0 14px;display:flex;align-items:center;gap:8px}
.step{display:flex;align-items:center;justify-content:space-between;gap:10px}
.rb{width:64px;height:64px;border-radius:20px;border:0;background:rgba(255,255,255,.12);color:var(--foam);font-size:32px;font-weight:600}
.rb:active{background:rgba(255,255,255,.24)}
.tgt{font-size:44px;font-weight:800;font-variant-numeric:tabular-nums}
.tgt small{font-size:20px;font-weight:600;color:var(--mute);margin-left:2px}
.chips{display:flex;gap:8px;margin:14px 0}
.chip{flex:1;min-height:44px;border-radius:14px;border:1px solid rgba(255,255,255,.2);background:transparent;color:var(--foam);font-size:16px;font-weight:600}
.chip.on{background:var(--ok);color:#06302b;border-color:var(--ok)}
.go{width:100%;min-height:52px;border:0;border-radius:16px;font-size:17px;font-weight:700}
.go.mint{background:var(--ok);color:#06302b}
.go.amber{background:var(--lamp);color:#3a2a05}
.go:disabled{opacity:.35}
.seg{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;padding:5px;border-radius:18px;background:rgba(0,0,0,.25)}
.seg button{min-height:46px;border:0;border-radius:13px;background:transparent;color:var(--foam);font-size:14.5px;font-weight:600}
.seg button.on{background:var(--lamp);color:#3a2a05}
.times{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0}
.times label{display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--mute)}
.times input{width:100%;min-height:52px;border-radius:14px;border:1px solid rgba(255,255,255,.2);background:rgba(0,0,0,.25);
color:var(--foam);font-size:20px;font-weight:600;padding:0 12px;color-scheme:dark}
.seg.mint button.on{background:var(--ok);color:#06302b}
.seg.two{grid-template-columns:1fr 1fr}
.seg.hot button.on{background:var(--coral);color:#3a1204}
.chart{margin-top:12px}
.chart svg{width:100%;height:auto;display:block;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.gr{stroke:rgba(255,255,255,.1);stroke-width:1}
.ax{fill:var(--mute);font-size:10px}
.cl{fill:none;stroke:var(--ok);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.tl{stroke:var(--lamp);stroke-width:1.2;stroke-dasharray:4 4;opacity:.85}
.hb{fill:var(--coral);opacity:.55}
.cur{stroke:var(--foam);stroke-width:1;opacity:.6}
.cc{fill:var(--ok);stroke:var(--abyss);stroke-width:2}
.empty{padding:34px 8px;text-align:center;color:var(--mute)}
.info{min-height:22px;margin-top:6px;font-size:14px;text-align:center;font-variant-numeric:tabular-nums}
.legend{display:flex;gap:14px;justify-content:center;margin-top:6px;font-size:12px;color:var(--mute)}
.legend span::before{content:"";display:inline-block;width:12px;height:4px;border-radius:2px;margin-right:5px;vertical-align:middle}
.l1::before{background:var(--ok)}.l2::before{background:var(--lamp)}.l3::before{background:var(--coral)}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.stats div{padding:10px 12px;border-radius:14px;background:rgba(0,0,0,.2);display:flex;flex-direction:column}
.stats small{font-size:12px;color:var(--mute)}
.stats b{font-size:20px;font-variant-numeric:tabular-nums}
.hint{margin:12px 0 0;font-size:12px;color:var(--mute)}
footer{display:flex;justify-content:space-between;margin:18px 6px 0;font-size:13px;color:var(--mute)}
.toast{position:fixed;left:50%;bottom:max(22px,env(safe-area-inset-bottom));transform:translate(-50%,30px);padding:12px 18px;
border-radius:14px;background:var(--foam);color:#06302b;font-weight:600;opacity:0;pointer-events:none;transition:.25s}
.toast.show{opacity:1;transform:translate(-50%,0)}
/style/head
bodymain
h1🐠 Akvaryum Kontrol Merkezi i/i/h1
div hidden/div
section
i/i
i/i
i/i
i/i
i/i
i/i
i/i
divspan--.-/spansmall°C/small/div
divHedef --/div
divBağlanıyor…/div
/section
section
h2📈 Sıcaklık geçmişi/h2
div
button data-n=72"6 saat/button
button data-n=144"12 saat/button
button data-n=288"24 saat/button
/div
divdivYükleniyor…/div/div
div/div
divspanSıcaklık/spanspanHedef/spanspanIsıtıcı açık/span/div
div hidden
divsmallEn düşük/smallb--/b/div
divsmallOrtalama/smallb--/b/div
divsmallEn yüksek/smallb--/b/div
divsmall🔥 Isıtıcı açık/smallb--/b/div
/div
pHer 5 dakikada bir nokta eklenir. Cihaz yeniden başlayınca geçmiş sıfırlanır./p
/section
section
h2🎯 Hedef sıcaklık/h2
div
button aria-label=Azalt"−/button
divspan--.-/spansmall°C/small/div
button aria-label=Artır"+/button
/div
div/div
button disabledHedefi kaydet/button
/section
section
h2⚡ Isıtıcı gücü/h2
div
button🔥 Tam güç/button
button🌿 Yarım güç/button
/div
pYarım güçte ısıtıcı 2,5 dk açık, 2,5 dk kapalı çalışır. Küçük akvaryumda sıcaklık daha dengeli kalır ama ısınma yavaşlar. Tam güçte röle daha az tıklar./p
/section
section
h2💡 Işık span…/span/h2
div
button🤖 Otomatik/button
button☀️ Açık/button
button🌙 Kapalı/button
/div
div
label🌅 Açılışinput type=time" oninput=dl()"/label
label🌇 Kapanışinput type=time" oninput=dl()"/label
/div
button disabledSaatleri kaydet/button
/section
footerspan🕒 --/spanspan📶 --/spanspan⏱ --/span/footer
div/div
/main
script
const $=id=document.getElementById(id);
const clamp=(v,a,b)=Math.min(b,Math.max(a,v));
let S=null,pt=null,dirtyT=false,dirtyL=false;
async function api(p){const r=await fetch(p,{cache:'no-store'});if(!r.ok)throw new Error(await r.text());return r.json()}
function toast(m){const t=$('toast');t.textContent=m;t.classList.add('show');clearTimeout(toast.h);toast.h=setTimeout(()=t.classList.remove('show'),1800)}
function up(x){const d=Math.floor(x/86400),h=Math.floor(x%86400/3600),m=Math.floor(x%3600/60);return d?d+' g '+h+' sa':h?h+' sa '+m+' dk':m+' dk'}
function showTarget(){
$('tgt').textContent=pt.toFixed(1);
$('saveT').disabled=!dirtyT;
document.querySelectorAll('.chip').forEach(b=b.classList.toggle('on',Math.abs(+b.dataset.v-pt)0.05));
}
function adj(d){if(!S)return;pt=clamp(Math.round((pt+d)*10)/10,S.min,S.max);dirtyT=true;showTarget()}
function pick(v){if(!S)return;pt=clamp(v,S.min,S.max);dirtyT=true;showTarget()}
function dl(){dirtyL=true;$('saveL').disabled=false}
async function saveT(){
try{S=await api('/api/temp?t=+pt);dirtyT=false;render();toast('✅ Hedef kaydedildi')}
catch(e){toast('⚠️ Hedef kaydedilemedi')}
}
async function setMode(m){
try{S=await api('/api/light?mode=+m);render()}
catch(e){toast('⚠️ Işık modu değişmedi')}
}
async function setPower(p){
try{S=await api('/api/power?p=+p);render();toast(p===100?'✅ Tam güç seçildi':'✅ Yarım güç seçildi')}
catch(e){toast('⚠️ Güç ayarı değişmedi')}
}
async function saveL(){
try{S=await api('/api/light?on=+encodeURIComponent($('tOn').value)+'&off=+encodeURIComponent($('tOff').value));
dirtyL=false;render();toast('✅ Işık saatleri kaydedildi')}
catch(e){toast('⚠️ Saatler kaydedilemedi, iki saati de seç')}
}
function render(){
const s=S;
$('temp').textContent=s.temp===null?'--.-':s.temp.toFixed(1);
$('sub').textContent=Hedef '+s.target.toFixed(1)+' °C';
const A={sensor:'⚠️ Sıcaklık probu okunamıyor. Güvenlik için ısıtıcı kapalı tutuluyor. Prob kablosunu ve 4.7k direnci kontrol et.',
over:'🚨 Su çok sıcak! Isıtıcıyı fişten çek ve rölenin yapışıp yapışmadığını kontrol et.',
cold:'🥶 Su hedeften soğuk ve uzun süredir ısınmıyor. Isıtıcı çalışmıyor olabilir, fişini ve bağlantıları kontrol et.'};
$('alarm').hidden=!A[s.alarm];$('alarm').textContent=A[s.alarm]||'';
const H={heating:['🔥 Isıtıyor','hot],idle:['😌 Sıcaklık yerinde','ok],sensor:['⛔ Prob yok, ısıtıcı kapalı','bad],
cooldown:['🧊 Güvenlik molası','warn],over:['🚨 Aşırı sıcak, ısıtıcı kapalı','bad]};
const h=H[s.hstate]||H.idle;
$('hpill').textContent=h[0];$('hpill').className=pill '+h[1];
$('tank').classList.toggle('heating',s.heater);
$('tank').classList.toggle('lit',s.light);
if(!dirtyT){pt=s.target}
showTarget();
let lp;
if(s.mode===0&&!s.timeOk)lp=⏳ Saat bekleniyor';
else lp=(s.light?'💡 Açık':'🌙 Kapalı')+(s.mode===0?' (otomatik)':' (elle)');
$('lpill').textContent=lp;$('lpill').className=pill sm'+(s.light?' on':'');
document.querySelectorAll('#seg button').forEach((b,i)=b.classList.toggle('on',i===s.mode));
if(!dirtyL){$('tOn').value=s.on;$('tOff').value=s.off}
$('saveL').disabled=!dirtyL;
$('fTime').textContent=🕒 '+s.now;
$('fWifi').textContent=📶 '+s.rssi+' dBm';
$('fUp').textContent=⏱ '+up(s.up);
document.querySelectorAll('#pw button').forEach((b,i)=b.classList.toggle('on',(i===0?100:50)===s.power));
if(LG&&render.tg!==s.target){render.tg=s.target;drawLog()}
}
async function refresh(){
try{S=await api('/api/status');$('dot').classList.add('ok');render()}
catch(e){$('dot').classList.remove('ok')}
}
let LG=null,rng=288,CH=null;
const f1=v=v.toFixed(1),pad2=n=String(n).padStart(2,'0');
function hm(m){m=((m%1440)+1440)%1440;return pad2(Math.floor(m/60))+':'+pad2(m%60)}
async function loadLog(){try{LG=await api('/api/log');drawLog()}catch(e){}}
function setRng(n){rng=n;document.querySelectorAll('#rng button').forEach(b=b.classList.toggle('on',+b.dataset.n===n));drawLog()}
function drawLog(){
if(!LG)return;
const n=Math.min(LG.t.length,rng),box=$('chart'),st=$('stats');
const T=LG.t.slice(LG.t.length-n),Hh=LG.h.slice(LG.h.length-n);
const vals=T.filter(v=v!==null).map(v=v/10);
if(!vals.length){box.innerHTML=divHenüz kayıt yok. İlk nokta 5 dakika içinde eklenir./div';st.hidden=true;CH=null;$('lgInfo').textContent=';return}
st.hidden=false;
const W=340,HT=180,L=36,R=8,TP=10,B=24,pw=W-L-R,ph=HT-TP-B,tg=S?S.target:null;
let lo=Math.min(...vals,tg===null?99:tg),hi=Math.max(...vals,tg===null?-99:tg);
lo=Math.floor((lo-.3)*2)/2;hi=Math.ceil((hi+.3)*2)/2;
if(hi-lo2){const c=(hi+lo)/2;lo=c-1;hi=c+1}
const X=i=L+(n1?i*pw/(n-1):pw/2),Y=v=TP+ph*(1-(v-lo)/(hi-lo));
let g=';
for(let k=0;k=4;k++){const v=lo+k*(hi-lo)/4,y=Y(v);
g+=`line x1=${L}" x2=${W-R}" y1=${f1(y)}" y2=${f1(y)}"/text x=${L-5}" y=${f1(y+3.5)}" text-anchor=end"${f1(v)}/text`}
const bw=Math.max(1,pw/n*.8);
Hh.forEach((p,i)={if(p0){const h=p/100*24;g+=`rect x=${f1(X(i)-bw/2)}" y=${f1(TP+ph-h)}" width=${f1(bw)}" height=${f1(h)}"/`}});
if(tg!==null)g+=`line x1=${L}" x2=${W-R}" y1=${f1(Y(tg))}" y2=${f1(Y(tg))}"/`;
let d=',pen=false;
T.forEach((v,i)={if(v===null){pen=false;return}d+=(pen?'L':'M')+f1(X(i))+' '+f1(Y(v/10))+(pen?'':' h.01');pen=true});
for(let k=0;k4;k++){
const i=Math.round(k*(n-1)/3),ago=(n-1-i)*LG.step;
const lab=LG.end=0?hm(LG.end-ago):(ago?'-'+Math.round(ago/60)+' sa':'son');
g+=`text x=${f1(X(i))}" y=${HT-6}" text-anchor=${k===0?'start':k===3?'end':'middle'}"${lab}/text`}
box.innerHTML=`svg viewBox=0 0 ${W} ${HT}" role=img" aria-label=Sıcaklık grafiği"${g}path d=${d}"/`+
`line y1=${TP}" y2=${TP+ph}" x1=0" x2=0"/circle r=4"//svg`;
CH={n,T,Hh,X,Y,W,L,pw};
const sv=$('svg');sv.addEventListener('pointerdown',probe);sv.addEventListener('pointermove',probe);
const mn=Math.min(...vals),mx=Math.max(...vals),av=vals.reduce((a,b)=a+b,0)/vals.length;
const mins=Hh.reduce((a,p)=a+p,0)/100*LG.step;
$('sMin').textContent=f1(mn)+'°';$('sAvg').textContent=f1(av)+'°';$('sMax').textContent=f1(mx)+'°';
$('sHeat').textContent=mins=60?Math.floor(mins/60)+' sa '+Math.round(mins%60)+' dk':Math.round(mins)+' dk';
$('lgInfo').textContent=Grafiğe dokun, o andaki değeri gör';
}
function probe(e){
if(!CH)return;
const r=$('svg').getBoundingClientRect(),x=(e.clientX-r.left)/r.width*CH.W;
let i=CH.n1?Math.round((x-CH.L)/CH.pw*(CH.n-1)):0;i=Math.max(0,Math.min(CH.n-1,i));
const v=CH.T[i],cur=$('cur'),cc=$('cc'),px=CH.X(i),ago=(CH.n-1-i)*LG.step;
const when=LG.end=0?hm(LG.end-ago):(ago?(ago=60?Math.round(ago/60)+' sa önce':ago+' dk önce'):'en son');
cur.setAttribute('x1',px);cur.setAttribute('x2',px);cur.style.display=';
if(v===null){cc.style.display=none';$('lgInfo').textContent=🕒 '+when+' veri yok';return}
cc.setAttribute('cx',px);cc.setAttribute('cy',CH.Y(v/10));cc.style.display=';
$('lgInfo').textContent=🕒 '+when+' 🌡️ '+f1(v/10)+' °C 🔥 %'+CH.Hh[i];
}
[24,26,28,30].forEach(v={
const b=document.createElement('button');b.className=chip';b.dataset.v=v;b.textContent=v+'°';
b.onclick=()=pick(v);$('chips').appendChild(b);
});
refresh();loadLog();
setInterval(()={if(!document.hidden)refresh()},3000);
setInterval(()={if(!document.hidden)loadLog()},60000);
document.addEventListener('visibilitychange',()={if(!document.hidden)refresh()});
/script/body/html
)rawliteral";
// ======================= YARDIMCI FONKSİYONLAR =======================
void saveSettings() {
EEPROM.put(0, cfg);
EEPROM.commit();
}
void loadSettings() {
EEPROM.get(0, cfg);
if (cfg.magic != MAGIC || isnan(cfg.targetC) || cfg.targetC TARGET_MIN || cfg.targetC TARGET_MAX ||
cfg.lightOn=1440 || cfg.lightOff=1440) {
cfg.magic =MAGIC;
cfg.targetC =TARGET_DEFAULT;
cfg.lightOn =10 * 60; // 10:00
cfg.lightOff=20 * 60; // 20:00
cfg.powerPct=POWER_PCT_DEFAULT;
saveSettings();
}
// Eski kayıtta güç alanı yoktu: geçersizse varsayılana al (hedef ve ışık saatleri korunur)
if (cfg.powerPct != 50 && cfg.powerPct != 100) {
cfg.powerPct=POWER_PCT_DEFAULT;
saveSettings();
}
}
bool timeOk() { return time(nullptr) 1700000000; }
int nowMinutes() {
time_t t=time(nullptr);
struct tm* lt=localtime(&t);
return lt-tm_hour * 60 + lt-tm_min;
}
String nowString() {
if (!timeOk()) return "--:--:--";
time_t t=time(nullptr);
struct tm* lt=localtime(&t);
char b[9];
snprintf(b, sizeof(b), "%02d:%02d:%02d", lt-tm_hour, lt-tm_min, lt-tm_sec);
return String(b);
}
String fmtHM(int m) {
char b[6];
snprintf(b, sizeof(b), "%02d:%02d", m / 60, m % 60);
return String(b);
}
int parseHM(const String& s) {
int c=s.indexOf(':');
if (c 1) return -1;
int h=s.substring(0, c).toInt();
int m=s.substring(c + 1).toInt();
if (h 0 || h 23 || m 0 || m 59) return -1;
return h * 60 + m;
}
// ======================= SICAKLIK OKUMA (bloklamadan) =======================
void updateTemperature() {
unsigned long now=millis();
if (!converting) {
if (now - lastRequest=READ_INTERVAL_MS) {
sensors.requestTemperatures();
converting=true;
lastRequest=now;
}
} else if (now - lastRequest=800) {
converting=false;
float t=sensors.getTempCByIndex(0);
if (t == DEVICE_DISCONNECTED_C || t == 85.0 || t -20.0 || t 60.0) {
if (++badCount=10) { // ~30 sn hatalı okuma: probu yeniden tara
sensors.begin();
sensors.setWaitForConversion(false);
badCount=0;
}
} else {
tempC=t;
accSum += t;
accN++;
haveReading=true;
lastGoodMs=now;
badCount=0;
}
}
}
// ======================= ISITICI KONTROLÜ =======================
void setHeater(bool on) {
if (on == heaterOn) return;
heaterOn=on;
relayWrite(PIN_HEATER, on);
if (on) heaterOnSince=millis();
Serial.printf("Isitici %s (%.1f C, hedef %.1f)\n", on ? "ACIK" : "KAPALI", tempC, cfg.targetC);
}
void controlHeater() {
unsigned long now=millis();
sensorOk=haveReading && (now - lastGoodMs SENSOR_TIMEOUT_MS);
if (otaBusy) { // Kod yüklenirken ısıtıcı kapalı kalır
setHeater(false);
hstate=idle";
return;
}
if (cooling && now - coolStart=COOLDOWN_MS) {
cooling=false;
demandSince=now; // Mola bitti, süre sayacı baştan başlar
}
hstate=idle";
bool want=false;
if (!sensorOk) {
demand=false; // Prob yoksa ısıtıcı kapalı
hstate=sensor";
} else if (tempC=ABS_MAX_C) {
demand=false; // Mutlak üst sınır
hstate=over";
} else {
// 1) Termostat: ısıtma talebi var mı (histerezisli)
float offAt=cfg.targetC - EARLY_OFF;
bool d=demand;
if (tempC=offAt) d=false;
else if (tempC=offAt - HYSTERESIS) d=true;
if (d && !demand) demandSince=now;
demand=d;
// 2) Süre limiti: talep, tam güç eşdeğeri MAX_ON_MS'yi aşarsa zorunlu mola
unsigned long pct=constrain(cfg.powerPct, 10, 100);
if (demand && !cooling && now - demandSince=MAX_ON_MS * 100UL / pct) {
cooling=true;
coolStart=now;
}
// 3) Çıkış: talep varsa ve mola yoksa, güç sınırına göre darbeli aç
if (demand) {
if (cooling) {
hstate=cooldown";
} else {
hstate=heating";
bool pulseOn=true;
if (pct 100) pulseOn=((now - demandSince) % PULSE_PERIOD_MS) (PULSE_PERIOD_MS * pct / 100);
want=pulseOn;
}
}
}
setHeater(want);
}
// ======================= IŞIK KONTROLÜ =======================
bool scheduleSaysOn() {
if (!timeOk()) return false;
int m=nowMinutes();
int a=cfg.lightOn, b=cfg.lightOff;
if (a == b) return false;
if (a b) return m=a && m b;
return m=a || m b; // Gece yarısını aşan program (örn. 18:00 - 02:00)
}
void controlLight() {
bool want;
if (lightMode == 1) want=true;
else if (lightMode == 2) want=false;
else want=scheduleSaysOn();
if (want != lightOn) {
lightOn=want;
Serial.printf("Isik %s\n", want ? "ACIK" : "KAPALI");
}
bool phys=(want != blinkInvert); // Alarm yanıp sönerken röle tersine çevrilir
if (phys != lightRelay) {
lightRelay=phys;
relayWrite(PIN_LIGHT, phys);
}
}
// ======================= SICAKLIK KAYDI =======================
void logTick() {
unsigned long now=millis();
if (heaterOn) accHeatMs += now - lastAccMs;
lastAccMs=now;
if (now - logStartMs=LOG_INTERVAL_MS) {
logStartMs += LOG_INTERVAL_MS;
int16_t v=accN ? (int16_t)roundf(accSum / accN * 10.0f) : LOG_INVALID;
unsigned long pct=accHeatMs * 100UL / LOG_INTERVAL_MS;
if (pct 100) pct=100;
logTemp[logHead]=v;
logHeat[logHead]=(uint8_t)pct;
logHead=(logHead + 1) % LOG_SIZE;
if (logCount LOG_SIZE) logCount++;
lastLogMin=timeOk() ? nowMinutes() : -1;
accSum=0;
accN=0;
accHeatMs=0;
}
}
void sendLog() {
String j;
j.reserve(3200);
uint16_t start=(logHead + LOG_SIZE - logCount) % LOG_SIZE;
j += F("{\"step\":");
j += (int)(LOG_INTERVAL_MS / 60000UL);
j += F(",\"end\":");
j += lastLogMin;
j += F(",\"t\":[");
for (uint16_t k=0; k logCount; k++) {
int16_t v=logTemp[(start + k) % LOG_SIZE];
if (k) j += ',';
if (v == LOG_INVALID) j += F("null");
else j += (int)v;
}
j += F(],\"h\":[");
for (uint16_t k=0; k logCount; k++) {
if (k) j += ',';
j += (int)logHeat[(start + k) % LOG_SIZE];
}
j += F(]}");
server.sendHeader("Cache-Control", "no-store");
server.send(200, "application/json", j);
}
// ======================= WEB SUNUCU =======================
const char* alarmCode() {
if (sensorOk && tempC=ABS_MAX_C) return "over";
if (!sensorOk && millis() 20000) return "sensor";
if (coldAlarm) return "cold";
return "";
}
// Alarm varken ışığı 3 kez ters çevirip eski haline getirir (bloklamadan).
// Alarm başlar başlamaz hemen bir kez, sonra ALARM_REPEAT_MS aralığıyla tekrar eder.
void alarmBlinkTick() {
unsigned long now=millis();
bool alarm=alarmCode()[0] != '\0';
if (alarm && !prevAlarm) lastAlarmBlink=now - ALARM_REPEAT_MS; // yeni alarm: hemen uyar
prevAlarm=alarm;
if (blinkStep 0) {
if (!alarm || now - lastAlarmBlink ALARM_REPEAT_MS) return;
blinkStep=0;
blinkNext=now;
lastAlarmBlink=now;
}
if ((long)(now - blinkNext) 0) return;
if (blinkStep=6) { // 3 yanıp sönme bitti
blinkInvert=false;
blinkStep=-1;
return;
}
blinkInvert=(blinkStep % 2 == 0); // çift adım: ters çevir, tek adım: eski haline getir
blinkStep++;
blinkNext=now + BLINK_STEP_MS;
}
// Su hedeften soğukta kalıp 60 dk boyunca ısınmıyorsa "cold" alarmı verir.
void coldWatchTick() {
if (!sensorOk) return;
unsigned long now=millis();
if (tempC=cfg.targetC - COLD_MARGIN) {
if (!coldWatch) {
coldWatch=true;
coldSince=now;
coldRef=tempC;
} else if (tempC=coldRef + COLD_MIN_RISE) { // Isınıyor: pencereyi yenile
coldRef=tempC;
coldSince=now;
coldAlarm=false;
} else if (now - coldSince=COLD_WATCH_MS) {
coldAlarm=true;
}
} else {
coldWatch=false;
coldAlarm=false;
}
}
// ======================= WIFI İLE KOD YÜKLEME (OTA) =======================
void startOta() {
ArduinoOTA.setHostname(OTA_HOSTNAME);
ArduinoOTA.setPassword(OTA_PASSWORD);
ArduinoOTA.onStart([]() {
otaBusy=true;
setHeater(false); // Yükleme sırasında ısıtıcı kapalı
Serial.println("OTA basladi: isitici kapatildi");
});
ArduinoOTA.onEnd([]() { Serial.println("OTA bitti"); });
ArduinoOTA.onError([](ota_error_t e) {
otaBusy=false;
Serial.printf("OTA hata: %u\n", (unsigned)e);
});
ArduinoOTA.begin();
otaStarted=true;
Serial.println("OTA hazir");
}
String statusJson() {
String j;
j.reserve(420);
j += F("{\"temp\":"); j += sensorOk ? String(tempC, 1) : String("null");
j += F(",\"target\":"); j += String(cfg.targetC, 1);
j += F(",\"min\":"); j += String(TARGET_MIN, 1);
j += F(",\"max\":"); j += String(TARGET_MAX, 1);
j += F(",\"power\":"); j += (int)cfg.powerPct;
j += F(",\"heater\":"); j += heaterOn ? "true" : "false";
j += F(",\"hstate\":\""); j += hstate; j += '"';
j += F(",\"light\":"); j += lightOn ? "true" : "false";
j += F(",\"mode\":"); j += (int)lightMode;
j += F(",\"on\":\""); j += fmtHM(cfg.lightOn); j += '"';
j += F(",\"off\":\""); j += fmtHM(cfg.lightOff); j += '"';
j += F(",\"timeOk\":"); j += timeOk() ? "true" : "false";
j += F(",\"now\":\""); j += nowString(); j += '"';
j += F(",\"alarm\":\""); j += alarmCode(); j += '"';
j += F(",\"rssi\":"); j += (long)WiFi.RSSI();
j += F(",\"up\":"); j += (unsigned long)(millis() / 1000);
j += '}';
return j;
}
void sendStatus() {
server.sendHeader("Cache-Control", "no-store");
server.send(200, "application/json", statusJson());
}
void handleRoot() {
server.send_P(200, PSTR("text/html; charset=utf-8"), INDEX_HTML);
}
void handleTemp() {
if (!server.hasArg("t")) { server.send(400, "text/plain", "t eksik"); return; }
float t=server.arg("t").toFloat();
if (t TARGET_MIN || t TARGET_MAX) { server.send(400, "text/plain", "aralik disi"); return; }
cfg.targetC=roundf(t * 10.0f) / 10.0f;
saveSettings();
Serial.printf("Yeni hedef: %.1f C\n", cfg.targetC);
sendStatus();
}
void handlePower() {
if (!server.hasArg("p")) { server.send(400, "text/plain", "p eksik"); return; }
int p=server.arg("p").toInt();
if (p != 50 && p != 100) { server.send(400, "text/plain", "50 veya 100"); return; }
cfg.powerPct=p;
saveSettings();
Serial.printf("Isitici gucu: %%%d\n", p);
sendStatus();
}
void handleLight() {
if (server.hasArg("mode")) {
int m=server.arg("mode").toInt();
if (m 0 || m 2) { server.send(400, "text/plain", "mod hatali"); return; }
lightMode=m;
}
if (server.hasArg("on") || server.hasArg("off")) {
int a=parseHM(server.arg("on"));
int b=parseHM(server.arg("off"));
if (a 0 || b 0) { server.send(400, "text/plain", "saat hatali"); return; }
cfg.lightOn=a;
cfg.lightOff=b;
saveSettings();
}
controlLight();
sendStatus();
}
// ======================= WIFI =======================
void connectWifi() {
WiFi.mode(WIFI_STA);
WiFi.config(ipAddr, gwAddr, maskAddr, dns1Addr, dns2Addr);
WiFi.begin(WIFI_SSID, WIFI_PASS);
}
void checkWifi() {
static unsigned long lastTry=0;
if (WiFi.status() == WL_CONNECTED) return;
if (millis() - lastTry 20000) {
lastTry=millis();
WiFi.disconnect();
connectWifi();
}
}
// ======================= SETUP / LOOP =======================
void setup() {
// Röleleri en başta KAPALI yap
relayWrite(PIN_HEATER, false);
relayWrite(PIN_LIGHT, false);
Serial.begin(115200);
Serial.println();
EEPROM.begin(64);
loadSettings();
sensors.begin();
sensors.setWaitForConversion(false);
lastRequest=millis() - READ_INTERVAL_MS;
logStartMs=lastAccMs=millis();
WiFi.persistent(false);
WiFi.setAutoReconnect(true);
WiFi.setSleepMode(WIFI_NONE_SLEEP);
connectWifi();
unsigned long t0=millis();
while (WiFi.status() != WL_CONNECTED && millis() - t0 20000) {
delay(250);
}
if (WiFi.status() == WL_CONNECTED) {
Serial.print("Baglandi: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("WiFi baglanamadi, arka planda denenecek");
}
configTime(GMT_OFFSET_SEC, 0, "pool.ntp.org", "time.google.com", "time.cloudflare.com");
server.on("/", handleRoot);
server.on("/api/status", sendStatus);
server.on("/api/temp", handleTemp);
server.on("/api/light", handleLight);
server.on("/api/power", handlePower);
server.on("/api/log", sendLog);
server.on("/favicon.ico", []() { server.send(204); });
server.onNotFound([]() { server.send(404, "text/plain", "Bulunamadi"); });
server.begin();
}
void loop() {
ArduinoOTA.handle();
if (!otaStarted && WiFi.status() == WL_CONNECTED) startOta();
server.handleClient();
updateTemperature();
controlHeater(); // WiFi olmasa bile çalışır
alarmBlinkTick();
controlLight();
logTick();
coldWatchTick();
checkWifi();
}
[/QUOTE][EDIT]NightWist,2026-10-24 18:40:22[/EDIT]
Beylikdüzü'lü akvaristler kaynaşalım...
Akvaryum hobisine gönül veren arkadaşları çay kahve içmeye sohbete bekleriz.
Emre.
80 30 40h Low Tech Bitki Gübre Ve Işık Önerisi
Elimde 80 30 40h ölçülerinde ön tarafı dışa doğru bombeli bir akvaryumum var.Bu mevcut akvaryumu yeniden dizayn etmek istiyorum.Bu konu için siz değerli üstatlarımın yardımına ve fikirlerine ihtiyacım var.
İlk olarak tabana 2.5 3 cm kalınlığında lav kırığı ve üstüne 3-4 cm siyah bazalt kum koyacağım.Akvaryumun sağ köşesinde sobo sf 550f modeli ve içinde seramik halka+lav kırığı+bio ring mevcut.Armatür olarak 1 wattlık 30 adet(3 royal blue+6 deep red+2 uv+19 6500 beyaz) kendim yapacağım power led armatür kullanacağım ve bu armatür akvaryumun 10 cm üzerinden aydınlatma verecek.bitki olarak akvaryum içinde sesliflora-tütün bitkisi-limon-eledoa-tilki kuyruğu ve rizomları taşa bağlı anubias ve java fern, kökleri akvaryum içinde yaprakları dışarıda kalacak şekilde 4 kök cam güzeli-1 bambu-1 salon sarmaşığı ve 1 kırmızı gövdeli malabar ıspanağı Riparyum saksılarına takılı olacak.Balık olarakda 7 neon tetra+6 transgenetik tetra+ 4 elma salyangozu +4 kuhli olacak.co2 yok tabi ki.Sıvı gübre veya kapsül gübre mi kullanmalıyım, müdahale etmem gereken bir yer var mı acaba?
Şimdiden herkese keyifli forumlar iyi günler dilerim.
Bunlarda su üstü biklilerim
[IMG]https://foto.akvaryum.com/fotolar/292379/241020261727041.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/292379/241020261727091.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/292379/241020261727141.jpg[/IMG]
Parlak Kılıçkuyruk
Cümleten hayırlı akşamlar herkese;
Akvaryumda siyah bir kılıçkuyruk olmamasına rağmen bu şekil bir yavru aldım. İlginç bir şekilde soğuk tonlu, metalik–yeşilimsi bir parlama var, sanki vahşi forma yakın gibi 41 günlük yavru. Acaba genetik mutasyon mu yoksa resesif bir gen aktarımımı emin değilim bilgili arkadaşları yorumlara bekliyorum.
Bu arada eklemek isterim tankta tek dişi var ve dişiden 4 sefer yavru aldım ilk defa böyle bir yavru çıktı. Dişi ve erkekler tamamen turuncu.
Bu Bitkinin Türü Nedir
[IMG]https://foto.akvaryum.com/fotolar/292241/241020261708301.jpg[/IMG]
Discus Çiftim
[K]Hep beraber büyüdükleri zamanlar yıl 2025[/K]
[IMG]https://foto.akvaryum.com/fotolar/203162/241020260929451.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/203162/241020260929481.jpg[/IMG]
[K]Dişimiz ilk Discusumuz.
Kim bilebilirdi ki onun anne olacağını[/K] [:)]
[IMG]https://foto.akvaryum.com/fotolar/203162/241020260929511.jpg[/IMG]
[K]Ve beraber yaşamaya karar verdiler[/K] [3)] [:D]
[IMG]https://foto.akvaryum.com/fotolar/203162/241020260931231.jpg[/IMG]
[K]Aşkın meyveleri[/K][:3]
[IMG]https://foto.akvaryum.com/fotolar/203162/241020260933081.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/203162/241020260933111.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/203162/241020260933141.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/203162/241020260933171.jpg[/IMG]
[VID]https://www.youtube.com/watch?v=VXq0YKiwbwY[/VID][:3][EDIT]ErenBugra,2026-10-24 12:24:25[/EDIT]
Yavrular büyüyünce anne babası gibi olacaklar inanılmaz. Şimdiden şekil almaya başlamışlar. Ayrıca discusu yavrudan büyütmek eminim çok zevkli olacaktır. Herşeyin hayırlısı olsun. Güle güle besleyin.[:nazar:][:nazar:][EDIT]~Emre,2026-10-24 16:52:02[/EDIT]
Japon Balıkları
Merhaba 2 adet teleskop 4 adet normal japon ve 1 adet aslan japon balıgım var ayrıca 2 adet vatozum var toplam 9 balık mevcut biraz yapay zekalardan arastırma yaptım ve 96 litrelik tankım ıcın biyolojik yükün asırı oldugunu soyluyor filitrem sunsun hw503B dıs filitresi en alt katmanı sünger orta katmanda zeoit ve matrix en üstte elyaf var 3 sepetli bir filitre acaba balıklarım bodur kalır mı [:'(]
Size tavsiyem şuan balıklarınız 6-7 cm kuyrukla beraber. Çok büyümeden 10 cm geçmeden teleskopları vatozu çıkarın 3-4 adet kalsın.
SON MESAJLAR
- Betta Akvaryumu Kurulumum lonewisp, 19:57
Akvaryum Tanıtımı - Merhaba Led Önerisi Arıyorum ziyasenkaya, 19:40
Akvaryum ve Tür Tavsiyesi - Betta İmbellis hvostr, 19:21
Akvaryum Tanıtımı - 🧿 En Güzel Fotoğraflarınızı Gösterin BASARSURMEGOZ, 19:12
Akvaryum ve Su Altı Fotoğrafçılığı - Esp Tabanlı Akıllı Işık Ve Sıcaklık Ölçüm Sistemi NightWist, 18:38
Kendin Yap Sistemler (DIY) - Beylikdüzü'lü akvaristler kaynaşalım... alfpetshop, 17:41
İstanbullu Akvaristler - 80 30 40h Low Tech Bitki Gübre Ve Işık Önerisi Shadowzen, 17:21
Yeni Üye Forumu - Parlak Kılıçkuyruk Fatih_hakankaan, 17:15
Cinsiyet ve Tür Belirleme - Bu Bitkinin Türü Nedir Furkanrs, 17:09
Cinsiyet ve Tür Belirleme - Discus Çiftim ~Emre, 16:51
Discus Tanıtımları - Japon Balıkları ~Emre, 16:44
Yeni Üye Forumu - Fiyat/performans Dış Filtre anubiaslover, 15:29
Akvaryum ve Tür Tavsiyesi - Yavru Tank Temizliği barisyilmaz28, 14:45
Yeni Üye Forumu - Lepistes Dipte Yan Yüzüyor 28fatih28, 14:38
Hastalıklar ve İlaçlar - 240 Litre Bitkili Akvaryumum barisyilmaz28, 14:33
Akvaryum Tanıtımı - Betam İyi Değil :( hvostr, 14:12
Yeni Üye Forumu - Maswa (tanıtım) Görüş Ve Öneri 28fatih28, 14:06
Akvaryum Tanıtımı - Bu İki Setten Hangisi? Kullanan Var Mı? syerli, 13:55
Bitki Türleri ve Bakımı - Kocaelide Akvaryum Nereden Bulabilirim syerli, 13:37
Fiyat Forumu - 55 X 35 Akvaryum Sehpası Ve Kurulum Sonrası Kerem_ykr, 12:55
Akvaryum ve Tür Tavsiyesi - Akvaryum Suyu Temizliği ZEKUDA, 12:30
Akvaryum Bilimi - Channa Pulchra - Peacock Snakehead ErenBugra, 12:23
Diğer Tatlı Su Canlıları Tanıtımı - İnatçı Beyaz Benek easyac, 09:36
Hastalıklar ve İlaçlar - Ternapi Küçük Bir Su Birikintisi ternapi, 01:29
Akvaryum Tanıtımı - Bu Yengecin Türü Nedir ? gokhanpasap, 23:38
Yeni Üye Forumu - Bitkili Doğal Akvaryumlarım nurtensultan, 23:13
Akvaryum Tanıtımı - Discus Tür Belirleme AkvaristMehmett, 22:42
Yeni Üye Forumu - Canlı Yem Konusunda Desteğe İhtiyacım Var erkanmazici, 21:38
Omurgasızlar - Su Üstü Bahçesi Erdka, 21:00
Akvaryum Tanıtımı - Güney Amerikan Dünyası Laetacara, 19:34
Güney Amerikan Cichlidleri - Orta Amerika'ya Dönüş Frkn, 18:57
Akvaryum Tanıtımı - Beta Balığım Kuma Saplanmış Gibi Yatıyor Betta_King, 16:48
Akvaryum ve Tür Tavsiyesi - Betam Beyazımsı-sarı Dışkılıyor rakun4, 13:26
Yeni Üye Forumu - Ternapi Medaka Pondları hvostr, 07:47
Akvaryum Tanıtımı - Bu Bitki Nedir hvostr, 17:17
Yeni Üye Forumu - Bitkili Akvaryum Ve Canlı Sağlığı CERKUTAY, 16:02
Akvaryum ve Tür Tavsiyesi - Filtrem Su Yüzeyini Hareketlendirmiyor MasterChiefHakan, 15:49
Bitki Akvaryumları Genel - Eheim Pro4 350 capello, 15:34
Filtreleme Seçenekleri - Msobo Magunga Hakkında . capello, 13:04
Malawi ve Diğer Afrika Cichlidleri - Tetra Akvaryumu İçin Genel Tavsiye ? SaRCoPhiLiuS, 10:39
Yeni Üye Forumu - 👋 Yeni Gelenler Buradan Merhaba Desin albatrospleco, 09:55
Yeni Üye Forumu - Filtre Ve Isıtıcı Olmadan Mümkün Mü? SaRCoPhiLiuS, 09:17
Yeni Üye Forumu - Walstad Metodu (ternapi) ternapi, 01:55
Bitki Akvaryumları Genel - 40*40*40 Walstad - Drystart Erdka, 01:14
Yeni Üye Forumu - 40 Küp Akvaryum İçin Kapaksız, Sessiz, F/p Filtre Samet Alparslan, 00:30
Akvaryum ve Tür Tavsiyesi - 160x60x60 Akvaryumum hvostr, 21:02
Akvaryum Tanıtımı - Balıklarımı Ayırmam Gerek? zeynepttan, 20:53
Yeni Üye Forumu - Betta Balığım Hasta Mı? hvostr, 20:36
Hastalıklar ve İlaçlar - Karides Akvaryumu Filtre Seçimi hvostr, 20:19
Omurgasızlar - Tür Önerisi Betta_King, 17:43
Akvaryum ve Tür Tavsiyesi
GÜNCEL 100 TANITIM
SON İLANLAR
- 4 Lü Akvaryum Seti ( Alüminyum Profil) soliter83 20:31
- Moss Kafesi, Co2 Difizör Ve Kiti, Betta Ayna Ve Ha soliter83 20:31
- Frontoza Burindi Yavru 4.5cm voltran 19:55
- Mini Pellia Moss FurkanYnk 19:34
- Aykılıç, King Ve Düz Kılıç Yavruları A Kalite ali özer 19:21
- Tül Panda Koloni AlisBaba 19:20
- Amerikan Zebra AlisBaba 19:20
- Full Gold Full Red Lepistes Mustafa Uzlu 19:10
- Tiger Ve Yakut Tetrazon HüseyinUysal 17:01
- 4 Akvaryum, Dış Filtre, Filtreler Toplu Satış. pianoƒish 16:56
- Christmass Moss emregungor 16:44
- Karışık Bitkiler emregungor 16:44
- Power Led Bitki Armatürü (70 Cm 24 Watt) emregungor 16:44
- Yıldız Safir..lupingu..star Shaphire Cichlids nyzcandan 16:21
- 🌿 Makro➕️ Mikro➕ Excel🌲 Akvaryum Gübreleri kilic88 16:03
- Subulata Bitkisi kilic88 16:03
- Erkek Ve Dişi Betalar ezzalisi 15:03
- Lepistes,cüce Vatoz, L144, Polar Blue Parrot oguzozt 14:42
- Bolbitis Heudelotii, Trident Fern metsi 14:21
- Akvaryum 30*30 metsi 14:21
- Multifisciatus Yavruları iakyol 14:06
- Saulosi 2-4 Cm Emirk 14:01
- Diy Gübreler Kargo Bedava Bitkiler, Balıklar reano 13:54
- Karides ,vatoz, Bitki Çeşitleri, Gübre reano 13:54
- Eheim Air200 Hava Pompası ÇaĞRı 13:26
- Eheim 100w-50we Isıtıcılar ÇaĞRı 13:26
- Mavi - Beyaz Elma Salyangozları TolgahanA 12:50
- İstanbuliçi Yavru Veren Melek Çifti Arıyorum Mirza Adar 12:49
- Su Piresi 200 - 300 Adet 100 Tl CevdetSERBEST 12:47
- Exel , Ramshorm , Bitki CevdetSERBEST 12:47
- Moss Teli CevdetSERBEST 12:47
- Melek Balığı CevdetSERBEST 12:47
- Wild Type, Quadra Veya Blue Kakadu Arıyorum... Laetacara 12:45
- Hb White Lepistes omererbas 11:54
- Electric Blue Acara (andinoacara Pulcher) omererbas 11:54
- Jack Dempsey Akv Kum Kök AquaMan 11:20
- Malawi Koloniler Sarı İmp & Kırmızı İmp AquaMan 11:20
- Helana Alınacaktır AtlasPoyraz 10:41
- Bimaculata Yavrular AtlasPoyraz 10:41
- Xl Pro 1500 Dış Filtre AtlasPoyraz 10:41
- Akvaryumların İhtiyaçları GETS34 10:15
- Hobiye Son.malzemeleri Satıyorum. Update-09/09/26 osmandbnl 09:52
- Turuncu Parlak Danio Zebra -takas Olur osmandbnl 09:52
- İthal Paludaryum / Teraryum Arıyorum ozan_1903 09:47
- Efsane Mangrow Kökü ozan_1903 09:47
- Xxl Boyda Malawi İmparator Cigledler serdar131977 09:38
- Akvaryum , Su Piresi , Balık Yemi gyunda 09:30
- Flame Moss , Java Moss, Pothos Sarmaşığı gyunda 09:30
- Endler , Karides , Ramshorn Ve Minare Salyangoz gyunda 09:30
- Plati,lepistes, L144 Longfin Vatoz EKAR 08:52
KULLANICILAR
- 97 Online Kullanıcı, 52 Üye
Online Kullanıcılar
FORUM İSTATİSTİKLERİ
- 3,797,668 Mesaj
- 408,613 Konu
- 91 Forum
- 145,128 Forum Üyesi
- 1,466 Özel Forum Üyesi
- 29 Kıdemli Akvarist
- 1,941 Dün Giriş Yapan Üye
Şu ana kadar en fazla 1365 kişi 27.03.2012 23:21 tarih ve saatinde çevrim içi oldu.
Before - After
30x30x30
11/12/23
[IMG]https://foto.akvaryum.com/fotolar/237041/051020262053051.jpg[/IMG]
03/10/26
[IMG]https://foto.akvaryum.com/fotolar/237041/051020262054381.jpg[/IMG]
50x40x35
07/11/22
[IMG]https://foto.akvaryum.com/fotolar/237041/051020262055501.jpg[/IMG]
03/10/26
[IMG]https://foto.akvaryum.com/fotolar/237041/051020262056271.jpg[/IMG]
80x40x40
29/01/24
[IMG]https://foto.akvaryum.com/fotolar/237041/051020262057211.jpg[/IMG]
05/10/26
[IMG]https://foto.akvaryum.com/fotolar/237041/051020262057461.jpg[/IMG]
Aequidens Diadema (kral Acara)
Kral Acara (Aequidens Diadema - Royal Cichlid) 👑 Yeni yuvalarına yavaş yavaş alışmaya çalışan bu Güney Amerika’lı dostlarımıza merhaba deyin 👋
Daha ilk günlerden itibaren beni camın önüne gelerek selamlıyor, meraklı gözlerle akvaryumun dışında neler olup bittiğini keşfetmeye çalışıyorlar. Pek çok kaynakta pek çok farklı yaşama-üretim su değerleri paylaşılmış bu da farklı su değerlerine yeterince toleranslı olduklarını gösteriyor. Bakalım ilerleyen günler ne gösterecek 🧡
https://www.instagram.com/reel/Dctsm2aOenZ/?igsi=bGt5MGxtZjN2eXJ2
[IMG]https://foto.akvaryum.com/fotolar/258303/310820262131261.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262131321.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262131381.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262131431.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262131481.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262131531.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262131571.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/258303/310820262132011.jpg[/IMG]
Forumda Son Konular
SON MESAJLAR
- Betta Akvaryumu Kurulumum lonewisp, 19:57
Akvaryum Tanıtımı - Merhaba Led Önerisi Arıyorum ziyasenkaya, 19:40
Akvaryum ve Tür Tavsiyesi - Betta İmbellis hvostr, 19:21
Akvaryum Tanıtımı - 🧿 En Güzel Fotoğraflarınızı Gösterin BASARSURMEGOZ, 19:12
Akvaryum ve Su Altı Fotoğrafçılığı - Esp Tabanlı Akıllı Işık Ve Sıcaklık Ölçüm Sistemi NightWist, 18:38
Kendin Yap Sistemler (DIY) - Beylikdüzü'lü akvaristler kaynaşalım... alfpetshop, 17:41
İstanbullu Akvaristler - 80 30 40h Low Tech Bitki Gübre Ve Işık Önerisi Shadowzen, 17:21
Yeni Üye Forumu - Parlak Kılıçkuyruk Fatih_hakankaan, 17:15
Cinsiyet ve Tür Belirleme - Bu Bitkinin Türü Nedir Furkanrs, 17:09
Cinsiyet ve Tür Belirleme - Discus Çiftim ~Emre, 16:51
Discus Tanıtımları - Japon Balıkları ~Emre, 16:44
Yeni Üye Forumu - Fiyat/performans Dış Filtre anubiaslover, 15:29
Akvaryum ve Tür Tavsiyesi - Yavru Tank Temizliği barisyilmaz28, 14:45
Yeni Üye Forumu - Lepistes Dipte Yan Yüzüyor 28fatih28, 14:38
Hastalıklar ve İlaçlar - 240 Litre Bitkili Akvaryumum barisyilmaz28, 14:33
Akvaryum Tanıtımı - Betam İyi Değil :( hvostr, 14:12
Yeni Üye Forumu - Maswa (tanıtım) Görüş Ve Öneri 28fatih28, 14:06
Akvaryum Tanıtımı - Bu İki Setten Hangisi? Kullanan Var Mı? syerli, 13:55
Bitki Türleri ve Bakımı - Kocaelide Akvaryum Nereden Bulabilirim syerli, 13:37
Fiyat Forumu - 55 X 35 Akvaryum Sehpası Ve Kurulum Sonrası Kerem_ykr, 12:55
Akvaryum ve Tür Tavsiyesi - Akvaryum Suyu Temizliği ZEKUDA, 12:30
Akvaryum Bilimi - Channa Pulchra - Peacock Snakehead ErenBugra, 12:23
Diğer Tatlı Su Canlıları Tanıtımı - İnatçı Beyaz Benek easyac, 09:36
Hastalıklar ve İlaçlar - Ternapi Küçük Bir Su Birikintisi ternapi, 01:29
Akvaryum Tanıtımı - Bu Yengecin Türü Nedir ? gokhanpasap, 23:38
Yeni Üye Forumu - Bitkili Doğal Akvaryumlarım nurtensultan, 23:13
Akvaryum Tanıtımı - Discus Tür Belirleme AkvaristMehmett, 22:42
Yeni Üye Forumu - Canlı Yem Konusunda Desteğe İhtiyacım Var erkanmazici, 21:38
Omurgasızlar - Su Üstü Bahçesi Erdka, 21:00
Akvaryum Tanıtımı - Güney Amerikan Dünyası Laetacara, 19:34
Güney Amerikan Cichlidleri - Orta Amerika'ya Dönüş Frkn, 18:57
Akvaryum Tanıtımı - Beta Balığım Kuma Saplanmış Gibi Yatıyor Betta_King, 16:48
Akvaryum ve Tür Tavsiyesi - Betam Beyazımsı-sarı Dışkılıyor rakun4, 13:26
Yeni Üye Forumu - Ternapi Medaka Pondları hvostr, 07:47
Akvaryum Tanıtımı - Bu Bitki Nedir hvostr, 17:17
Yeni Üye Forumu - Bitkili Akvaryum Ve Canlı Sağlığı CERKUTAY, 16:02
Akvaryum ve Tür Tavsiyesi - Filtrem Su Yüzeyini Hareketlendirmiyor MasterChiefHakan, 15:49
Bitki Akvaryumları Genel - Eheim Pro4 350 capello, 15:34
Filtreleme Seçenekleri - Msobo Magunga Hakkında . capello, 13:04
Malawi ve Diğer Afrika Cichlidleri - Tetra Akvaryumu İçin Genel Tavsiye ? SaRCoPhiLiuS, 10:39
Yeni Üye Forumu - 👋 Yeni Gelenler Buradan Merhaba Desin albatrospleco, 09:55
Yeni Üye Forumu - Filtre Ve Isıtıcı Olmadan Mümkün Mü? SaRCoPhiLiuS, 09:17
Yeni Üye Forumu - Walstad Metodu (ternapi) ternapi, 01:55
Bitki Akvaryumları Genel - 40*40*40 Walstad - Drystart Erdka, 01:14
Yeni Üye Forumu - 40 Küp Akvaryum İçin Kapaksız, Sessiz, F/p Filtre Samet Alparslan, 00:30
Akvaryum ve Tür Tavsiyesi - 160x60x60 Akvaryumum hvostr, 21:02
Akvaryum Tanıtımı - Balıklarımı Ayırmam Gerek? zeynepttan, 20:53
Yeni Üye Forumu - Betta Balığım Hasta Mı? hvostr, 20:36
Hastalıklar ve İlaçlar - Karides Akvaryumu Filtre Seçimi hvostr, 20:19
Omurgasızlar - Tür Önerisi Betta_King, 17:43
Akvaryum ve Tür Tavsiyesi
Corydoras pygmaeus(Pigme çöpçü)
Yaklaşık 300 üyesi bulunan corydorasların kendi aralarında farklı davranışlar sergilemesi ve farklı özellikleri olması kadar doğal bir şey olamaz sanırım.
Cüce corydoraslardan olan pigme corydoras, corydorasların 2.en küçük üyesidir.Boyu yaklaşık 2.5 cm civarıdır.Ancak tür içi sapmalar gözlenebilir ve 2 cm kaldığı gibi 3 cme de çıkabilir. Dişiler erkeklerden boyut olarak biraz daha büyüktür.
Pigme corydorasların zayıf olduğu nasıl anlaşılır?
Pigme corydoraslar bitkilerin üzerinde sürü halinde gezinmeyi çok seven canlılardır.Günün büyük kısmını bitkiler üzerinde ya yem arayarak ya da dinlenerek geçirir.Seyrek olarak dibe inerler.Eğer bir pigme cory uzun süre zeminde kalıyor ve tüm sürü hareket ederken kendisi çok nadir hareket ediyorsa bu balık zayıftır ve birkaç gün içinde ölebilir.Eğer ki rengi koyulaşmışsa bu durumunun daha da kötü olduğuna işarett,ir.
Akvaryumları nasıl düzenlenmelidir?
Pigme corydoraslar diğer corydoraslardan davranış yönünden oldukça farklıdır.Özelliklerinin çoğu kendisine en yakın tür olan C.hastatusa benzer.Farkları ise C.hastatus daha rahat davranırken ve ortada yüzerken C.pygmaeusların biraz daha utangaç ve yavaş hareket ediyor olmalarıdır.Her iki tür de orta seviye çöpçüsü olarak adlandırılır ve genellikle dibe inmezler.
C.pygmaeus geniş yapraklı bitkilerin üstünde vakit harcar.Bu bitkiler genellikle Echinodorus sp. olur.Bu sebeple akvaryumlarında bitki asla eksik edilmemelidir.Yine yer yer su üstü bitkisi konulmalı ve gölgelik alanlar yaratılmalıdır.Kumun çok ince olması tercih edilir.
Pigme corydoraslar akıntıyı sevmedikleri için debisi yüksek olmayan nispeten sakin filtreler kullanılmalıdır.Pipo filtreler en idealidir.
Akvaryumun boyutu ideal olarak 50x30x25 tir.Sayı çok fazla olursa buna göre akvaryum büyültülebilir.Akvaryumu küçük tutmamızın sebebi türün zamanını bitkilerde geçirmesi ve dibe inmemesinden dolayı dipteki yemlerle ilgilenmemesidir.Eğer akvaryum çok büyük olursa pigme corydoraslar yem bulmada büyük sıkıntı çekecek ve açlıktan ölecektir.Bu nedenle ufak akvaryumarda bakılmalıdır.
Yanına asla ve asla agresif tür konulamaz.Ara ara ortada asılı durarak yüzgeçlerini çırpan bir balığın bu tip balıklara karşı kendini savunması beklenemez.Kaybedilmesi yüksek ihtimaldir.Uygun tank arkadaşları genellikle barışçıl küçük türler olmalıdır.Rasbora,tetralar,karidesler diğer corydoraslar gibi.
Beslenmeleri
Pigme corydoraslar daha önce de bahsettiğimiz gibi orta seviyede yüzen bir çeşit corydoras.Bu sebepten ötürü piyasada satılan klasik dip yemleriyle beslemek dezavantaj oluşturabilir.Toz haline getirilmiş sera microgran verilebilir.Yine JBL novotabsın dondurulmuş yem kısmını içermeyen toz kısmı dövülerek elde edildikten sonra o akvaryuma koyulabilir.
Elbette ki bu pigme çöpçünün hiç yere inmeyeceği anlamını taşımıyor ancak bu biraz da şans meselesi.Bitkileri benimseyen pigme çöpçü nerdeyse hiçbir zaman yere inmeyebiliyor.
Canlı yem olarak ise hem yavrulara hem yetişkinlere en ideal verilecek yem mikrokurttur.Bir Norveçli bilim adamının keşfettiği mikrokurt hobiye de hızla yayılmıştır.Besleyici değeri çok yüksektir.Tabi bu aynı zamanda hangi besi kültüründe bakıldığına göre de değişir.
Su değişimi çok büyük kütlelerde yapılmamalı.Mümkünse 2-3 güne bir az bir miktar değiştirilmelidir.Zaten tankları yoğun bitkili olacağından ve kendileri çok az bir canl yükü teşkil ettiklerinden akvaryumun kirlenmesi çok zor olacaktır.
Farklı su değerlerine iyi tolere edebilen bu tür darbelere ve kirliliğe karşı hassastır.pHı çok yüksek olmamak kaydıyla çok önemsenmeyebilir.
Cinsiyet ayrımı bu türde nispeten daha zordur.Ufak olması ve her iki cinsiyetin de birbirini kovalaması sonucu cinsiyetine karar vermek zorlaşır.Ancak yöntemi diğer corydoraslardaki gibi tepeden bakma suretiyle gerçekleştirilir.Yine de çoğu uzman bile bu türün cinsiyetini tayin etmekte oldukça zorlanıyor.
Davranışı ve üremesi
Pigme corydoraslar zaman zaman birbiri etrafında daire çizerek veya birbirini kovalayarak tabiri caise oyun oynar.Bu sürünün sosyalliğinin bir göstergesidir.Genelde hareketleri yavaş bir türdür ve temkinli hareket eder.
Diğer birçok corydoras türünde yavrular hatta yumurtalar yenirken,pigme corydoras kendi yumurtası ya da yavrusuyla ilgilenmez.Yavrularını yediğine nadiren şahit olunmuştur.İyi bir bitkili tankta yetişkinler bitkilerin üstünde gezinirken yavrular zeminde durmayı tercih eder.Bu da anaçların ve yavruların aynı yerde bakılması gibi mükemmel bir avantaj getirir bize.
Yumurtaları çok ufak olur ve az sayıdadır.Yumurtaların ufak olması yavruların beslenmesini zorlaştıran bir etmendir.Bu sebepten ötürü dipte bir miktar tortunun olması yavruların ilk bir hafta-10 günlük süreyi atlatmalarında yardımcı olur.Daha sonra mikrokurt verilebilir.
Videolar
[VID]http://www.youtube.com/watch?v=t4MKju6Wwik[/VID]
http://www.youtube.com/watch?v=t4MKju6Wwik
[VID]http://www.youtube.com/watch?v=6btN9N5rXII[/VID]
http://www.youtube.com/watch?v=6btN9N5rXII
[VID]http://www.youtube.com/watch?v=YywOkAIvovM[/VID]
http://www.youtube.com/watch?v=YywOkAIvovM
Üreme videosu
[VID]http://www.youtube.com/watch?v=TPrTfrsOZfc[/VID]
http://www.youtube.com/watch?v=TPrTfrsOZfc
Yavru pigme corydoras
[VID]http://www.youtube.com/watch?v=XtlBgJdZNKU[/VID]
http://www.youtube.com/watch?v=XtlBgJdZNKU
Gözlemlerimiz
Corydoras pygmaeus özellikle şu ana kadar beslediğim cory ler içinde yeri apayrı olan bir tür. Akvaryum içinde pek bireysel olarak dolaştıklarını söyleyemem, genellikle sürü olarak gezerler. Senin de bahsettiğin gibi, normalde coryler akvaryumdaki diğer balıklara karşı nötr durumdadırlar, ama pigmelerde bu durum biraz farklıdır. Örnek olarak SAE lerimle ilk akvaryuma geldiklerinde oluşturdukları sürüyü verebilirim. Zaten doğada da but tür davranışlar sergiledikleri raporlanmıştır. Özellikle yapraklar üzerinde sürü olarak yatmayı sevdiklerinden, mutlaka bol bitkili bir akvaryumda beslenmelidir. Özellikle bitkili akvaryumlarda cuba vb gibi kısa bitkileri olanlar için önerilebilecek bir cory türü. Beslerken yem olarak JBL NovoTab ı cama yapıştırarak kullanmıştım. Yem konusunda oldukça çekingen olduklarını rahatlıkla söyleyebilirim. Ayrı tankta beslediğim dönemde, akvaryum içindeki minare salyangozları yeme onlardan daha çabuk saldırıyordu. Su değerlerine ve sıcaklığına da karşı diğer cüce corylerde olduğu gibi oldukça duyarlı olmaları, en çok dikkat edilmesi gereken noktalardan birisidir.Beslediğim dönemde bolivian ram ler ile besledim herhangi bir probleme rastlamadığımıda özellikle belirtmek isterim.(Bolivian lar genellikle kendi türlerine karşı nispeten agresivler, diğer türlere karşı herhangi bir agresifliklerini görmedim) Çok savunmasız olduklarından tank arkadaşlarını seçerken çok dikkatli olmalı ve barışçıl türler seçilmelidir. Tekrar beslemeyi gerçekten çok isterim.
Hayatımda beslediğim en tatlı balık olduğunu söyleyebilirim.Tam anlamıyla beni kendisine aşık bırakan bir türdür.Başka balıklara olan tavrı ve sevimli duruşu onu çok şirin ve güzel kılıyor.Şu an tek kalan pigme çöpçüm arkadaşlarını kaybettiği için siyah neonlara yöneliyor.Ancak onlar yüz vermediği için her seferinde geri dönmek zorunda kalıyor.Böylesine sosyal bir hayvanı tek bırakmaya gönlüm hiç razı olmuyor ancak malesef bu türün Türkiye'de bulunabilirliği çok az.Bu sebeple şimdilik elim kolum bağlı bir şekilde duruyorum.
Yazan: Uzay Cengiz&Onur Şahin.Makro Alg (spagetti)
Satılan Malzeme(ler): spagetti alg deniz akvaryumu nitrat fosfat emici
Adet Fiyatı: 500 ₺
Toplu Alım Fiyatı:
Adedi:
İrtibat Bilgileri:
Nakliye ile İlgili Ek Bilgiler:
Diğer Ek Bilgiler:
Fotoğraf: [IMG]https://foto.akvaryum.com/fotolar/288323/191020262335241.jpg[/IMG]

Su Üstü Bahçesi
Yüzey bitkileri hep ilgimi çekmiştir. Hem tatlı görüntüleri hem de su kimyasına olan faydalarını öğrenince ilgim daha da arttı. Bende denk geldikçe toplamaya çalıştım etraftan. Bakım sırasında tecrübelerimi de eklemeye çalışacağım. Şimdilik 8 adet farklı tür var. Değişik şeyler buldukça eklemeye çalışacağım. Siz değerli yazarların düşünceleri ve tavsiyelerini bekliyorum. [:)]
Akvaryum: 30x30x30h.
Filtrasyon: Eheim Liberty 75 Şelale filtre. (Su üstü bitkileri akıntı sevmiyor. İç filtrede bakmak pek mümkün değil)
Isıtıcı: Tetra Ht 50w (25 derecede sabit. Üründen memnunum.
Işıklandırma: Wolfram Full Spektrum
Co2: Mayalı Neo Co2 Difüzör
Gübreleme: Reeflowers All Inclusive
Şöyle yüzey görüntüsünü bırakayım ilk başta [:)]
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212135321.jpg[/IMG]
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212135171.jpg[/IMG]
[B]1)Salvinia Cucullata:[/B]
Işığı çok seviyor. Işığı yeterli bulursa yaprakları yukarı doğru kıvrılıyor. Hoş bir görüntüsü oluyor. Oldukça arsız bendeki sürekli veriyorum birilerine. Kökleri kısa ve oldukça tüylü. Blackwater akvaryumlarında çok hoş duruyor.
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212137301.jpg[/IMG]
[B]2)Salvinia Natans:[/B]
Yaprakları cucullata gibi tam tüylü değil. Daha yaygın bir yaprağı var. Cucullata gibi toplu durmuyor boşluklu olarak yayılıyor. Işığı çok önemsemiyor.
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212136281.jpg[/IMG]
[B]3)Phyllanthus Fluitans:[/B]
Akvaryumun nano lotus bitkisi [:)] Işığı yeterli alırsa yaprakları kırmızılaşıyor. Çok hızlı artmıyor yaprakları. Belki benim akvaryumda öyle olmuş olabilir. Kökleri kırmızı renkli su altından oldukça güzel bir görüntüsü var.
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212148061.jpg[/IMG]
[B]4)Azolla Filiculoides:[/B]
Sanırım bulmak için en çok uğraştığım bitki [^_^]. Su mercimeğinden daha küçük yaprakları ve oldukça tatlı bir yeşil tonu var. Henüz elime yeni ulaştı bitkiler pek tecrübem yok şimdilik. Fotoğrafın ortasındaki su Mercimeği yaprağıyla karşılaştırmalı boyutunu görebilirsiniz.
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212137481.jpg[/IMG]
[B]5)Limnobium Laevigatum(Amazon Frogbit):[/B]
Akvaryumun tombul yapraklı bitkisi. Kökleri aşağıya doğru uzamaya meyilli. Elma salyangozu köklerini kemiriyor birlikte bakılmasını tavsiye etmem [:)]
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212135591.jpg[/IMG]
[B]6)Dwarf Pistia (Cüce Su Marulu):[/B]
Oldukça güzel bir bitki. Nitrat emici resmen. Işığın altında daha iyi gelişim gösterdiğini farkettim.
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212136131.jpg[/IMG]
[B]7)Lemna Minor ( Su mercimeği):[/B]
Akvaryumun minik belası. [:)] Her fotoğrafta bulunmakta maalesef. Pek umursamıyorum artık. Karidesler çok seviyor.
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212137301.jpg[/IMG]
[B]8)Riccia Fluitans:[/B]
Genelde zemin bitkisi olarak kullanılabiliyor. Ben yüzeyde kullanmayı tercih ediyorum. Değişik bir görüntüsü oluyor. Yüzeyde dal dal görüntüsü değişik bir hava katıyor. Hemen yanındaki azollalarla birlikte pozu
[IMG]https://foto.akvaryum.com/fotolar/225495/020620212136431.jpg[/IMG]
14.06.2021 Güncelleme
[IMG]https://foto.akvaryum.com/fotolar/225495/140620210026241.jpg[/IMG]
[IMG]https://foto.akvaryum.com/fotolar/225495/140620210026491.jpg[/IMG]
30 haziran güncellemesi
Su dışına çıkan Alternanthera Reinecki [:)]
[IMG]https://foto.akvaryum.com/fotolar/225495/300620212339101.jpg[/IMG]
Ve arkada yeni yaprak çıkartan red mangrove [:nazar:]
[IMG]https://foto.akvaryum.com/fotolar/225495/300620212341511.jpg[/IMG][EDIT]Emre0012,2021-07-19 00:50:59[/EDIT]
40*40*40 Walstad - Drystart
Öncelikle Selamlar.. İsmim Erkan 46 Yaşında ve İstanbul Avrupa Yakasındayım :)
Kurduğum Sistemle İlgili Bilgileri Aktarmak İstiyorum..
Akvaryum Boyutları ve Özellikleri : 40*40*40 (Ön Cam Clear, Yan Camlar Normal) Cam Kalınlığı 8mm, Arkaplan Siyah Düz Fon
Aydınlatma : Aqualed 40cm 5 Sıra Smd Samsung Ledli Armatür
Filtre : Sobo wp638h Şelale Filtre
Isıtıcı : Kullanılmıyor
Difüzör : Aquario Neo S Difüzör
Zemin : %100 Organik Bitki Toprağı (8 lt), Bazalt kum 1-1,5 mm
Bitkiler : Eloacharis Parvula Mini In Vitro (2 cup), Micranthemum Micranthemoides In Vitro (1 cup)
İlk defa bitkili akvaryum kurma deneyimim. Daha Önce Malavi ve Tanganyika Akvaryumlarım Olmuştu. Evde yer problemim olduğu için 40-40-40 mobilyali küp bir akvaryum edindim. Bu arada bitkili akvaryumları ve bitkileri oldukça video, görsel ve makalelerle inceledim. Akvaryumu almadan önce karar vermem ve bilgi sahibi olmam gerekiyordu. Bu esnada Walstad Kurulum videolarına denk geldiğim. İlk gördüğüm ve ilham kaynağı olan video kendi kendine yetebilen, ısıtıcı filtre gerektirmeyen bir lowtech di. İlgimi Çeken video sonrasında sistemi anlamak adına birçok video izledim.
Walstadda, organik toprak, aktif toprak, pasif toprak, hagen, bazalt, lav kırıgı, dere kumu vb bir sürü çeşitte zemin materyalinin kullanılabildiğini gördüm. Bazı kullanıcılar aktif toprak üzeri kurulum yaparken bazıları lav kırıgı üzerine hagen bazıları ise organik toprak üzeri bazalt kullanıyorlardı.
Kurulumumda 8 litre kadar organik toprak kullandım, Toprağı önce eleyerek içindeki yabancı cisim ve olası suyu bozacak materyalleri temizledim. Ardından akvaryum zeminine yayarak bolca ıslatarak çamur kıvamına kadar karıştırdım. Suyu fazla verdim ve su üzerinde çok ince bir katman halinde kaldı. Sonra bolca yıkadığım fakat tozundan arındıramadığım bazalt kum ile toprağın üzerini kapladım. Toprağı kumla iyi mühürlemek gerekli. Ortalama toprak 4cm bazalt kum 4 cm olacak şekilde.
Sonrasında Yol Kenarında Bulduğum Bazalt kayalardan birkaç adet alıp iyice kirinden arındırdıktan sonra akvaryumun orta alanına ekledim.
Ön Kısım İçin Mini Parvula, Arka Alan İçin Mikra Tercihim Oldu. Ön Alana 2 cup mini parvulayı ayırarak cımbız ile ekledim. Arka Alana ise 1 cup Mikrayı aynı şekilde ekledim.
Burada karar vereceğim bir seçenek vardı. Ya kuru başlangıç yapacaktım ya da suyu ekleyip devam edecektim. Normal su eklemesi yapmaktan çekindim. Bitki toprağına yabancı olduğum için beni yanıltabilir, bitki dikerken beceremeyebilir ve tüm toprağı kumun üzerine çıkarabilirdim. Ve Sistem Oturana kadar sürekli yüksek ışık vereceğim için sistem oturmadan alg patlamasına yolacabilirdim. Bu yüzden kuru başlangıçta yosun derdim olmayacaktı fakat bitkilerin zemine tutunabilmesi için o nemli ortamı yaratmalıydım.
Her gün, günde 2 kez bol miktarda zemini ve camları spreyleyerek ıslattım. Bu arada sulamayı fazla yaptığımı farkettiğimde 4. gündeydim. Bitkilerim sararmaya ve ön alanda su birikmeye başlamıştı. Biraz araştırma yaptım. Bitkilerin toprağa tutunma sürecinde formunu kaybedebileceğinden bahsediyordu. Fakat okuduğum tüm yazılar zemini örtecek kadar su olmaması konusunda birleşiyordu. Ve benim suyum zemini kaplamıştı (ortalama 0,5cm)
Suyu bitkilere zarar vermeden çıkarabilmek için ön sağ köşeye bir drenaj çukuru oluşturdum. Elimle toprağa iyice bastırarak o bölgedeki toprak ve kumu aşağıya doğru sündürdüm. Orada yapay bir çukur oluştu. Ortalama 3-4 cm kadardı. Oradan Hava hortumu ile fazla suyu çekerek tahliye ettim. Ve drenaj çukuru tüm akvaryumdaki suyu o noktada topladı. Bu Şekilde 13-14 gün kadar devam ettim. Özellikle mikralarda çok fazla sararma ve deforme olma oluştu. Bu arada Google AI ile sürekli istişare ederek ilerledim. Mikra ve Parvula eklemesi yapmayı düşündüğümde 10, gündeydim. Google beni ikna etti ve bir iki gün içerisinde bitkilerin tepki vermeye başlayacağını yeni yaprak ve sürgünler oluşacağını söyledi. Cidden drystartta 11-12. günden itibaren bitkileriniz toprağa tutunmayı tamamlayıp artık gövde tamirine başlıyor.. ve Nitekim 14. günde suyu ekledim.
Bu Arada Bir Kaç Figür Ekledim Akvaryuma Bunlar, 3 adet MossBall, 1 adet Moss Kaplı Kütük Figürü, 1 adet Moss Ağaç Figürü
1. gün : %30 Su değişimi
2. gün : %10 Su değişimi
4. gün : %15 Su değişimi
6. gün : %50 Su değişimi
Yaptım. Her gün suya yem ufalayarak karıştırdım. Kesinlikle; sıvı gübre, kapsül gübre veya herhangi bir kimsayal akvaryuma eklemedim. Bakteri kültürü dahil.
Bu arada Aydınlatmamı Günlük 12 saat civarında aralıksız kullandım.
Suyu Ekledikten 1 Gün Sonra DIY co2 yaparak sisteme dahil ettim. Ve canlı yükü olmadığı için kesintisiz sisteme co2 veriyorum. Su da yosunlaşma başlayacak sanırım. Şelale filtre ile arada co2 yi akvaryuma dağıyorum :)
Sisteme Canlı Yükü Olarak Bir Grup Nerite ile Başlamayı ardından Karides Kolonisi Eklemeyi Düşünüyorum. Zemin üzerinde yüzen canlı grubunda Neon veya Enber tetra yapabilirim..
Birkaç Resim Eklemeye Çalışacağım. Resimler Karışık Gelirse ve Anlatımdaki bozukluklarım için Şimdiden Özür Dilerim :)
[IMG]https://foto.akvaryum.com/fotolar/276583/300320262229181.jpg[/IMG]
[IMG]https://foto.akvaryum.com/fotolar/276583/300320262231481.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231491.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231501.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231521.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231531.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231541.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231561.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231571.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262231581.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232001.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232011.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232021.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232031.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232041.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232061.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232071.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/276583/300320262232071.jpg[/IMG]

















Dün 18:08
Shark 4000lira
Wolfmar2380[IMG]https://foto.akvaryum.com/fotolar/272733/231020261808021.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/272733/231020261808211.jpg[/IMG][IMG]https://foto.akvaryum.com/fotolar/272733/231020261808211.jpg[/IMG]