3 Ağustos 2016 Çarşamba

Smart Kettle

Smart Kettle - Developer's Guide to Hot Water Management

                             

Sıcak su ısıtıcısının bekleme ya da kaynama durumunu, içindeki su miktarını hesaplayarak Android cihazındaki Smart Kettle uygulamasından izleyebilirsin. Amaç, Kettle içindeki su miktarı kritik seviyelere indiğinde alarm verip seni ve su ısıtıcını güvende tutmak. Çay veya kahve içmek istediğinde yanına gitmeden uygulamadan bakabilirsin.  Su yoksa ekleyip, kaynadığını ve hazır olduğunu yine uygulamadan görebilirsin.  Su kaynatan bir cihazı uzaktan gözlemenin rahatlığını yaşayabilirsin.

Adım 1: Projede Kullanılan Materyaller

1) Sparkfun ESP8266 Thing Dev;


                       


Sparkfun ESP8266 Thing Dev bir geliştirme kartı. Kart analog giriş, dijital giriş/çıkışa sahip, ground, +5Volt, +3.3 volt çıkış pinleri var. Analog giriş denildiğinde 0 ile 5 volt arasında değer ölçümü  yapabilme özelliğine sahip giriş olarak düşünülmelidir. Ancak ESP8266 geliştirme kartında bu ölçüm aralığı 0-1 volt olarak sınırlandırılmıştır.   Dijital pinler ise örneğin bir ledi yakmak istediğinizde 4 ile 5 volt arasında bir voltaj değeri sağlamaktadır. Ledi söndürmek istediğinizde 0 volt vermektedir.  

Ground 0 volt, +5 volt ve +3.3 volt çıkış projelerinde ek güç kaynağına gerek kalmadan ledi yakmanı veya sensörlerini çalıştırabilmeni sağlamaktadır. 

Detaylı teknik bilgi için linkte bulunan Sparkfun resmi sitesinde bulunan dokümanları incelemelisin.


Geliştirme kartını bu linkten satın alabilirsin.

Robotistan Sparkfun ESP8266 Thing Dev

Sparkfun ESP8266 geliştirme kartını Arduino IDEsine tanıtmak için aşağıdaki siteyi incelemelisin.


                                        

2) Ağırlık Sensörü 0-5kg




Ağırlık sensörünü, kettle içindeki su miktarını hesaplamak için kullandım. Sensörün çalışma aralığı kg bazında geniş değil ancak proje içinde çalışma aralığının az olması ölçüm hassasiyeti açısından artı fayda sağla.

Ben ağırlık sensörünü İstanbul/Karaköy'de bulunan Selanik Pasajının en alt katındaki bir mağazadan temin ettim. Sen aşağıdaki linkten satın alabilirsin.



                                          

3) SparkFun Ağırlık Sensör Kuvvetlendirici (HX711 Load Cell Amplifier)

Bu kart ağırlık sensörünün kontrol edilmesi için kullanıl. Kart ağrılık sensöründen aldığı analog verileri dijital sinyallere çeviriyor ve dijital pinleri kullanarak ESP8266 ile haberleşiyor

Sensörü satın aldığım link:
  

Sensöre ait deyatlı bilgilere aşağıdaki linkten ulaşabilirsin.


Ağırlık sensörünü kalibre etmek için YouTube'da bulunan bir videodan yararlandım. Video linki:

Kalibrasyon Videosu
                                              

4) LDR 





LDR'nin türkçe karşılığı ışığa duyarlı direnç olarak düşünülebilir. Foto direnç üzerine düşen ışık miktarıyla ters orantılı değişerek çalışıyor. LDR aydınlıkta maksimum iken karanlıkta direnç minimum olarak ölçülebilir. 

Aşağıdaki linkten LDR'yi satın alabilirsin.

5MM LDR



5) Röle


                          
Röle, elektromanyetik çalışan bir devre elemanıdır. Yani üzerinden akım geçtiği zaman çalışan devre elemanıdır. "Röle", başka bir elektrik devresinin açılıp kapanmasını sağlayan bir elektriksel anahtardır. Bu anahtar bir elektromıknatıs tarafından kontrol edilir.

Röleler düşük akımlar ile çalışan elektromanyetik bir anahtardır. Üzerinde bulunan elektromanyetik bobine rölenin türüne uygun olarak bir gerilim uygulandığında bobin mıknatıs özelliği kazanır ve karşısında duran metal bir paleti kendine doğru çekerek bir veya daha fazla kontağı birbirine irtibatlayarak bir anahtar görevi yapar.
      

                                     

6) Breadboard



Türkçe'ye deneysel devre tahtası olarak çevrilebilir. Elektronik devreler tasarlandığında elemanların çalışıp çalışmadığını bağlantıların düzgün olup olmadığını kontrol etmek için kullanılır.
Aşağıdaki linkten satın alabilirsin.

Breadboard 

                                     

7) 10mm Sunta 




Projede ağırlık sensörünü sabitlemek ve geniş yüzeye sahip olmasını sağlamak için kullandım. 

Bu parçayı bir marangozdan temin edebilirsin.

                                 

8) Cıvata ve Somun


Somunu ağırlık sensörü ve sunta arasında bir miktar boşluk oluşturmak, vatayı ise ağırlık sensörü ile suntayı birleştirmek için kullandım.


Bu parçalar için adres en yakın nalbur.

                                

9) Konektör Seti


Kettle üzerinde kablo ve bant bulundurmadan, görüntü ve işlevselliği bozmadan projenin çalışmasını sağlamak için kullandım.

Aşağıdaki linkten temin edebilirsin.



Adım 2:  ArCloud

      


ArCloud'u ARDIC Teknoloji firması tarafından sağlanan bir IoT platformu olarak tanımlayabilirim. ArCloud sayesinde sensörlerden alınan verileri kolayca clouda aktarıp bu sensörlerin kontrolünü sağlayabilirsin.  Bu sistem sayesinde aklına gelebilecek herhangi bir cihazın davranışlarını uzaktan izleyebilirsin. Hatta ve hatta bazı cihazlarını uzaktan erişim sayesinde kontrol ederek istediğin şekilde çalışmasını sağlayabilirsin. Bunun için önce bir hesap açmak gerekiyor.

Adım 3: Android SDK ve Gerekli Yazılımların Kurulması
  
Öncelikle aşağıdaki linkten Android Studio programını indirip kurulumunu yapmalısın.

Daha sonra (yüklü değilse) Java SDK'yı indirip kurmalısın.

Java SDK

Ardından Arduino IDE yazılımını indirip kurulumunu yapmalısın.


Android programlama için YouTube listesini paylaştığım videolara göz atabilirsin. Andorid Studio ve Java kurulumu ilk videoda bulunmaktadır. 



Adım 4: Arduino Kod

Projeye ait Arduino kodlarını github hesabımda bulabilirsin.
  

Ben bu projenin Arduino kodlarını yazarken ARDIC Teknoloji firmasının github hesabında bulunan Iot-Ignite projesinden yararlandım. Iot-Ignite projesine ait kodlara aşağıdaki linten ulaşabilirsin.

ARDIC Teknoloji Github

      
  
Adım 5: Android Kod

Projeye ait Android kodlarını github hesabımda bulabilirsin.


Adım 6: Projenin Yapılışı

                                                   
                                                                   Kettle’ın içinde led boyutunda kırmızı ve yeşil lambalar bulunuyor. Led ve lamba arasındaki fark: led genellikle 1 volt arasında çalışırken, lamba 220 volt ile çalışıyor. 

LDR yeşil lambanın yandığını  ya da söndüğünü görecek şekilde yerleştirilmiş. ESP8266 geliştirme kartı LDR'nin ölçtüğü 0 ile 1 volt arasında değişen değerlerini 0 ile 1024 arasında bir değere dönüştürüyor. LDR'nin iki direnç ile değişken voltaj değerlerinin ölçülmesi gerekiyor. İki direnç sayesinde gerilim bölücü kullanılarak daha sağlıklı voltaj ölçümü yapılabiliyor. 
     
1k ohm değerine sahip direncin bir bacağı Dc gerilimin toprağına bağlı iken diğer bacağı LDR'nin bacağına bağlı ve LDR'nin boşta kalan bacağı ise Dc5 volta bağlı. Direnç ve LDR'nin bacaklarının bağlı olduğu noktayı analog girişine bağlandığında LDR'nin değişken değerlerin ölçülebiliyor. Yeşil ışık yandığı zaman LDR değeri geliştirme kartında 1024 değerine yakın bir değer ölçülüyor. 

Kırmızı ışık yandığı zaman ise 200’e yakın bir değer ölçülüyor, bu değer minimuma yakındır ancak 0 değildir. 0 ya da 0'a en yakın değer kettle tamamen kapalı ya da LDR bağlantısı olmadığı zaman ölçülüyor. Ölçülen LDR değeri 1024'e yakın olduğu durumda kettle'ın bekleme modunda çalıştığı, 200'e yakın değerler ölçüldüğünde kaynama modunda olduğu ve 0'a yakın değerler ölçüldüğünde ise kettle'ın aktif olmadığı anlaşılıyor. 

Kaynaklarda load cell olarak geçen ağırlık sensörü metal bir yüzey üzerine uygulanan kuvvetin şiddetini elektrik sinyaline çeviren dönüştürücü olarak düşünülebilir. Bu dönüştürme işleminden elde edilen elektrik sinyali çok düşük gerilime sahip olduğundan bu gerilime load cell amplifier adındaki kart ile yükseltme işlemi uygulanmalıdır. Aynı zamanda bu kart ağırlık sensöründen gelen analog veriyi dijital veriye çevirme işlemini de yapıyor. 

Analog veriyi dijital veriye dönüştürme işlemi ESP8266 geliştirme kartının sadece bir analog girişe sahip olması ve bu girişte LDR'nin bulunması durumunda ağırlık verisinin ölçülmesinde kolaylık sağlıyor. Ağırlık sensörü ve kuvvetlendirici bağlandığı anda doğru ölçüm için kalibrasyon gerekiyor. Öncelikle ağırlık sensörünün üzerinde ağırlık olmadığında ölçtüğü veri ESP8266 geliştirme kartını bilgisayara bağlayıp Arduino uygulaması seri port ekranından gözlemleyip not edilmeli. Bu projede kullanılan ağırlık sensörü için 306734 sayısına yakın değerler gözlemledim. Bu değeri, ölçülen değerden çıkardıktan sonra ağırlığı bilinen bir nesne ağırlık sensörünün üzerine konulmalı ve yeni gözlemlenen değere bölünüp bilinen ağırlıkla çarpılmalı. Bu işlemlerden sonra ağırlık sensörü kullanıma hazırdır. 

Daha detaylı anlatım için aşağıdaki videoyu inceleyebilirsin.




Adım 7: Sparkfun ESP8266 ile Sensör Bağlantıları

                       

Fritzing çizimi ile bağlantının nasıl olması gerektiği gösteriliyor. Ancak Esp geliştirme kartında bulunan analog girişin ölçebileceği maksimum değer 1 volttur. Bu yüzden LDR kullanılan direnç değerini 
           Vout= Vin*(R2/R2+R1) 
formülü ile hesaplayıp maksimum çıkış voltajını 1 volt olacak şekilde hesaplanan direnç değerini kullanmalısın.

Diğer önemli nokta ise ağırlık sensörü kalibrasyonu esnasında Ardiuno uygulaması seri port ekranındaki ilk değerler - ise yeşil ve beyaz kabloların yerlerlerini değiştirmelisin. Projede kalibrasyon işlemi sırasında bu sorunla karşılaştım.

Ağırlık sensörü kalibrasyonunu linkte bulunan videoyu izleyerek yapabilirsin.


Kalibrasyon Videosu

Adım 8: Ağırlık Sensörünün Sabitlenmesi


                            


Yaklaşık aynı boyutta iki sunta edindim. Sunta ile ağırlık sensörü arasında boşluk yaratmak için somun kullandım. Cıvata ile de sunta ve ağırlık sensörünü birleştirdim. 

                            

Resimdeki cıvataların genişlikleri birbirinden farklı. Öncelikle suntaların tam ortasına ağırlık sensörü gelecek şekilde ayarlayıp ağırlık sensörünün deliklerini işaretledim ve suntayı deldim. İşlemi ikinci sunta için tekrarladım. Delmeden sonra taban sunta ile sensör arasına bir ya da iki somun koyarak monte ettim. Bu sırada ağırlık sensörünün üzerindeki ok aşağı gelmelidir.  

                          


Ardından ağırlık sensörünün üstünde bulunması gereken sunta monte edilmelidir.

                         


