İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Özel Ders Başvuru Ücretsiz ön görüşme Ana Sayfa

micro:bit ile Gece Lambası Nasıl Yapılır? Işık Seviyesi Okuma

microbit-gece-lambasi-isik-seviyesi-okuma
Bu yazıda neler var?
  1. micro:bit ışığı nasıl ölçer?
  2. Işık seviyesini ölçüm programıyla nasıl görürsün?
  3. Gece lambası için eşik değeri nasıl seçilir?
  4. Karanlıkta yanan gece lambası nasıl programlanır?
  5. Projeyi geliştirirken hangi hatalara dikkat etmelisin?
  6. Sık Sorulan Sorular

micro:bit ile gece lambası yapmak için kartın bulunduğu ortamdaki ışık seviyesini okur, bu sayıyı belirlediğin eşik değeriyle karşılaştırır ve ortam karardığında LED ekranını yakar. Sağlıklı bir sonuç almak için önce micro:bit ışık sensörü gibi çalışan LED ekranın hangi değerleri ürettiğini ölçüm programıyla görmek gerekir.

Ölçüm sırasında ortamı aydınlatan ekran deseninin sonucu etkilememesi için ekranı temizleyip değeri bir değişkende saklayacağız. Böylece kendi ışığını ölçmeye çalışan bir ekran yerine, ortam ışığını okumaya daha uygun bir program elde edeceğiz.

micro:bit ışığı nasıl ölçer?

micro:bit'te ayrı bir ışık sensörü yerine LED ekranın kendisi ışık algılamada kullanılabilir. LED'ler normalde küçük fenerler gibi ışık verir, ancak kart onları kısa süreliğine çevresini kontrol eden bir bekçi gibi de kullanır. Bekçi bazen elindeki feneri yakar, bazen çevredeki ışığı anlamak için etrafını yoklar. micro:bit de LED matrisi üzerinden ortamın aydınlık veya karanlık olduğunu yaklaşık olarak ölçer.

MakeCode'da bu özellik Input kategorisindeki light level, Türkçe arayüzde ışık seviyesi bloğuyla kullanılır. JavaScript karşılığı input.lightLevel() şeklindedir. Dönen değer 0 ile 255 arasındadır. 0 karanlık seviyeye, 255 ise çok parlak ışık seviyesine karşılık gelir. MakeCode belgelerine göre bu işlev ilk kez çalıştırıldığında 0 döndürebilir; sensör başlatıldıktan sonraki okumalar ortam ışığına göre değer verir.

Kartın sürümü de ölçüm sonucunu etkileyebilir. micro:bit V2'de ışık algılamada üst LED satırı kullanılırken V1 kartlarında algılama ekranın farklı bölümlerine yayılan LED bağlantıları üzerinden yapılır. Donanım yapısındaki bu fark, kart revizyonları arasında hassasiyetin ve bazı kapatma denemelerinde alınan değerin değişebilmesine yol açabilir. Bu yüzden eşik değerini başka bir karttan kopyalamak yerine kendi kartında ölçmen daha doğru olur.

Eşik değeri, hangi ışık seviyesinden sonra ortamı karanlık kabul edeceğini belirleyen karar noktasıdır. Örneğin ölçüm sırasında odanın aydınlık ve karanlık hâllerinde farklı sayılar görürsün. Gece lambası programında bu iki durumu ayırabilecek bir değeri eşik olarak seçersin. Bu değeri belirlemeden önce ışık seviyesini ekranda görmen gerekir.

Işık seviyesini ölçüm programıyla nasıl görürsün?

Işık seviyesini ölçüm programıyla nasıl görürsün?

