Bitkili Tankda Led Kullanımı


darkauraÇevrim Dışı

Kıdemli Akvarist
Kayıt: 02/11/2010
İl: Istanbul
Mesaj: 4400
darkauraÇevrim Dışı
Kıdemli Akvarist
Gönderim Zamanı: 6 Saat 27 Dakika önce
[QUOTE=jojoned]


Cevap için teşekkürler açıkçası o kadar detaylı düşünmemiştim ,normalde saat 16:00 - 23:00 arası ışık çalışıyor ilk açılışta %40 ile başlayıp yavaş yavaş yükseltim sonra tekrar kapanmaya yakın kısım demiştim tabi siz işe farklı bir boyut katmışsınız:) bu durumda ışıklarıda gruplandırmak gerekecek sanırım , o epey ileri seviye olur benim içim. Ama ileride neden olmasın :) sizin desteğinizle onuda yaparım muhtemelen. Bu dediğimin bir faydası olur mu yoksa hiç girmiyim mi yorumunuz ne olur ?
Şuan için güç kaynağı olarak bunu kullanıyorum.https://powermaxled.com/products/19-25x1-watt-driver-djt-bs1925a?srsltid=AfmBOoryrouAyUQQH08pDHYBYDv-HRqbvV-xNxG5YsxKGSUtlcqI9y-A
Yazacağım kodda basit anlamda aşağıdaki gibi bişey düşünmüştüm.


#include Wire.h
#include RTClib.h

RTC_DS3231 rtc;

const int ledPin = 9; // PWM pinine bağlı MOSFET Gate

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);

// RTC modülünü başlat
if (!rtc.begin()) {
Serial.println("RTC modülü bulunamadı!");
while (1);
}

// Eğer RTC modülü zaman ayarlı değilse, bilgisayarın saatini kullanarak ayarla
if (rtc.lostPower()) {
Serial.println("RTC modülü güç kaybetti, zaman ayarlanıyor...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}

void loop() {
DateTime now = rtc.now(); // Şu anki zamanı al

int hour = now.hour(); // Saat bilgisini al
int minute = now.minute(); // Dakika bilgisini al

// Zaman aralıklarına göre LED parlaklığını ayarla
if (hour == 16 && minute = 0 || hour == 17 && minute 0) {
analogWrite(ledPin, 102); // %40 parlaklık (255 * 0.4 = 102)
} else if (hour == 17 && minute = 0 || hour == 18 && minute 0) {
analogWrite(ledPin, 128); // %50 parlaklık (255 * 0.5 = 128)
} else if (hour == 18 && minute = 0 || hour == 19 && minute 0) {
analogWrite(ledPin, 230); // %90 parlaklık (255 * 0.9 = 230)
} else if (hour = 19 && hour 22) {
analogWrite(ledPin, 255); // %100 parlaklık (255 * 1.0 = 255)
} else if (hour == 22 && minute 30) {
analogWrite(ledPin, 128); // %50 parlaklık (255 * 0.5 = 128)
} else if (hour == 22 && minute = 30 || hour == 23 && minute 0) {
analogWrite(ledPin, 77); // %30 parlaklık (255 * 0.3 = 77)
} else {
analogWrite(ledPin, 0); // LED'leri kapat
}

delay(1000); // Her saniye kontrol et
}
[/QUOTE]

Elinizdeki driver sabit akım kaynağı, onla hiç bir şekilde olmaz. Dediğim tip driver ve 24volt dc güç kaynağı ile bu kodu kullanarak ışığın gücünü kontrol edebilirsiniz. Arduino çıkışa doğrudan bağlayıp kullanmanız mümkün. meanwell ldd 36volt güç kaynağıylada çalışabiliyor. 36volt bağlarsanız tek driver 10ledi çalıştıracaktır. 36volt güç kaynağı biraz daha zor bulunuyor ve daha pahalı, o yüzden 24v dedim. İşin ekonomisi tasarımı size kalmış.

Renk kontrolü zor değil yazdığınız kodu farklı değişken ismi ile yada 4 kere tekra ettireceksiniz, farklı değişkenlere farklı pin bağlayıp çıkış verceksiniz. Gündoğumu için yapmanız gereken sadece kırmızı ledleri diğerlerinden daha önce başlatmak, diğerlerini arkasından yükseltmek.

for loop kullanırsanız daha kolay ve akıcı olur.

if (hour == 16 && minute == 0) {
for (int i = 0; i = 255; i++) {
analogWrite(ledPin, i);
delay(30000); //her 30 saniyede isik bir kademe yukselecek. 127dk ~2saat icinde zirve yapacak.
}
}

gundogumu icin ayni kodu 3 kere ledPin1, ledPin2, ledPin3 diye tekrar yazip 1e kirmiziyi, 2ye beyazi 3e mavi ledleri baglayin. ledPin1 i digerlerinden yarim saat 1 saat once yukseltmeye baslayin. alin size gundogumu. ay isigi icinde diger ledler sondukden sonra maviyi dusuk guc ayarinda bir sure daha calistirin alin size ay isigi. birde transgenic fosforlu baliklariniz varsa ay isiginda mavide gece lambasi gibi parlarlar. harika goruntu olur.

255 kademede isik artisi basamak basamak oluyor, goz gecisleri goruyor. pca9685 kullanirsaniz 12bit 4096 kademe olur, gecisleri goz gormez. fiziksel baglantisi kolay bir donanim. kodlamasida basit. asa yukari ayni kodu kullanacaksiniz sadece donanim kontrolu icin bir kac satir eklenecek.

yaklasik soyle bir sey olur


#include Wire.h
#include Adafruit_PWMServoDriver.h

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

void setup() {

Serial.begin(9600);
pwm.begin();
pwm.setPWMFreq(1600);
}

void loop()
{

if (hour == 16 && minute == 0) {
for (int i = 0; i = 4095; i++) {
pwm.setPWM(0,0, i); //ilk sifir pin numarasi. 0dan 15 her bir led kanalinin adresi. 16 adet driver kontrol edebilir. sondaki i de isigin parlaklik degeri 0dan 4095e değer alır. 4095 full parlaklık
}
delay(1000); //her 1 saniyede isik bir kademe yukselecek. 68dk de maksimum parlakliga ulasacak.
}

Donanımsal bağlantısı bu sekilde

[IMG]https://europe1.discourse-cdn.com/arduino/original/4X/a/c/3/ac3d13aaef4962a3303538b6208b66e929ab99d9.png[/IMG]

led yerine driverin pwm girişine bağlıyacaksınız.



[IMG]https://foto.akvaryum.com/fotolar/101090/171020241639211.jpg[/IMG]
Buda kendi yaptığım sistem. Kontrolcü esp8266, en altda dikine dizili olanlar çin malı buck driverlar.

Beğenenler: [T]66766,Hüdai[/T]

Üye imzalarını sadece giriş yapan üyelerimiz görebilir