Steem ekosisteminde 1 Yıl

Görsel bir SES’e ait değil.. Yaklaşık 1 yıldır Steem ekosisteminde yazmış olduğum başlıklar.

“Yeni Devrimlerin Mihenk Taşı: Defter-i Kebir (1)” başlıklı yazı ilk yazım olmuş.. Ardından “python itertools combinations like “s3v1yoR” words from letters array list” gibi çıktısı apaçi ama kodu eğlenceli bir Python yazısı yayınlamışım.

“Borsa yönünü 93.400’e çevirdi. (22 Eylül 2017)” bir borsa yazısı ardından meşhur JP Morgan‘ın Bitcon’e çamur atıp ardından kendisin bolca aldığı vaka yaşanmış.. “Haha! JPMorgan Again. Your speculations will don’t work no more :)” başlığı altında  ben de iki çift laf etmişim 🙂

“Sürpriz! Dubai Resmi Dijital Parası EmCash’i duyurdu” başlığı altında, BlockChain’in dünyada gelişme alanlarına, ülkelerin bu konuda neler yaptıkların bakmışım.

Bu arada “Steemit kurusucu @Ned’in yeni icadı: Smart Media Tokens (Akıllı Pay)” başlığı altındaki olayları da unutmamak lazım, Steem Block Zinciri için hala önemini koruyan bir mesele.


Birkaç bitcoin analiz yazısı ardından Dolar grafiğinde kararın yaklaştığını söylemiş ve “Dolar Kararını Verdi: 3,50’nin Altını Unutun” başlığını atmışım..


Ardından yine bolca coin ve teknik analiz yazısı gelirken, aralarda “Şu nasıl yapılır”, “Bu nedir” tarzından Tutoriallere/Eğiticilere başlamışım: Bittex’e STEEM ya da STEEM DOLLAR transfer etme (Resimli Anlatım)

E tabi sadece “seç, tıkla, gönder..” ile olmaz. Biraz abartmak lazım 🙂


Kendi Steemit Oyveme Botumuzu Yapalım -1

Let’s make our own Steemit upVote Bot -1


..ve kodlar Steem(it) için koşmaya başlamış. Ki ilerleyen zamanlar için hatırı sayılır şekilde -en azından benim bolca vaktimi alır şekilde- steem eksenli kod kapısı açılmış ve devamı da gelmiş..

Yine analizler ve Dolar / Coin vb. yazılar devam ederken, Steem Blok zinciri üzerinde yeni çıkan uygulamalar dikkatimi çekmeye başlamış: Steem tabanlı, Twitter benzeri Zappl denemesi

ve sonrasında utopian..

Utopian bir nevi Kavimler Göçü gibi etki ederek, içeriklerin içeriğinin değişmesine sebep olmuş.. UÖ, US 🙂
Utopian Sonrasını bir sonraki ünitede işleyelim 🙂


Büyük Resmi görmek 😉 için tıklayınız..

all.gif

 

Çocukları Robot-Geçirmez Yapmak

1136’da -Şırnak- Cizre’de doğan El Cezeri, ilk sulama otomatı, abdest otomatı ve otomatik saz çalan aletler yapmıştı. O zamanlar Robot kelimesi yoktu. Aradan 800 yıl geçti..

Karel Čapek, 1920 yılında yazmış olduğu R.U.R. isimli bilim kurgu tiyatrosunda “Robot” kelimesini kullandı. Hizmetçi, köle, ağır/angarya işlerde çalışan.. gibi manalara gelen bu kelimenin hayatımıza girmesinin üzerinden neredeyse tam olarak ~100 yıl geçti. //Anlatım bozukluğu değil efenim; “Tam 100″e yakınsama yapıyorum 🙂

Aradan bir 34 yıl daha geçtiğinde George C. Devol, sanayide kullanılabilecek ilk robotu icat etmişti. Universal Automation / Evrensel Otomasyon deyiminden yola çıkarak, yaptığı robota Unimate adını verdi. Takvimler 1961 yılını gösterdiğinde patentini de aldığı Unimate, General Motors‘un montaj hattında, sıcak döküm kalıplarını kaldırmak ve istiflemek üzere “işe” başladı.

 

(Çuvaldızı kendimize batıracak olursam; servo motor, mc ve dişlileri geçen ay sipariş verdiğimiz düşünülürse, Unimate’e benzer bir cihaz yapmak için 50 yıl geriden gidiyoruz)

 

 

Gelişmekte olan film sektörü için kayıt cihazı, dünya fuarı için fotoselli ziyaretçi sayacı gibi cihazlarda icat eden Devol, 1983’te *ufkun ötesini* gördüğünü belli eden şu sözleri söyledi:


“A robot must be able to receive and use information from computers and give information to computers.”

// E yani, Türkçe konuşacak hali yok ya 

Mealen; Bir robot, bilgisayardan bilgi alıp kullanabilmeli ve bilgisayara bilgi verebilmeli.

Görüleceği üzere, kelimelerin arasında bir yere “internet” kelimesini eklediğimizde, aslında şimdilerde seçim meydanlarına kadar gündem olmuş “Nesnelerin interneti ve Sanayi 4.0“a da işaret ediyormuş.

