AHMT, Sadece Gerekli ise Lütfen..

Valize teker eklemek gibi dramatik bir örnek olmasa da; Ses sensörü yerine PIR sensörü takarak AHMT’i harekete daha duyarlı hale getirmiştik.


Bkz: #1, #2, #3#4#5#6#7#8#9#10#11#12, #13görsel


Son durumdaki kodları biraz geliştirelim.

if (biri) {
Serial.println("biri var"); kombi(ISIdeger - 3 , ISIdeger);
} else {
Serial.println("kimse yok"); }

Burada, PIR sensöründen gelecek değere göre, ısıyı kontrol edip kombiye Çalış demesi için, kombi() fonksiyonunu çağırıyoruz.

Ancak yazılımsal olarak imla hatası olmasa da mantıksal olarak öyle mi tartışılabilir. Zira koda dikkat edilecek olursa, “biri” durumuna göre tetikleniyor. Biri=1 ise kombi’yi çağırıyoruz, Biri=0 ise kimse yok yazıyoruz.

Burada sürekli hareket etmemiz lazım ki kombi() fonksiyonu tetiklensin. Aksi halde herhangi bir aksiyon olmayacak. Yani çok fazla hareket etmeden uzanmış youtube izliyorsanız, biraz sonra üşümeye başlayabilirsiniz 


Şöyle bir güncelleme yapsak?

PIR sensöründen Biri=1, değeri geliyorsa, evde hareketlenme başlamış birileri eve gelmiş demektir. Ve kitap unutma/cüzdan unutma gibi vakalar yoksa çok büyük ihtimalle evde uzun bir müddet birileri olacak demektir.

Her iki -hatta tasarruf ögesini de eklersek 3- durumu düşünerek kodlarımızı şu hale getirelim:

if ( biri > 0) {
Serial.println ("biri var");
/* // 60*5 demek: 5 dakika yanacak */
for ( k = 1; k < 60 * 5; k++ ) {
Serial.print (k);
kombi ( ISIdeger - 3 , ISIdeger );
delay (1000); /* // çalışma süresi için durmalı */ }
} else {
Serial.println ( "kimse yok" );
kombi ( ISIdeger - 3 , ISIdeger );
}

gayet kolay ve pratik bir şekilde, kombi() fonksiyonunu bir döngünün içine aldık. Ve döndü adı üstünde başa dönmeden içerisine 1 saniye bekleme koyduk. Böylece; for’un çalışma şeklini belirtirken yazdığımız  k < 60 * 5 kısmında 5 yerine 10 yazarsak 10 dakika ya da Ne kadar süre boyunca kombi()’yi kontrol etmesi gerektiğini ayarlamış oluruz.

Dikkat! 10 dakika boyunca kombi yanacak demiyorum. 10 dakika boyunca kombi() fonksiyonunu çağıracağız.

Aradaki fark ne ki?

Birisinde,
hareketi algıladığında kombi yanacak.
10 dakika sonunda
yeniden hareketi dinlemeye(?) başlayacak.

Diğerinde,
hareketi algıladığında kombi’nin çalışmasına gerek var mı bakacak,
zaten istenen sıcaklık aralığında ise kombi yanmayacak
ama ortam sıcaklığı evde birisi varken olması gereken sıcaklıktan düşükse kombi yanacak.

// evet daha karpuz kesmedik,  evde birisi yokken olması gereken min ve max sıcaklık aralıklarını da kodlarımıza ekleyeceğiz 😉 //ki evde kimse yokken tümden kapanıp, eve birisi geldiğinde iyice buz olmuş evi ısıtana kadar millet hasta olmasın..

AHMT, Kalk salonda biri var galiba :) – İnovasyon

Son yazıdaki Mertcan’ın, çocukların ciğerini solduran ailelere atarlanmasından da anladığımız üzre, geniş alanlar önemli 😉 Biz de elimizdeki cihazın hafızasını optimal kullanmak için;

var yok veya doğru yanlış yahut 1/0 durumları için bool
2, 3, 5, 8, 18, 50, 150, 255 gibi değerler için byte
± 32768 arası için için int
0 – 65536 arası için unsigned int
±  2,147,483,648 arası için long
0 – 4,294,967,295 arası için unsigned long

şeklinde tanımlamalar yaparsak, ileride sorun yaşama ihtimalimiz azalır.

Bu yüzden hatırlarsanız,


Bkz: #1, #2, #3#4#5#6#7#8#9#10#11, #12görsel


Şimdi hareket / PIR sensöründen gelen değerleri, yorumlatalım..

analogRead ile değişken değerleri okurken (örn: sıcaklık, basınç..), digitalRead ile evet/hayır – 1/0 şeklindeki ikili değerleri okuyuyoruz.

biri = digitalRead(pir);

Tabi buraya bir değer gelmesi için, öncesinde  PIR sensörünün Data pinini ( + data -), Arduino’nun 6 dolu Digital pinine fiziksel olarak bağlıyoruz.

bu şekilde biri ‘nin değeri PIR’ın data değerine eşit olacak..
Yani Salonda hareket varsa 🙂 biri = 1 olacak

