Bir cümlelik özet
micro:bit'in içindeki sensörlerle çevrenin sıcaklığını ve ışığını yaklaşık olarak okuyabilir, bu değerleri ekranda gösterip bir eşik (sınır değer) yardımıyla basit kararlar verebiliriz.
Neden önemli?
Bir önceki derste micro:bit'in ivmeölçer ile hareketi ve eğimi hissettiğini gördük. Kart yalnız hareketi değil, çevresindeki sıcaklığı ve ışığı da algılayabilir. Bu iki değeri okumak, kartın etrafında olup biteni "fark etmesinin" kolay bir yoludur.
Elektronik modülünde ışık sensörünü (LDR) ve sıcaklık sensörünü ayrı parçalar olarak kurmuştuk. Güzel haber şu: micro:bit bu iki ölçümü ek parça bağlamadan, kendi içindeki devrelerle de yapabilir. Böylece devre kurmadan hızlıca deneyler yapabilir, sonra istersek harici sensörlere geçebiliriz.
Bu dersi bitirdiğinde bir sensör değerini okumayı, ekranda göstermeyi ve bir eşiğe göre "eğer ışık azaldıysa şunu yap" gibi karar vermeyi öğrenmiş olacaksın. Bu, otomatik gece lambası veya sıcaklık uyarısı gibi projelerin ilk adımıdır.
micro:bit çevresini nasıl algılar?
Sıcaklık: aslında çipin sıcaklığı
micro:bit'in üzerinde ayrı bir sıcaklık sensörü parçası yoktur. Bunun yerine kart, ana işlemci çipinin sıcaklığını ölçer. Çip, çalıştığı ortamla zamanla aynı sıcaklığa yaklaştığı için bu değer oda sıcaklığına yaklaşık olarak eşittir.
Bu yüzden micro:bit'in sıcaklık ölçümü kavramsaldır: gerçek bir termometre kadar kesin değildir ve çip biraz ısınırsa değer birkaç derece yüksek çıkabilir. Yine de "hava ısındı mı, soğudu mu?" sorusuna cevap vermek için yeterlidir. Değer santigrat derece (°C) olarak, tam sayı biçiminde gelir.
Işık: LED ekranın ikinci görevi
micro:bit'in ayrı bir ışık sensörü de yoktur. İşin ilginç yanı, 5×5 LED ekranı kısa anlarda ışık sensörü gibi kullanılır. LED'ler normalde ışık verir; fakat çok kısa süre için ters çalıştırıldığında üzerlerine düşen ışığı ölçebilir.
Kart bu ölçümü bizim için bir sayıya çevirir. Işık düzeyi 0 ile 255 arasında bir değerdir:
- 0'a yakın değer: ortam karanlık.
- 255'e yakın değer: ortam aydınlık.
Yani kesin bir "lüks" ölçümü değil, kademeli bir "ne kadar aydınlık?" değeridir. Bu da bir analog okumaya güzel bir örnektir: ışık birden değil, yavaşça artıp azalır.
Değerleri okuyup ekranda göstermek
Bir sensörü kullanmanın ilk adımı, değeri görmektir. micro:bit'in kayan yazı özelliği bunun için çok uygundur.
MakeCode ile
MakeCode'da hazır bloklar kullanırız. Aşağıdaki blok dizisi sıcaklığı sürekli ekranda kaydırır:
sürekli
sıcaklık (°C) göster
0.5 saniye beklet
Işık düzeyini göstermek de aynı mantıktadır:
sürekli
ışık düzeyi göster
0.5 saniye beklet
"göster" bloğu sayıyı ekranda soldan sağa kaydırarak yazar. beklet bloğu, sayılar birbirine karışmasın diye kısa bir ara verir.
MicroPython ile
Aynı fikri metin tabanlı Python ile de yazabiliriz. Mantık birebir aynıdır; yalnız yazım biçimi değişir:
from microbit import *
while True:
display.scroll(temperature())
sleep(500)
temperature() çipin sıcaklığını °C olarak verir. Işık için display.read_light_level() fonksiyonunu kullanırız:
from microbit import *
while True:
display.scroll(display.read_light_level())
sleep(500)
display.scroll(...) sayıyı kaydırarak gösterir, sleep(500) ise 500 milisaniye (yarım saniye) bekler.
Eşikle karar vermek
Değeri görmek güzeldir; fakat asıl işi eşik yapar. Eşik, "şu sınırı geçerse şunu yap" dememizi sağlayan bir sayıdır. Algoritma dersinden hatırladığımız koşul yapısını burada kullanırız.
Örnek 1: Işık azalınca LED deseni (gece lambası)
Amaç: Ortam karardığında micro:bit bir desen göstersin, aydınlıkta ise ekran kapansın. Tıpkı sokak lambası gibi.
MakeCode blok dizisi:
sürekli
eğer <ışık düzeyi < 50> ise
kalp simgesi göster
değilse
ekranı temizle
Aynı fikir MicroPython'da:
from microbit import *
while True:
if display.read_light_level() < 50:
display.show(Image.HEART)
else:
display.clear()
sleep(200)
Burada 50 bizim seçtiğimiz eşiktir. Elini kartın üstüne kapatıp ışığı azalttığında kalp belirir; elini çektiğinde ekran temizlenir. Eşik sayısını odanın aydınlığına göre değiştirmen gerekebilir.
Örnek 2: Sıcaklık eşiği (oda/sera uyarısı)
Amaç: Sıcaklık belirli bir dereceyi geçince kart uyarı versin. Bunu bir bitkinin yanındaki mini "sera termometresi" gibi düşünebilirsin.
MakeCode blok dizisi:
sürekli
eğer <sıcaklık (°C) > 30> ise
"SICAK" kaydır
değilse
onay simgesi göster
MicroPython karşılığı:
from microbit import *
while True:
if temperature() > 30:
display.scroll("SICAK")
else:
display.show(Image.YES)
sleep(500)
Çip biraz ısındığı için gerçek oda sıcaklığından birkaç derece sapma olabilir. Eşiği seçerken bunu aklında tut ve değeri önce kaydırarak gözlemle.
Mini uygulama
"Akıllı masa lambası" yapalım. Işık azalınca kart bir yıldız göstersin, aydınlanınca sönsün; ayrıca A düğmesine basınca o anki ışık değerini yazsın.
- Yeni bir MakeCode projesi aç.
sürekliiçine bir koşul kur:ışık düzeyi < 40iseyıldız simgesi göster, değilseekranı temizle.A düğmesine basıldığındabloğunaışık düzeyi gösterekle.- Kartı bilgisayara bağlayıp programı yükle.
- Elini yavaşça kartın üstüne yaklaştır ve eşiğin doğru çalışıp çalışmadığını gözle.
- Eşiği (40) odana göre büyütüp küçülterek en iyi değeri bul.
İstersen aynı programı MicroPython'a çevirip iki yazımı karşılaştır. Mantık aynı kalmalı, yalnız biçim değişmeli.
Uygulama laboratuvarı: Sıcaklık ve Işık Ölçümü
Sıcaklık ve Işık Ölçümü konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada micro:bit çevresini nasıl algılar? ile Işık: LED ekranın ikinci görevi arasındaki ilişkiyi kullanarak simülatörde ve kart üzerinde denenmiş micro:bit programı ile test notları hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: iki kart arasında kablosuz skor paylaşımı. Dersin ana hedefi “micro:bit'in sıcaklık ve ışık ölçümünü okuyup eşikle karar vermeyi öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Program simülatörde beklenen olayı üretiyor mu?
- Kart yeniden başlatıldığında değerler doğru mu?
- A ve B düğmelerinin birlikte basılması denendi mi?
- Radyo grubu ve mesaj biçimi iki kartta aynı mı?
- Harici bileşenlerde pin ve gerilim sınırları kontrol edildi mi?
“Sıcaklık ve Işık Ölçümü” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın iki kart arasında kablosuz skor paylaşımı senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, micro:bit çevresini nasıl algılar? ve Işık: LED ekranın ikinci görevi ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
Ölçümü kesin sanmak
micro:bit'in sıcaklık ve ışık değerleri yaklaşıktır. Bunları hassas bir termometre veya lüksmetre yerine koyma. Karşılaştırma ve eşik için harikadırlar, kesin ölçüm için değil.
Ekran açıkken ışığı okumaya çalışmak
Işık ölçümü LED ekranı kullandığı için, ekranda sürekli parlak bir desen varken okuma yanıltıcı olabilir. Ölçümü, ekranın boş olduğu bir anda yaptırmak daha doğru sonuç verir.
Eşiği hiç ayarlamamak
Bir odada işe yarayan eşik, başka bir odada çalışmayabilir. Işık ve sıcaklık ortama bağlıdır; bu yüzden değeri önce gözlemleyip eşiği ona göre seçmek gerekir.
beklet/sleep koymayı unutmak
Ara vermeden sürekli kaydırınca sayılar okunmaz hâle gelir. Kısa bir bekleme, değerleri gözle takip etmeyi kolaylaştırır.
Güvenlik notu
- micro:bit'in kendi sensörleri düşük voltajla, güvenli biçimde çalışır. Yine de harici bir ışık sensörü, sıcaklık sensörü veya pil bağlayacaksan bunu bir yetişkinle birlikte yap.
- Kartı ölçüm için ısıtmak istersen sadece elinle ısıt; ateş, ocak, su ısıtıcısı veya sıcak yüzey kullanma.
- micro:bit'i asla suya sokma veya ıslak elle tutma.
- Pil kutusunu yalnız uygun pillerle kullan ve kutupları (+ / −) doğru tak.
Ders özeti
- micro:bit sıcaklığı çip üzerinden, ışığı ise LED ekran üzerinden yaklaşık olarak ölçer.
- Sıcaklık °C, ışık düzeyi 0–255 arası bir sayı olarak gelir.
- Değerleri MakeCode'da hazır bloklarla, MicroPython'da
temperature()vedisplay.read_light_level()ile okuruz. - Bir eşik ve koşul kullanarak "ışık azalınca desen göster" gibi kararlar veririz.
- Ölçümler kesin değildir; eşiği ortama göre gözlemleyip ayarlamak gerekir.
Kontrol soruları
- micro:bit sıcaklığı gerçekte neyin sıcaklığını ölçerek bulur?
- Işık düzeyi hangi sayı aralığında gelir ve hangi uç karanlığı gösterir?
- MicroPython'da ışık düzeyini okuyan fonksiyonun adı nedir?
- "Eşik" ne işe yarar? Bir cümleyle açıkla.
- Ekranda parlak bir desen varken ışık ölçümü neden yanıltıcı olabilir?
Cevaplar
- Ayrı bir sensör yerine ana işlemci çipinin sıcaklığını ölçer; bu değer oda sıcaklığına yaklaşıktır.
- 0–255 arasında gelir; 0'a yakın değer ortamın karanlık olduğunu gösterir.
display.read_light_level().- Eşik, bir sensör değerinin geçtiğinde karar tetikleyeceği sınır sayıdır (örneğin "ışık 50'nin altına düşerse").
- Işık ölçümü LED ekranı kullandığı için, ekran parlak bir desenle doluyken okunan değer gerçek ortam ışığını doğru yansıtmayabilir.
Kaynak ve doğrulama notu
“Sıcaklık ve Işık Ölçümü” dersi için doğrulama odağı micro:bit çevresini nasıl algılar? ile Işık: LED ekranın ikinci görevi arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. MakeCode ve MicroPython adları sürüme göre küçük farklılık gösterebilir. Önce simülatörde test yapılmalı; harici bileşen bağlanacaksa kartın pin ve gerilim sınırları ayrıca kontrol edilmelidir.
Sonraki ders
Radyo ile Haberleşme: İki micro:bit'in kablosuz radyo ile mesaj ve sensör değeri alışverişi yapması.