AHMT: Kombi() fonksiyonu upgrade

Yürüyen İnternet yazısı ile uçuşa geçip 🙂 HTTP benzeri ya da ötesi kendi protokollerimizi yapabileceğimizden bahsetmiştik.

Yeniden AHMT’e dönelim. Hareket algılayıcı taraf ile direk kombiyi kontrol edecek tarafın, Radyo sinyalleriyle Kablosuz haberleşmesi için AHMT’e nRF2401L ilave etmiştik.


Bkz: #1, #2, #3#4#5#6#7#8#9#10#11#12#13#14, yürüyen internetgörseller


 

Kütüphane kısımını düzenledik ama Fonksiyonları da buna göre düzenlememiz lazım ki bir bütün olarak sistemimiz sağlıklı bir şekilde çalışabilsin.. // madem öyle ilgili kısımlara bütün olarak bakalım..

Let we do

Tanımlama kısmında şu kodları ekleyelim:

#include
#include
RH_NRF24 nrf24;

void setup(){ içine } şunları ekleyelim:

while (!Serial); // Leonardo için
if (!nrf24.init())
Serial.println("kurulum hatasi");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("radyoKanali hatasi");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("nRFhiz hatasi");

Kombi fonksiyonumuzu şu şekilde yeniden düzenleyelim:

void kombi ( byte alt, byte ust ) { /* alt ve üst sıcaklık değerlerini kullanıyoruz */
byte dereceDeger = derece();
if ( dereceDeger < alt ) { yanson(2); Serial.print("kombi Yandi: "); uint8_t data[] = "AC"; Serial.print( "AC" ); nrf24.send ( data, sizeof( data ) ); nrf24.waitPacketSent(); /* Radyo sinyali olarak gonderelim */ /* digitalWrite (role, LOW); */ } else if ( dereceDeger >= ust ) {
Serial.print( "kombi Sondu: ");
uint8_t data[] = "KAPA"; Serial.print( "KAPA" );
nrf24.send( data, sizeof ( data ) );
nrf24.waitPacketSent();
/* digitalWrite ( role, HIGH ); */
}
else {
yanson(30);
Serial.print( "-kombi else-" ); /* digitalWrite ( role, LOW) ; */
}
}

 


kombi() fonksiyonu içindeki digitalWrite ( role, LOW ) ve digitalWrite ( role, HIGH ) kısmı, inceleyen gözle bakan birisi için ters gelmiş olmalı.

Gelmediyse de açıklama yapayım 🙂
Zira bu basit terslik yüzünden başka bir projede bir kaç gün kaybetmiştik.

Aslında orta okulda öğrenmiştik..

“Hojcaam bu gerçek hayatta ne işimize yarayacak kii” sesleri eşleğinde öğretmenler şunu hemen hepimize anlatmıştı:
Bunun gibi __/ __  bir devre açık demek.. ama bu aynı zamanda elektrik geçmediği için lamba kapalı demek. Lambayı açmak için devreyi kapatmamız lazım.

Dolayısıyla, Role’ye LOW gönderiyoruz.
yani içindeki mıknatıs-devre düzeneğini kapatacak,
veyani üzerinden elektrik geçmeye başlayacak,
veyani röleye bağlı olan kombi çalışmaya başlayacak 😉

HIGH durumu için de tersi elbette..

Yürüyen İnternet

Hareketi/sıcaklığı/zamanı algılayıp bunlara göre kombiyi yönetebilmesi için AHMT‘i,  Hareketin bulunduğu mekana koyalım demiştik. Ve bu durumda Balkondaki kombi ile iletişim sorunu çıkmıştı.

Biz de asırlık  bir teknolojiyi, Radyo frekanslarını kullanarak çözüme gitmiş. AHMT’e bir de radyo frekans modülü (nRF2401L) eklemiştik. [Ya Evde Yoksan? + Radyo’dan Haberleşme]

Fakat o da ne modülün kütüphane kodlarında garip bir şey vardı..

Görsel1 Görsel2

Saniyede 2 Megabit’lik bir hızdan bahsediyor.

nRF modülü için teorik olarak 500 metre – 1000 metre gibi rakamlar söz konusu olsa da; şehir içi evler ve yollar gibi gerçek hayat ortamlarında bizzat test ettiğimizde, açık alanda 200 metre civarında, arada en fazla bir duvar olmak şartıyla ev içi ortamlarda az bir kayıpla haberleşebiliyor.

