Arduino ile Akıllı Ev Yapalım… — 2

İbrahim İrdem
7 min readNov 9, 2017

--

Yazımızın ilk serisinde Arduino’muza HC-05 Bluetooth modülünü bağlamış ve Android tabanlı uygulamamızı yazarak Arduino’muz ile haberleşmelerini sağladık.

Şimdi ise Arduino’muza dönüp otomasyon işlevlerini hazır hale getirelim.

Panjur Perde ve Garaj Kapısı Kontrolü

Akıllı ev sisteminde kişiye önemli bir zaman kazandırıp ve belirli bir iş gücünden kurtaracak kısım perde panjurlarının otomatik olarak Android program arayüzünden açılıp kapanması olacaktır.

Akıllı ev panjur sistemi servo motoru

Böylece kişi bunu sadece bir tuşla yapabilmektedir. Bu sistemi gerçekleyebilmek için panjur sistemimiz arayüzünden gelen uyarıyla otomatik perdeleri açmalı veya kapamalıdır. Panjurları döndürmek için gereken mekanik enerjiyi ise Servo motor ile gerçekleştiriyoruz.

Akıllı ev garaj kapısı kontrolü

Arduino ile Servo Motor Kontrolü

Arduino’da Servo motor kontrolü için Arduino’nun bize sunduğu Servo kütüphanesini kullanarak servo motorumuzun kontrolünü sağlayabiliriz. Arduino’muz bilgisayarımızda yüklüyse Servo kütüphanemizde otomatik olarak yüklü gelir ve kütüphaneyi kullanabilmek için proje kodlarımıza import etmemiz gerekir. Bunun için de #include kodu ile Servo kütüphanemizi projemizin içine aktararak bu kütüphanedeki fonksiyonlardan faydalanabiliriz.

  • attach(): Bu fonksiyon Servo motorumuzun hangi pinde takılı olduğunu Arduino’muza söylediğimiz fonksiyondur. Mesela myservo.attach(9) kodu ile servo motorumuzun 9. pinde olduğunu Arduino’muza söyleriz. Böylece Servo motorunun yerini bildirdikten sonra artık işlemlerimizi yapabiliriz.
  • write(): Bu fonksiyon ise servo motorumuzun açılı olarak 0 ile 180 derece arasında döndürmemizi sağlar. Örnek olarak servo.write(45) komutu ile 0 derecede bulunan motorumuz 45 derecelik bir açı alacak şekilde tam hızda döndürmüş oluruz.
  • read(): Servo motorumuz en son döndürdüğümüz açıda durur ve bekler. Bu yüzden servo motorumuzun hangi açıda bulunduğu bulmak için ise servo.read() komutu ile read() fonksiyonumuzu kullanırız. Böylece bu komut bize 0 ile 180 derece arasında bir sayı değeri döndürür. Bu sayı değeri de servo motorumuzun o anki açısıdır.
  • attached(): Servo motorumuzun belirttiğimiz pinde takılı olup olmadığını anlamak için ise servo.attached() komutu ile attached() fonksiyonumuzu kullanarak haberdar olabiliriz. Bu fonksiyonu kullandığımızda eğer Servo motor takılı ise true , değilse false değerini döndürerek bize cevap verir.

Servo motor PWM ile yönetildikleri için Arduino’muzun dijital pinlerinden birine bağlanarak çalıştırılırlar.

Arduino ile kontrol kodlarımız ise aşağıdaki görüldüğü gibidir;

