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 

 

Zaman sadece birazcık zaman..

Advisable thermostat for Heat, Moving and Time = AHMT  ifadesindeki T‘ye geldik: Zaman.

Çok basit gibi dursa da özünde Mutlak Zaman‘ı ölçmek, alengirli bir mevzu. Zamanı ölçme işi boyunca da zaman geçtiği için konun içinden ucu Heisenberg’e giden ince bir yol geçebilir 🙂

Şükür bizimki o kadar derin bir mevzu değil ama bazı yerlerde dikkatli olmakta fayda var.


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

Zamanlama sorunuyla, her dakikanın sekizinci saniyesinde işlem yapması gereken bir bot tasarlarken karşılaşmıştık. Pek çok detayı hesaplayıp buna göre tedbir aldığımızı düşünüyorduk. Ancak kim derdi ki; Windows’un saati saniye bazında doğru çalışmıyor. Maalesef böyle bir durum varmış. Ardından buna bir çözüm bulduk: Her dakika Windows’un saatini Atom Saati sunucularına göre güncelleyen programlar kurduk.

Fakat bir gün hesaplayamadığımız bir olay daha gerçekleşti. Yazdığımız botun üzerinde çalıştığı program da zamanlama derdinden muzdaripti ve güncellemelerden birisinde, kendi zamanlama sistemlerini 15 saniyede bir milisaniye bazına düzeltme yapmak için ayarlamışlardı. Fakat biz bunu anlayana kadar, bir haftalık kazancımızı kaybettik :((:

Bize, Windows’tan ve üzerinde çalıştığı sistem bağımsız bir şekilde, her dakikanın sekizinci saniyesinde tetiklenecek bir sistem lazımdı. İlk o zaman aklımıza Robot Kol yapma fikri düştü. Dokunmatik bir ekran alıp, kolu programlayacaktık ve söz konusu zamanlarda ekrana dokunacaktı.

Böylece Maker/Robotik/Arduino dünyasına Merhaba demiş olduk.

Ancak hareket ettirme olaylarına bakarken, Python‘un klavye ve fareyi de rahatlıkla kontrol edebildiğini gördüm. Robot kola gerek kalmadığı için Python ile muhabbetimizi Merhaba’nın ötesine taşıdık.

“Zamanlama Sorunu”, İKİ SÜPER OKYANUS için bize birer kapı aralamış oldu.

Önceden şerbetli olduğumuz için AHMT için, zamanlama olayını yazılımsal olarak nasıl çözeriz? şeklinde beyhude bir uğraşa girmeden, direk Gerçek Zaman Saati modülünü sisteme bağladım.

Popüler bir modül olduğu için çeşitli kütüphaneleri var. Ancak bazıları bi şekilde çalışmıyor. En azından bende çalışmadı. Çalışanı versiyonunu şu şekilde mevcut kodlarımıza adapte edebiliyoruz:

Kod kısmına bunları yazdıktan sonra indirdiğimiz kütüphane dosyalarının …\Arduino\libraries\ klasörü altında olduğundan emin oluyoruz.

Modül SDA ve SCL pinlerine bağlandığı için kullandığımız kartta bu pinlerin kaçıncı pine denk geldiğini bilmemiz gerekiyor.

Nano için durum şöyle:

yani A4 ve A5 pinlerine bağlıyoruz.

devam edecek..


Yoo Ben Tüketmiyorum(!) Kuzenim Tüketiyor.

=  = O kadar Almanca bilmiyorum ama 18 cilt Almanca kitap aldım.  Jurrassic Park animasyonları yapmıyorum ama 4 Çekirdekli, GXT 1080 Ekran kartlı, 16 GB Ramli 2 TB SSD Sabit diskli bilgisayarım var.  O kadar spor yapmıyorum ama 3+ çift spor ayakkabım var. O kadar dizi izlemiyorum ama Netflix aboneliğim var. FAKAT tüketim toplumunun bi’ ferdi değilim = =
(!?)


Görsel: Lido Contemori


 

İnsan canlısı ihtiyaçlar hiyerarşisine tabi olarak yaşıyor. Bununla birlikte postmodern dönemde Reklam devri, son dönemde ise Instagram devrinden bahsedebiliriz.

Ve reklam teorisi, daha ilk sözünün beslemelesi olarak olarak şunu söyler:

> Reklamın amacı, tüketicinin ihtiyaç sıralamasını değiştirmek, gerekirse yeni ihtiyaçlar yaratmaktır.

Bu konu bize dış dünya konuları gibi gelse de hayatını bu işe adayan, hatta konuya akademik olarak yaklaşan binlerce kişi var. Ortak amaçları şu: Satmak istedikleri şeyi, kendimiz İHTİYAÇ olarak kabul edelim. Hatta o ürünü, öyle ihtiyaç olarak görmeliyiz ki, listede daha üste koyalım.

Ve bizleri yakaladıkları nokta tamda burası.

Bir insanın Maslow vari giyinme ihtiyacı için, hadi bir de o yıkanırken giymesi için olsun, 2 adet kazak, 2 adet t-shirt, 2 adet pantolon yeterli.
Ama hangimizin bu kadar az kıyafeti var? İş için, okul için, arkadaş ortamları için, düğünler için.. farklı kıyafetlere “İHTİYACIMIZ VAR” deyip dolabı dolduruyoruz.

Buna rağmen, kendimizi yahut kuzenimizi böyle bir dolap önünde durup “giyecek hiç bir şeyim yok” derken yakalayabiliriz.

Daha hızlı cihazlar gördükçe, “benimki çok yavaş artık yeni bi tane almam LAZIM ” diyoruz. Halbuki masamızdaki ya da avucumuzdaki EN KÖTÜ cihaz bile Apollo 11’i aya gönderen bilgisayarlardan çok daha hızlı ve gelişmiş durumda. (meraklısına: Apollo Guidance Computer )

Cep telefonu bir ihtiyaç mı? İsraf mı?
Hadi cep telefonu ihtiyaç olsun. Akıllı olması ihtiyaç mı israf mı?
E hadi akıllısı da ihtiyaç olsun.. 32 GB olması ihtiyaç mı mı israf mı?
Görüleceği üzere, bunlar bize GAYET NORMAL şeylermiş gibi geliyor. Çitayı koyduğumuz yerin berisindeki her şey ELZEM geliyor. Ve çitayı her zaman daha ileriye koymaktan bizi alıkoyan hiç bir şey yok. Bilakis buna teşvik eden bir sisteme doğduğumuz için, yeni X’ler almak için kulaklarımızın ve gözlerimizin bombardıman altında olduğunu, zihinlerimizin yediği zokalar sonucu kendini manipüle ettiğinin çoğu zaman farkında bile değiliz.


Şurası kesin ki;
Hiç birimiz israf etmiyor, gerçekten lazım olmayan hiç bir şeyi almıyoruz!
– Kuzenim belki ama BEN? Hiç! –


 

Olayın bir diğer cephesinde yer alan sözüm ona halk için(?) var olan devletler, tarih boyunca BÜYÜME TANRISINA tapmıştır. Ve bu yüzden, ya Savaşarak ya Nüfus olarak ya da Ekonomik olarak büyümek, devletlerin iştahla yaptıkları ibadetlerdir. Dünya savaşlarının, mealen “savaşın da bi sınırı var” demesi sonrası, büyüme tanrısına sunulan ta’klar arasında ekonomik büyüme daha fazla ağırlık kazanmış durumda.

Bu yüzden Tüketim Ekonomisi, BİLİNÇLİ yapılmış bir Tercihtir:

 

Başta siyasiler olmak üzere, bilerek ya da bilmeden hepimiz Büyümeyle büyülenmiş durumdayız. “Süper” kelimesinin içi pek ala sağlıktan mutluluğa pek çok süper şey ile doldurulabilecekken, “süper devletler” derken, en Büyük ekonomiye, en Büyük orduya.. sahip ülkeleri kast ediyoruz.

 

Öyle ki, büyüyen ekonomi için Devletler, aslında denetleyerek engellemeleri gereken şeyleri, mübah sayarak destekler durumda. %30’u Devletin olan Türk Telekom’dan aldığınız bir modemin garantisi bittikten 2 ay sonra bozulması tesadüf değil. Yaptığı kombi bozulmadığı için tazminatının kat kat fazlası verilip işten kovulan Vaillant kombi mühendisi, şehir efsanesi değil gerçek bir hikaye.

 

 

Tamamlayıcı olması açısından, Serdar Kuzuloğlu’nun harika konuşmalarından birisini de alalım:

 


Ve böyle bir yazıda Edward Bernays‘i anmazsak ayıp olur. Analım.


 

Borsa aşağı Dolar yukarı, Dolar aşağı Borsa yukarı

Sakız çiğnemek zor iş.. Sakız ağzımdan düşüveriyor..
Kayboluyor.. Sakız kayboluyor.. Buradan yetkililere sesleniyorum: Kaybolmayan sakız istiyoruz
Cak cık, cak cık

🙂 şeklinde bir reklam vardı.

 

Bir de meşhur bir tekerleme var malum:

Dal sarkar kartal kalkar, kartal kalkar dal sarkar.

 

 

Bunları aynı potada eritebilirsek;
Dolar sarkıp Borsa kalkarken, Borsaya geçen,
Borsa sarkıp Dolar kalkarken, Dolara geçen,
dolayısıyla sermayesi hiç kaybolmayan bilakis artan yatırımcı profili elde etmiş oluyoruz.

Dolar ve Borsa İstanbul arasında güzel dans edebilmek, güzel kazançlar sağlayabilir.

Hatta medyumluk yapmak bile mümkün olabilir.

?

Yoo şaka yapmıyorum. Önceki yazının yorumlarında tartıştığımız üzere bazen öyle zamanlarda öyle şeyler oluyor ki bunu ihtimal hesaplarıyla açıklamak mümkün değil.

Hani böyle bir site üzerinde yazıyor değil de, günlük hayatta bi mekanda konuşuyor olsak diyeceğim ki:

– Hadi kalk, seni birisine götüreceğim. Biliyorum söylediklerime itimat ediyorsun ama kendi ağzından duy; aylar öncesinden DOLAR’da KAMPANYA ZAMANI diye söyleyip durmuş muyum? Ve ardından Rus Uçağı meselesi yetmedi ve Başbakan’ın istifası gerçekleşmiş mi? Üstelik neredeyse tam olarak VACİP ÇİZGİSİNE DOKUNDUĞU GÜNLERDE.

Dolar destek çizgisine yaklaşıyorsa, Hisse satıp Dolar’a geçme zamanı yaklaşmış demektir.

Böylece Başbakan istifasıyla Şelale düşüşüne başlayacak olan Borsa’da yüksekte iken satılmış olur. Bir süre sonra Dolar-Borsa durumu tersine dönerken, bu sefer yükselmiş olan doları satıp, düşmüş olan borsayı almak Alırken kazanmayı sağlamış olacak. Hareket başladığında Borsa’nın Direnç noktalarına kadar yükselmesini beklemek kalacak..

Dal sarkar kartal kalkar, kartal kalkar dal sarkar. & Kaybolmayan sakız çiğneyen kaybetmeyen yatırımcı.

TAM olarak 1 Ocak’tan itibaren (tesadüf?) Koşar adım giden borsa, cuma günü %0,03 ile frene bastı. Ama çakılmadı. Dolar’ın tahterevalliye biniş noktasını bekliyor sanırım. Bu da sanırım hayli yakındır.

Doların yükselmesi ve Borsanın düşmesi pek de iyi şeyler değil.

Buradan hareketle Medyumluk denemesi yapabiliriz. Yakın zamanda ekonomik olarak ülkenin tadını ekşitecek bir şeyler olacak. 3 saat mi desem 3 gün mü desem 3 hafta mı.. Ama bir şey olacak ve Borsa düşecek Dolar çıkacak..

görsel

Direk ya da dolaylı olarak burada anılan hiç bir şey,
Yatırım Tavsiyesi Değildir.
Yapacak Olduğunuz Her Türlü İşlemin Tüm Sorumluluğu
Kendinize Aittir.

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

Ecrin, Eymen, HomoDeus, byte ISI(){}, void kombi(){}

#1, #2, #3#4#5, #6


Veri tiplerini inceleme gibi bir amacım yoktu ancak projedeki fonksiyonların nasıl çalıştığını irdelerken, konu veri tiplerine gelmiş oldu. İyi de oldu.

Aslında konu çok uzayacak olmasa, mümkün olduğunda ve yeri geldiğinde Mantıksal Kapı Devrelerine kadar inmek bile çok keyifli olabilir.

-yakın gelecek olmasa bile orta vadeli gelecek manasında- Yarın; Niyazi amcanın kızı Ecrin ya da Filiz teyzenin oğlu Eymen kendi işlemcisini tasarlayacaksa, “p ve q’lar”, “1 VEYA 0 = 1 eder”ler, “XOR”lar, “Seri bağlı PNP”ler.. havada uçuyor olmalı.

Günümüzde bile pek ala hissettiğimiz HomoTapiens, HomoSapiens ve HomoDeus ayrışmaları giderek keskinleşeceği için elbetteki büyük bir kitle matematiğe ve mantığa Uranüs kadar uzak olacaklar ama bulunduğu gezegeni olumlu yönde daha ileriye taşıyacak birileri de olacaktır mutlaka.


 

AHMT’in kodlarına dönecek olursak,

Daha önce Arduino’nun ana döngüsü olan void loop() {} içinde, şöyle yazmıştık:

istenenISI = map(analogRead(A3),7,1023,10,30);
Serial.print("istenen ISI: "); Serial.print(istenenISI);

Burada, kullanıcı odayı hangi sıcaklıkta istiyorsa onu ayarlamak için bir potansiyometreyi çeviriyordu ve biz de ANALOG bağaca gelen değerleri okuyorduk. Ki kullanıcı  hangi ara değerleri istemiş görelim. -digitaller gibi sadece var/yok değil, 0, 5, 8, 18, 26.. vb.-

yukarıdaki şekilde void loop(){} içinde işimizi görüyorduk ancak kodlar ilerledikçe kullanıcının ayarlamış olduğu değeri başka yerlerde de kullanmamız gerekecek. Ve bunu tek hamlede almak işimizi hayli pratikleştirebilir.

Bu yüzden ufak değişikliklerle bunu bir fonksiyon olarak yazalım ve lazım olukça kullanalım 😉


Son birkaç yazıda temellerini attığımız üzere, fonksiyonumuzdan bize bir sonuç döndürmesini istediğimiz için,

bize dönecek olan değerin tipine göre bir kullanım yapıyoruz. Oda için istenen ısı değerleri döneceği için 0-255 aralığı yani BYTE kullanmak yerinde olacaktır.

byte ISI(){ istenenISI=0;
istenenISI = map(analogRead(A3),7,1023,10,30);
Serial.print("istenen ISI: "); Serial.print(istenenISI);
return istenenISI;
}

fonksiyonun başına ve sonuna dikkat..


 

Bize bir sonuç ya da rakam vermeyecek ama hayli kritik bir işlev görecek olan fonksiyonumuz ise void kombi(){}

neden byte kombi(){} değil de void kombi(){} diye soruyorsanız, “büyük ihtimal seriye ortadan dalmışsınız” derim. Vira #1  🙂

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); */}
}

 