Bu mesafe Bluetooth’un 10-15 katı, Wifi modemlerin 2-3 katı bir uzaklık demek. Üstelik hız da; -şimdilerde vatandaşlık maaşı deneyleri yapan- Finlandiya’nın, daha önce Geniş Bant İnterneti İnsan Haklarına Dahil Edip ardından tüm vatandaşlarına ücretsiz olarak sunduğu 1 Mbit hızın iki katı.

Diyorum ki;
Yürüyen uçak yapabiliriz 

Kendi Kablosuz İnternet Protokollerimizi bile geliştirebiliriz.

E hadi standart demeyelim ama kendi özel iletişim sistemlerimizi kurabiliriz pek ala. “Uçuyorsun..” diyeceklere şöyle yanıt vermek isterim:  Düne kadar (1992) ASCII  varken, Bob ve Ken kafa kafaya verip UTF-8’i çıkardılarsa, yeni bir tanesi daha neden olmasın?

Atıyorum;
Daha önce geçtiği üzere bazı kelimeler daha çok kullanılıyor. [Steemit’te En Çok Kullanılan Kelimeler]

Çok basit 3-5 analiz ile Türkçe’de en sık kullanılan kelimeleri bulmak pek ala mümkün. Kaldı ki UTF8’in sunduğu  2,097,152 karakter sayısı hacmine, Türkçe’deki 616.767 kelime+deyimin 3.4 katı sığdırılabilir. (ekler ve tanınmayan heceler için öyle zemberek vari kelime yorumlama işlemlerine hiç girmeden basit formüller bulunabilir)

Yani?

İki saniye şuraya bi bakalım:
https://onlineutf8tools.com/convert-utf8-to-binary

“yağmur yağacak” yazabilmek için 32 byte harcadım.
bize hayli yetecek şekilde her kelimeyi 4 byte ile kodlamış olsak, 8 byte ile aynı iletişimi kurabiliriz. Yani şöyle:

y = 0111101
yerine
yağmur = 0111101

Abartırsak, bu sistem, web sitesi tarzı 4000X adet sunucu sayısının, 1000X adete düşmesi demek aynı zamanda text bazlı internetin 4 kat hızlanması demek.

Hatta yukarıdaki kelime öbeğindeki gibi sık kullanılan kelimeler ilk 1-2 byte içine oturacak şekilde ayarlanırsa çok daha optimize bir sistem ortaya çıkabilir.

Dünya Kabul Edecek mi?

AHMT’in Kombi haberleşmesi için Radyo frekans 1/0-AÇ/KAPA gönderebiliyorsak,
0111101 gönderince, arkadaşımın cihazının ekranına y yazdırmak yerine yağmur yazdırmak çok mümkün. Anteni biraz güçlendirince, toplasan 3-4-5 hava alanı kadar yer kaplayan Uşak’ta bizim işimizi hayli hayli görür..

Dünya kendi bilir 

 

Ya Evde Yoksan? + Radyo’dan Haberleşme

Harekete daha duyarlı hale getirdiğimiz AHMT‘i, Hareketsizlik durumları için de daha optimal hale getirmiştik. Bunun için kombi() fonksiyonumuzu belli bir süre boyunca dönecek bir döngü içine almıştık.

/* // 60*5 demek: 5 dakika yanacak */
for ( k = 1; k < 60 * 5; k++ ) {...; delay(1000); }


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



Ya, Evde Yoksak?
(haliyle hareket te yoksa)

 

 

Ve işten/okuldan eve gelecek olduğumuzda, sıcak bir ev istiyorsak..
böyle durumlar için DS3231 saat modülünü işletmiştik. Yukarıdakine benzer bir döngüyü bu kısım için de kullansak sanki daha şık olacak.

Yani SAAT kısmı için kodlarımız şöyle olacak;


String saat = zaman.getTimeStr();
Serial.print ( "saat" ) ; Serial.println ( saat) ;
if (saat == "06:00:00") {
Serial.print (" **Eve gelişe yarim saat kaldı.. hareket olsun veya olmasın kombi yansın " ) ;
yanson ( 10 ) ;
for ( k = 1; k < 60 * 10; k++ ) {
Serial.print ( k );
kombi ( ISIdeger - 3 , ISIdeger ); delay ( 1000 ) ;
}
}

