Isıya göre fan çalıştırma

Burakco

Üye
Katılım
3 Eki 2024
Mesajlar
8
Puanları
1
Yaş
39
Merhaba, akvaryumu için bir otomasyon sistemi hazırladım. Modemcu ve blynk kullanıyorum.

Programa göre; su sıcaklığı 25 derece üstünde olduğu sürece fan çalışmaya başlıyor. 25 altına inince fan kapanıyor. 5v röle ile kontrol ediliyor. 12v luk pc fan kullanıyorum. Sıcaklık kontrolünü her 1sn de kontrol ettiriyorum. Üstüne de 1sn delay var. Sıcaklık değişkeni decimal olarak tanımlı. Sıcaklık ds18b20 ile ölçülüyor.

Sorun şu ki, geçen gün akşam fan rölesi sürekli olarak aç kapa yapmaya başladı. Uygulamaya baktığımda sıcaklık sürekli 24 - 25 değişiyor. Röle çalışıyor fan daha tam dönemeden röle geri kapanıyor. Başlangıç sıcaklığını 26 yaptım sorun geçici çözüldü tabi. Ama bana 25 - 26 derece arasında stabil sıcaklık lazım.

Çat çat röle sesleri olmadan bunu nasıl sağlayabilirim? Nasıl bir kontrol sağlamam gerektiği konusunda yardımcı olur musunuz?
 
Son düzenleme:
Bu tür kararsız değerlerde röleler kararsız kalıp tribe girer. Ya 1sn beklemeyi 10-15 sn gibi değerlere getireceksiniz, ya da bir önceki derece ile ölçülen sıcaklık derece farkının 1'den büyük bir değer olduğunda röleyi açtırabilirsiniz. Ds18b20'den float/real bir değer okuyor olmanız lazım. Bu 1 derece farkı 1.3 de yapabilirsiniz. Bu değeri denemeyle bulabilirsiniz.
 
Bu tür kontrollerde PID sistemi kullanılır.
Aslında 1 den fazla ölçüm/karar verme algoritmanız yoksa bu sorun devre yapını (hardware) ile kolaylıkla çözükebilir mesela :
PID-Kontrol.png

Veya PID algoritması ekleyerek sisteminizi röleli/rölesiz çalıştırabilirsiniz.
 
Bu tür kararsız değerlerde röleler kararsız kalıp tribe girer. Ya 1sn beklemeyi 10-15 sn gibi değerlere getireceksiniz, ya da bir önceki derece ile ölçülen sıcaklık derece farkının 1'den büyük bir değer olduğunda röleyi açtırabilirsiniz. Ds18b20'den float/real bir değer okuyor olmanız lazım. Bu 1 derece farkı 1.3 de yapabilirsiniz. Bu değeri denemeyle bulabilirsiniz.
Aslında float okumaya çalıştım ama Bi yerde hata yaptım heralde hep İnt okuyor.
Bu tür kontrollerde PID sistemi kullanılır.
Aslında 1 den fazla ölçüm/karar verme algoritmanız yoksa bu sorun devre yapını (hardware) ile kolaylıkla çözükebilir mesela :
Ekli dosyayı görüntüle 110801
Veya PID algoritması ekleyerek sisteminizi röleli/rölesiz çalıştırabilirsiniz.
Yeni yeni bu tarz elektronik programlamaya başladığım için PID nedir bilmiyorum hocam. Çok temel düzeyde bilgi sahibiyim. Ama dediğinizi araştıracağım. Teşekkürler
 
Bu sorunu PID ile çözemezsiniz.PID in amacı sıcaklıgın hedeflenen degere en kısa sürede tam oturmasını veya oldukca yaklaşmasını saglamak.Sizde zaten çok çabuk hedeflenen degere ulaşıyor.su sıcaklıgının bu kadar hızlı artıp azalması mümkün degil.Sensörünüzün konumunu kontrol edin.Büyük ihtimalle fan rüzgarını direk olarak algılıyor.Sensörün direk olarak suyun içerisinde olması gerekir.Bir başka problem ise analog okuma devresinde okuma referans degerinin fanın veya rölelerin çalışması ile sapma yapması olabilir.Bu degerin hiçbir şekilde kımıldamaması gerekir.
 
PID gerekliliğini tartışmak güzel bir şey.

1. Daha önce de yazdığım gibi, basit çözümler bulunabilir mesela tek opamp ile yapılan "window comparatör" yani belirli bir aralığı kabul edip, açıp kapatan bir devre, ilave olarak bu işlemi yavaşlatacak bir kondansatör ile belki probleminiz çözülebilir.

2. Ancak bu tür kontrollerde "daha önce çalışıyordu ama"
ile başlayan dertler çıkabilir. Bu iş için yaptığınız bir "şey" başka bir uygulama için olmayabilir vs...

İşin doğrusu, PID ile yapmaktır.

Öğrenmesi "aman aman zor birşey" değildir.
Mantığını anlayınca kolaylıkla çözersiniz.

Örnek linklere bakabilirsiniz:

https://wokwi.com/projects/406730848974731265

Başka bir link:


Takıldığınız br şey olursa yazın,

İyi çalışmalar
 
Yönlendirmeleriniz için teşekkür ederim. Sorunu çözmeye çalışacağım.
 
Mehmet bey elbette pid kontrol hedeflenen degere ulaşmak için uygulanabilecek en iyi yöntemlerden biri.
Ancak bu problemin pid ile çözülebilecegini düşünmüyorum.Çünki okunan deger sadece + - 1 derece fark.
Pid ile istediginiz kadar paremetre katsayılarını degistirin sonucta 1 derece arttımı açacak,1 derece düştümü kapanacak.yani salınım yapıpda kararlı noktayı bulabilecegi bir aralık yok.Okumayı integer den çıkarıp float'a çevirirse pid kullanımı mümkün olabilir.
Benim PID den anladıgım hedefe ne hızda ve ne kadar sapma ile ulaşabilirim problemine çözüm bulmak.
Şöyle düşünelim:
0 dereceden 10 dereceye 0.1 derece/saat sıcaklık artım hızı ile herhangibir pid işlemi uygulamadan yapacak olursak;hedeflenen sıcaklıga 100 saat'de ulaşırız ve sapabilecegimiz maksimum deger 0.1 derece olur.
Bu işlemi PID uygulayarak katsayıları degiştirerek ve sıcaklık artım hızını esnek tutarak hedeflenen sıcaklıga çok daha kısa sürede ulaşabiliriz;ancak dezavantaj olarak sapabilecegimiz deger 0.1 dereceden fazla olacaktır.
Siz ne dersiniz;yanlışmı düşünüyorum?
Zira bu PID konusu bana epeyce kafayı yedirtti.
Yakın zamanda çok basit oldugunu düşünerek yaptıgım bir proje almıştım.
İşlem oldukca basit gözüküyordu.Hedef Makina hızına senkronize bir step motoru döndürmekti.
Olay işin başında çok kolay gözüküyordu;makina hızını ölçer aynı hızda step motoru döndürürüm diye düşünüyordum.Problem yaratan kısımlar ise step motorun hiçbir turu kaçırmaması ve diger motor hızının her an degişebilir olması idi.Basit bir PID uygulaması ile problemi çözemedim.
Kendi kafamdan bir çözüm ürettim;tahminlerime göre yaptıgım işlem aktif PID uylamak oldu.Yani PID deki parametreleri(Çarpan bölen vs) anlık duruma göre aktif şekilde kendiliginden(hesaplanan duruma göre) degişen yapmak oldu.:)
 
Haklısınız.
Ancak burada ısı değeri karşılaştırma rutininde bir problem var gibi görünüyor..

Tıpkı, PID nin ilk fonksiyonu olan P değerinde olduğu gibi

"P" yani "Proprtional" yani Oransal, daha başka deyişle (Analog) Giriş Kazancı çok fazla ise, yani çok az bir ısı değişimini, karşılaştırma değeri olarak alıyorsanız bırakın 1 dereceyi, 0.1 derece "oynamada" bile (bu örnekteki gibi) röleyi açıp kapatırsınız.

İşte bunu önlemenin 1. yolu önce P değerini doğru ayarlamak sonra diğer değerlerl ona göre tesbit edip PID uygulamaktır.

Ancak daha öncede belirttiğim gibi PID olmadan sadece Komparatör yazılımı yardımı ile bu bu problem çözülebilir

Aslında soru sahibi yaptığını detaylı olarak anlatsa ve yazdığı programı açıklasa bu sorunun hangi "hata"dan kaynaklandığını bulmak çok kolay olur.
 
Son düzenleme:

Forum istatistikleri

Konular
130,101
Mesajlar
933,149
Kullanıcılar
453,149
Son üye
hyerbest25

Yeni konular

Geri
Üst