burası fiziksel olarak işi yüklenen kısım olacağı için bir sonraki yazıda burayı biraz açalım..


görsel

 

Arduino Veri Tipleri, AHMT derece() fonksiyonu

Evvel zaman içinde, kalbur saman içinde: ##1, ##2, ##3##4, ##5


Arduino fonksiyonlarını kullanırken, ne zaman Void ne zaman Byte ya da Int kullandığımıza bakmıştık. Olayın mantığı açısından Byte ve Int örnekleri kafi sanırım. Ama yine de yanlış anlaşılma olmaması için sadece bunlarla kısıtlı olmadığını belirtelim. Aşağıdaki veri tiplerinin hepsi kullanılabilir. Yeri gelmişken kimin ne olduğuna değinelim.

Arduino Veri Tipleri

bool  // Evet Hayır Doğru Yanlış HIGH LOW tanımları için  kullanılır

boolean // standart değildir ve bool ile aynı işlevi görür

byte // 8 adet 0/1’den oluşur. Yani 1 Byte. Sayı olarak 0-255 arası değerler için  kullanılır

char // tahmin edilenin aksine özünde -127 ve +127 aralığındaki sayılara karşılık gelir. char x = 65 tanımı ASCII tablosunda A olarak tanımlandığı için A’ya denk olur.  Harf işlemleri için kullanılır.