for’daki, k < 60*10 kısmıyla;
eve gelmeden önce, ne kadar süre ile kombi fonksiyonun tetikleneceğini ayarlamış oluyoruz. (10 dakika vb)

ISIdeger-3 ve ISIdeger kısımlarıyla, istenen sıcaklık aralığı da ayarlanabilir. (ISIdeger düğmeyi/potu çevirerek ayarladığımız değer)


Peki.. güzel.
Bu cihaz hareketi algılamak için salon ya da oturma odası gibi mekanlarda olacak.
Amma velkain


Kombi mutfakta ya da balkonda
.
Nasıl olacak bu iş?

Bu soruya, 100-150 yıl önceden gelen bir yanıt verebiliriz: Radyo.

Ki ilginç bir şekilde Radyo, Melon Şapka ya da İlaç Müzik türü yayınlardan çok önce (1894 Lodge, 1898 Tesla) ses için değil Uzaktan bir cihazı Çalıştırmak için kullanılmış. 


nRF24L01

Buradaki n harfinin Nordic/Norveç/İskandinav’a atıf yapıyor olması bana farklı şeyler düşündürüyor..
.. bir chip‘im bile yok anlıyor musun,
.. iklim değişikliği ise ayrı mevzu.. 

anyway..
Kodlarımıza nRF kütüphanemizi ekleyelim. (farklı kütüphaneler var, nRF modülünden hiç tepki gelmiyorsa, bir başka kütüphaneyi deneyebilirsiniz)

#include
#include
RH_NRF24 nrf24;

Arduino’ya güç geldiğinde Radyo modülümüzü başlatmak için,   void setup() { . . } içine  şu kodları ilave edelim:

while ( !Serial ); // Leonardo için, seri portu bekleyelim
if ( !nrf24.init() )
Serial.println ( "kurulum hatasi" );
// Başlatma sonrası yayın: 2.402 GHz ( channel 2 ), 2Mbps, 0dBm
if ( !nrf24.setChannel(1) )
Serial.println ( "radyoKanali hatasi" );
if ( !nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm) )
Serial.println ( "nRFhiz hatasi" );

HEY dur bi dakika, Bİ DAKİKA! Nasıl yani? Burada 2 Mbps diyor!?

Evet, düşündüğün şey 😉

E o zaman Çok harika, Yürüyen Uçak yapabiliriz!

Evet!! Kesinlikle!!

 

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..

Zamanı Bilmek

“What time is it?” sorusu ile “What is the time?” sorusuna verilecek cevaplar hayli farklı olsa gerek 😉

Her gün kullandığımız bir kelime Zaman. Ama 2 kelimelik bir soru bizi derin düşüncelere gark edebilir.

Zaman nedir?


Görsel
Evveliyat: #1, #2, #3#4#5#6#7, #8, #9

Cevabı size bırakıp, başka bir soru daha sorayım.

Zamanı nasıl ölçeriz?

Günümüzde 1 Saniye’nin yaklaşık tanımı şöyle: Sezyum atomun 9.192.631.770 defa titreşimi için geçen süre.

? Neredeyse komik bir tanımlama. Ancak Sezyum hayli karalı olduğu için zamanı, 100 milyon yılda 1 saniye sapacak hassasiyette ölçebilir. Bu da geçen yazıda bahsi geçen senkronizasyon sorunlarını minimize etmek demek.

Bununla birlikte, daha yakın zamanda geliştirilen başka atom saatleri de var. Örneğin:

.. stronsiyum atom saati o kadar hassastır ki, Büyük Patlama’dan beri (yaklaşık 14 milyar yıldan beri) çalışıyor olsaydı bugün zamanı 1 saniyeden daha az bir hata ile gösteriyor olurdu.

..

genel görelilik kuramının en önemli sonuçlarından biri, zamanın akış hızının kütleçekiminden etkilenmesidir. Dolayısıyla yeryüzünden farklı yüksekliklerdeki saatler farklı hızlarla çalışır. Dünya gibi küçük gezegenlerin etraflarındaki zayıf kütleçekim alanlarında bu etkiyi sıradan saatlerle ölçmek çok zordur. Ancak en son geliştirilen stronsiyum atom saatlerinin yüksekliğini sadece 2 santimetre değiştirerek zamanın akış hızında meydana gelen değişiklikleri gözlemlemek mümkün.