Devol ile ilgili alıntı yaptığım kaynak New York Times, Devol’ün öldüğü yıllarda aşağıda linki bulunan yazıya yer vermiş. Aynı New York Times bu yıllarda, Will Robots Take Our Children’s Jobs? / Robotlar Çocuklarımızın İşlerini Elinden Alır mı? başlıklı yazılar yayınlıyor.

Bir başka hatırı sayılır gazete olan Financial Times ise sözlüklere girecek yeni bir terim de üreterek;
“Çocuklarınızın kariyeri nasıl Robot-Geçirmez yapılır?” diye soruyor ve kendi sorusuna yanıt arıyor.

Geç kalmadan biz de cevap arasak mı?

Devam edecek..
Kaynak & Görsel: The New York Times

Döngünün Kabuğunu Kırıp Dışarı Çıkmak

Önceki konular:
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali
void loop() ve analogRead açıklaması
“Cihazın Algılaması” Dediğimiz Şey
Evdeki Hesap Döngüye Uymazsa
Tamam Sabah Söndü ama Akşam Olunca da Yansın
Döngü Kilidi


Yukarıdaki yazılara atıf yaparak girişi biraz hızlı geçeyim..
( Google ya da başka bir kaynaktan ilk olarak bu sayfaya geldi iseniz.. öncelikle linklere göz atmanız daha ağlıklı olabilir.
Diğer yandan halihazırda ileri derecede kodlamaya hakimseniz, buradaki yazılar siz kesmeyebilir.)

x değişkenimizin tam sayı olduğunu söylemiş,
LDR ışık sensöründen gelen değerleri A0 analog pininden okumuş ve bunları x’e atamıştık.

Ardından, -tecrübeye dayalı olarak, sabah ve akşam saatlerinde elde edilen gerçek veri değerlerini girmek gerekir- günün ağarmasına denk geldiğini varsaydığımız 200’den büyükse, 3 nolu pine giden elektriği kesmiştik.
// Ki bu pine bir röle ve bu röleye de sokak lambalarının ana hattının bağlı olduğunu kurgulamıştık.

IF (x>200)  sınaması ile kısmen amacımıza ulaşsak da Arduino gibi cihazların sürekli Loop/döngü halinde kalıyor olması reel uygulamalarda işleri biraz karıştıracaktı.

ve bu yüzden kendi Sonsuz Döngü Kilidimizi oluşturmuştuk..

Şimdi yapmamız gereken şu:

Sabah olduğunda;
“Lamba Yanık kal” lakaplı 🙂 Sonsuz döngüyü kırıp, “Lamba Sönük kal” lakaplı Sonsuz döngüye geçmek..

ve tahmin edeceğiniz üzere

Akşam olduğunda;
“Lamba Sönük kal” lakaplı Sonsuz döngüyü kırıp, “Lamba Yanık Kal” lakaplı Sonsuz döngüye geçmek..

Bunun için, Lamba durumu için Sonsuz dönme işlemi ESNASINDA, LDR-Işık değerini yeniden biliyor olmamız LAZIM ki, bu sonsuzluk kırılsın.. While dışında bir yerde okuttuğumuz X değeri için kıyaslama yapacak olursak; döngü içine girmiş akışın, dışarıdaki YENİ güneş ışığı değerinden haberi olmadığı için, bir gün elektrikler kesilene kadar kendi döngüsü içinde devam edip gidecektir.

Yakından bakalım 😉

Ve toplu halde uzaktan bakarak, açıklama serimizi bitirmiş olalım..

int x;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);}

void loop() {
  
  x = analogRead(A0);
  if (x > 200) {
    digitalWrite(3, LOW);
    while (1) {      
      x = analogRead(A0);
      if (x < 200) { break; }
    }
  }

  x = analogRead(A0);
  if (x < 200) {
    digitalWrite(3, HIGH);
    while (1) {
      x = analogRead(A0);
      if (x > 200) { break; }
    }
  }
}

(Steemit üzerinden okuyorsanız, aşağıdaki linkten kodları daha okunur olarak görebilirsiniz)

Döngü Kilidi

Önceki konular:
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali
void loop() ve analogRead açıklaması
“Cihazın Algılaması” Dediğimiz Şey
Evdeki Hesap Döngüye Uymazsa
Tamam Sabah Söndü ama Akşam Olunca da Yansın


Değer okumalarımız, değişken atamalarımız ve ardından Işığın şiddetinin  çok olmasına göres Lambalar’ın sönme işine ardından akşam olduğunda yeniden yanması işlemi için gerekli kodlara bakmıştık.

Arada Sessiz Hata diyebileceğimiz, programın hatasız çalışmasına rağmen istediğimiz sonuçları alamadığımız durumlara bakmıştık.

Son olarak, istediğimiz durum da gerçekleşmişti. Ancak uygulama kısmına gelince teori kısmında iken pek görülemeyen bir saha pratiği ile karşılaşmıştık.

Kodlar üzerinden gidecek olursak

int x;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);}

void loop() { 
  x = analogRead(A0);
  if (x > 200) {
      digitalWrite(3, LOW); }

  if (x < 500) {
    digitalWrite(3, HIGH); }

}