Cıvatalar düzeneğin kımıldamasına imkan vermeyecek şekilde sabitlenmeli. Montaj sonrasında ağırlık sensörü tekrar kalibre edildikten sonra ağırlık sensörü kullanıma hazırdır.


Adım 8: Rölenin Bağlanması

Röle, su miktarı kritik seviyeye indiği zaman güvenlik amacıyla kettle'ın elektriğinin kesilerek olası tehlikelerin önüne geçmek için projede kullanılmıştır. Kettle dock üzerinde olmadığında ya da kettle içerisindeki su miktarı 0.2 litre altına indiği zaman röle kapanarak güvenlik sağlanmıştır. Aynı zamanda bu röle eğer ki kettle içerisindeki su miktarı 0.2 litre üzerinde veya kettle dock üzerinde ise Smart kettle android uygulamasında kapatabilir veya açabilirsiniz.

Manyetik bir anahtar olan röle, anahtar devreye nasıl bağlanıyorsa aynı şekilde bağlanmalıdır. Bu bağlantıyı yapmak için kettle'ın kablosu ile çalışabilir veya yeni bir kablo alıp bu kabloyu kesip biçebilirsiniz. Kablo içerisinde bulunan üç kablodan mavi olanının ortadan kesiyoruz ve bu kablonun bir ucunu rölenin sol girişine diğer tarafını ise rölenin orta girişine bağlanmalıdır. Burada dikkat edilmesi gereken tek önemli nokta prizden gelen ve sürekli elektrik olacak kablo sol tarafta bulunmalı. Ortada ise kettle'a giden kablo bağlı olmalıdır.

NOT!!  

ESP8266'nın pinlerindeki voltaj çıkışı 3.3 volt olduğunu fark ettim. Bu yüzden rölenin açılması ve kapanmasında sorun oluşmaktadır. Ben bu sorunu bir adet BC237 transistör ve iki adet direnç ile çözdüm. Transistörün colllektor bacağına bir adet direnç bağlayıp direncin diğer bacağına +5 volt ve beyz bacağına röle çıkış pinin önüne dirençç koyarak bağladım. emiter bacağını da grounda bağladığımda. Röle sorunsuz çalışmaktaydı.

Adım 9: LDR'nin Kablolarından Kurtulma

Kettle'ın kaynama ya da bekleme durumunda çalıştığını anlamak için kullanılan LDR'nin çalışmasını iki adet kablo sağlamaktadır. Bu iki kablo kettle üzerinde bulunduğunda kettle'ın kolay kullanımını engellemektedir. Bu yüzden kablolar kettle içerisinden bağlanmalıdır. Bu bağlantı kettle'ın dış görünümü bozulmayacak aynı zamanda yeni eklenen özellik de kullanılabilecektir.



Bunun için 20x20 cm boyutunda bakır plaket kettle'ın tabanı boyutunda ve şeklinde kesilmelidir. Kesilen bakır plaket üzerine iki adet daire çizilerek içi asetatlı kalem ile boyanmalıdır. Boyama işlemi tamamlandıktan sonra plaket tuz ruhu ve perhidrol karışımına atılarak boyasız kısımlarda bulunan bakır eritilmelidir. Plaket üzerinde sadece boyalı kısım kaldığında bu boyalar tiner ile temizlenmelidir.

Boyalar temizlendikten sonra ortaya iki tane bakır daire çıkacak. Ldr'nin kablolarını kettle'ın altından bu dairelere denk gelecek şekilde çıkarttıktan sonra bakır plaketi kettle'ın dockuna sabitleyip konektörü de bakır plakete lehimlenmelidir. Bu işlemin ardından LDR kablolarından kurtulduk.


          

Adım  10: Smart Kettle Nasıl Çalışır

Geliştirme kartı olan ESP8266 LDR ve ağırlık sensöründen aldığı verileri her sensör için farklı koşullardan geçirip son çıktıyı sunuyor. Son çıktıya bir örnek için LDR sensörünü kullanalım. LDR sensörünün bekleme modunda 1024, kaynama modunda 300 ve tamamen kapalı iken 25 civarı değerler ölçüldüğünden 800’den büyük değerlerde kettle bekleme modunda, 800’den küçük değerlerde kaynama modunda gibi çıktılar alınabiliyor.

Sensörlerden alınan veriyi veya sensör verisinin koşullardan alınan çıktıları bir Android cihazda yüklü Smart Kettle uygulamasına yollanıyor. Android uygulaması ve ESP8266 arasındaki veri alışverişi TCP Socket bağlantısı ile yapılıyor. ESP bir yerel ağa bağlandığında iki dakika boyunca Smart Kettle uygulaması yüklü cihazın bağlanması için aktif oluyor. Bu bağlantı süresi iki dakika olmak zorunda değil, tercihe göre on saniye'den 10 dakika'ya kadar ayarlanabilir. Projenin Android uygulaması TCP Socket ile ESP8266 geliştirme kartından aldığı sensör bilgilerini Android uygulama ekranında bulunan textboxlarda gösteriyor.

Android uygulamasında her sensörün bir thing (nesne) olarak tanımlaması gerekiyor. Her sensör bir nesne olarak tanımlandığında, her bir sensör için farklı kurallar, konfirgürasyonlar oluşturulabiliyor. Örneği bir sensörün ölçüm aralğını saniyelerle belirlerken, bir diğerini dakikalar verebiliyorsun. Sensör verilerini uzaktan izleyebiliyor ve yine uzaktan kontrol edebiliyorsun. 

Sensör bilgilerini uzaktan izleyebilmek için öncellikle ARDIC Teknoloji tarafından geliştirilen Iot-Ignite kütüphanesine sahip olmak ve bu kütüphaneyi Android uygulasında kullanmak gerekiyor. Iot-Ignite kütüphanesi ile sensör bilgilerini ArCloud'a gönderebilir, sensörlerin uzaktan erişim sayesinde istediğin şekilde çalışmasını sağlayabilirsin. ArCloud’a erişim sağlayabilmek için hesap açmak gerekiyor. Iot-Ignite kütüphanesine ait daha fazla bilgiye ulaşmak ve kütüphaneyi indirmek için ARDIC Teknoloji github hesabını kullanabilirsin.

Kettle içerisindeki su miktarını ve çaydanlık içerisindeki çay miktarını hesaplamak, su miktarındaki zamanla azalmayı takip için bir algoritma yazılmıştır. Algoritma içerisinde 7 adet State bulunmaktadır.

State 1: RGB=Sarı;

Su ve çay miktarları sıfırlanıyor ve kettle'ın dock üzerine konulması bekleniyor.

State 2: RGB=Yeşil;

Kettle dock üzerine konulduğu anda su miktarı hesaplanıyor ve eğer ki üzerine çaydanlık koyulmadı ise su miktarındaki azalma sürekli hesaplanıyor.

State 3: RGB=Mavi;

Kettle üzerine çaydanlık konulduğunda içerisindeki çay miktarını hesaplayıp kettle içerisindeki su miktarındaki azalmayı sürekli olarak hesaplar.

State 4: RGB=Mor;

Kettle üzerinde çaydanlık yokken su miktarının 0.5 litrenin altına indiğini gösterir ve su miktarındaki azalmayı hesaplamaya devam eder.

State 5: RGB=Mor;

Kettle üzerinde çaydanlık varken su miktarının 0.5 litrenin altına indiğini gösterir ve su miktarındaki azalmayı hesaplamaya devam eder.

State 6: RGB=Kırmızı;

Kettle üzerinde çaydanlık yokken su miktarının 0.2 litrenin altına indiğini gösterir ve güvenliği sağlamak için rölenin kapandığını anlatır.

State 7: RGB=Kırmızı;

Kettle üzerinde çaydanlık varken su miktarının 0.2 litrenin altına indiğini gösterir ve güvenliği sağlamak için rölenin kapandığını anlatır.



ArCloud ve uygulama proje ekran görüntüleri;


Uygulama ekranı - Kettle prize bağlı değil.




ArCloud(E-HUB) ekranı - Kettle prize bağlı değil.

                               

Uygulama ekranı - Kettle bekleme durumunda.

                                                   

ArCloud(EHUB) ekranı - Kettle bekleme durumunda.


                                   


Uygulama ekranı - Kettle kaynama durumunda.


                                                        


ArCloud(EHUB) ekranı - Kettle kaynama durumunda.


                                     


ArCloud(EHUB) ekranı - Kettle ağırlığı.(Kettle'da su yok)

                                     


ArCloud EHUB configuration ayarları;

LDR sensörü configuration ayarları


                           


Weight sensör configuration ayarları