http://bilimgenc.tubitak.gov.tr/makale/atom-saatleri


Bizim AHMT örneğinde bu kadar hassas ölçümlere gerek yok ancak, Elektrikler kesilse bile Zaman Bilgisi’ni hafızasında tutacak, “Saat kaç? Bu günün tarihi ne?” gibi sorulara yanıt verecek bir modül kullanıyoruz.

Neden?

Hatırlarsanız, AHMT‘i sıcaklığa ve harekete duyarlı hale getirmiştik. Verdiğimiz değerlere göre oda sıcaklığını ayarlamak için kombi() fonksiyonu yazmıştık.

Bu, oda sıcaklığını diyelim 22 derecede tutmak için kombiyi çalıştırıp-durduruyordu. Bu fonksiyonu Hareket algılama içinde kullanınca; odada hareket yoksa, sıcaklığı 22 derecede tutmaya çalışmak yerine minimum değerde tutuyordu.

Buraya kadar her şey güzel. Fakat bi sorun var.

Herkes işte ya da okulda iken, odada hareket olmadığı için oda sıcaklığını minimumda tutacak bu iyi ama eve geldiğimizde 22 derecelik değil daha serin bir ev bizi karşılayacak demek.

Elimizde bir Gerçek Zaman Modülü olursa, Saat kaç? diye sorup, eve geliş saatinden yarım saat önce kombinin çalışmasını sağlayabiliriz 😉


Saat modülümüzün kütüphanesini ekledikten sonra. Pinleri belirterek Zaman nesnesi oluşturalım.

#include
DS3231 zaman(SDA, SCL);

Ve saatin kaç olduğunu öğrenelim:

getTimeStr() kullanarak Zaman’a ait Saat bilgisini aldık ve bunu saat değişkenine atadık.

Şimdi saat bizim belirttiğimiz vakte gelmiş mi buna bakalım. // sonra röleyi tetikleyelim ki, eve geldiğimizde sıcak bi karşılama ile karşılaşalım 

 

Aylık 70+ TL değerinde “IF”

Kombiyi yönetecek olacak fonksiyonumuzu yazmıştık. Şimdilik sadece basit aç kapa olaylarını barındırıyor. Ve bunu ne zaman yapacağını söylemek için daha önce yazmış olduğumuz ISI() fonksiyonundan gelen değerleri argüman olarak kullanacağız. // Bkz: #1, #2, #3#4#5#6, #7

Yani şöyle;

  • Kullanıcı, istediği sıcaklığı ayarlamak için potansiyometreyi çevirecek
  • Analog pinlerden birisine bağlı olan bu potansiyometreden gelen değerleri okuyacağız
  • Doğal olarak o bacağa kaç volt geliyor gibi elektriksel bir değeri okumuş olacağız
  • Ne kadar çevirdiğimizde, voltajda ne kadar değişim olduğuna bakacağız.
  • Arduino analog pinlere gelen değerleri 0-1023 arasında gösterdiği için, olabilecek istenen ısı değerleri için oran orantı yapacağız. Yani ısı için belirlediğimiz değerler 12°C ila 28°C arasında ise şöyle bir mantık izleyeceğiz: 1024 şayet 28’e ve 0 da 12’ye eşitse.. düğme çevrilirken pinden okunan 512 değeriyle kaç dereceyi kast etmiş olacağız.. (20°C) Bunun için basit denklemler kurulabilir ancak hazır gelen MAP fonksiyonu tam da bu işi yapıyor 😉
  • Potansiyometre 21°C için ayarlanmışsa, kombi() fonksiyonumuza üst sıcaklık argümanı olarak 21+1=22°C göndereceğiz. Alt sıcaklık argümanı ise 21-3=18°C derece olacak.
  • kombi() fonksiyonumuz kendi içinde ISI() fonskisyonundan gelen bu değerleri, ortam sıcaklığını ölçtüğümüz derece() fonskiyonundan gelen değerlerle kıyaslayacak. Sonra şunu yapacak:
    IF/eğer, (derece, istenen ısı’dan büyükse) { röleyi kapat -dolayısı ise rölenin bağlı olduğu kombiyi durdur}
    else/değilse (derece, istenen ısı’dan küçükse) { röleyi aç – kombiyi çalıştır }

Bir kere kombi() fonksiyonumuzu oluşturduktan sonra

void kombi(byte alt, byte ust){
byte dereceDeger = derece();
if (dereceDeger<alt){ yanson(15); Serial.print("kombi Yandi: "); /* digitalWrite(role, LOW); */ }
else if (dereceDeger>=ust) {yanson(4); Serial.print("kombi Sondu: "); /* digitalWrite(role, HIGH); */ }
else {yanson(1); Serial.print("kombi else: "); /* digitalWrite(role, LOW); */}
}

Lazım olup kombiyi yönetmek istediğimiz kısımlar geldikçe, şu şekilde yazmamız yeterli olacak;

kombi(18, 22);

Böylece,
sıcaklık 18 derecenin altına düştüğüne kombinin yanmasını,
sıcaklık 22 derecenin üzerine çıktığında da kombinin sönmesini sağlayacağız.

AHMT’in sadece H‘sini kullanan, yukarıdaki fonksiyonun yüklü olduğu versiyon, hali hazırda Kombiye takılı ve şu anda çalışıyor 😉
Öyle keskin istatistikler henüz tutmadık ama getirisinin 60-70-80+ TL civarında olduğu söylenebilir.

M ve T eklendiğinde neler olacak göreceğiz 😉


görsel

Akıllı Termostat AHMT v10.-2 W ve Ultrasonic HC SR04

Nasıl yani Eksi 2. versiyon?
ve
Önceki gün daha yeni adını koymuştun ne ara 10. versiyona geldin?

sorularını yanıtlayayım önce 😉

Önceki yazıda Hareket/PIR sensörü sorunundan bahsetmiştim hatırlarsanız. Geçici çözümyolarak Ses’in yankılanması sırasında, önünden geçen olursa, yankı mesafesinin kısalmasını yakalayarak hareketi algıladığımız HCSR-04 Ultrasonic ses sensörünü kullanmıştık. Hem donanım olarak hem de yazılım olarak bu parçalar ilerideki adımlarda yer almayacağı için, bu haline 1 sonraki haline 2 demeye içim elvermedi ben de Eski yaptım 🙂

Versiyon 10 meselesi yine kişisel. Windows 7 demek ile Windows 8 demek arasında algılama olarak çok bariz farklar var. Ancak Firefox 15.27 demek ile Firefox 15.29 demek arasında algı olarak çok fark yok.

“Evet, tam da bu yüzden Köklü değişimlerde 15’den 16’ya geçiliyor.” diyecek bazı arkadaşlar. Ve belki de benim 15-20 satır değiştirip, versiyon 6’dan version 7’ye geçmeme itiraz edecekler. Haklı olabilirler ama böyle olması sadece bir adetten ibaret. Alan Turing nasıl yapıyordu acaba?.

Öyle binlerce satır ya da çok yazarlı kodlar da olmadığı için,
v7.98 sonrası v8.12‘ye geçmek yerine
v7 sonrasında v8‘e sonrasında da v9‘a geçmek istiyorum müsaade ederseniz. w ise working manasında.
Bu şekilde elbet yüksek rakamlar çıkabilir. Ama sonsuz+1 diye tam sayı var malum 😉

 

Bazen, geri dönmek gerekebiliyor. Günlük hayatta “hani şu halde idi, şunu yaptıktan sonraki zamana geri dönmek lazım” gibi konuşulduğu için, ondalık yazmak yerine mevcut durumu belirtmek çok daha pratik olabiliyor.

Bir zamanlar Subversion’daki yöntemler adet iken, şimdi GitHub’daki yöntemler gelenek oldu. Ticket’ler Pull request oldu..
Bkz: https://core.trac.wordpress.org/tickets/latest
Bkz: https://github.com/steemit/steem
Bir dönem

while {
}

yazmak moda iken bir dönem

while
{
}