Burada her şey normal görünüyor ve bir hata yok. Ancak korku filmi tadında durumlarla karşılaşmamız olası. Yani ışığın çok hızlı bir şekilde yanıp sönmesi durumu.

O halde, olaya yeni bir bakış açısı daha getirmemiz daha sağlıklı olabilir.

//Benzer vak’alar,
// bir düğme basılması ve sonrasındaki tutarsızlıklar
// ya da tam olarak düğmeye basma saniyeleri içinde gerçekleşen na hoş durumlar için güzel çözümlerden birisi olabilir. (Örn. şu an evdeki televizyon ve kumandası arasında böyle bir sorun var, ses düğmesine kısa kısa basınca sorun yok.. ancak basılı tutunca, fazlaca yüksek bir hızda artıyor, sesi alçaltmak için aksi yönde basınca bu kez de çok hızlı bir şekilde düşüyor.)

While kilidi

Loop döngüsü deyip duruyoruz.. peki biz kendimiz bir döngü yapsak.. bu sonsuza kadar işine manuel(?) müdahaleler yapsak.. ve bizim istediğimiz durumlar için sonsuzluk yolculuğuna çıksa.. ya da sonsuzluk yolculuğunda hangi yöne gideceğini biz söylesek 

Bilindiği (bilinmesi gerektiği) gibi, while döngüsünün for döngüsünden farkı;
for: “3-5-817 gibi belirli bir sayıda dön”, demekken
while: “koşul sağlandığı sürece dön” demek.

Peki,
While (1==1) { .. }
dersek?

Aradığımız cevap derim 😉 Arduino’daki default fonksiyonlardan olan loop() gibi, kendimizin kontrolünde olan bir sonsuzluk döngüsü elde etmiş oluruz 😉

So.. 😉
Buraya kadar düzenli takip ettiyseniz yapılacakları sezdiniz sanırım 😉

 

Tamam Sabah Söndü ama Akşam Olunca da Yansın

Önceki konular:
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali
void loop() ve analogRead açıklaması
“Cihazın Algılaması” Dediğimiz Şey
Evdeki Hesap Döngüye Uymazsa


Yukarıda linki verilen önceki bölümlerde, kısaca “Gün ağardığında sokak lambalarının otomatik sönmesi” şeklindeki amacımızdan, değişken atama ve bit/byte kavramlarından, arduino özelinde loop() fonksiyonundan, sensörlerden çevresel veri okumak için analogRead() fonksiyonundan bahsetmiştik.

Ardından daha çok algoritma tarafının konusu olan IF/Şayet deyiminden/operatöründen bahsetmiştik.

Sonrasında, yazdığımız kod ilk seferinde çalışmış, ancak devamında Lambalar sönük kalmıştı.

Ve bunun sebebi cihazda mekanik, kodlarda yazım hatası olması değildi. Aksine hata vermeden ne söylediysek yapıyordu. Ancak bir robota “Bir bardak su getirmesini” söylediyseniz ve robot da bunu getirdiyse “iyi de bu neden soğuk değil” veya “Su dediysem meyve suyu anlasana işte..” diyemezsiniz.

Zira o, sizin söylediğiniz şeyi yaptı, söylemediğiniz bir şeyi yapmadı.

Bizim yaptığımız şeyde de buna benzer bir Cümleyi eksik/yanlış kurma durumu var:

Loop döngüsü var.. sonsuza kadar dönecek..
içinde LDR/ışık/x için bir sına var: 200’den büyükse, lambalara giden hattı kesecek..

Ok. Sorun da yok gibi..

mi? acaba?

Gün ağardı.. lambalar söndü.. tamam.

Peki akşam olunca?

Koda bakalım.. akşam için bir şey söylemiş miyiz? Hayır. 
“`
Işık çoksa, sön
Işık çoksa, sön
Işık çoksa, sön
..
..
“`

Tek söylediğimiz bu. Akşam yanması için herhangi bir şey söylemedik.

Şimdi yapmasını istediğimiz şey aslında yine bir Algılama.

Cihazdan “Akşam olduğunu algılamasını” istiyoruz. Yani -linkte de geçtiği üzere- efsanevi IF‘i kullanma zamanı 😉

Kodlarını yazalım..

“`
if (x < 500) {
digitalWrite(3, HIGH);
}
“`

Şimdi Arduino ile Empati zamanı  Kendinizi cihazın yerine koyun ve ADIM ADIM hatta gerektiğinde virgül virgül harf harf yazılmış olan kodları işlediğinizi düşünün. A=15, b$ = “Robbie” 😉 gibi değer atanan değişkenler fazla ise, elinize kağıt kalem de alabilirsiniz.

Bakalım..

int x;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);}

void loop() { 
  x = analogRead(A0);
  if (x > 200) {
      digitalWrite(3, LOW); }

  if (x < 500) {
    digitalWrite(3, HIGH); }

}

Bu kodlar işimizi görecek.. Söylediğimiz cümleyi de düzelttiğimiz için, artık olması gerektiği gibi..
Ancak 🙂
Sabahın ve akşamın ilk saatlerinde lambaların korku filmlerindeki gibi yanıp söndüğünü göreceğiz..
?

 