else if (Bdeger == 7 && (int)EEPROM.read(10)== 0){
//Servo motoru 2 saniye sağa döndür.
Serial.print("Aciklama : Perdeler aciliyor.");
perdeservo.write(180);
delay(2000);
perdeservo.write(94);
Serial.println(" Acildi. ");
EEPROM.write(10, 1);

Evin Isısının Kontrolü ve Öğrenilmesi

Birçok akıllı evde bulunan bir özellik ise ev ısısının kontrolüdür. Ev sahipleri bazı durumlar için evin ısısını öğrenmek isteyebilir veya bu ısıyı belirli noktada sabitleyecek bir ısıtma sistemine sahip olmak isterler. Bu sistemleri akıllı evde kullanabilmek için öncelikle ev ısısının bulunması gerekir. Sistemimizde bu işlemi DHT11 ısı sensörü yapmaktadır. Daha sonra Arduino’muz ile bu ısı değeri kullanıcı arayüz programımız ile kullanıcıya gösterilebilir. Bu ısı değerinden faydalanarak evin ısı değerinin belirli bir değere sabitlenmesi için ise ölçülen ısı değerinin durumuna göre klima sıcak veya soğuk kademelerine alınarak çalıştırılabilir.

Akıllı ev DHT11 sensörü

DHT11 Kontrolü

DHT11 Isı ve Nem Sensörü

DHT11 sıcaklık ve nem algılama görevi gören, dijital sinyal çıkışı veren gelişmiş bir algılayıcı birimidir. Yüksek güvenilirliktedir ve uzun dönem çalışmalarda dengelidir. 8 bit mikroişlemci içerir, hızlı ve kaliteli tepki verir. 0 ile 50°C arasında 2°C hata payı ile sıcaklık ölçen birim, 20–90% RH arasında 5% RH hata payı ile nem ölçer

Arduino ile Bağlantısı

Arduino ile DHT11 Isı ve Nem sensörünün bağlantısı aşağıdaki örnekteki gibidir. Dijital veri gönderdiği için Arduino’muzun dijital bacaklarına bağlanır. Arduino’muzla DHT11 sensöründen gelen verileri okumak için dht11 modülünden faydalandık.

Arduino DHT11 bağlantısı

Arduino ile bağladığımız sensörümüzün değerlerini okumak için Arduino aşağıdaki kodları kullandık. Kodlara bakacak olursak bir üçüncü şahıs modülü olan dht11 modülü kullanıldı.

#include <dht11.h>
else if (Bdeger == 13){
//Sıcaklık değerini okumak için olan kısım.
int chk = DHT11.read(DHT11PIN);
Bbaglanti.print((float)DHT11.temperature, 2);
Serial.println((float)DHT11.temperature, 2);
Serial.println("Aciklama : Oda sicakligi degeri gonderildi.");
}

Ev Aydınlatma Kontrolü

Evimizdeki aydınlatmaların Android arayüzümüz ile kontrolü ise bizleri belirli bir iş gücünden kurtaracaktır. Bu sistemin kontrolü ise Arduino kısmında yapılmaktadır. Android arayüzünden gelen açma-kapama bilgisinden sonra Arduino’muz ile dijital bacaklar vasıtası ile kontaktörümüzü tetikliyoruz.

Arduino aydınlatma ilişkisi

Burada kontaktör kullanmamızın nedeni ise Arduino’muza 220V gibi yüksek gerilimi direkt kontrol edemiyor oluşumuzdur. Bunun için aracı olarak kontaktörümüzü kullanıp daha sonra kontaktör üzerinden geçip aydınlatmaya giden gerilimi kontrol altına alıyoruz.

Akıllı ev aydınlatma

Kod kısmında ise yaptığımız kontaktörü bağladığımız pini kullanarak 5V çıkış ile kontraktörü tetiklemek.

if (Bdeger == 1){   digitalWrite(13, HIGH);   Serial.println("Aciklama : Salon Oda isigi acildi.");}else if (Bdeger == 2){   digitalWrite(13, LOW);   Serial.println("Aciklama :Salon Oda isigi kapandi.");}

Bahçe Sulama Sistemi

Bahçe sulama işlemini tamamen kullanıcıdan koparıp bağımsız hale getirmek için öncelikle topraktaki nem miktarını ölçmemiz gerekir. Ölçülen neme göre belirli değer limiti atanıp bu nem belirli bir süre bu değerin altında kalırsa sulama sistemi aktif hale getirilmelidir. Topraktaki bu nem miktarını ölçmek için Toprak-Nem Sensörünü kullandık.

Toprak nem sensörü

Toprak Nem Sensörü

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ı mikro denetleyiciler ile rahatlıkla kullanılabilir bir sensördür.

Arduino ile Toprak Nem Sensörünün Kullanımı

Toprak nem sensörümüz Arduino ile analog haberleşmeye imkan sağlamaktadır. Böylece Arduino’muz ile analog okuma (AnalogRead) ile sensörümüzün nem oranına göre 0 ile 1023 arasında değerler almaktayız. Bu değerlerimiz arttıkça topraktaki nem oranımızın da bize arttığını göstermektedir. Yani 1023 değerimiz bizim için en nemli olan değerdir.

Toprak nem sensörümüz ile Arduino arasındaki iletişimi kodlar üzerinden açıklayacak olursak;

İlk önce Toprak Nem Sensöründen analog değerleri almak için Arduino’da Analog 0 (sıfır) pinine bağlıyoruz. Alacağımız analog değerleri atayacağımız bir deger adında bir değişken tanımlıyoruz.

int deger;

Daha sonra analogRead() fonksiyonu ile sensörümüzün değerini okuyoruz. Aldığımız değerler 0–1023 aralığından 0–100 aralığına çevirmek içinde map() fonksiyonunu kullanıyoruz. Bulduğumuz bu değerleri Serial Monitör ile bilgisayarımızda görüntülüyoruz.

void setup() {   Serial.begin(9600);}void loop(){   deger = analogRead(nem);   deger = map(deger,0,1023,0,100);   Serial.print("Deger : ");   Serial.println(deger);   delay(500);}

Böylece Arduino ile Toprak ve Nem Sensörümüzden gelen değerleri okumuş olduk.

Hırsız Alarmı

Akıllı ev sitemlerinin kullanım amaçlarından biri de güvenliktir. Ev sahiplerinin evlerinden ayrıldıkları durumları evlerin güvenliğinin sağlanmasını da akıllı ev sistemleri ile yapabilir. Bunun için sistemimizde kullandığımız yöntem ise evin içerisine koyulan kızılötesi ısı yayan canlı hareketlerini algılayan bir sensör ile hırsızları görebiliriz ve algılayabiliriz.

Akıllı ev PIR sensörü

Böylece kullanıcı alarm sistemi Android arayüz programı ile aktif hale getirdikten sonra sensörümüz çalışır vaziyete gelecek ve eve giren bir kişinin hareketini tespit ederse alarm sistemini çalıştıracaktır. Burada kişiyi görme işlemi için PIR sensörünü kullandık.

PIR Sensörü

PIR sensörlerinin genel kullanım amacı hareketleri algılamaktır. Peki hareketleri bu sensörler nasıl algılıyorlar;

PIR sensörleri ısı bazlı çalışırlar. Sıcak kanlı hayvanlar ve insanlar ısı ve aynı zamanda da kızılötesi bir ışın yayarlar. Bu kızılötesi ışınlar insanlar tarafından gözle görülemezler. Nedeni ise insanların görebildikleri ışık frekansı aralığında değildirler.

PIR sensörü

Gelen kızılötesi ışınlar PIR üzerindeki frensnel lens tarafından algılanır. Frensnel lensin özelliği ise kızılötesi ışığa maruz kaldıkça elektrik yüklü bir yüzey oluşturan bir madde içerir ve bu elektrik yükü de gelen kızılötesi ışığın yoğunluğuna göre değişir.

Bizim kullanacağımız PIR sensör modülü üzerinde SX ve TX olmak üzere iki adet potansiyometre bulunmaktadır. S potansiyometresi sensörün görme mesafesini 3 ile 5 metre arasında değiştirmektedir. TX potansiyometresi ise sensörün hareket algıladıktan sonra ne kadar süre çıkıştan lojik 1 vereceğini ayarlamaktadır.

Sensörün bazı özellikleri ise şöyle;

  • Çalışma Voltajı: 5–12V
  • Lojik sinyal çıkış seviyesi: 3.3V
  • Algılama mesafesi: 3–5 metre
  • Algılama Açısı: 140º
  • Bekleme Süresi: 5–200 saniye

Arduino Kodları

Öncelikle Arduino kodlarımızda Android ile güvenlik sisteminin açma kapama işlemimi kontrol etmemiz gerekiyor. Aşağıdaki kodlarda güvenlik sisteminin açılması için Android üzerinden veri geldiyse alarmın açık olduğunu belli eden ledi yak ve EEPROM’daki 20. alana 1 değerini girerek alarmın açık olduğunu belli et diyoruz.

else if (Bdeger == 5 && (int)EEPROM.read(20)==0){ 
//Güvenlik sistemini AÇMA tıklandı ise
EEPROM.write(20,1); digitalWrite(alarmLed, HIGH); Serial.println("Aciklama :Guvenlik Sistemi ACIK.");}else if (Bdeger == 6 && (int)EEPROM.read(20)==1){
//Güvenlik sistemini KAPAMA tıklandı ise
EEPROM.write(20,0); digitalWrite(alarmLed, LOW); analogWrite(Buzzer,0); Serial.println("Aciklama :Guvenlik Sistemi KAPALI.");}

Daha sonra eğer güvenlik sistemi açıldıysa ki bunun EEPROM’da 20. alandaki değerin 1 olmasından anlıyoruz. PIR sensörünün bize verdiği dijital değeri okuyup bu değerin de 1 olması koşulundan buzzerımızı aktif hale getirip ötmesni sağlıyoruz.

alarmdeger = digitalRead(PIR);if (alarmdeger == HIGH && (int)EEPROM.read(20) == 1){   Serial.println("Aciklama :Hırsız Tespit Edildi.");   analogWrite(Buzzer,1023);}

Öneri & Sonuçlar

Arduino ile yapılan akıllı ev otomasyonumuzda evin çeşitli kontrollerinde bizlere kolaylık sağlayan sistemler ve bunlara ek olarak güvenliğimizi sağlayan sistemler kullandık. Bu sistemlerin yönetim kısmını Arduino ile kullanıcı arayüzünü Android bir uygulama ile yaparken aralarındaki bağlantıyı kablosuz olarak Bluetooth ile sağladık. Bu gibi sistemlerde bazen Bluetooth menzili yetersiz kalabilir.Bunu önlemek için Bluetooth bağlantısı yerine Wifi bağlantısı ile haberleşmesi sağlanabilir.

Arduino üzerine kolay ekleme çıkarma yapılabilmesi işlem kolaylığı sağlamaktadır. Akıllı evlerde kullanıcı arayüzüne sahip akıllı cihazların yanında mutlaka manuel kontrolü sağlayacak elemanlarda eklenmelidir.Burada amaç sistemin devre dışı kaldığı durumlarda isteğe bağlı kontrol edilmesi sağlanır.

Sıcaklık ölçümü yapan DHT11 gibi sensörlerde hassasiyetlerinden kaynaklı bazı hatalar ile karşılaşılabilir. Bu gibi durumları önlemek adına yerine daha hassas ölçümler yapabilen başka sensörler kullanılabilir.

Otomasyon sistemimizde Arduino ile 5 volt çıkış gerilimi verebilmekteyiz 5–400 volt arasındaki gerilimleri ise kontaktör yardımı ile istediğimiz gerilim aralığında kullanabiliriz.

KODLAR

--

--