şeklinde yazmak moda olabilir. Böyle detayları vazgeçilmez kurallarmış gibi gören arkadaşlar için, hayatlarında kolaylık ve sabır diliyorum. Evet detaylar bazen Çok önemlidir, ama bazen de Hiç önemli değildir. Rahat olun 😉

HC-SR04 Çalışmıyor, Donuyor, HC-SR04 Serial’e bilgi göndermiyor

Sanırım “Çalışmıyor” adında bir arama motoru olsa ve forumlardan ve bloglardan, sorunlara ait çözümleri listeliyor olsa, paralı bile olsa kullanılabilirdi 😉
// Özellikle böyle ara başlık atıyorum ki, hata-çözüm arayan başkaları da basit bir sorun için saatlerce/günlerce uğraşmasın.

Eksi 2) Mekanın duvarlarına çarpmadan kendi halinde takılan robotlar yapmak HC-SR04 popüler bir modül. Bununla birlikte, HC-SR04 ya da diğer kankaları HY-SRF05 ve US-015  ile “hassas” işler yapmak pek iyi sonuçlar vermeyebilir. Zira olayın temelinde SES var ve sesin kendisi zaten saniye de ~340 metre ancak gidebiliyor. -Devrimsel bir şeyler söz konusu değilse- Atıyorum alarm için ya da ne bilim metal levhayı  görünce vidalama yapacak bir cihaz için; Lazer kullanan bir sistem ile ses kullanan bir sistemin atışmasından bahseden birisi ancak fıkra anlatıyor olabilir 🙂

 

HC-SR04  , HY-SRF05 ve US-015 ‘in kendi aralarındaki kıyaslaması ise şöyle;

 

Şayet, HC-SR04 ‘ten bir tepki alamıyorsanız şunları kontrol edin;

Trigger ve Echo pinleri doğru mu?
Arduino kodlarına sesver=2 ; sesal =3 yazıp sonra 2 nolu pini Echo‘ya bağlarsanız olmaz.
Trigger: Tetikleyen yani sesi gönderen, yani hoparlör
Echo: Yankıyı alan, yani mikrofon

Güç girişleri doğru mu?
Cihaz 5 Volt ile çalışıyor. 3.3 ile değil.

Sinyal aralıkları uygun mu?
Daha önce yüksek bir aralık kullanırken, yanıt alamamıştık. Kablolardan başlayıp, taşırken sensörü bozmuş olabileceğimize dair pek çok ihtimali düşündük. Ancak tetikleme ve yankı süreleriyle oynayınca bilgi gelmeye başladı.

Ayrıca kütüphane gerektirmeyen pulseIn fonksiyonunu kullanırken HIGH durumuna bakıyorsanız,
ses göndermeden önce ve sonra her ikisin de
Trigger’ı / Sesver pinini LOW yapmanız daha sağlıklı olabilir.

Tabi baştaki tanımlamalarımız ve Setup kısmındaki kodlarımızı da unutmamak lazım. (Steemit üzerinde düzgün görünmüyorsa buraya tıklayın)

 
const byte sesver = 3, sesal = 4;
int sure;
float mesafe;


void setup()
{
Serial.begin(9600);
pinMode(sesver, OUTPUT); pinMode(sesal, INPUT);    
}


void mesafeOlc() {
  digitalWrite(sesver, LOW);
  delayMicroseconds(2);
  digitalWrite(sesver, HIGH);
  delayMicroseconds(10);
  digitalWrite(sesver, LOW);
  sure = pulseIn(sesal, HIGH);
  mesafe = sure / 2 / 29.1;
  Serial.print("uzaklik: "); Serial.println(mesafe); }

 

Ayrı bir mevzu olduğu için şu an detaylarına girmeyeceğim anacak tanımlama yaparken, internetteki çoğu örneğin aksine
int sesver = 3;
yerine
cost byte sesver =3;
kullanmış olduğumuza dikkat edin 😉


görsel
Burada anılanlar bir yazılım tavsiyedir. Yapacak olduğunuz işlerde kullanmanız size zaman kazandırabilir.
Anladın sen 😉

Isı, hareket ve zamana duyarlı termostat yapalım: AHMT

Açılımı ve kılsatması imalı isimleri sevmişimdir. Nasipte böyle bir isim üretmek de varmış 😉
Advisable thermostat for Heat, Moving and Time = AHMT
Isı, Hareket ve Zaman’ı akıllıca kullanma termostatı.