Evdeki Hesap Döngüye Uymazsa

Önceki konular:
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali
void loop() ve analogRead açıklaması
“Cihazın Algılaması” Dediğimiz Şey


Hatırlarsanız

// Sürekli çalışan fonksiyonumuz.

diye bir şeyden bahsetmiştik.

Bir nevi cihazda elektrik olduğu süre zarfında daima çalışan ana fonksiyondu. Ve alışageldiğimiz, program sonlarına adeta “bitmesin bu güzel hikaye” der gibi, her defasında başa alarak, sürekli dönmesini sağlıyordu.

Ve yine hatırlarsanız, bir önceki yazıda

‘ten bahsetmiştik.

Hatta bunun programcılığın iki harflik özeti olabileceğinden ve Algılama/Tetiklenme dediğimiz şeyin özündeki sihirli algoritma olabileceği mealinde şeyler söylemiştik.

Bu yüzden, “Gün ağardığında Sokak lambaları sönsün” şeklindeki amacımız doğrultusunda şöyle bir kurgu yapmıştık..

Yani,

x bir tam sayı olsun, (2 byte)
A0 pini Giriş modunda olsun
ve
X eşittir = A0 pinine bağlı ışık Sensöründen okuduğumuz değerler olsun.

Şayet ışık-x, 200’den fazla ise
3 nolu pin kapansın.. ki bu pine bağlı röle kapansın.. ki sokak lambaları sönsün..


Her şey güzel..

Ama!
Bu kodları çalıştırdığınızda, şaşıracaksınız.. Zira lamba bir kere söndükten sonra geri yanmayacak.
Hatta faklı kurguda hazırlanmış akış içerisinde, beklentinizin aksine bağladığınız cihazın hiç sönmediğini de görebilirsiniz.

Neler oluyor? Neden çalışmıyor?

Çalışıyor.
Hem de tam olarak cihaza söylediğimiz şekilde çalışıyor.
// aksi durumlar için bkz: makinaların ayaklanması 🙂

Yazının başına dönelim..

loop() fonksiyonumuz, elektrik olduğu sürece kendini çalışmaya adamış sonsuz romantik bir arkadaşımızdı. Ve kodlar bittiğinde her seferinde filmi başa sarıp yeniden oynatıyordu..

Arduino ve benzer cihazlar kodlarken, ilk başlarda karşımıza çıkabilecek Error’suz Mantık hatası bu olsa gerek.

Sürekli bir döngünün içinde olduğumuzu daima akılda tutmak gerekiyor.

Yani aslında cihazın içinde gerçekleşen olay şu;
tanımlar
setup: tek seferlik ayarlar { .. }
loop: sonsuza kadar yapılacaklar { .. }

ve biz şöyle yazmıştık

görüleceği üzere sonsuza kadar dönecek olacak olan loop içinde;
Işık sensöründen gelen değeri okuyoruz,
bu değer 200’den büyükse
3 nolu pini kapatmasını söylüyoruz

cihazda bunu yapıyor.

Sonra ne oluyor?

Sonra başa dönüyor. Yeniden değeri okuyor. 200’den büyükse 3. pini kapatıyor..
sonra yeniden başa dönüyor.. ..

Cihaz hatasız çalışıyor ama sistemimiz hatalı: Yeniden yanmasına fırsat vermiyoruz 🙂


Görsel: shutterstock

 

 

“Cihazın Algılaması” Dediğimiz Şey

Bkz: Önceki konular:
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali
void loop() ve analogRead açıklaması


Hiç öyle bir niyetim yoktu ama ufak açıklama ve eklemeler yapayım derken, bunun aynı konu üzerindeki 4. yazı olduğu düşünülürse, bu yazılar da bir Seri’ye dönecekmiş havası seziliyor sanki 😉

Son yazıda, analogRead() hakkında yazmışım.. Sonrasından devam edelim..

Bizi karşılayan kod:

-Denilmez ve belki iddialı bir laf olur ama- Denilse ki; Şu programlama dilini hatta ve hatta BÜTÜN Programlama dillerini ve programcılık mantığını tek KELİME ile nasıl özetlersin?

Bu sorunun o tek kelimelik cevabı

olurdu sanırım.

Ve başlıktan da anlaşılacağı üzere, herhangi bir programın ya da cihazın, “algılamasından”, “sınama-doğrulama yapmasından”, “değişikliği fark etmesinden”, “belli bir koşulun gerçeklemesi ile belirli şeyler yapmasından” vb.. bahsediyorsak temelde IF’ten bahsediyoruz demektir.

“`Eğer (şifre yanlışsa)  { Ekrana hata mesajı yazdır. Yanlış şifre denemesi yapıldığın dair mail at. }“`
“`IF (Steem fiyatı 1 USDT’nin altına düşerse) {  100 Steem Sat. 50 SBD Al. EOS’a %10 aşağıdan AL emri gir. }“`

“`IF (evi su basmaya başladıysa) { telefona bildirim gönder. }“`

Ve gelelim üzerinde çalıştığımız örneğe, “`Şayet (gün ağardıysa ){ Sokak lambalarını söndür }“`

Bir önceki bölümden hatırlayacak olursak;

kodu ile A0 pinine bağlamış olduğumuz Işık Sensörü’nden (LDR) gelen değerleri okuyor ve bunu x’e atıyorduk.

Şimdi bi kere daha düşünelim;

Ne istiyoruz?

Margot Robbie ile akşam yemeği yemek 🙂

Gün ağarınca, sokak lambaları sönsün..
Yani? LDR-Sensör üzerine düşen ışık miktarı artınca.. lambalar sönsün..
Yani LDR’den okuduğumuz değer artında..
Yani x değeri artınca

Algılama dediğimiz şey işte tam burası..

// Aydınlık artınca x de artacağı için, x 200’den büyük ise, süslü parantez içindeki yap
// Programlama dilleri arasında ufak tefek imla farkları olabilir ama genel mantık budur.
// Şöyle ise, şöyle değilse, büyükse, küçükse, büyük eşit değilse vb..
// Dilerseniz iki koşulu birlikte de verebilirsiniz. Ali gelmişse ama Zeynep gelmemişse, şunları yap gibi..
// So..

Ok. Ortam aydınlık ve x 200’den büyük. Şimdi lambaları kapatalım.

// Yukarıda A0 pininden değer okumuştuk.
// Bu kez herhangi bir pine bir değer gönderdiğimiz için READ yerine WRITE kullanıyoruz.
// Geniş bir yelpazede veriler/değerler değil de sadece Aç-Kapa , 1-0 gibi bir değer göndereceğimiz için
// yani Dijital bir işlem yapacağımız için digitalWrite() kullanıyoruz.
// burada Sokak lambalarımızın ana hattını kontrol eden Röle, 3 nolu pine bağlı olduğu için
// 3 nolu pine LOW gönderiyoruz. Yani sokak lambalarımızı kapatıyoruz.


Görsel: hdwallsourceshutterstock

void loop() ve analogRead açıklaması

Bkz: Önceki konular;
26 Satırda İsrafı Önleme
26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali


Kaldığımız yerden devam edelim..

// Sürekli çalışan fonksiyonumuz.
// Başlarda biraz kafa karıştırıcı olabilir.
// Zira normalde bir program akışı içinde, yazdığınız akış sona geldiğinde
// programın durmasını bekleriz.
// Ancak burada bazı dillerdeki _main_ fonksiyonları gibi,
// loop fonksiyonu sürekli çalışmaktadır.
// bu da bize “program sonu” olarak adlandıranbileceğimiz bir yer olmadığını gösterir.

// bi yerlerde başlayıp, bi yerlerde bitmesi, zihimizin çalışma mantığına daha uygun olduğu için
// şöyle denilebilir.. şu oluyor, bu oluyor.. sonra şu çalışıyor, bunu tektilliyor vs..
// en SON olarak buradaki WHILE döngüsü çalışıyor denilebilir.
// ki bu SON WHILE’ın çalışma şekli şekli şöyledir:
// while (elektrikler_var_mi) {}

 


// Cihazların üzerindeki A0, A1, A2.. şeklindeki pinlere gelen değerleri okumak için
// analogRead kullanıyoruz.
// hatırlayalım; Dijital demek 0-1 demekti.
// eğer alacağımız değerler 0-1 değilde 3 86 156 325 874 sadece var-yok sıfır-bir olmaktan
// öte değerler ifade ediyorsa lazım olan şey Analog işlemdir.
// bir ortamdaki “ışığın şiddeti” dediğimizde de böyle bir durumdan bahsediyoruz.
// sabah öğle akşam üstü gece yarısı sürekli değişecektir.
// ya da şu ayaklı, ışığı ayarlanabilir lamlarını düşünün.
// böyle bir ortamda ışık şiddetini 0-1’in ötesinde geniş bir sıkalada ifade edilecektir.

// LDR sensörü ise, ışığa duyarlı bir dirençtir. Üzerine düşen ışık değiştiğinde
// ldr’den okduğumuz direnç değerleri de değişir.

// O halde, LDR’yi dijital pinlere değil, analog pinlere bağlamak daha sağlıklı olacaktır
// ayrıca gelecek olan değer geniş bir aralıkta olduğu için biz de
// 0-300 arasındaysa şunu yap, 301 – 600 arasında bunu, 601-900 arasında şunu yap
// gibi farklı işlemler yapabileceğimiz gibi

// gelecek olan ışık şiddetini, bir servo motorun açısına eşitlemek gibi
// ışık şiddetinin az ya da çok değişimine dağlı olarak
// motorun açısını da orantılı ve anlık şekilde değiştirebiliriz.

// bu projede sabah olduğunda, sokak lambalarının sönmesi için, ışık şiddettine bağlı olarak
// çalışacak aşağıdaki kodları yazacağız.

// aşağıdaki linkten murattatar.xyz üzerinde daha okunur ve renkli olarak görebilirsiniz.

void loop() { 
  x = analogRead(A0);  
  if (x > 200) {
    while (1) {
      digitalWrite(3, LOW);
      x = analogRead(A0);
      if (x < 200) {
        break;
      }
    }
  }



  x = analogRead(A0);
  if (x < 200) {
    digitalWrite(3, HIGH);
    while (1) {
      x = analogRead(A0);
      if (x > 200) {
        break;
      }
    }
  }


}



Devam açıklamalar gelecek..
Görsel: shutterstock

nRF24L01 Modülü Çalışmıyor ise..

Öncelikle modül çok güzel. Kabaca 2 Mbit’e tekabül eden bir hızda haberleşebiliyor. İnsanın, Alev Alatlı’nın kitaplarında bahsettiği “kendi alternatif internetini” kurası geliyor 😉 Ancak ilk başta biraz karmaşa var gibi.. Ki başlık da o yüzden böyle.

Baştan anlaşalım, PhotoShop, Web tasarım ve SEO vb.. konularda daha emin ve iddialı konuşabilirken, bu konulara yeni başladığım için anladığım kadarını aktarmakla yetineceğim. Zira bu kadarcık bile olsa Türkçe bilgi kırıntıları şimdiler için hayli önemli diye düşünüyorum. İleride elbetteki kaynak sayısı şimdikinden çok çok daha fazla olacaktır. (en azından öyle umuyorum)

Modül, Nordic Semiconductor firması tarafından üretilmekte. Nordic, 1983 yılında Norveç‘teki Trondheim Teknik Üniversitesi içinden taşarak kurulmuş bir firma.

Odak noktası, çok az enerji tüketen kablosuz iletişim. Ki bu bunda o kadar ileri gitmişler ki, Bluetooth öncesi kablosuz bir klavye mousenuz varsa, içini açtığınızda Nordic imzalı bileşenler  görme ihtimaliniz çok yüksek.

Nordic şimdilerde “düşük enerjili kablosuz iletişim” odağını koruyor ve bu alanda çalışmalarına devam ediyor. (Örn: Bluetooth Smart kit : https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF51822-Bluetooth-Smart-Beacon-Kit)

 

Anladığım kadarıyla nRF.. modüllerinde yaşanan ASIL sorun, firmanın eski olması. Yıllar içinde ürün sayısı ve her ürünün varyasyon sayısı da arttığı için bu işlere yeni başlayan birisi, yanlış bir kütüphane kullandığının farkında bile değil..

Ne bileyim evladım, Windows cd’si dediler ben de aldım 🙂 95-98’ini, home’unu umtimate’ini mi biliyorum.

🙂

Tezgah’ın üzerindeki o enfes kısa enfes işlevsel yazıyı hatırlayalım : Dale Var 

yayın tarihine dikkat: 2008

 

Peki ÇÖZÜM ?

Doğru ürün için doğru  kütüphane. + nRF için kullanılan Adaptör.

nRF24 görünce hemen atlamamak lazımmış. Devamındaki rakam ve numaraların her biri ayrı bir ürün ya da en azından o serinin farklı bir varyasyonu olduğu için, birebir doğru kütüphaneyi bulmanız önemli.

Hadi nRF “24” değil de nRF “52” yazdığı için hemen fark ettiniz diyelim ama 24’ün devamda yazanlar da önemli.

Örneğin aşağıdakilere bakalım. Birisi Flash barındırırken birisi barındırmıyor, bir diğeri zaten düşük güç tüketen seriler arasında daha da düşük güç tüketmesi için optimize edilmiş bir versiyon, bir başkası kendisinden usb portuna sahip vb..

nRF24LE1
nRF24LE1 OTP
nRF24LU1+
nRF24LU1+ OTP
nRF24L01+

nRF24L01
nRF2401A
nRF2402
nRF24LU1
nRF24E1
nRF24E2
nRF24Z1

Özetle yapılması gereken şey; nRF Adaptörü kullanmak
ve  “Modelin tam adı + library” şeklide doğru yaparak doğru kütüphaneleri kullanmak. Aksi halde saatler ve günlerinizi boşa harcayabilirsiniz.


Görsel: components101
Bkz: https://www.nordicsemi.com/eng/Products/2.4GHz-RF

Coinlerde Temel Analizin Güçsüzlüğü

Tahvil, mevduat, borsa gibi Uzun vadeli finansal işlemlerde Temel Analiz olmazsa olmaz bir araç. Hatta abartarak şu denilebilir bir kişi, otomatik al-sat botları kullanmıyorsa ve kısa vadeli işlemler için borsada gibi bir platformda işlem yaptığını söylüyorsa belki doğru otobanda olabilir ama büyük oranda yanlış şeritten yol almaktadır.

Büyük resmi resmi görmek için 🙂  hep daha uzaktan bakıyoruz. Bu kez öyle yapmayalım, 180 derece ters çevirip yeniden asalım.. ve Picasso’nun Guernica tablosuna bakar gibi bakalım 

Ne diyorum?

Diyorum ki; Kısa vadeli işlemlerde olay tam tersi.

Kısa vadeli işlemler için Temel Analiz kullanmaya çalışıyorsanız, yanlış şerittesiniz. Hatta yanlış yolda bile olabilirsiniz.

Volatil / Oynak bir piyasada işlem yapacaksanız, ufak fiyat hareketlerinden Scalping yapma niyetindeyseniz, algoritmik işlemlere daha yakın bir yerlerde duruyorsanız, tercih etmeniz gereken yöntem, Temel Analiz değil Teknik Analiz olmalı.

Örneğin son günlerde yaşanan Yeşillenme olayımıza bakalım..

Bitcoin 7200’u görmüş, EOS coşmuş, noel babanın gidişi için tuttuğumuz yastan başımızı kaldırıp, yeşermiş dallara açmış çiçeklere bakmıştık..

Dan!

What?

Ne oldu da bu tablo birden değişti, Bitcoin 7200’lerden 6400’e düştü. Hem de sadece 5 adet çeyrek mum içinde.

Balinaların canı taze yemek istedi. Bu kadar. Ortada elle tutulur TEMEL Analize konu olabilecek hiç bir şey Yok.

O halde..

Öncelikle; Coin piyasalarında, Tezgah üstü piyasalarda, OTC piyasalarında ve Organize olmayan piyasalarda, TEMEL Kuralların İşleMEdiğini bilmek gerekir.

İşlem hacmi olmayan HİÇBİR piyasada ve HİÇBİR finansal enstrümanda işlem yapmamak gerekir. Zira temel zaten yokken, teknik grafiklerin de yanıltıcı olmaması için elle tutulur bir işlem hacminin oluşması gerekir. Örn. toplam 3-5 bin alıcı-satıcısı ve/veya 500 bin lira hacmi olan bir coin düşünelim. Dünya geneline ve saat dilimlerine bir dağılım yaptığımızda saatlik 20.000 ortalama bir hacimden bahsedebiliriz. Benzer mantıkla dakikaya 330 TL’lik bir hacim düşüyor demektir. Görüldüğü üzere kabaca 1 adet araba parasıyla işlem yapan birisi ya da iki kafadar piyasayı manipüle edebilir.

İşlem Hacmi Var

Belli bir potansiyelin üzerinde hacim varsa, bu piyasalarda işlem yapılabilir.

Ama bu demek değil ki burada balinalar yok. Elbetteki var. Hatta büyük balinalardan daha büyük balinalar da var.

 

 

 

Bu durumda, yine dönüp dolaşıp aynı yere geliyoruz.

Teknik Analiz‘e göre tahminlerde bulunma ancak daima her şeye hazırlıklı olmak gerek 😉

 


Görsel: kulturtapas

İnsan Makinası

Bir kaç yıl önce Johnny Express adıyla yayınlanan AlfredImageworks yapımı bir kısa animasyon izlemiştim. Eğlenceli bir üslupla Uzay içi kargo hizmeti sunan bir şirketi ve onun yaptığı teslimatlardan birisini konu alıyordu.

Ancak  alışılmışın dışında bir vak’a sunmasının ötesinde, 5 dakikanın sonunda bana alev alıverecekmiş gibi duran minik bir puzzle ve bir de çakmak bırakıp gitmişti.. İsterseniz siz de izleyin öyle devam edelim.

 

 

Animasyonun bıraktığı bırakıp gittiği puzzle’ın çözümü, bulmacaya dalmak değil, bulmacayı yakmaktı. Mevcut düşünce kalıplarını yakıp, çok farklı bir boyuttan yeni bakıl açıları sunuyordu.

Animasyonda ki mor canlılar, kendi işlerini yapan oradan oraya giden, haberleşen, bir şeyler inşa eden varlıklardı. Pek ala bakterilere benzetilebilirler.
Belli bir mekanda, diyelim ki bir meyve üzerine yerleşip orada Küf’ten binalar işaa edebilir, çoğalarak bir aile kurabilirler. Arada virüs saldırıları olduğunda kendilerini koruyabilirler. Zamanla bazıları meyvenin değişik köşelerine göç ederek kendi şehir ve devletlerini kurabilirler.

Sonra, akıllarının ve güçlerinin erimi dışında bir afet gelip onları yerinden sarsar. Ata bakterilerin söylentilerinde geçen sarsıcı deprem gelmiş ve ülkeleri çapında bir sarsıntıya sebep olmuştur. Ve ardından gökten deniz yağmaya başlar..

Yeni yaptıkları evleri, küçük çocuğun okulu, büyük çocuğun düğünü, rakip şirketle girdikleri gökdelen yarışı, garajdaki yarış bisikleti.. hepsi su olup gitmiştir.

Bu noktada, Meyve üzerinde yaşayan bakteriler yerine, Karaciğerlerimizdeki proteinlere de zoom yapabiliriz.

Protein anne, her sabah alarm çaldığında enzim çocuğuna kahvaltı hazırlar. Onu elinden tutup okula kadar götürür ve orada bırakır. Çocuk okulun kantininden çantasına biraz Lipid almıştır. Çıkışta babası onu alır ve luna para götürür. Cebinden biraz amino asit çıkarıp, çocuğun çantasındaki Lipid ile birleştirir ve bunu uzattığı görevliden bir kaç jeton alır. Çocuk bu jetonları dönme dolap ve  elma kurdu’nun turnikelerinde harcar..
..günler günleri kovalar..

 

 

 

 

 

 

 

So..

Görüleceği üzere “küçükler alemi”nde hayli incelikli hayli debdebeli işler gerçekleşiyor.

Ve bizler de çok detaylı ve muazzam işler yapıyoruz.. himm. Peki o halde:

Animasyondaki Mor canlı..
ya da
Önce dünya hücresini, sonra mars hücresini zehirleyen, başka bir canlının vücudundaki kanser hücresi/bakteriler bizlersek?

// PS: Bir virüs için iki kolumuz arasındaki mesafe, bizim ölçeğimizde Dünya Uranüs arası bir mesafeye tekabül eder.


Görsel: tedxbrussels

26 Satır Bahanesiyle, Ucundan Bit-Byte, MBit/s Meali

Previously on around here: 26 Satırda İsrafı Önleme


// Işık sensöründen gelecek değerleri x değişkeni içinde tutacağız.
// Gelecek olan veriler 0 ile 1023 arasında olacağından, yani 255’ten büyük olacağı için int x; diyoruz. Küçük olacak olsa idi byte x; yazmak daha verimli olurdu.
// x = 15 , y= 200 vb.. makismum 255’e kadar değer alacaklarsa bunları int yerine byte olarak atamak daha sağlıklı.

// Öncelikle byte tercih etmeye çalışmamızın sebebi; 8 bitlik bir alan düşünelim _ _ _ _ _ _ _ _
// her bir değer elektrik var/yok = 0/1 gibi 2 değer alabileceği için -lise permutasyon konularundan hatırlayalım-
// her bir alana 2 yazarız. 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 = 256
// böylece elimizde 256 adet değer olabilir. Ve dikkat edilirse bu 8 bit = 1 byte ‘lık bir yer tutar.

// O halde kullanacağımız bir değişkeni örneğin x’i byte olarak tanımlarsak,
// x işlem gördüğü her yerde, RAM/Bellek/İşlemci/Denetleyici/Trafik.. 1 byte’lık bir maliyeti olacakır.

// Başa dönecek olursak, LDR/sensör’den gelecek olan veriler 255’ten büyük olduğu için int yani integer kullanıyoruz.
// ATmega tabanlı işlemcilerde, int için 2 byte yer ayırdığı için, int’in sınırları -32,768 ile 32,767 arasında olacaktır.
// 2 byte = 16 bit = 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 😉
// https://www.arduino.cc/reference/en/language/variables/data-types/int/

 

// Serial haberleşmeyi başlatıyoruz.
//  Baud rate hızımız ise 9600

// Baud rate?
// İnenete bağlantı hızımı söylerken ne diyoruz? 16 Mbit/s gibi değil mi.
// Yani, saniye 16 x 1,048,576 adet 0 ya da 1 alabiliyoruz demek.
// Saniye ilettiğimiz bit sayısına BitRate diyoruz.

// Baud ise, saniye ilettiğimiz şey bit değil de başka semboller olabildiğinde karşımıza çıkıyor.
// Ki adını mucidi olan Fransız mühendis Émile Baudot’tan alıyor.

// Örneğin 0 derece 45 derece 135 derece 275 derece gibi açı bilgisini iletmek istediğimizi düşünelim
// yukarıda da geçtiği üzere “275” değeri için byte yeterli olmadığı için interger kullanmamız gerekir
// yani 16 bit kullanacağız. Oysa 275 yazıp göndermek yerine, şöyle demiş olsak
// 00 = 0
// 01 = 30
// 10 = 135
// 11 = 275
// Görüldüğü gibi olay 16 bit yerine _ _ iki bitte olay çözülmüş oldu.
// bu sistemi kullanan kablolu tv yayını, 8 kat daha kapasiteli olabilir gibi sanki 😉
// https://www.electronicdesign.com/communications/what-s-difference-between-bit-rate-and-baud-rate

 

// Işık sensörü dijital olmadığı için,
// bize 0 ya da 1 göndermek yerine, 0 ile 1023 arasında değerler gönderecek
// yani 0-1 olmadığına göre Analog. Bu yüzden Işık sensörünü A0 /Analog Sıfır pinine bağlıyoruz.
// Arduinoya dışardan bilgiler bu pinden giriş yapacağı için pin modunu Giriş/INPUT yapıyoruz.
// (parantez içinde; Analog pinler varsayılan olarak zaten Giriş/INPUT durumundadır.)
// bu örnek için boşuna yazmışız ama genel olarak, giriş istediğimiz durumlardaki kullanımı şekilde.

 

// Arduino gibi bir MikroDenetleyici’den dışarı yönde çıkış almak istediğimiz için
// 3 Nolu pinini Çıkış/OUTPUT olarak ayarlıyoruz.
// Böylece, bu pine HIGH ya da LOW gönderdiğimizde, buraya bağlı olan cihazı kontrol etmiş olacağız.
// Burada basit bir LED olduğunda, led yakıp söndürme yapabileceğimiz gibi
// Bir bacağı bu pine bağlı bir Röle ile, röleye bağlı olan bir anahtar ile koca bir nükleer tesisi de açıp kapatabilirsiniz.
// Arduino ile nükleer reaktör çalıştırmak .. // click bate başlık olur bundan 🙂

 


Görsel: shutterstock