Arduino ile Akıllı Ev Yapalım… — 1
Akıllı Ev Sistemleri
Akıllı ev, ev teknolojileri endüstrinin birçok alanında kullanılan kontrol sistemlerinin gündelik hayata uyarlanması; ev otomasyonu da, bu teknolojilerin kişiye özel ihtiyaç ve isteklerine uygulanmasıdır. Akıllı ev tanımı, bütün bu teknolojiler sayesinde ev sakinlerinin ihtiyaçlarına cevap verebilen, onların hayatlarını kolaylaştıran ve daha güvenli daha konforlu ve daha tasarruflu bir yaşam sunan evler için kullanılmaktadır. Akıllı evler, otomatik fonksiyonları ve sistemleri kullanıcı tarafından uzaktan kontrol edilebilen cihazları içerirler.
Projenin Özellikleri
Projemizi yapmaya başlamadan önce gelin önce nasıl bir proje yapacağımızdan bahsedelim.
Yapacağımız Akıllı Ev sisteminin özelliklerine bakalım isterseniz.
- Android işletim sistemine sahip akıllı telefonumuz için hazırladığımız program arayüzü ile Bluetooth kullanarak oda ışıklarının kontrolü.
- Android işletim sistemine sahip akıllı telefonumuz ile perde panjurlarının kontrolü.
- Android uygulama arayüzünden ev ısısının bilgisinin otomatik alınması
- Otomatik ısı sabitleme kombi sistemi
- Android uygulama arayüzünden garaj kapısı kontrolü
- Hırsız alarm sistemi
- Toprak nem sensörü ile otomatik toprak sulama sistemi
Arduino ile Akıllı Ev Yönetimi
1. Akıllı Ev Bluetooth Bağlantısı
Akıllı evimizin yönetimi ve kontrolü için Android telefon üzerinden bir arayüz tasarlanmıştır. Bu arayüz ile evimizin kontrollerinin yapıldığı Arduino’nun iletişimini Bluetooth ile gerçekleştirdik.
Arduino’muzun Bluetooth veri transferini sağlayabilmesi için HC-05 Bluetooth modülünü kullandık. Bu modül ile Arduino’muz seri haberleşme ile iletişim sağlar.
Arduino ile HC-05 Modülü Bağlantısı
Arduino ile bağlantısı Şekil 1'deki gibi yapılmaktadır. Burada dikkat edilmesi gerekenler HC-05 modülünün Rx ucu Arduino’nun Tx ucuna, Tx ucu ise Arduino’nun Rx ucuna bağlanması gerekmektedir. Bunun nedeni Tx uçları verici olarak çalışmaktadır.
Bluetooth modülümüzün Tx ucu Arduino’ya veri gönderirken bu Tx uçtan gelen veriyi Arduino alıcı uç olan Rx girişi ile almaktadır. Bu nedenle Rx ve Tx uçları ters bağlanmalıdır. Diğer bir önemli nokta ise HC-05 Bluetooth modülünün 3.3V ile çalıştığı için Arduino’dan 3.3V vermek gerekmektedir.
Bluetooth (HC-05) modülümüz ile Arduino’muz arasında seri iletişim olduğu için bu iletişimin ayarlarını yapabilmemizi sağlayan SoftwareSerial modülünü 1. satırdaki gibi içe aktarıyoruz. ve BBaglanti adında 10 ve 11 bacaklı Rx ve Tx olarak belirleyen bir nesne oluşturuyoruz.
#include <SoftwareSerial.h>
SoftwareSerial Bbaglanti(10,11);
Arduino’muz ile HC-05 aracılığıyla Android uygulamamıza veri alışverişi için setup fonksiyonu içerisinde ortak bir seri haberleşme hızı ayarlıyoruz.
void setup(){
Bbaglanti.begin(9600);
}
Daha sonra Arduino’muz ile Bbaglanti.read() ile Android uygulama üzerinden gelen verileri alabildiğimiz gibi Bbaglanti.write() fonksiyonu ile de Android uygulamamıza veri iletebiliriz.
Android ile yazıcağımız akıllı evimizin kontrol arayüzü yazının devamında verilecektit.
Evet Arduino ile Android arasındaki veri alışverişini nasıl yapacağımızı anladığımıza göre gelin diğer işlemlere başlamadan önce sistemin veri alışverişinin nasıl işleyeceğine bakalım.
Öncelikle kontrolümüzü Android arayüzü üzerinden sağlanacağı için Arduino-Android iletişiminin temel mantığını oturtalım.
Arduino-Android bağlantımızı sağlandıktan sonra Android kısmında her bir buton Arduino’muza belirlediğimiz ayrı bir karakteri gönderecek ve böylece hangi butona basıldığını anlayabileceğiz.
Örnek ile açıklayacak olursak Şekil 3 de İç Aydınlatma bölümündeki AÇIK butonuna bastığımız an o butonun karakteri olarak belirlediğimiz “1” değerini Arduino’muza gönderecek ve bu “1” değerini alan Arduino’muz bunun İç Aydınlatma kısmındaki AÇIK butonunun değeri olduğunu göz önüne alarak buna göre işlem yapacak.
Gelin kodlar üzerinde bunu gerçekleştirmeye çalışalım.
Yukarıda BBaglanti adında bir Bluetooth nesnesi oluşturmuştuk. Oluşturduğumuz bu Bluetooth nesnesine Android kısmında eğer bir veri gelirse bunu BBaglanti.available() fonksiyonu ile anlayabiliyoruz. Bu fonksiyon bize kaç karakter veri geldiğini söylüyor.
void loop(){
if(BBaglanti.available()>0){
Bdeger=(int)BBaglanti.read();
if(Bdeger==1){
//Burada 1 değeri geldiyse uygulanacak kod kısmı
}
.
.
.
}
}
Yukarıda ki kodlara bakacak olursak void loop() içerisinde sürekli bir dinlemeye alıyoruz. if(BBaglanti.available()>0) ile eğer karşıdan herhangi bir veri geldiyse bu kısmı çalıştır diyoruz. Karşıdan bir veri geldiyse bu if kısmı çalışacaktır ve gelen bu değeri okumak için de Bdeger=(int)BBaglanti.read(); satırındaki kodu kullanarak gelen verideki değeri alıyoruz. Daha sonrası ise gayet basit bildiğiniz gibi her bir butonun bir karakter değeri vardı. Bu karakter değerlerine göre bir if oluşturarak işlem yapıyoruz.
2. Android Arayüz Uygulaması
Android arayüzünü oluşturmak için ise kod karmaşasına girmeden blok yöntemiyle bize uygulama geliştirme imkanı sunan MIT App Invertor’u kullanacağız.
MIT App Inventor Nedir?
App Inventor, MIT tarafından geliştirilen ve Android programlama konusunda hiç bilgisi olmayan kullanıcıların bile, sürükle ve bırak yöntemiyle kolayca Android uygulamaları geliştirmesini mümkün kılan bir programdır. Bu program online olarak hizmet vermektedir.
Uygulamaları geliştirmek için birkaç ön adım var. İşte App Inventor kullanmak için bilmeniz gerekenler:
- Uygulamaları geliştirmek için Google hesabı kullanıyoruz.
- Eğer Google hesabımız yoksa buradan açabiliriz: http://gmail.com
- Bu hesabı kullanarak http://appinventor.mit.edu/ sitesine kayıt oluyoruz.
Daha sonra kendi taslağımızı oluşturmaya başlayabiliriz.
Yapım Aşaması
Öncelikli olarak sisteme giriş yaptığımızda karşımıza “Start New Project” yazısı geliyor.
Bu butona tıkladığımızda karşımıza yeni tasarlayacağımız boş bir ekran ve yanlarında kontrol panelleri bulunuyor. Ayrıca sağ üst kısımda bulunan “Designer” ve “Blocks” butonları sayesinde hızlı bir şekilde blok ile tasarım arasında geçiş sağlayabiliyoruz.
Tasarımını yapacağımız ekran üzerine sol tarafta bulunan komut resimlerini sürükleyip ekran üzerine bırakıyoruz. Seçmiş olduğumuz komutlarla ilgili teknik değiştirmeleri ekranın sağ tarafından detaylı bir şekilde yapıyoruz. Daha sonradan seçmiş olduğumuz komutları çalıştırmak için bloklar kısmına geçiş yaparak her türlü işlemi tutup sürükleyerek blokların bulunduğu pano üzerine bırakıyoruz. Bu blokların aktif hale gelebilmesini, ne olarak ve ne ile bağlantılı olması gerektiğini bloklar üzerinde bulunan boşlukları doldurarak sağlıyoruz.
Kendi tasarlamış olduğumuz uygulama ise aşağıdaki gibi hazırlanmış olup komut ve blok dizilimleri de çalışır vaziyette hazırlanmıştır.
Akıllı evimizi kontrol edebilmek için hazırlamış olduğumuz Android uygulamamız bu şekildedir. Bize evimiz ile iletişimde gerekli olan Bluetooh ve zamanlayıcıyı eklemeyi unutmuyoruz.
Çünkü sistemimiz Bluetooth ile haberleşmeyi sağlayacak ve zamanlayıcı ile bu döngünün devamını sağlayacaktır. Aynı şekilde blok satırlarına da bu durumu yansıtmamız gerekiyor.
App Inventor’ın bize sağlamış olduğu kolaylıklardan bir tanesi de kod yazma derdinin olmamasıdır. Bu sayede blok yardımıyla programımızın çalışmasını sağlıyoruz.
Kullanmış olduğumuz bloklar sırasıyla açıklamak gerekirse;
- Tasarım kısmında ekran üzerine koymuş olduğumuz bluetooth simgesine tıklamadan önce kullanacağımız Android cihazın aktif olan bluetooth cihazlarını algılayarak arka planında bulundurmasını sağlıyor.
- Tasarım kısmında ekran üzerine koymuş olduğumuz bluetooth simgesine tıkladıktan sonra karşımıza bluetoth cihazlarının bulunduğu bir ekran karşımıza çıkıyor. Projemiz de bulunan bluetooth kartının adresine tıklayarak android cihaz ile bluetooth kartının eşleşmesini sağlıyoruz.
- Programımıza bir adet zamanlayıcı koyarak bir döngünün olmasını sağlıyoruz. Bunun sebebi de sürekli olarak aktif olan bluetooth cihazlarını bulmasını istediğimiz için böyle bir işlem yapma gereği duyduk. Aynı blok satırı içerisinde bluetooth cihazı ile eşleşme olumlu veya olumsuz ise ekrana yazdırmasını istiyoruz. Bu sayede kullanıcı için de kolaylık sağlanmış oluyor
- Bundan sonraki kısımda koymuş olduğumuz her buton için tıklandığı zaman programlama kartımıza bir sayı gönderilmesini istiyoruz. Buradaki amaç iletişimi daha kolay hale getirip haberleşmeyi sağlamak.
- Sistemimizde bulunan sıcaklık sensörü sayesinde hem program kendi içinde otomatik olarak klima düzeneğinin çalışmasını sağlıyor hem de sensörün ölçmüş olduğu değeri Android uygulamamızda görmemize yardımcı oluyor. Android cihazın programlama kartından bu veriyi alıp derecenin gösterileceği ekrana gelen veriyi yazdırıyoruz.
Akıllı evimizin bluetooth bağlantısını ve Android arayüz uygulamasını oluşturmayı 1. yazımızda görmüş olduk. Arduino ile Akıllı Ev Sistemi… seri yazısının diğer kısımlarında görüşmek üzere.
Akıllı Evin Android APK uygulamasını aşağıdan indirebilirsiniz.
Yazının 2. kısmı