Bir cümlelik özet
İvmeölçer, micro:bit'in kartın nasıl hareket ettiğini, hangi yöne eğildiğini ve sallanıp sallanmadığını hissetmesini sağlayan küçük bir sensördür.
Neden önemli?
Telefonunu yan çevirdiğinde ekranın da dönmesini hiç düşündün mü? Ya da bir adım sayarın attığın her adımı nasıl saydığını? Bunların hepsinin arkasında ivmeölçer (İngilizcesi accelerometer) adında bir sensör vardır. İvmeölçer, hareketi ve yer çekimini ölçer.
micro:bit'in içinde de böyle bir sensör bulunur. Bu sayede kart, düğmelere basmadan da ne yaptığını anlayabilir. Kartı sallarsın, o bunu fark eder. Kartı eğersin, hangi yöne eğildiğini bilir. Böylece programların gerçek dünyayla konuşmaya başlar.
Önceki derste değişkenleri ve döngüleri öğrendin. Bu derste bu bilgileri bir sensörle birleştirip fiziksel dünyaya tepki veren programlar yazacağız. Artık kodun sadece ekranda değil, senin elinin hareketinde yaşayacak.
İvmeölçer nedir?
İvmeölçer, hareketteki değişimi ölçen bir sensördür. Kartı hızlandırdığında, yavaşlattığında, eğdiğinde ya da salladığında bunu sayılara çevirir. Program da bu sayıları okuyarak karar verir.
İvmeölçer üç yönü aynı anda ölçer. Bu yönlere eksen deriz:
- x ekseni: Sağ–sol eğim (kartı sağa veya sola yatırmak).
- y ekseni: İleri–geri eğim (kartı sana doğru veya senden uzağa yatırmak).
- z ekseni: Yukarı–aşağı hareket (kartı düz tutmak ya da ters çevirmek).
Her eksen bir sayı verir. Kart düz ve hareketsiz dururken bu sayılar sıfıra yakındır. Kartı bir yöne eğdiğinde, o yöne ait sayı büyür ya da eksiye düşer.
Günlük hayattan örnek: Telefon ekranının dönmesi
Telefonunu dik tutarken ekran dikey görünür. Yan çevirdiğinde ekran otomatik olarak yatay olur. Telefon bunu ivmeölçerle anlar: yer çekiminin hangi yönde çektiğini ölçer ve ekranı ona göre çevirir.
Günlük hayattan örnek: Oyun kolu ve adım sayar
Bir yarış oyununda telefonu direksiyon gibi sağa sola çevirdiğinde araba döner. Bileğindeki adım sayar ise her adımda oluşan küçük sarsıntıyı ivmeölçerle yakalar ve sayar. İkisi de aynı sensörü farklı amaçlarla kullanır.
"Sallandığında" olayı
micro:bit, sallama hareketini kendisi tanıyabilir. Sen tek tek sayıları okumak zorunda kalmazsın. "Sallandığında" olayını (event) kullanırsın; kart sallandığı anda içindeki komutlar çalışır.
MakeCode blokları ile bir "sallayınca zar" örneği:
sürekli
(boş)
"sallandığında"
sayı_göster (rastgele 1 ile 6 arası)
Aynı fikir MicroPython ile:
from microbit import *
import random
while True:
if accelerometer.was_gesture('shake'):
display.show(str(random.randint(1, 6)))
Burada was_gesture('shake') micro:bit'e "az önce sallandın mı?" diye sorar. Cevap evet ise random.randint(1, 6) ile 1–6 arası rastgele bir sayı seçilir ve ekrana yazılır. Artık elinde dijital bir zar var: her sallayışta yeni bir sayı.
micro:bit yalnız "shake" (sallama) değil, başka hareketleri de tanır: up, down, left, right, face up, face down gibi. Bunlar kartın hangi yüzünün yukarı baktığını ya da hangi yöne eğildiğini anlatır.
x, y, z eksenlerini okumak
Bazen bir olayı beklemek yerine eksen değerini doğrudan okumak isteriz. micro:bit her ekseni miligravite denilen bir birimle verir. Kartı düz tutarsan x ve y sıfıra yakındır. Sağa eğdikçe x artar, sola eğdikçe x eksiye düşer.
MicroPython ile üç ekseni okumak:
from microbit import *
while True:
x = accelerometer.get_x()
y = accelerometer.get_y()
z = accelerometer.get_z()
print(x, y, z)
sleep(200)
Bu programı çalıştırıp kartı yavaşça eğdiğinde bilgisayardaki sayıların değiştiğini görürsün. Bu, sensörün nasıl "hissettiğini" gözünle görmenin en iyi yoludur.
Eğim algılama: Ok yönünü göster
Şimdi eğime göre ekranda bir ok gösterelim. Kartı sağa eğersen sağ ok, sola eğersen sol ok belirir. Bunun için x eksenini bir eşik (threshold) değeriyle karşılaştırırız.
MakeCode mantığıyla:
sürekli
eğer <ivme (x) > 300> ise
ok göster (Doğu)
değilse eğer <ivme (x) < -300> ise
ok göster (Batı)
değilse
simge göster (nokta)
Aynı program MicroPython ile:
from microbit import *
while True:
x = accelerometer.get_x()
if x > 300:
display.show(Image.ARROW_E)
elif x < -300:
display.show(Image.ARROW_W)
else:
display.show(Image.HEART_SMALL)
sleep(100)
Burada 300 sayısı bir eşik değeridir. Kart yeterince eğilmeden ok görünmesin diye küçük hareketleri yok sayarız. Eşiği büyütürsen daha çok eğmen gerekir; küçültürsen sensör daha hassas olur.
Mini uygulama
Bir "denge oyunu" yap. Amaç: kartı olabildiğince düz tutmak.
- Yeni bir MakeCode projesi aç (veya MicroPython editörünü kullan).
- Sürekli çalışan bir döngü kur.
- x eksenini oku ve bir değişkene koy.
- Eğer x, -100 ile 100 arasındaysa yeşil bir onay simgesi (örneğin kalp) göster.
- Değilse, eğim yönüne göre sağ veya sol ok göster.
- Kartı elinde tutup düz kalmaya çalış; oklar sana hangi yöne eğildiğini söyler.
Ek görev: Bir de "sallandığında" olayı ekle. Kart sallanınca ekranda rastgele bir sayı çıksın; böylece hem zar hem denge oyunu aynı programda olsun.
Kendine sor:
- Eşik değerini değiştirince oyun kolaylaştı mı, zorlaştı mı?
- y eksenini de eklesen ileri-geri eğimi de gösterebilir misin?
Uygulama laboratuvarı: İvmeölçer
İvmeölçer 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 İvmeölçer nedir? ile Günlük hayattan örnek: Oyun kolu ve adım sayar 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: düğmelerle menü seçimi yapılan küçük bilgi oyunu. Dersin ana hedefi “İvmeölçerle sallama, eğim ve hareketi algılayıp tepki üretmeyi öğ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?
“İvmeölçer” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın düğmelerle menü seçimi yapılan küçük bilgi oyunu senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, İvmeölçer nedir? ve Günlük hayattan örnek: Oyun kolu ve adım sayar ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
Ekseni karıştırmak
x sağ-sol, y ileri-geridir. Ok yanlış yöne bakıyorsa büyük ihtimalle yanlış ekseni okuyorsundur. Önce print ile değerleri gözlemle.
Eşik değerini unutmak
if x > 0 yazarsan kartın en ufak eğiminde bile ok değişir ve ekran titrer gibi görünür. Bu yüzden 200–400 gibi bir eşik kullan.
Bekleme (sleep) koymamak
Döngü çok hızlı dönerse ekran okunamaz. sleep(100) gibi kısa bir bekleme koymak görüntüyü sakinleştirir.
"Sallandığında"yı sürekli döngüde okumamak
MicroPython'da was_gesture yalnız sorulduğu anda kontrol edilir. Onu bir while True döngüsü içinde çağırmazsan sallamayı hiç yakalayamazsın.
Güvenlik notu
- micro:bit'e pil kutusu takarken bir yetişkinden yardım iste. Yalnız kart için üretilmiş düşük gerilimli (3V) pil kutusunu kullan.
- Kartı bir bileklik ya da çantaya takıp giyilebilir bir proje yaparsan, parçaları sağlam sabitle; sarkan kablo bırakma.
- Kartı sallayarak oynarken çevrene dikkat et; el hareketiyle birine ya da bir eşyaya çarpmamaya özen göster.
- micro:bit'i asla ıslak elle ya da su yakınında kullanma.
Ders özeti
- İvmeölçer, kartın hareketini, eğimini ve sarsıntısını ölçen bir sensördür.
- Ölçüm üç eksende yapılır: x (sağ-sol), y (ileri-geri), z (yukarı-aşağı).
- "Sallandığında" olayı ile sallama hareketini kolayca yakalarız; zar yapmak için idealdir.
get_x,get_y,get_zile eksen değerlerini sayı olarak okuyabiliriz.- Eğim algılamak için ekseni bir eşik değeriyle karşılaştırırız.
Kontrol soruları
- İvmeölçer neyi ölçer?
- x ekseni hangi yöndeki eğimi gösterir?
- Zar yapmak için hangi olayı ve hangi komutu kullandık?
accelerometer.get_x()komutu ne döndürür?- Ok gösteren programda 300 sayısı ne işe yarar?
Cevaplar
- Kartın hareketini, eğimini, hızındaki değişimi ve sallanmasını (yer çekimini) ölçer.
- Sağ–sol eğimini gösterir. Sağa eğince artar, sola eğince eksiye düşer.
- "Sallandığında" olayını ve
random.randint(1, 6)(rastgele sayı) komutunu kullandık. - x ekseni boyunca ölçülen ivme değerini, miligravite biriminde bir sayı olarak döndürür.
- Bir eşik değeridir. Kartın küçük hareketlerini yok sayıp ancak yeterince eğildiğinde ok göstermemizi sağlar.
Kaynak ve doğrulama notu
“İvmeölçer” dersi için doğrulama odağı İvmeölçer nedir? ile Günlük hayattan örnek: Oyun kolu ve adım sayar 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
Sıcaklık ve Işık Ölçümü: micro:bit'in ortam sıcaklığını ve ışık miktarını nasıl algıladığını öğreneceğiz.