Ekranda görelim: Serial.print("biriDegeri:"); Serial.println(biri);


Alogaritmaların EN temeli olan IF ile biri hakkında dedikodu yapalım 🙂

Eğer biri, yakışıklı ya da güzelse.. Yok yok öğle değil 🙂

Eğer biri =1 ise, demek ki bir salonda bi hareket vardır. Hemen polisi arayalım.
Tamam tamam.. 🙂 Bunu ekrana yazalım.

if(biri) {
Serial.println ("biri var");
} else {
Serial.println ("kimse yok");
}


İnovasyon

Tekerlek ne zaman icat edildi? MÖ 3000 civarı.

Bavul, 1000 yıl önce?

Peki Tekerlekli Valiz? Daha dün!

> > içten yanmalı motora sahip ilk otomobilin 1885 yılında yapıldığını referans alırsak tekerlekli valiz neredeyse 100 yıl sonra 1972 yılında icat edilmiş. arada atom bombası yapılmış, internet kurulmuş, aya kadar bi arkadaşa bakıp çıkılmış.

Piyasadaki, kablolu ya da kablosuz, kombiyi kontrol eden tüm termostatlar Sadece ISI’yı ölçüp buna göre kombiyi yönetiyor. Biz ise Hareketi de dahil etmiş olacağız. (Ki takip edenlerin bildiği üzere artı bir de Saat olayını ekliyoruz malum. // Oldu olacak, olmuşken Kablosuz olsun.)

Valize teker eklemek kadar basit ama Devasa bir değişiklik durumu olur mu bilmem ama Kombinin yönetimini harekete bağlamak için şu sade kodları yazabiliriz:

Tabi bu haliyle sadece harekete ve sonrasında PIR’dan 15 saniye boyunca gelecek sinyale duyarlı olmuş oldu, hareketi algıladıktan sonra belli bir süre çalışması için biraz elden geçirmek lazım..

Dil Milliyetçiliği – pIR Sensörü bozuk mu Sürekli 1/High Gönderiyor

Tanımlar aşağıdaki gibi olacak ama Başlık hakkında bir kaç kelam etmek isterim detaya geçmeden önce..


 

Bir ırkı, ırk yapan en temel şey sanırım Dil. Bu yüzden sağda solda dilini kaybeden özünü/ülkesini/medeniyetini..  kaybeder gibi sözler duyuyoruz. Tarih kitaplarını falan karıştırsak konuyla ilgili bir sürü şey çıkar sanırım. Fakat o kadar maziye gitmeye gerek yok. Günümüz dünya küresine/haritasına bakmak da sözün ne kadar doğru olduğunu gösterebilir.

Bununla birlikte, parti meselelerinden uzakta, dünyanın herhangi bir ülkesindeki her hangi bir kişinin aşırı milliyetçi olduğunu biliyorsam, o kişinin konulara çok dar açıdan baktığını iddia edebilirim. Bakış açısı daha da darsa prof bile olsa pek ala cahil olduğunu iddia edebilirim. Buna çok içerlerse, en azından günümüz ve gelecek adına işlevi kalmamış bir beyin olduğunu söyleyebilirim //O da beni kendi ülkesinin vatan haini ilan eder 🙂


Bkz: #1, #2, #3#4#5#6#7#8#9#10, #11görsel


 

Diyeceksiniz ki “E be kardeşim ‘Konuşur gibi Türkçe Kod’ serisinde 14 yazı yayınlayan sen değil miydin?”

Evet benim. Mesele şu ki Japonya’da doğmuş olsa idim, “Kodlarımızı Japonca Yazabilmek için Shodo 書道 kütüphanesi” adında yine 14 yazılık bir seri yazabilirdim.

Benim tercihime bağlı olmadan Japonya’da doğduğum için Japonca konuşuyor olmak
ile
Japonya’da doğdum diye geçmişten günümüze tüm Japon imparatorlarını ve günümüz Japon ırkını Kutsayıp, herkesten üstün görmek arasında merih kadar fark var.


Çok fazla Türkçe kaynak olmadığı için, yazının başlığını özellikle seçtim. Hata aramalarında çıksın diye. (Daha dün akşam; komşunun çocuğu kendini oyununu yapmaya istekliydi fakat karışımıza çıkan sayfaların İngilizce olması hevesini kırdı.)


 

pIR Sensörü sağlıklı çalışmıyor 1/High Gönderiyor

Bu sorun 3 hafta belki de 1 ay kaybetmemize sebep oldu. Ama sorun da çözümü de Çok Komikmiş  

Geçen yazılarda geçtiği üzere sensörün üzerinde 3 tane pin, iki tane de ayarlama düğmesi/potansiyometresi var.

Artı(+) Eksi(-) Data(↕) kablolarını DOĞRU bağladığımız halde, sensör olması gerektiği gibi çalışmıyor. Sanki sürekli hareket varmış gibi Sürekli 1/high gönderiyordu. Tak çıkar yer değiştir bir sürü şey denedik. Nihayet sensörün bozuk olduğuna kadar verdik 🙂

Meselenin aslı ise komik dediğim kısım: Şimdi düşünün, hareketle otomatik yanan bir ışık sizin hareketinizle yandı. Hemen 2 saniye sonra sönüyor mu? Hayır elbette en az bir kaç+ dakika yanıyor.

Sensörü takıyoruz, doğal olarak bu esnada minik de olsa hareket algıladığı için HIGH veriyor. 2 Dakika beklesek/beklemek aklımıza gelse, olay çözülecek aslında ama biz güya test etmek için elimizi yeniden önünden geçirip hareket sonrası LOW gelmesini bekliyoruz.  Oysa 2 dakika sonra bitecek HIGH’ın süresini daha da uzatmış oluyoruz. Ve diyoruz ki;  sensör bozuk, sürekli high gönderiyor 


Hareket sensöründen gelen değeri bu kodlarla okuyacağız. Ekrana sürekli biriDegeri: 1 yazarsa panik yapmayın 🙂 ya biraz bekleyin ya da Sarı Düğmelerden, alttan bakınca soldakini çevirip süreyi 15 saniyeye kadar düşürün.


 

Bu kısımda ise dikkat çekmek istediğim bir nokta var.

Ne yazık ki youtube’da ve değişik sitelerde kod yazan arkadaş, her önüne gelen yere

int degisken_adi;

yazıp geçiyor. Bu örnekte mesela, PIR’dan gelecek duruma göre, odada birisi olup olmadığı durumuna bakacağız. Yani, ya VAR ya da YOK. Makina için BİR ya da SIFIR  bu kadar. Neden sadece 2 bit yer kaplayacak bir işlem için 32678 bit kullanalım ki? Böyle bir örnek için
bool degisken_adi; gayet yeterli ve de verimli olarak işimizi görebilir.

Sonra, makina kilitlendi.. dondu.. durduk yere bozuldu vs.  Yapmayın efenim olmaz böyle, cihaz nefes alsın, kendisine biraz oyun alanı kalsın 🙂

 

 

 

Yankı out, Kızılötesi in

Hareket, Sıcaklık ve Zamanı daha akıllıca kullanma Termostat’ı AHMT’in üretim macerasında hatırlarsanız, PIR sensöründe sorun olmuştu ve biz de ilerde değiştirmek üzere yolumuza mesafe sensörü ile devam etmiştik:


Bkz: #1, #2, #3#4#5#6#7#8#9, #10, görsel


Advisable thermostat for Heat, Moving and Time açılımında M’yi yani hareketi farklı yöntemlerle algılayabiliriz.

  • Zemine konacak basınç sensörleriyle
  • Ortamdaki Kızılötesi sıcaklık değişimini takip eden sensörlerle (pIR)
  • Ultrasonic ses dalgaları vericisi ve alıcısıyla (hoparlör/mikrofon) , gönderilen sesin daha yakın mesafeden (aradaki bi engel/birisi..) yankılanmasına göre
  • Üzerine sürekli ışık düşürülen, LDR sensörlerinden okunan ışık şiddetinin değişimine göre

 

Zemini söküp sensör döşeme gibi bir lüksümüz yok.  Ses sensörü sadece önünden geçilen durumları algıladığı için bu proje için tam olarak ideal değil. Evin içinde Laser ışıklarına da gerek yok (bi bu da yine önünden geçilmesi durumunda tetikleneceği için, eh ama pek optimal değil). Son seçeneğimiz:

PIR Sensörü

Pek çok apartmanın merdivenindeki ve cafe gibi topluluk mekanlarının lavabolarında, kapı önü aydınlatmalarında  sıklıkla karşımıza çıkan sensör. Pasive InfraRed sensörü.

 

Bizim kullanma amacımız ise, Evde hareketin olup olmadığını algılamak. Ve hareket yoksa kombiyi minimum seviyede kullanmak.


Donanımsal değişim yaptığımızza göre, UltraSonic mesafe sensörü HRC-04 ile ilgili kodları silip, PIR için kod yazmalıyız..

Sileceğimiz yerler:

Tanımlama bölümünde:

 

Setup bölümünde:

 

Mesafe ölçmek için yazdığımız fonksiyon:

 

Asıl işlemlerin gerçekleştiği Loop içindeki, irdeleme yapıp karar verdiğimiz kısım:


 

PIR kullanımı

pIR sensörü kendi içinde biraz atraksiyonlu olsa da  bağlantısal açısından sade bir mantığı var:

Hareket varsa, data pinine elektrik geliyor, yani 1/high oluyor.

Bu kadar.

Kullanım açısından ise, yerleştirileceği yere göre ayarlamak üzere üzerinde 2 adet pot/düğme bulunuyor.

Birisi algılama hassaslığı için (ki zannediyorum kaç derecelik bir alanı göreceğini belirleyerek bunu sağlıyoruz)

Diğeri de, hareket algılandığında ne kadar süre boyunca 1/high geleceği. Yani daha bilindik örnekle; merdiven otomatiği hareketi algılar ama 30-40 saniye sonra erken söner ya hani.. işte süreyi ayarlamak için çevirdiğimiz yer burası. (bkz: yukarıdaki resimde, soldaki sarı Timing ON-delay düğmesi )


görseller: ozcott,   toolstation
ileri okuma