String  // Metin kelime/cümle tanımları için kullanılır. Sayılar için kullanıldığında ASCII metin görünümünü verir. String() fonksiyonu ile karıştırmamak gerekir.

int // en az 16 adet 0/1’den oluşur. Yani 2 Byte. -32,768 ila 32,767 arasındaki değerler için kullanılır. AMA! Bu standart değildir. İşletim sistemi ya da İşlemci’ye göre farklılık arz edebilir. Örneğin Arduino Due için INT demek 32bit/4byte demek olduğu için -2,147,483,648 ila 2,147,483,647 arası değerleri taşıyabilir.

int16_t // yukarıdaki sorunu çözmek ve cihaz değişikliklerinde sorun yaşamamak için “tam olarak 16 bit” manasında kullanılır.

long // en az 32 adet bitten oluşur. Yani 4 Byte. -2,147,483,648 ila 2,147,483,647 değerler için kullanılır. Standart olmama durumu yine vardır.

int32_t // tam olarak 32 bitten oluşur.

float // ondalıklı sayılar için kullanılır. Örn: 12.34 ya da 56.78E+4 gibi..

double // AtMega işlemcili (AVR dili kullanan) kartlar için Float ile aynı işlevi görür

short // Arduinolar için int ile aynı işlevi görürür

unsigned char // Eksiden başlamak yerine 0’dan başlar. Dolayısıyla char -127 ila +127 arasında iken, işaretsiz unsigned char 0-255 arası değer alabilir.

unsigned int // benzer şekilde eksiden (-32,768) başlamak yerine Sıfırdan başladığı için 65,535’e kadar değer alabilir

unsigned long // 0 – 4,294,967,295 arası değer alabilir.

void // değer döndürmeyen fonksiyonlar için kullanılır

word // 0 – 65,535 arası değer alır, unsigned int ile aynı işlevi görür.


https://www.arduino.cc/reference/en/#variables


byte derece() { } fonksiyonu

Daha önce sıcaklık ölçmek için fonksiyon yazmıştık.

Görüldüğü üzere void fx(){} olarak kullanmışız. Yani; Evet sıcaklık pinine gelen voltaj değerlerini okuyup bunun kaç dereceye denk geldiğini hesaplatıyoruz ancak fonksiyonu kullandığımızda elimize “eşittir şu” diyecek şekilde bir değer sunmuyor bize.

Bunun olabilmesi için yukarıdaki veri tiplerini de göz önünde bulundurarak, fonksiyonumuzu şu şekilde tanımlayabiliriz:

neredeyse aynı. Sadece küçük ama önemli nüanslar var:

* byte fx(){} olarak kullandık, bize sunacağı değer 0-255 arasında olacağı için. (int ya da long da kullanabilirdik ama oda sıcaklığı için 255 zaten hayli yeterli)

* return derece; var, hesapladığı değeri bize sunması/döndürmesi için

* başta değerleri sıfırlıyoruz. Her fonksiyon için şart değil elbet ancak biz sıkça kullanacağımız için, önceki ölçüm değeri ile karışıklık olmaması için sıfırlayalım, kafamız rahat olsun 😉

 

83 Gün Önce. 69 Gün, 40 Gün, 15 ve 13 Gün Önce

Borsa İstanbul ile ilgili 83 gün önceden itibaren Alım/Ucuzluk/Toplama Zamanı yaklaşıyor, yaklaştı, şimdi zamanı.. tadında beş tane yazı yazmışım. Hatta tarih ilerledikçe “yapabilirsiniz” den “yapın” a doğru keskinleşen bir üsluptan bile söz edilebilir:

Borsada “Toplama” Zamanı

Borsanın Alışkanlıkları: Alt Vacip

Borsada 86.000 Bölgesi

Borsa İstanbul’da Ucuzluk Günleri

TL Biriktirme TUPRS Biriktir

// görsel

Nasıl olup da bu kadar kesin(e yakın) bir şekilde konuştuğumu yazıları okumuş olanlar zaten bileceklerdir. Okuduk ama anlamadık diyenler için roman gibi okunmaması gerektiğini söyleyebilirim. Bu konulara çok çok uzak birisi bile; beyniyle beslenen, grafikleri sindire sindire inceleyen, yazıları tane tane özümsemek için bilgiye aç birisi gibi okursa, olayın pek ala sicim teorisi formülleri olmadığını fark edecektir.

Daha da ötesi,
Borsa İstanbul = Serdar Ortaç şarkıları
olduğunu anlayacaktır. Ortalama 2 yazda bir, bi tane Serdar Ortaç şarkısı çıkar. Kendisi söylemediği yazlar, tercihen müzik sektörüne yeni adım atan çıtır bir sanatçı Serdar Ortaç şarkısıyla yazın başlama düdüğünü çalar.

Şimdiden iddia ediyorum: -Sağlık, iflas vb. herhangi bir sorun olmazsa-
Mevsime uygun kıyafetler almak için girdiğiniz mağazada, parlama yapmış bir şarkı çalıyor olacak. Bunu ya Serdar Ortaç söylüyor olacak ya da sözleri Serdar Ortaç’a ait olacak. 🙂

Benzer şekilde bu günlerde 100.000 psikolojik barajında olan Borsada, Kısa vadeli Al-Sat yapmak isteyenler için KAR-AL zamanının geldiği söylenebilir.
En az 15 gün önce alınmış olan Anne endeksi hisselerini SATıp,
Yeniden ALım için Fibo seviyelerine KUM SAATİ yapılabilir.

Direk ya da dolaylı olarak burada anılan hiç bir şey,
Yatırım Tavsiyesi Değildir.

Yapacak Olduğunuz Her Türlü İşlemin Tüm Sorumluluğu
Kendinize Aittir.

83 gün önce

..neredeyse farz kadar dominant Vacip derecede etkili, 12 Yıldır işleyen çizgilerdi.

Şu günlerde borsa, ALT VACİP çizgisine yakın, yani Ucuz. Ve de -darbe kadar güçlü bir hareket olmadıkça- Yükseliş hareketi yaklaşıyor.
Ben şöylemiş olayım.. Sonra “vay efendim bilmiyordum, vay efendim duymadım, tüh keşke zamanında haberimiz olsaydı..” olmasın 🙂

 

Ekran görüntüsü olarak da dursun ki, bağlayıcı olsun 😉

 

69 gün önce

..yükselişlerin başlama dönemlerine dikkat edelim:
Yeni Yıl

Elbetteki bazen 1-2 aylık kaymalar olabilir. Çoğunda Ocak ayı yükselişlerin başladığı dönem.

40 gün önce

Şu günlerde Bist100, alt vacip çizgisine yaklaşmış durumda. //Bu alarm tetikleyici bir cümledir 😉

Ve bugün itibariyle 90 bin’de kapanmış halde.

Yani UCUZ.

Kum Saati ile bir miktar ALMAK için uygun zamanlar denebilir. Yine Kum Saati ile 86.000’e yakınsama hareketlerinde iki miktar, iyice çizgiye dokunma hareketlerinde 3-4 miktar ALINABİLİR.

15 gün önce

Borsa İstanbul şu günlerde; Ucuz ve sakin ve yükselme ihtimali düşme ihtimalinden daha fazla.