Işık seviyesini ekranda görmek için programın önce ölçüm yapması, aldığı sayıyı LED ekranda göstermesi ve bu işlemi sürekli tekrarlaması gerekir. MakeCode bloklarını şu sırayla yerleştirebilirsin:

  1. Değişkenler bölümünden level adında bir sayı değişkeni oluştur.
  2. Sürekli tekrarla bloğunu çalışma alanına ekle.
  3. Bu bloğun içine ekranı temizle bloğunu yerleştir.
  4. Kısa bir bekleme için 100 milisaniye bekle bloğunu ekle.
  5. level değişkenini input içindeki ışık seviyesi değerine ayarla.
  6. Sayı göster bloğunda gösterilecek değer olarak level değişkenini seç.

Ekranı temizlemek ölçümden önce LED'leri kapatır. Işık seviyesi okumak için kullanılan LED matrisi aynı zamanda görüntü gösterebildiği için buradan şu pratik sonucu çıkarabilirsin: Ölçüm sırasında yanan bir desen, okunan değeri etkileyebilir. Değeri önce değişkende saklayıp sonra ekranda göstermek bu etkiyi azaltır.

let level = 0

basic.forever(() => {
    basic.clearScreen()
    basic.pause(100)
    level = input.lightLevel()
    basic.showNumber(level)
})

Bu JavaScript kodunda basic.forever bölümü programı sürekli çalıştırır. Her tekrarda ekran temizlenir, kısa bir beklemeden sonra input.lightLevel() ile ışık okunur ve sonuç level değişkenine aktarılır. Son satırdaki basic.showNumber(level) komutu sayıyı LED ekranda gösterir. basic.showNumber birden fazla basamaklı sayıları ekranda kaydırarak gösterir.

Programı aydınlık bir odada çalıştırdığında daha yüksek, ışığı azalttığında ise daha düşük sayılar görebilirsin. İlk okumada 0 görünmesi normaldir. Birkaç tekrar sonrasında değeri gözlemle ve aynı konumda aydınlık ile karanlık arasındaki farkı not et. Gece lambasının eşik değerini bu ölçümlere göre seçmek, rastgele bir sayı yazmaktan daha güvenilir bir başlangıç sağlar.

Gece lambası için eşik değeri nasıl seçilir?

Gece lambası için eşik değeri nasıl seçilir?

Eşik değeri, aydınlık ve karanlık ortamlarda ölçtüğün gerçek değerleri karşılaştırarak seçilmelidir. Tahminle bir sayı yazmak yerine micro:bit’i gece lambasının duracağı yere koy, aynı konumda farklı ışık koşullarını ölç ve sonuçları not al.

Ölçüm yaparken önce LED ekranı temizle. Ekrandaki LED’ler aynı zamanda ışığı algılamak için kullanıldığı için açık LED’ler ölçümü etkileyebilir. Ekran kapalıyken kısa bir bekleme yaptıktan sonra ışık seviyesini oku ve değeri kaydet. MakeCode’de ışık seviyesi 0 ile 255 arasında okunur, ancak ölçüm ortamın aydınlığına, kartın konumuna, kart sürümüne ve ölçüm anına göre değişebilir. MakeCode ışık seviyesi belgesinde ilk çağrının 0 döndürebileceği de belirtilir. Bu nedenle başlangıçta görülen ilk 0 değerini doğrudan ortamın karanlık ölçümü olarak kullanma.

Ortam Ekranın durumu Görülen ışık seviyesi Seçilecek karar
Aydınlık 1 Ekran kapalı    
Aydınlık 2 Ekran kapalı    
Aydınlık 3 Ekran kapalı    
Karanlık 1 Ekran kapalı    
Karanlık 2 Ekran kapalı    
Karanlık 3 Ekran kapalı    

Aydınlık ölçümlerinin ve karanlık ölçümlerinin arasına düşen bir eşik seçebilirsin. Otomatik kapının belirli bir çizgiyi geçince açılması gibi düşünebilirsin: ışık seviyesi bu çizginin altına indiğinde gece lambası açılır, çizgiye eşit olduğunda veya üstüne çıktığında söner. Ölçümler birbirine çok yakınsa kartın konumunu ve ekranın durumunu sabitleyip yeniden birkaç okuma yapmak daha sağlıklı bir karşılaştırma sağlar.

