Bir cümlelik özet
Bu projede micro:bit'in ivmeölçerini kullanarak her adımını sayan, sonucu 5×5 LED ekranda gösteren ve bir düğmeyle sıfırlanan basit bir adım sayar (pedometre) yapıyoruz.
Neden önemli?
Telefonundaki veya akıllı saatindeki adım sayar aslında gizemli bir kutu değil. İçinde senin micro:bit'inde de bulunan bir sensör var: ivmeölçer (accelerometer). Bu proje, o cihazların nasıl "adım" algıladığını kendi elinle kurarak anlamanı sağlar.
Aynı zamanda bu, gerçek bir mühendislik problemi. Sensör ham veri verir; ama "adım" dediğimiz şey o veride net bir çizgi değildir. Yürürken sallanma, zıplama, hatta cihazı sallaman bile sayaca karışır. Bu yüzden proje boyunca bir eşik (threshold) ve basit bir filtre kurarak yanlış saymayı azaltmayı öğreneceğiz. Yani gerçek dünyada sensör verisini işlemenin ilk adımını atacağız.
Adım algılama fikri
İvmeölçer ne ölçer?
İvmeölçer, cihazın ne kadar hızlı hareket yönü değiştirdiğini ölçer. micro:bit'te üç eksen vardır: X (sağ-sol), Y (ileri-geri) ve Z (yukarı-aşağı). Her eksende bir sayı okuruz; birim olarak "milli-g" kullanılır (1 g yaklaşık yerçekimi kadardır).
Tek bir eksen yerine, toplam sarsıntıyı ölçmek için bileşke ivme (kuvvet) değerini kullanmak daha kolaydır. micro:bit bunu bizim için hazır verir:
- MakeCode:
ivme (mutlak)bloğu - MicroPython:
accelerometer.get_strength()
Cihaz sabit dururken bu değer yerçekiminden dolayı yaklaşık 1000 civarındadır. Bir adım attığında beden yukarı-aşağı sallanır ve bu değer bir anlığına yükselir.
Adım = bir tepe (peak)
Yürürken bileşke ivme sürekli iner çıkar. Her adım, grafikte bir tepe oluşturur. Bizim işimiz basit: değer belirli bir eşiğin üstüne çıktığında bir adım saymak.
Eşiği düşük tutarsak en ufak titreşimi bile adım sanır, fazla sayar. Çok yüksek tutarsak gerçek adımları kaçırır, az sayar. Doğru eşiği deneyerek bulacağız. İşte algoritmaların ve filtrelemenin devreye girdiği yer burası.
Programı adım adım kuralım
MakeCode blok sırası
Önce sayaç için bir değişken oluşturuyoruz. Sonra sürekli döngüde ivmeyi kontrol ediyoruz.
başlangıçta
değişken adim = 0
"0" göster
sürekli
eğer <ivme (mutlak) > 1500> ise
adim = adim + 1
adim değerini göster
50 ms beklet
A düğmesine basıldığında
adim = 0
"0" göster
Buradaki 1500 bizim eşiğimiz. 50 ms beklet ise bir sonraki bölümde açıklayacağımız basit filtrenin ilk parçası: tek bir adımı iki kez saymayı engeller.
MicroPython karşılığı
Aynı mantığı Python ile de yazabiliriz. Kod farklı görünür ama fikir birebir aynıdır.
from microbit import *
adim = 0
esik = 1500
display.show("0")
while True:
kuvvet = accelerometer.get_strength()
if kuvvet > esik:
adim += 1
display.show(str(adim))
sleep(300) # basit filtre: kısa süre bekle
if button_a.was_pressed():
adim = 0
display.show("0")
accelerometer.get_strength() bileşke ivmeyi verir. sleep(300) bir adımı saydıktan sonra 300 milisaniye bekler; böylece aynı tepeyi tekrar saymayız.
Sayacı gösterme
display.show(str(adim)) sayıyı LED ekranda kaydırarak gösterir. Sayı büyürse (örneğin 42) rakamlar teker teker akar. İstersen sadece B düğmesine basınca göstererek yürürken ekranı sakin tutabilirsin:
if button_b.was_pressed():
display.show(str(adim))
Test etme ve bir hatayı düzeltme
Test senaryoları
Kodu yükledikten sonra micro'yu şu şekilde dene:
- Sabit dur: Cihaz elinde hareketsizken sayı artmamalı.
- 10 adım yürü: Cihazı avucunda tutup 10 adım say. Ekrandaki sayı 10'a yakın olmalı.
- Sıfırla: A düğmesine bas, sayı 0'a dönmeli.
- Hızlı salla: Cihazı elinde hızlıca salla ve gerçek adıma göre ne kadar farklı saydığına bak.
Karşılaştığımız hata: fazla sayıyor
İlk denememde 10 adım yürüdüm ama ekran 19 gösterdi. Neredeyse iki katı. Sorun belliydi: tek bir adımın tepe anında bileşke ivme eşiği bir kez değil, birkaç kez geçiyordu. Yani bir adım, iki-üç adım gibi sayılıyordu.
İki düzeltme yaptım:
- Eşiği yükselttim:
1500yerine1800denedim. Küçük titreşimler artık eşiği geçemiyordu. - Bekleme süresini artırdım: Adımı saydıktan sonraki
sleepsüresini200'den350milisaniyeye çıkardım. Bir tepe geçtikten sonra kısa bir süre yeni adım saymıyoruz; buna ölü zaman (debounce) denir.
esik = 1800
# ...
if kuvvet > esik:
adim += 1
display.show(str(adim))
sleep(350) # ölü zaman: aynı adımı tekrar sayma
Tekrar denediğimde 10 adım için ekran 11 gösterdi. Kusursuz değil ama çok daha doğru. Bu, filtrelemenin neden gerektiğini gösteren gerçek bir örnek: ham sensör verisi + biraz algoritma = kullanışlı sonuç.
Mini uygulama
Kendi adım sayarını kur ve şu görevleri sırayla dene:
- Yukarıdaki MicroPython kodunu yükle.
- Cihazı avucunda tutarak tam 20 adım yürü ve ekrandaki sayıyı not et.
- Eşiği önce
1500, sonra2000yaparak aynı 20 adımı tekrar yürü. Hangi eşik sana en yakın sonucu verdi? - Bir tablo doldur:
| Eşik | Gerçek adım | Sayaç | Fark |
|---|---|---|---|
| 1500 | 20 | ? | ? |
| 1800 | 20 | ? | ? |
| 2000 | 20 | ? | ? |
- En iyi eşiği bulunca cihazı cebine koyup 30 saniye yürü ve sonucu kontrol et.
Amaç mükemmel sayı değil; kendi vücuduna ve cihazın yerine göre en iyi eşiği deneyerek bulmak.
Projeyi güçlendirme planı
Proje: Adım Sayar için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında harekete göre adım sayan ve sıfırlanabilen sayaç bağlamını kullanarak simülatörde ve kart üzerinde denenmiş micro:bit programı ile test notları oluştur. Dersin hedefi “İvmeölçerle adımları sayan, eşik ve filtrelemeyle çalışan bir adım sayar yap” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.
1. Proje özeti ve kapsam
Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Adım algılama fikri ile Adım = bir tepe (peak) arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.
2. Kabul ö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?
“Proje: Adım Sayar” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.
3. Test matrisi
| Test | Koşul | Beklenen | Gerçek sonuç | Sonraki karar |
|---|---|---|---|---|
| Normal | Standart giriş ve tam bağlantı | Temel görev tamamlanır | Test sırasında doldur | Koru veya küçük iyileştirme yap |
| Sınır | En düşük ya da en yüksek kabul edilen değer | Sistem kararlı kalır | Test sırasında doldur | Eşiği veya kuralı gözden geçir |
| Hata | Eksik, yanlış ya da beklenmeyen giriş | Güvenli ve anlaşılır tepki | Test sırasında doldur | Hata yönetimi ekle |
| Tekrar | Aynı koşulda en az üç deneme | Benzer sonuçlar | Test sırasında doldur | Tutarsızlığın kaynağını araştır |
4. Sürüm günlüğü
“Proje: Adım Sayar” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Adım algılama fikri veya Adım = bir tepe (peak) ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.
5. Sunum ve öz değerlendirme
“Proje: Adım Sayar” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, harekete göre adım sayan ve sıfırlanabilen sayaç için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.
Sık yapılan hatalar
Eşiği hiç ayarlamamak
Herkesin yürüyüşü ve cihazı tutuşu farklıdır. Tek bir "doğru" eşik yoktur; kendi denemenle bulman gerekir.
Ölü zamanı (bekleme) unutmak
Adımı saydıktan sonra sleep koymazsan tek bir adım birçok kez sayılır. Bu, yukarıda anlattığımız "fazla sayma" hatasının en yaygın sebebidir.
Beklemeyi çok uzun tutmak
sleep(1000) gibi uzun bir bekleme koyarsan hızlı yürürken gerçek adımları kaçırırsın. Az sayma bu sefer tersten olur. 300–400 ms genelde iyi bir başlangıçtır.
Sayacı başlangıçta içine koymamak
Değişkeni ve ilk "0" gösterimini sürekli döngüsüne yazarsan sayaç her turda sıfırlanır ve hiç artmaz. Başlangıç bölümü bir kez çalışır; sayaç orada tanımlanmalı.
Güvenlik notu
- Pili ve pil kutusunu her zaman bir yetişkinle birlikte bağla; yalnızca micro:bit için uygun düşük gerilimli (3 V) pil kullanın.
- Cihazı üstüne veya koluna takarak taşıyacaksan, ipi ya da bandı güvenli biçimde sabitle; sallanan bir cihaz yürürken dikkatini dağıtabilir.
- Bu projeyi asla bisiklet sürerken ya da koşu bandında dikkatini gerektiren bir anda ekrana bakarak test etme. Önce güvenli, açık bir alanda yürüyerek dene.
- micro:bit'i sürekli cebinde taşıyacaksan, pil uçlarının metal eşyalara (anahtar, bozuk para) değmediğinden emin ol.
Adım sayar doğrulama planı
Adım sayısı tek bir yürüyüşle doğrulanmamalıdır. On yavaş adım, on normal adım, merdiven hareketi, otururken kol sallama ve cihazı masada titreştirme ayrı testlerdir. Gerçek adım sayısı bir gözlemci tarafından kaydedilir; micro:bit sonucu ile farkı tabloya yazılır. Yanlış pozitifler ile kaçırılan adımlar ayrı değerlendirilir, çünkü yalnız toplam fark hangi hatanın oluştuğunu göstermez.
Eşik ve bekleme süresi bir test grubuna göre ayarlanıp aynı grupta başarı ilan edilmemelidir. Ayar için kullanılan hareketlerden farklı bir doğrulama grubu seçmek, algoritmanın yalnız örnekleri ezberlemesini önler. Sonuç kişisel sağlık veya kondisyon ölçümü olarak değil, hareket sınıflandırma deneyinin tahmini olarak sunulur.
Ders özeti
- İvmeölçerin bileşke ivme değeri (
get_strength) sabit dururken ~1000, adım atınca bir tepe yapar. - Bir adımı, değerin belirli bir eşiği geçmesi olarak algılarız.
- Adımı saydıktan sonraki kısa bekleme (ölü zaman/debounce) tek adımı iki kez saymayı engeller.
- Fazla sayma sorununu eşiği yükselterek ve bekleme süresini artırarak çözdük.
- Doğru eşik kişiye ve cihazın yerine göre değişir; en iyisi deneyerek bulunur.
Kontrol soruları
- micro:bit sabit dururken bileşke ivme değeri neden sıfır değildir?
- Eşiği çok düşük tutarsak sayaç ne yönde hata yapar?
- Adımı saydıktan sonra neden kısa bir süre beklemek (
sleep) gerekir? - İlk denememizde 10 adım için 19 çıktı; sebebi neydi?
- Sayacı sıfırlamak için programda hangi olayı kullandık?
Cevaplar
- Yerçekimi her zaman cihaza etki ettiği için bileşke ivme sabit dururken bile yaklaşık 1000 (1 g) civarındadır.
- Az titreşimi bile adım sanar; gerçek adımdan fazla sayar.
- Bir adımın tepesi kısa sürede eşiği birkaç kez geçebilir; bekleme (ölü zaman) aynı adımın tekrar sayılmasını engeller.
- Tek bir adımın tepe anı eşiği birden çok kez geçtiği için her adım birkaç kez sayıldı; eşiği ve bekleme süresini artırarak düzelttik.
- A düğmesine basılma olayını (
button_a.was_pressed()/ A düğmesine basıldığında) kullanarak sayacı 0 yaptık.
Kaynak ve doğrulama notu
“Proje: Adım Sayar” dersi için doğrulama odağı Adım algılama fikri ile Adım = bir tepe (peak) 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
Proje: Kablosuz Skor Sistemi