Aynı zamanda çalışmayı beraber yaptığımız arkadaşım Ayhan’ın ve benim ismimden harfler var.
Ve de neredeyse AHMET diye okunabilir 😉

Parça kısmı, isim gibi yormayan bir şekilde olmadı. İki hafta önce, normalde çok basit bir şekilde çalışması gereken Hareket sensörü çok naz yaptı. Neredeyse 9 saatin sonunda elimizde bolca “şu yüzden olmamış olabilir” ihtimalleri birikmişti.

 

 

Geçtiğimiz haftaysa, hareket sensörü PIR yerine ultrasonik ses sensörü HC-SR05/04 kullanmaya karar verdik. Bu aslında 140 derecelik görme açısını, 5-15 derece sayılabilecek düz bir hatta düşürmek demekti. Odanın herhangi bir yerindeki hareket yerine, sensörün önünden geçilen hareketleri algılayacak demekti. Pek istediğimiz bir çözüm değildi ama “Mükemmel, iyiyi engeller. Hem iphone’dan toyota’ya herkes mevcut ile bir şeyler yapıyor zamanla geliştiriyor” düşünceleri eşliğinde kodlamaya başladık..

Dün itibariyle PIR / Hareket Sensörü olayını çözdük; teknik bi hatadanmış. Aynı model sensörden başka bi tane takınca hemen çalıştı.

Tabi, dün ve geçen hafta sonu arasında, ultrasonik mesafe sensörü de devreye girdiği için, kodlara o da misafir olacak 🙂 Zaten şu an very beta olduğu için, ilerledikçe mevcut kodlar adım adım değişecek.

Sıcaklık için gayet popüler olan LM35 kullandık.

 

Zaman içinde “gerçek zaman saati modülü” kullanacağız.


 

“Termostat diye bir şey var. Hatta şu anda kablosuz olarak bi kenarda duruyor. Kombinin sıcaklık ayarını oradan yapıyoruz, zaten.”

Sizin derdiniz ne?

diyebilirsiniz. Bir; Tekerleği KENDİMİZ yapmak istiyoruz. İki; Taş/Tahta/Metal/Kauçuk/Küre.. benzeri tekerleğin gelişerek yeniden icat edilmesi durumunun gelecekteki adımlarından birinde yer almak istiyoruz. Üç.. Dört..

Bu çerçeveden bu örneğin amacı şu;
Mevcut termostatlar, sıcaklığı istenen aralıkta tutmak üzere yapılmış. Isıyı ölçüyor, atıyorum 23 dereceden yüksekse kombiyi kapatıyor, 19 dereceden düşükse açıyor.

Biz ise bi tık daha ileri gitmek istiyoruz;
Oda sıcaklığı 22 derece gibi istenen bir aralıktaysa ama evde kimse yoksa sıcaklığın 22 olmasına gerek yok. Bir süre boyunca hareket olmazsa 21’e düşürsün, bir süre daha olmazsa 20’e düşürsün.. ta ki belirlenen minimum seviye neyse oraya kadar.

Ayrıca, isteğe bağlı olarak, gece zaten herkes yorganın altında iken dışarısı 1-2 derece düşük olabilir.
Ve de yine mevcutta bulunan, her peteği ayrı ayrı yöneten sistemlere ilave olarak; mutfak 1 derece düşükte 21 derecede, koridor 2 derece düşükte 20 derecede yanıyor olabilir ama yine aynı mantıkla, hareket yoksa 20 de yanmasına da gerek olmayabilir. Ayarlanan minimum sıcaklıkta yanabilir.

İyi ama böyle, İşten/okuldan gelince ev soğuk olur?

AHMT üzerindeki gerçek zaman saati modülü bu yüzden var.  18.30’da evde oluyorsanız, siz gelmeden önce,  18.00’da çalışmaya başlayıp sıcaklığı 22 derece olacak şekilde ayarlayabilir 😉

Normal kullanımdan termostata geçmekle bizim doğal gaz faturası ~%25-30 civarında düşmüştü. Kombiyi AHMT yönettiğinde daha da düşebilir 😉

// ..mi? göreceğiz.


görsel 1, görsel 2, görsel 3, görsel 4, görsel 5