Arduino ile sera otomasyonu:
Bu dersimizde arduino ile sera otomasyonu yapmayı öğreneceğiz.
Senaryo:
Sistemde ortam ısısını, havadaki nemi ve topraktaki nemi ölçen sensörler bulunmaktadır.
Başlangıçta bu sensörlerden gelen veriler okunup Lcd ekranda gösterilecek.
Ortam ısısı 25 derecenin altında ise bir lamba ya da ısıtıcı istenilen süre çalıştırılıp durdurulacak.
Ortam ısısı 25 derecenin üzerinde ise lamba ya da ısıtıcı çalışmayacak.
Havadaki nem oranı %75'in üzerine çıkarsa bir fan istenilen süre kadar çalıştırılıp durdurulacak.
Havadaki nem oranı %75'in altında ise fan çalışmayacak.
Topraktaki nem oranı %85'in altında ise bir selenoid valf devreye girerek istenilen süre kadar sulama işini gerçekleştirecek.
Topraktaki nem oranı %85'in üzerinde ise selenoid valf tepki vermeyecek, sulama yapılmayacak.
Senaryonun her aşaması lcd ekranda görüntülenecek.
Daha sonra sistem istenilen bir süre kadar durup, sürenin sonunda senaryoyu sonsuza dek tekrarlayacak.
Aşağıdaki videoda çalışması gösterilmiştir.
DHT22
Ortam ısısını ve ortamdaki nemi ölçmek için DHT22 ısı ve nem sensörü kullanacağız.
DHT22 sıcaklık ve nem algılayıcı kalibre edilmiş dijital sinyal çıkışı veren gelişmiş bir sensör birimidir. Yüksek güvenilirliktedir ve uzun dönem çalışmalarda dengelidir. 8 bit mikroişlemci içerir, hızlı ve kaliteli tepki verir.
-40 ile 80°C arasında +/-1°C hata payı ile sıcaklık ölçen birim, 0-100% RH arasında +/-5% RH hata payı ile nem ölçümü yapabilmektedir. Sensör ölçümü olarak sensörün datah toplama periyodundan kaynaklı olarak 2 saniyelik periyotlarla ölçüm sonuçları alınabilmektedir. DHT21, diğer DHT modellerine göre boyut olarak bir miktar daha büyüktür.
Özellikleri:
DHT serisinin yüksek performanslı modellerindendir.
Dijital çıkış vermektedir.
Çalışma Gerilimi: 3.3-5 VDC
Ölçüm Aralığı:
Nem: 0-100%RH
Sıcaklık: -40 - 80 °C
Hassasiyet:
Nem: +/- %3 (Max %5) RH
Sıcaklık: < +/- 1°C
Ölçüm Periyodu: 2 s
Ürün Ölçüleri: 22x28x5 mm
Not: Vcc ile çıkış pini arasında pull-up direncine ihtiyaç duyulmaktadır. Bu sebeple 4.7K ile 10K arasında bir direnç ile beraber kullanmanız gerekmektedir. DHT11 modeli de benzer özelliklerde olduğu için bir model ile yapılmış uygulama diğer modele de uygulanabilmektedir.
Toprak nem sensörü:
Toprak nem sensörü, toprağın içerisindeki nem miktarını veya ufak ölçekte bir sıvının seviyesini ölçmek için kullanabileceğiniz bir sensördür.
Nem ölçer problar ölçüm yapılacak ortama batırılarak kullanılır. Toprağın veya içine batırılan sıvının meydana getirdiği dirençten dolayı, prob uçları arasında bir gerilim farkı oluşur. Bu gerilim farkının büyüklüğüne göre de nem miktarı ölçülebilir. Topraktaki nem oranı arttıkça iletkenliği de artmaktadır. Kart üzerinde yer alan trimpot sayesinde hassasiyet ayarı yapılabilmektedir.
Arduino veya farklı mikrodenetleyiciler ile rahatlıkla kullanılabilir.
Özellikleri:
Çalışma Gerilimi: 3.3V-5V
Çıkış Gerilimi: 0-4.2V
Akım: 35 mA
Çıkış Türü: Dijital ve Analog
Arduino kodlarımız:
Devre şeması:
Bu dersimizde arduino ile sera otomasyonu yapmayı öğreneceğiz.
Senaryo:
Sistemde ortam ısısını, havadaki nemi ve topraktaki nemi ölçen sensörler bulunmaktadır.
Başlangıçta bu sensörlerden gelen veriler okunup Lcd ekranda gösterilecek.
Ortam ısısı 25 derecenin altında ise bir lamba ya da ısıtıcı istenilen süre çalıştırılıp durdurulacak.
Ortam ısısı 25 derecenin üzerinde ise lamba ya da ısıtıcı çalışmayacak.
Havadaki nem oranı %75'in üzerine çıkarsa bir fan istenilen süre kadar çalıştırılıp durdurulacak.
Havadaki nem oranı %75'in altında ise fan çalışmayacak.
Topraktaki nem oranı %85'in altında ise bir selenoid valf devreye girerek istenilen süre kadar sulama işini gerçekleştirecek.
Topraktaki nem oranı %85'in üzerinde ise selenoid valf tepki vermeyecek, sulama yapılmayacak.
Senaryonun her aşaması lcd ekranda görüntülenecek.
Daha sonra sistem istenilen bir süre kadar durup, sürenin sonunda senaryoyu sonsuza dek tekrarlayacak.
Aşağıdaki videoda çalışması gösterilmiştir.
DHT22
Ortam ısısını ve ortamdaki nemi ölçmek için DHT22 ısı ve nem sensörü kullanacağız.
DHT22 sıcaklık ve nem algılayıcı kalibre edilmiş dijital sinyal çıkışı veren gelişmiş bir sensör birimidir. Yüksek güvenilirliktedir ve uzun dönem çalışmalarda dengelidir. 8 bit mikroişlemci içerir, hızlı ve kaliteli tepki verir.
-40 ile 80°C arasında +/-1°C hata payı ile sıcaklık ölçen birim, 0-100% RH arasında +/-5% RH hata payı ile nem ölçümü yapabilmektedir. Sensör ölçümü olarak sensörün datah toplama periyodundan kaynaklı olarak 2 saniyelik periyotlarla ölçüm sonuçları alınabilmektedir. DHT21, diğer DHT modellerine göre boyut olarak bir miktar daha büyüktür.
Özellikleri:
DHT serisinin yüksek performanslı modellerindendir.
Dijital çıkış vermektedir.
Çalışma Gerilimi: 3.3-5 VDC
Ölçüm Aralığı:
Nem: 0-100%RH
Sıcaklık: -40 - 80 °C
Hassasiyet:
Nem: +/- %3 (Max %5) RH
Sıcaklık: < +/- 1°C
Ölçüm Periyodu: 2 s
Ürün Ölçüleri: 22x28x5 mm
Not: Vcc ile çıkış pini arasında pull-up direncine ihtiyaç duyulmaktadır. Bu sebeple 4.7K ile 10K arasında bir direnç ile beraber kullanmanız gerekmektedir. DHT11 modeli de benzer özelliklerde olduğu için bir model ile yapılmış uygulama diğer modele de uygulanabilmektedir.
Toprak nem sensörü:
Toprak nem sensörü, toprağın içerisindeki nem miktarını veya ufak ölçekte bir sıvının seviyesini ölçmek için kullanabileceğiniz bir sensördür.
Nem ölçer problar ölçüm yapılacak ortama batırılarak kullanılır. Toprağın veya içine batırılan sıvının meydana getirdiği dirençten dolayı, prob uçları arasında bir gerilim farkı oluşur. Bu gerilim farkının büyüklüğüne göre de nem miktarı ölçülebilir. Topraktaki nem oranı arttıkça iletkenliği de artmaktadır. Kart üzerinde yer alan trimpot sayesinde hassasiyet ayarı yapılabilmektedir.
Arduino veya farklı mikrodenetleyiciler ile rahatlıkla kullanılabilir.
Özellikleri:
Çalışma Gerilimi: 3.3V-5V
Çıkış Gerilimi: 0-4.2V
Akım: 35 mA
Çıkış Türü: Dijital ve Analog
Arduino kodlarımız:
Kod:
#include "DHT.h" // ısı ve nem sensörü kütüphanesi eklendi
#define DHTPIN 2 // ısı ve nem sensörü 2nolu pine bağlandı
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define lamba 13 // 13. pine lamba adı verildi
#define fan 12 // 12. pine fan adı verildi
int toprak_nem_sensoru=A5; // toprak nem sensörü analog 5 pinine bağlanacak
int OkunanDeger; // Analog 5'ten okunacak değer (0-1023)
int Nem; // Nem isminde değişken oluşturuldu
int selenoid_valf=3; // selenoid valf dijital 3 pinine bağlanacak
int maxHum = 75; // fanın devreye gireceği nem seviyesi %75
int maxTemp = 25; // lamba 20 derece ve üstündeki sıcaklıklrda devreden çıkar
DHT dht(DHTPIN, DHTTYPE);
// LIKID KRISTAL KUTUPHANESİ EKLENIYOR
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;
// LIKID KRISTAL KUTUPHANESİ EKLENMESI TAMAMLANDI
void setup()
{
pinMode(lamba, OUTPUT); // 13 nolu pin lamba için çıkış yapıldı
pinMode(fan, OUTPUT); // 12 nolu pin fan için çıkış yapıldı
pinMode(toprak_nem_sensoru, INPUT); // A5 pini toprak nem sensörü için giriş yapıldı
pinMode(selenoid_valf, OUTPUT); // dijital 3 pini selenoid valf için çıkış yapıldı
Serial.begin(9600); // seri haberleşme
dht.begin();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("SERA"); // açılışta ilk okunacak yazı (ilk satır)
lcd.setCursor(0,1);
lcd.print("OTOMASYONU"); // açılışta ilk okunacak yazı (ikinci satır)
delay(5000); // 5 saniye bekle
lcd.clear(); // lcd temizle
}
void loop()
{
float h = dht.readHumidity(); // nemi oku
float t = dht.readTemperature(); // sıcaklığı oku
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); // ilk satır
lcd.print("ISI:"); // ilk satıra ISI: yazıldı
lcd.print(t); // ISI:'nın yanına okunan sıcaklık değeri yazıldı
lcd.print(" DERECE"); // okunan sıcaklığın yanına derece yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("NEM:"); // ikinci satıra NEM: yazıldı
lcd.print("% "); // NEM:'in yanına % yazıldı
lcd.print(h); // %'nin yanına okunan nem değeri yazıldı
delay(5000); // 5 saniye bekle
lcd.clear(); // lcd temizlendi
OkunanDeger = analogRead(toprak_nem_sensoru); // Toprak nem sensöründen okunan değer, OkunanDeger adında birdeğişken olarak atandı
Nem = map (OkunanDeger, 1023, 0, 0, 160); // Toprak nemi sensöründen 5 volt ile 0 volt arasındaki okunan değer yüzde olarak ifade edildi
lcd.setCursor(0,0); // ilk satır
lcd.print("TOPRAK NEMi"); // ilk satıra TOPRAK NEMİ yazıldı
lcd.print("% "); // Yanına % yazıldı
lcd.print(Nem); // Toprak nem sensöründen okunan değer yazıldı
delay(5000); // 5 saniye bekle
// ısı belirlenen seviyeyi geçerse şunları yap burada başladı
if( t > maxTemp)
{
digitalWrite(lamba, LOW); // lambayı söndür
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); // ilk satır
lcd.print("ISI NORMAL"); // ISI NORMAL yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("LAMBA KAPALI"); // Lamba kapalı yazıldı
delay(5000); // 5 saniye bekle
// ısı belirlenen seviyeyi geçerse şunları yap burada bitti
}
// ısı belirlenen seviyeyinin altında ise şunları yap burada başladı
else
{
digitalWrite(lamba, HIGH); // lambayı yak
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); // ilk satır
lcd.print("YETERSiZ ISI"); //YETERSİZ ISI yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("LAMBA YANIYOR"); // LAMBA YANIYOR yazıldı
delay(10000); // lambanın yanık kalma süresi
digitalWrite(lamba, LOW); // lambayı söndür
}
// ısı belirlenen seviyeyinin altında ise şunları yap burada bitti
// nem belirlenen seviyeyi geçerse şunları yap burada başladı
if(h > maxHum)
{
digitalWrite(fan, HIGH); // havalandırma fanını çalıştır
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); // ilk satır
lcd.print("NEM YUKSEK"); // NEM YUKSEK yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("FAN CALISIYOR"); // FAN CALISIYOR yazıldı
delay(60000); // fanın devrede kalacağı süre 1 dakika olarak belirlendi
digitalWrite(fan, LOW); // fanı kapat
}
// nem belirlenen seviyeyi geçerse şunları yap burada bitti
// nem belirlenen seviyeyinin altındaysa şunları yap burada başladı
else
{
digitalWrite(fan, LOW); // havalandırma fanı kapatıldı
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); //ilk satır
lcd.print("NEM NORMAL"); // NEM NORMAL yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("FAN KAPALI"); // FAN KAPALI yazıldı
delay(5000); // 2 sn bekle
}
// nem belirlenen seviyeyi altındaysa şunları yap bitti
toprak_nem_sensoru = analogRead(A5); // Toprak nem sensöründen gelen bilgi okundu
if (toprak_nem_sensoru > 543) // 543 değeri %85'e tekabul etmektedir
{
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); // ilk satır
lcd.print("TOPRAK NEMi"); // TOPRAK NEMİ yazıldı
lcd.print("% "); // yanına % yazıldı
lcd.print(Nem); // Toprak nem değeri yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("SELENOID ACIK"); // SELENOID ACIK yazıldı
digitalWrite(selenoid_valf, HIGH); // selenoid valf açıldı
delay(5000); // selenoidin devrede kalacağı süre
digitalWrite(selenoid_valf, LOW); // selenoid kapatıldı
}
else
{
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); //ilk satır
lcd.print("TOPRAK NEMi"); // TOPRAK NEMi yazıldı
lcd.print("% "); // % yazıldı
lcd.print(Nem); // Toprak nem değeri yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("SELENOID KAPALI"); // SELENOID KAPALI yazıldı
digitalWrite(selenoid_valf, LOW); // selenoid kapatıldı
delay(5000); // 5 saniye bekle
}
lcd.clear(); // lcd temizlendi
lcd.setCursor(0,0); //ilk satır
lcd.print("VERiLER"); // VERİLER yazıldı
lcd.setCursor(0,1); // ikinci satır
lcd.print("GUNCELLENiYOR "); // Güncelleniyor yazıldı
delay(5000); // bir sonraki ölçüm ve işlemler için bekleme süresi
}
Devre şeması: