Bir cümlelik özet
Bu derste micro:bit'in ışık sensörünü ve ivmeölçerini kullanarak, karanlıkta yanıp sönen küçük bir bisiklet güvenlik ışığı prototipi tasarlıyoruz.
Neden önemli?
Bisiklete binmeyi seviyorum ve akşam üstü hava kararmaya başladığında görünür olmanın ne kadar önemli olduğunu fark ettim. Buradan bir soru çıktı: acaba micro:bit ortam karardığında kendi kendine yanıp sönebilir mi?
Bu proje, modül boyunca öğrendiğimiz parçaları tek bir yerde birleştiriyor. LED matrisi, ışık sensörü, ivmeölçer, koşul ve döngü... Hepsini ayrı ayrı gördük. Şimdi bunları gerçek bir ihtiyacı çözmeye çalışan tek bir programda buluşturuyoruz.
Bir noktayı en baştan açıkça söylemek istiyorum: bu bir öğretici prototiptir, gerçek bir bisiklet ışığının yerini tutmaz. Amacımız sensörlerin ve kodun nasıl birlikte çalıştığını görmek; trafikte güvenliği sağlamak değil. Gerçek sürüşlerde her zaman resmî, onaylı bir bisiklet ışığı ve reflektör kullanılmalıdır. Prototip yapmanın güzel yanı da bu: bir fikri güvenle deneyip nasıl davrandığını gözlemleyebiliyoruz.
Prototip fikri ve micro:bit'in rolü
Prototip, bir ürünün son hâli değil, fikri test etmek için yapılan ilk denemesidir. Mühendisler pahalı ve karmaşık bir şey üretmeden önce genellikle basit bir prototiple başlar.
Bizim prototipimiz ne yapacak?
Planımızı üç cümleyle özetleyelim:
- Ortam karardığında LED'ler yanıp sönmeye başlasın.
- Ortam aydınlıkken ekran kapalı kalsın, boşuna pil harcamasın.
- Bir sonraki adımda, yavaşlama (frenleme) sezildiğinde farklı bir desen göstersin.
Prototip ne *değildir*?
Bunu net tutmak güvenlik açısından önemli:
- Gerçek bir stop lambası veya sinyal değildir.
- Sürücünün dikkatini çekecek kadar parlak bir ışık kaynağı değildir; micro:bit LED'leri gündüz uzaktan zor görünür.
- Trafik kurallarına uygun bir donanım değildir.
Yani bu proje "bak, güvenli bir ışık yaptım" demek için değil; "sensörler karanlığı ve hareketi nasıl algılar" sorusunu anlamak içindir.
Karanlığı algılamak: ışık sensörü
micro:bit'in ayrı bir ışık sensörü yoktur; bunun yerine ekrandaki LED'leri kısa bir an alıcı gibi kullanarak ortam ışığını ölçer. Sonuç 0 (çok karanlık) ile 255 (çok aydınlık) arasında bir sayıdır.
Günlük hayattan tanıdık bir örnek: sokak lambaları. Birçok sokak lambasının içinde bir ışık sensörü vardır; hava kararınca kendiliğinden yanar, sabah aydınlanınca söner. Bizim yapacağımız da aslında aynı fikirdir, sadece çok küçük ölçekte.
Önce bir eşik değeri seçmemiz gerekir. Eşik, "bundan daha karanlıksa yanıp sönmeye başla" dediğimiz sınırdır. Odada birkaç deneme yapıp uygun bir sayı buluruz; başlangıç için 50 iyi bir tahmindir.
MakeCode blokları ile
sürekli
eğer <ışık seviyesi < 50> ise
kalp simgesi göster
100 ms bekle
ekranı temizle
100 ms bekle
değilse
ekranı temizle
Bu program sürekli döner. Işık seviyesi eşik altına düşerse kalp yanar-söner; aydınlıksa ekran kapalı kalır.
MicroPython ile
from microbit import *
while True:
if display.read_light_level() < 50:
display.show(Image.HEART)
sleep(100)
display.clear()
sleep(100)
else:
display.clear()
Mantık iki dilde de tıpatıp aynı: ölç, karşılaştır, karanlıksa yanıp söndür. Değişen tek şey komutların yazılış biçimi.
Yavaşlamayı sezmek: ivmeölçer fikri
Gerçek bir bisiklette fren yapınca arka lamba daha parlak yanar. Bunu micro:bit'te taklit etmeyi denemek eğlenceli bir deneydir. Kartın ivmeölçeri hareket ve eğim değişimini ölçebilir.
İkinci günlük örnek burada: bir arabanın fren lambası. Sürücü frene basınca lamba parlar ve arkadaki sürücüye "yavaşlıyorum" mesajını verir. Biz de yavaşlama anında farklı bir desen göstererek benzer bir fikri deneyeceğiz.
Bunu tam ve kusursuz ölçmek zordur; bu yüzden basit bir yaklaşım seçiyoruz: kart belirgin biçimde sarsıldığında (örneğin ani bir hareket) bir "dur" deseni göstermek. Bu, gerçek frenleme değil, onun kaba bir taklididir.
from microbit import *
while True:
if accelerometer.was_gesture("shake"):
display.show(Image.SQUARE) # "dur" deseni
sleep(500)
display.clear()
elif display.read_light_level() < 50:
display.show(Image.HEART)
sleep(100)
display.clear()
sleep(100)
else:
display.clear()
Burada was_gesture("shake") kartın son anda sarsılıp sarsılmadığını söyler. Bu kısmın deneysel olduğunu unutma: gerçek bir frenleme sensörü çok daha dikkatli tasarlanır.
Mini uygulama
Kendi prototipini adım adım kur ve test et:
- Işık sensörlü ilk programı (MakeCode veya MicroPython) karta yükle.
- Odanın ışığını açıkken ekrana bak: kapalı kalmalı.
- Kartı iki elinle kapat ya da ışığı söndür: kalp yanıp sönmeye başlamalı.
- Eşik değerini
50yerine20ve100yaparak dene. Hangi sayı senin odanda daha iyi çalışıyor? - İstersen ivmeölçerli sürümü ekle ve kartı hafifçe sallayınca "dur" deseninin geldiğini gör.
Geliştirme fikirleri
- Kalp yerine ok veya kendi çizdiğin bir desen kullan.
- Yanıp sönme hızını
sleepsürelerini değiştirerek ayarla. - İki micro:bit'in varsa, radyo dersinden hatırladığın gibi biri "yavaşlıyorum" mesajını diğerine gönderebilir mi? Bunu bir sonraki deney olarak not et.
Test ve hata düzeltme örneği
İlk denememde ışık açıkken bile ekran sürekli yanıp sönüyordu. Sorunu şöyle buldum:
Amaç: Aydınlıkta ekran kapalı kalsın
Sorun: Işık açıkken de kalp yanıyor
Kontrol: Eşik 200 yazılmış; odam bundan karanlık
Düzeltme: Eşiği 50'ye indir ve tekrar dene
Beklenen sonucu yazmak, gerçekte olanı gözlemlemek ve tek bir şeyi değiştirmek; hata ayıklamanın hep aynı adımlarıdır.
Projeyi güçlendirme planı
Proje: Bisiklet Güvenlik Işığı Prototipi 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 “Işık sensörü ve LED'lerle karanlıkta yanıp sönen bir bisiklet güvenlik ışığı prototipi 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. Prototip fikri ve micro:bit'in rolü ile Prototip ne *değildir*? 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: Bisiklet Güvenlik Işığı Prototipi” 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: Bisiklet Güvenlik Işığı Prototipi” 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; Prototip fikri ve micro:bit'in rolü veya Prototip ne *değildir*? 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: Bisiklet Güvenlik Işığı Prototipi” 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şik değerini denemeden bırakmak
Her odanın ışığı farklıdır. Bir kez 50 yazıp bırakmak yerine, kendi ortamında birkaç değer deneyip en uygununu bulmak gerekir.
Ekranı temizlemeyi unutmak
display.clear() yazmazsan LED'ler açık kalır ve "yanıp sönme" görünmez. Deseni gösterdikten sonra ekranı temizlemek döngünün önemli bir parçasıdır.
Prototipi gerçek ışık sanmak
En önemli hata bu. micro:bit LED'leri zayıftır ve bu proje trafik için tasarlanmadı. Prototip, fikri anlamak içindir; yola çıkarken onu güvenlik ışığı yerine koymak yanlış olur.
Kartı sürüş sırasında ayarlamaya çalışmak
Kod ve eşik ayarları her zaman dururken, evde yapılır. Sürerken karta bakmak veya dokunmak dikkat dağıtır.
Güvenlik notu
- Bu bir öğretici prototiptir, resmî bisiklet ışığının yerini tutmaz. Gerçek sürüşlerde onaylı ışık ve reflektör kullan.
- Pil kutusunu ve harici parçaları bir yetişkinin yardımıyla bağla. Yalnızca micro:bit'in kendi düşük gerilimli pil kutusunu kullan; şebeke elektriğiyle asla çalışma.
- Kartı denemek için bisiklete takacaksan, sağlam biçimde ve düşmeyecek şekilde sabitle; gidona gevşek bir şey bağlamak tehlikelidir.
- Sürerken cihazla ilgilenme. Ekrana bakmak veya düğmeye basmak dikkatini yoldan alır. Tüm ayarları dururken yap.
- Islak havada elektronik parçaları kullanma; pil ve devre ıslanmamalıdır.
Ders özeti
- Prototip, bir fikri güvenle test etmek için yapılan ilk basit denemedir; son ürün değildir.
- micro:bit ortam ışığını
0–255arası bir sayıyla ölçer; bir eşikle karanlığı algılarız. - Aynı mantık hem MakeCode blokları hem MicroPython ile yazılabilir; değişen sadece biçimdir.
- İvmeölçer ile yavaşlamayı taklit etmek eğlenceli ama deneysel bir eklentidir.
- Bu proje bir güvenlik ışığının yerini tutmaz; gerçek sürüşte onaylı ışık ve reflektör şarttır.
Kontrol soruları
- micro:bit ışık seviyesini hangi sayı aralığında verir?
- Eşik değeri ne işe yarar ve neden her odada farklı olabilir?
display.clear()yazmayı unutursak ne olur?- Bu projeyi neden gerçek bir bisiklet güvenlik ışığı yerine kullanmamalıyız?
- Yavaşlamayı taklit etmek için hangi sensörü ve hangi hareketi kullandık?
Cevaplar
0(çok karanlık) ile255(çok aydınlık) arasında bir sayı verir.- Eşik, "bundan karanlıksa yanıp sönmeye başla" dediğimiz sınırdır. Her odanın ışığı farklı olduğu için uygun eşik de değişir; bu yüzden deneyerek buluruz.
- LED'ler açık kalır, ekran temizlenmez ve yanıp sönme etkisi görünmez.
- Çünkü bu bir öğretici prototiptir: LED'leri zayıftır, trafik kurallarına uygun değildir ve güvenlik için tasarlanmamıştır. Gerçek sürüşte onaylı ışık gerekir.
- İvmeölçeri kullandık ve
was_gesture("shake")ile kartın sarsılmasını, yani ani hareketi sezdik. Bu, gerçek frenlemenin kaba bir taklididir.
Kaynak ve doğrulama notu
“Proje: Bisiklet Güvenlik Işığı Prototipi” dersi için doğrulama odağı Prototip fikri ve micro:bit'in rolü ile Prototip ne *değildir*? 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
Arduino modülü: micro:bit'ten sonra, kendi devrelerini satır satır kodla kuracağın yeni bir kartla tanışıyoruz.