Hatta, aşağıda 90000-86000 bölgesinde bulunacağı son zamanlar, en fazla seçime kadar olan süre olabilir. Yükseliş başladığında 140.000 hedefi hayli mümkün olabilir. Sonra “ucuzken alaydık iyiydi” diye gelmeyin bana 🙂

 

 

13 gün önce

TL Biriktirme TUPRS Biriktir
Şu anda 1000 lot Tüpraş hissesiyle yani 122000 TL..

 

 

 

Bugün(22 Ocak 2019) itibariyle Tüpraş’ın durumuna bakalım:

 

13 günde %7.54+ !
hiç bir banka bu kadar sürede bu kadar faizi vermez.

 

 

Başka sözüm yok hakim hanım.

 

 

 

AHMT sicaklikOlc() fonksiyonu

Evveliyat: ##1, ##2, ##3, ##4


ISI ve sıcaklık ile ilgili kısımlara gelmiştik. Biraz açıklamasını da yaparak devam edelim.. // görsel

sicaklikOlc() fonksiyonu

C gibi temel dillerden geliyorsanız Arduino kodları sizin için çocuk oyuncağı olabilir. Hoş farklı dillerden geliyorsanız da çok zor değil hatta bi hayli basit ve net.

Arduino değişken tanımlama

Örneğin bir değişken tanımlarken
Php’de $x=15;
JavaScript’te var x=15;
Python’da x=15

şeklinde belirtiyoruz. Burada ise değişkenin kaç bit/byte’lık oluğuna göre türünü belirtiyoruz. Ya da metin/karakter olma durumunu da söylüyoruz: byte x=15;

Arduino fonksiyonlar

Benzer şekilde fonksiyon tanımlarken de sade ve net. Sadece ufak farklılıklar var.
Python’da def fx(): bişeyler yap..
JavaScript ve php’de function fx() { bişeyler yap.. }

şeklinde tanımlarken burada
void fx() { bişeyler yap.. }
ya da
byte fx(){ bişeyler yap.. }
olarak tanımlıyoruz. void fx() kullanımı, Return ile sonuç döndürmeyen fonksiyonlar için. Şayet fonksiyonumuz bir sonuç üretiyorsa bu durumda üretilecek verinin türünü belirtmemiz gerekiyor. Örneğin fonksiyonmuz byte tipinde bir sonuç döndürüyorsa
byte fx() { bişeyler yap.. return sonuc; } şeklinde tanımlama yapıyoruz. Fonksiyonumuza bir argüman gönderip, ona göre sonuç alıyorsak bunu da byte fx(a){ a.. do.. return } şeklinde kullanıyoruz.

En genel hali ile şöyle:

dönüşTipi funksiyonİsmi( argüman-lar ){
sonuçTipi sonuç;
bişeyler yap..
return sonuç;
}

Böyle çok havada kalıyor sanırım. Yukarıdaki tanımlamaları da kapsayan kısa bir örnek yapalım.

////////////////////////////
void yaz() {Serial.println("Merhaba"); }
// Bi şeyler yapıyor ama bize bir sonuç ile geri döndürmeyeceği için
// void fx(){} kullanıyoruz.

////////////////////////////

byte cevre() {
byte A=20;
byte B=40;
byte cevreuzunlugu = 2*(A+B);
return cevreuzunlugu; }
//return ile 255'ten küçük bir değer döndüreceği için
// byte fx(){} şeklinde kullanıyoruz

////////////////////////////

int alan() {
byte C=30;
byte D=50;
int kapladigiAlan = C*D;
return kapladigiAlan; }
//return ile 255'ten büyük bir değer döndüreceği için
// int fx(){} şeklinde kullanıyoruz

////////////////////////////

int y = 350;
byte x = 75;
void topla(){ int z = x+y; Serial.println(z); }
//return ile bir değer döndürMEyeceği için
// void fx(){} şeklinde kullanıyoruz

////////////////////////////

int p = 300;
byte j = 15;
int carp(int k, int m){
int sonuc;
sonuc = k * m;
return sonuc; }
//return ile 255'ten büyük 32768'den küçük bir değer döndüreceği için
// int fx(){} şeklinde kullanıyoruz
// dışarıdan bizim verdiğimiz değişkenleri kullanarak işlem yapması için
// int fx(int arguman1){} şeklinde kullanıyoruz

////////////////////////////

//tanımladığımız fonksiyonları iş başında görelim 😉

void setup() { Serial.begin(9600);
yaz();
byte ornekIKI = cevre(); Serial.println(ornekIKI);
int ornekUC = alan(); Serial.println(ornekUC);
topla();
int ornekBES = carp(p,j); Serial.println(ornekBES);
}
void loop() {}



 

Bu bilgiler ışığında AHMT’in kodlarına yeniden bakalım..Bu sefer bi tık daha sıcak gelebilir 😉

Sıcaklık Volt ve Sıcaklık değişkenlerimizin integer ve float (noktalı sayı) olduğunu, ayrıca hangi bacağa bağlantı yaptığımızı tanımladık.

Return ile bir sonuç döndürmeyeceği için fonksiyon oluştururken void sicaklikOlc(){} olarak kullandık.

Fonksiyonun içinde ise SicaklikPini’ne bağlı sensörden gelen değerleri okuduk (doğal olarak derece değil volt) sonra kaç voltun kaç santigrat dereceye denk geldiğini hesaplatıyoruz. Bu arada bu işlemin sağlıklı olabilmesi için void setup(){} içinde  kullanacağız.

Kodun ilerleyen kısımlarında, herhangi bir yerde LM35’ten gelen ortam sıcaklığının o andaki değeri lazım olduğunda şöyle demek yeterli olacak:

sicaklikOlc();

 

Akıllı Termostat AHMT v11: İstenen Fatura/Sıcaklık

##1, ##2, ##3


Hani şu bir şeylerin ayarını değiştirmek için çevirip durduğumuz düğmeler var ya, işte onların çoğu Potansiyometre. // görsel

Ve kendi içinde tahmin edilenden çok çeşidi ve isimlendirmesi var 🙂

Potansiyometre: Dışarıdan müdahale ile değeri değiştirilebilen direnç. (~carbon)
Reosta: Yüksek akım değerine sahip olanar (~nikel~krom)
Pot: Kısaca söylenişi
Lineer Potansiyometre: Her 1 birim hareket için, sabit oranlı direnç değişimi sunanlar


Logaritmik Potansiyometre: Her 1 birim hareket için, artan/azalan oranlı direnç değişimi sunanlar, genelde dairesel yapıda olup, piyasadaki çoğu örnek için, direnç değeri 180 dereceye kadar hafif hafif artarken 180 derece sonrası fazla fazla artar. (Bu yüzden kelimenin tam manası ile logaritmik denebilir mi tartışılır.) Azalan versiyonu anti-logaritmik potansiyometre adını alır.


Çok turlu/Sonsuz/Vidalı Potansiyometre
: Belli bir aralığı yoktur, defalarca dönebilecek şekilde hazırlanmıştır

Trimmer/Trimpot: Genelde ayarlanmış değere sahip olarak gelir, bir iki defa ayarlama sonrası yeniden değişime ihtiyaç duymaz (Örn, LCD ekranın arka aydınlatmasıdandaki trimpot’un, yazıların görünmesi için ortamdaki ışığa göre bi defa ayarlanması yeterlidir. Ama radyonun düğmesi her zaman değişebilir)

Meraklısı için daha detay mevcut #1, #2, #3

Bizim isteğimiz şu idi; istenen sıcaklığı ayarlayalım, fatura rakamını girelim 😉 Sistem ona göre ayarlasın.. Evet kulağa hoş geliyor değil mi?

Fatura benim istediğim tutarda gelsin

Bunun için her şeyi tersten düşünmek gerekiyor. 250 TL fatura geliyorsa ortalama olarak günde 8.3 TL’lik kullanım var demektir. Günün her saati farklı elbette ama şimdilik ortalama alırsak demek ki saate 0,34 TL’lik harcama söz konusu. AHMT evde hareketin olmadığı zamanlarda 5 saate karşılık gelen bir düşüş sağlayabilirse (8 saat değil, çünkü tümden kapatmıyor)  bu ayda 50 TL bir düşüşe denk geliyor demek.

Yazılım tarafında, istenen fatura ve istenen sıcaklığa bağlı olarak; tasarruf edilmesi gereken süreyi bulmamız ve bunu gün içi ve geceye yaymamız gerekiyor.

Bunları yapabilmek için de, kullanıcının İstediği ortam sıcaklığını girmesi gerektiği gibi, belirli bir fatura istediği için Fatura tutarını da girmesi gerekiyor. Ve bizim bunu hesaplatabilmemiz için de doğalgaz birim fiyatını bilmemiz gerekiyor. İlk kodlarken bunu girebiliriz elbet ama

Zam gelirse?

Zam gelirse birim fiyatın da değişebilmesi lazım. Şu an için, internet üzerinden cihazların yazılımını otomatik güncelleme gibi bir maceraya atılma niyetimiz olmadığı için, en pratik çözüm: Her bir paramatre için birer potansiyometre.

Biz de mevcut devremize, 3 tane potansiyometre ilave ettik.
Ve.. Bozuldu 

Serial ekrana hiç bir bilgi gelmedi. Bu kadar basit bir devre elemanı ile sorun yaşamış olmak komik. Bi çok sebebi inceledik ve kontrollü deneyle gördük ki 1 tane bile potansiyometre bağlayınca sistem çalışmıyordu. Demek ki komik olan, bizim Arduio’nun A1 A2 A3 bacaklarına direnç-potansiyometre bağladığımızda, direncin değerine göre devrenin tamanın nasıl etkileneceğini, toplam direnç/akım/volt değerlerinin ne olacağını hesaba katmamamızmış.

Elimizdeki potansiyometrler 10K’lık idi. Yani toplam 30.000 Ohm dahil olmuştu sisteme.

Hepsini 1K yapınca, AHMT yeniden uyandı 🙂

Kod tarafında tanımlar şunun gibi oldu;

Sıcaklık derken, Ortam sıcaklığını ölçtüğümüz LM35 sensörüyle ilgili şeyleri kast ediyorum.

ISI derken, kullanıcının istemiş olduğu değerle ilgili, ilk potansiyometre ile ilgili şeyleri kast ediyorum.

Bu tanımların kullanımı ise şöyle;

ve de

bir sonraki yazıda bu kısımların açıklamalarına da değinelim..

 

Akıllı Termostat AHMT v10.-1: Byte ve Int ile tanımlama

Önceki bölümler için bkz:
Akıllı Termostat AHMT v10.-2 W ve Ultrasonic HC SR04
Isı, hareket ve zamana duyarlı termostat yapalım: AHMT

Görsel

Eksi 1)

Son yazının sonunda, netteki örneklerin çoğunun aksine, int yerine const byte kullandığımızdan bahsetmiştik. Şimdi o kısmı bi tık açmaya çalışalım.

malum bir bit; 0 ya da 1 olabilir.
Atıyorum iki adet biti farklı kombinasyonlarda kullanarak 4 farklı şeyi, mesela bazı harfleri de kast/ifade edebiliriz.
00 = Mavi = A = 45
01 = Gökyüzü = B = 90
10 = Bulut = C = 135
11 = Güneş = D = 180

elbetteki bu 4 seçenek yeterli değil.
büyük harf, küçük harf, rakam, nokta, virgül derken ortalama bir kitap yazmak için bizi ancak 7-“8″ hane paklar.
yoksa?  Evet BYTE.

Byte ile elimizde 8 hane var:  |0|1|0|1|0|1|0|1|

Modüler aritmatikten hatırlayacak olursak, ikilik tabanda sekiz basamaklı yazabileceğimiz en büyük sayı 11111111 bunu 10’luk tabana çevirelim bakalım neymiş: 127 126 125 124 123 122 121 120

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

Demek ki.. 8 bit = 1 BYTE içine 255’e kadar olan sayıları tanımlayabiliyorum..

Peki 1 byte değil de 2 byte içine yazabileceğimiz en büyük sayı ne acaba?

1 + 2 + 4 + 8 + 16 + 32 + 64 +128 + 256 + 512 + 1024 + 2048 + 4096 + 8192 + 16384 = 32768

Hani o sağda solda Ezbere gördüğümüz rakam buradan geliyormuş demek ki 😉

1 BYTE içindeki her bit’in değeri 1 olsa, bununla yazabileceğimiz en büyük sayı:
|1|1|1|1|1|1|1|1|  yani Onluk tabanda 255

2 BYTE içindeki her bit’in değeri 1 olsa, bununla yazabileceğimiz en büyük sayı:
|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| yani Onluk tabanda 32768

 

Geçen yazıdan bir alıntı yaparak Arduino kodlarımıza dönelim;

int sesver = 3;

yerine

cost byte sesver =3;

kullanmış olduğumuza dikkat edin 😉


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

Tercih etmediğimiz ilk haliyle kullanmış olursak;
int sesver = 3; dersek SRAM’de 2 Byte yer tutacak demek. Ki örneğin mevcut Arduino Nano’daki SRAM‘in toplam kapasitesi 2 KB.

Şu an için Hiç bir sorun olmaz elbet ama kodlar ve değişkenler arttıkça Metrobüsteki “*Bir* adım ilerler misiniz” meselesine dönerse olay, bu bilgi aklınızda olsun 😉

Bu arada 32768’den daha büyük sayılar da lazım olacak. Böyle durumlarda negatif işaretli -32768 gibi sayılara yer ayırmaktansa, pozitif tarafta 65536’da kadar gidilebilir.
Bunun için  unsigned int kullanmak faydalı olabilir.

Yok bu da kesmedi ise; unsigned long ile çitayı 4,294,967,295 kadar çıkarabilirsiniz 😉

Böyle büyük sayılarla işim olmaz demeyin. Diyelim bi yerde (atıyorum, çok hızlı ve arda ada gelen mesajların karışmaması için) Mili Saniye saydırmanız gerekti;
byte j ile tanımlanmış j‘nin değeri, neredeyse başlamadan 255’e ulaşacak ve oradan Geri saymaya başlayacağı için curcuna çıkacaktır.
Benzer şekilde int k ile tanımlanmış k‘nın değeri, 33. saniyeden itibaren Halil Sezai + Linet moduna geçecektir 😉

 


Müziğe dönüşmek!

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 😉