Karanlıkta yanan gece lambası nasıl programlanır?

Gece lambası, sürekli tekrarlanan bir döngü içinde ışık seviyesini okuyup bu değeri eşikle karşılaştırarak çalışır. Işık seviyesi eşik değerinin altındaysa bütün LED’ler yanar, eşik değerine eşit olduğunda veya üstüne çıktığında ekran temizlenir.

MakeCode bloklarında şu sırayı kur:

  1. on start içine bir kez ışık seviyesi bloğunu ekleyip sonucu isik değişkenine aktar. Bu ilk okuma, sensörün çalışmaya başlamasını sağlar.
  2. forever bloğunun içine ekranı temizle ve kısa bir bekle bloğu yerleştir.
  3. isik değişkenine yeniden ışık seviyesi değerini ata.
  4. eğer isik < esik ise koşulunu kullan. Bu bölümde tüm LED’leri göster bloğuyla 5x5 ekranın tamamını yak.
  5. değilse bölümüne ekranı temizle bloğunu koy. Böylece eşik değerine eşit veya daha yüksek ölçümlerde LED’ler söner.

Aşağıdaki JavaScript karşılığında 50 yalnızca örnek bir eşiktir. Kendi ölçüm tablonu doldurduktan sonra bu sayıyı iki ortam arasına seçtiğin değerle değiştir.

let esik = 50
let isik = 0

// İlk okumayı sensörü başlatmak için kullan
isik = input.lightLevel()

basic.forever(function () {
    // LED'lerin ışık ölçümünü etkilemesini önle
    basic.clearScreen()
    basic.pause(100)

    isik = input.lightLevel()

    if (isik < esik) {
        basic.showLeds(`
            # # # # #
            # # # # #
            # # # # #
            # # # # #
            # # # # #
        `)
    } else {
        basic.clearScreen()
    }

    basic.pause(200)
})

Program karanlıkta bütün LED’leri yakar ve aydınlıkta ekranı temizler. Döngü tekrar çalıştığı için ortamın ışığı değiştiğinde micro:bit yeni ölçümü kullanır. Ölçümden önce ekranın temizlenmesi önemlidir; aksi durumda gece lambasının kendi ışığı daha aydınlık bir değer okunmasına ve LED’lerin beklenmedik şekilde sönmesine yol açabilir.

Projeyi geliştirirken hangi hatalara dikkat etmelisin?

Doğru çalışan bir gece lambası için ölçüm koşullarını kontrol etmeli ve programın ışığı tekrar tekrar değerlendirdiğinden emin olmalısın.

Eşik değerini ölçmeden seçmek

Gece lambası çok aydınlıkta yanıyor ya da oda karardığında çalışmıyorsa eşik değeri uygun seçilmemiş olabilir. Önce farklı ortamlardaki ışık seviyelerini ölç, ardından gece lambasının yanmasını istediğin değeri bu ölçümlere göre belirle. Örneğin odanın aydınlık hâlinde 120, karanlık hâlinde 35 görüyorsan 50 civarında bir eşik değeriyle deneme yapabilirsin.

LED ekranın ölçümü etkilemesini hesaba katmamak

micro:bit, ortam ışığını tahmin etmek için LED matrisini de kullanır. Ekranda parlak bir desen gösterilirken ölçüm almak, kartın kendi ışığının sonuca karışmasına neden olabilir. Ölçümden önce clear screen bloğunu çalıştırıp kısa bir bekleme ekle, ardından ışık seviyesini oku. Kart sürümleri arasında ışık algılamada kullanılan LED bölgeleri değişebildiği için aynı eşik değeri farklı kartlarda aynı sonucu vermeyebilir.

Ölçümü yalnızca bir kez yapmak

Işık seviyesi kodu on start bölümünde bir kez çalışıyorsa program açıldığı andaki değeri kullanır ve sonradan odanın aydınlanıp kararmasını fark etmez. Gece lambasının ortamı takip etmesi için ölçüm ve karar bloklarını forever içine yerleştir. MakeCode'ta forever, kodun tekrar tekrar çalışmasını sağlar.

Farklı ışık seviyelerine farklı desenler vermek

Projeyi geliştirirken düşük, orta ve yüksek ışık için ayrı LED desenleri seçebilirsin. Bunun için birden fazla koşulu sırayla kurman yeterlidir. Aşağıdaki örnekte ölçümden önce ekran temizlenir, sonra üç farklı durum değerlendirilir:

basic.forever(() => {
    basic.clearScreen()
    basic.pause(100)
    let level = input.lightLevel()

    if (level < 50) {
        basic.showLeds(`
            # # # # #
            # # # # #
            # # # # #
            # # # # #
            # # # # #
        `)
    } else if (level < 150) {
        basic.showLeds(`
            . # # # .
            # # # # #
            # # # # #
            . # # # .
            . . # . .
        `)
    } else {
        basic.clearScreen()
    }

    basic.pause(500)
})

show leds, clear screen ve forever bloklarıyla aynı yapı MakeCode bloklarında da kurulabilir. Ölçümü ekranda göstermek istersen gösterim süresini kısa tutup ardından ekranı temizleyerek yeni ölçüm alabilirsin. Eşik çevresinde ışık hızlı değişiyorsa lambanın art arda açılıp kapandığını gözlemle; bu durumda iki eşik kullanmayı veya ölçümler arasına kısa bir bekleme koymayı deneyebilirsin.

  • Eşik değerini farklı aydınlık ortamlarda ölçerek seç.
  • Ölçümden önce LED ekranı temizle ve kısa süre bekle.
  • Ölçüm kodunu yalnızca başlangıca değil, tekrar eden bir yapıya yerleştir.
  • Programı kullandığın micro:bit kartında ve gerçek odanda test et.

Son deneme olarak micro:bit'i masanın üzerine, pencere yakınına ve yatağın yanına yerleştir. Her konumdaki ışık seviyelerini karşılaştır, eşik değerini yeniden düzenle ve hangi LED deseninin daha anlaşılır olduğunu gözlemle.

Sık Sorulan Sorular

micro:bit'te ayrı bir ışık sensörü bulunuyor mu?

micro:bit'te ayrı bir ışık sensörü çipi bulunmaz. LED matrisi, ortam ışığını yaklaşık olarak ölçmek için de kullanılır ve sonuç 0 ile 255 arasında bir değer olarak okunur.

Ölçüm yaparken LED ekranı neden temizlemek gerekiyor?

LED ekran açıkken kartın kendi ışığı ölçümü etkileyebilir. Bu nedenle ekranı temizleyip kısa bir beklemeden sonra ışık seviyesini okumak daha tutarlı denemeler yapmana yardımcı olur.

Gece lambası için eşik değeri nasıl belirlenir?

Önce odanın aydınlık ve karanlık hâllerindeki değerleri ölç, ardından lambanın yanmasını istediğin seviyeye yakın bir eşik seç. Eşiği gerçek ortamda birkaç kez deneyerek küçük adımlarla değiştirebilirsin.

Program neden ışık seviyesini yalnızca bir kez kontrol ediyor?

Ölçüm kodu on start bölümündeyse program onu başlangıçta bir kez çalıştırır. Ortamı sürekli takip etmek için ölçüm ve karar bloklarını forever bölümüne taşımalısın.

Işık seviyesine göre farklı LED desenleri göstermek mümkün mü?

Işık seviyesine göre farklı LED desenleri göstermek mümkündür. if, else if ve else koşullarıyla düşük, orta ve yüksek ışık durumlarını ayırıp her durumda farklı bir show leds deseni kullanabilirsin.

Bu projeyi farklı konumlarda deneyerek ölçüm, eşik değeri ve LED ekran davranışı arasındaki ilişkiyi daha iyi görebilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara