Proje 09 - Termostat
Giriş
Bu projede DHT20 sensörü kullanarak çevredeki sıcaklık ve nem değerlerini ölçeceğiz. Ölçtüğümüz verileri LCD ekranda gösterecek ve potansiyometre ile ayarladığın hedef sıcaklığa göre röle kontrol eden kendi dijital termostatımızı yapacağız. Bu proje, gerçek zamanlı sensör verilerini okuma ve otomatik kontrol sistemleri konusunda tecrübe kazanmanı sağlayacak.
Yeni Kavramlar
DHT20 Sensörü
DHT20 sensörü, hem sıcaklık hem de nem ölçümü yapabilen dijital bir sensördür. Analog sensörlerin aksine, ölçtüğü değerleri doğrudan sayısal forma çevirerek I2C protokolü üzerinden gönderir. Sensörün içinde mikroişlemci bulunur ve kalibre edilmiş hassas ölçümler sağlar. Ev termostatları, hava durumu istasyonları ve sera kontrolü gibi uygulamalarda yaygın olarak kullanılır. Kitin sol yakın köseşinde Sıcaklık/Nem sensörü olarak işaretlenmiş alanda bulunur.
Röle (Relay)
Röle, küçük bir elektrik sinyali ile büyük güçlü cihazları açıp kapatmaya yarar. Arduino'nun çıkışları sadece 5V ve maksimum 20mA akım verebilir. Bunun anca bir LED'i yakabilirsiniz. Ama ya büyük bir motoru döndürmek veya bir ısıtıcıyı çalıştırmak istiyorsanız? Röle bu sorunu çözer: Arduino'dan gelen küçük sinyal ile 220V'luk ev cihazlarını bile kontrol edebilirsin.
Günlük hayatta röleleri her yerde görürsün: buzdolabının kompresörü, klimanın fanı, çamaşır makinesinin motoru - hepsi röle ile kontrol edilir. Kitin sağ alt köşesinde "Relay" olarak işaretlenmiş alanda bulunur.
Termostat Mantığı
Termostat, belirlenen hedef sıcaklığı korumak için ısıtma veya soğutma sistemlerini otomatik olarak açıp kapatan akıllı kontrol sistemidir. Ev klimalarından buzdolaplarına, fırınlardan sera kontrolüne kadar her yerde kullanılır.
Histeresis kavramı çok önemlidir. Isıtıcı ve soğutucu sistemlerin çoğu çok hızlı açıp kapamaya gelmez. Bu yüzden tek bir sıcaklık değerini cihazı hem açıp hem kapamak için kullanamayız. Böyle bir durumda hedef sıcaklığı ne seçersek seçelim sistem hedef sıcaklığa geldiğinde hızla açılıp kapanmaya başlar çünkü. Mesela fırının şu anki sıcaklığı 29C ve biz de 30C'ye getirmek istiyoruz diyelim. 30C'ye gelene kadar ısıtıcı çalışacak. 30C'ye gelir gelmez de kapanacak. Ama tabii ısıtıcı kapandığında sıcaklık da hemen düşmeye başlayacak ve ısıtıcı tekrar geri açılacak. E bu sefer de ısıtıcı açıldığında sıcaklık hızla 30C'nin üzerinde çıkacak ve ısıtıcı kapanacak. Bu döngü ısıtıcının çok hızlı bir şekilde açılıp kapanmasına sebep olacak ve ömrünü azaltacak. Ayrıca sadece ısıtıcının kendisinin değil, ona enerji aktaran röle'nin de bir açılıp kapanma ömrü var. Ondan da yiyoruz böyle yaparsak.
Bunun önüne geçmek için histeresis denen bir tolerans payı (örneğimizde 0.2°C) kullanılır. Böylece sistem kendini tam belirli bir sıcaklıkta değil de bir sıcaklık aralığında tutmaya çalışır. Böylece bu kadar sık açılıp kapanması gerekmez.
Mantıksal Operatörler (&&)
&& operatörü "VE" anlamına gelir ve iki koşulun da doğru olmasını kontrol eder. if (!role_durum && sicaklik > hedef_sicaklik) ifadesi "eğer röle kapalı VE sıcaklık hedefin üstünde ise" anlamına gelir. Her iki koşul da doğruysa kod bloğu çalışır.
float Veri Tipi
float, ondalıklı sayıları saklamak için kullanılan veri tipidir. int sadece tam sayıları (1, 5, 100) saklarken, float ondalıklı değerleri (25.6, 0.2, 3.14) saklayabilir. Kullandığımız sensör 1 derecenin altında sıcaklık değişimlerini de ölçebildiği için bize float cinsinden bir değer veriyor.
Elektronik
DHT20 Sensörü: Bu sensör hem sıcaklık hem de nem ölçümü yapabilen dijital bir sensör. I2C protokolüyle Arduino'ya bağlanır ve hassas ölçümler sağlar.
I2C Bağlantısı: DHT20 sensörü I2C protokolüyle çalışır. Bu protokol sadece 2 hat kullanır: - SDA (Serial Data): Veri hattı - Arduino'nun A4 pinine bağlı - SCL (Serial Clock): Saat sinyali hattı - Arduino'nun A5 pinine bağlı
LCD Ekran: Önceki projelerde de kullandığımız I2C LCD ekran. Sensör verileri bu ekranda görüntülenecek.
Röle: Röle D4 pinine bağlıdır. Arduino'dan digitalWrite(4, HIGH) komutu gönderildiğinde röle aktif olur ve bağlı cihazı (ısıtıcı veya soğutucu) çalıştırır. digitalWrite(4, LOW) komutu ile röle devre dışı kalır ve cihaz durur.
Tabii biz bu projede gerçekten bir ısıtıcı ya da soğutucu bağlamayacağız. Ama yine de rölenin devreye girdiğinde ve devreden çıktığında çıkarttığı "tık" sesini duyabilirsin.
I2C'nin avantajı, birden fazla cihazın aynı 2 hat üzerinde farklı adreslerle çalışabilmesidir. DHT20 sensörü ve LCD ekran aynı I2C hattını paylaşır ama farklı adreslere sahiptir.
Kod
Kütüphane kurulumu gerekli
Bu projenin çalışması için bazı kütüphanelerin kurulmuş olması gerektiriyor. Detaylı kütüphane kurulum talimatları için Kütüphane kurma sayfasına bakabilirsin.
Bu proje için gerekli kütüphaneler:
- Adafruit LiquidCrystal Attiny85
- DHT20 Rob Tillaart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | |
Kodu nasıl Arduino'ya yüklerim?
Kiti USB kablosuyla bilgisayarına bağlayıp, Arduino IDE penceresinde bulunan
butonuna basarak kodu yükleyip çalıştırabilirsin.
Kod çalıştığında LCD ekranında anlık sıcaklık ve nem değerlerini ve hedef sıcaklığı göreceksin. Potansiyometreyi kullanarak hedef sıcaklığı ayarlayabilirsin.
Hedef sıcaklığı dış ortam sıcaklığının altında bir noktaya ayarladığında rölenin devreye girdiğini duyacak ve LED'in yandığını göreceksin. Üzerine çıkarttığında ise LED sönecek ve röle devreden çıkacak.
Potansiyometreyi çok yavaş hareket ettirerek hedef sıcaklıgı tam da dış ortam sıcaklığında rölenin devrede olmadığı en sınır değere ayarlarsan, sol yakın kösedeki DHT20 sensörüne hohlayarak termostatı devreye sokabilir, uzaktan üfleyerek de devreden çıkarabilirsin.
Olmadı mı?
Eğer bu süreçte bir problemle karşılaşırsan Sorun giderme kısmına bir göz at.
Bu projede DHT20 sıcaklık/nem sensörünü kullanmayı, terostatların nasıl çalıştığını ve röleleri öğrendin. Aşağıdaki egzersizleri yapabilir misin?
-
Kitteki butona basıldığında sistemin soğutma ve ısıtma modları arasında geçiş yapmasını sağlayabilir misin?
-
Röleyi sıcaklık ile değil de nem oranıyla kontrol edebilir misin? Potansiyometre ile bir nem oranı ayarlanmalı ve o oranın üzerine çıkıldığında röle devreye girmeli