Bir cümlelik özet
İki micro:bit'i radyoyla konuşturarak, bir kartta düğmeye bastığımızda skorun karşıdaki kartta göründüğü kablosuz bir sayaç kuruyoruz.
Neden önemli?
Basketbol maçında sayı tabelası genelde sahanın kenarında durur ve puanı tutan kişi sayacı elinde tutmaz. Puanı tutanla tabelayı gören çoğu zaman farklı yerlerdedir. İşte bu ders tam olarak bunu yapıyor: bir micro:bit "puanı sayan uzaktan kumanda", diğeri de "duvardaki tabela" oluyor.
Şimdiye kadar yazdığın programların hepsi tek bir kartın içinde çalışıyordu. Bu proje ilk kez iki cihazı birbirine bağlıyor. Bir kartın bastığı düğme, kablosuz olarak başka bir kartın ekranını değiştiriyor. Bu, telefonların, oyun kollarının ve akıllı ev cihazlarının çalışma mantığının küçük bir örneği.
micro:bit'in içinde bir radyo vardır. Radyo, kartların birbirine kısa mesajlar yollamasını sağlayan kablosuz bir yoldur; tıpkı iki telsizin aynı kanaldan konuşması gibi. Bu derste radyoyu kurmayı, mesaj göndermeyi ve gelen mesajı göstermeyi öğreneceğiz. Bu üç beceri, sonraki tüm çok-cihazlı projelerin temelini oluşturuyor.
Radyo nasıl çalışır?
Grup: aynı kanalda olmak
İki micro:bit'in birbirini duyabilmesi için aynı radyo grubunda olması gerekir. Grup, 0 ile 255 arasında bir sayıdır ve bir "kanal" gibi düşünülebilir. Sınıfta herkes farklı gruplar kullanırsa, mesajlar karışmaz.
Bunu bir telsiz kanalına benzet: iki arkadaş 7. kanaldaysa birbirini duyar; biri 7'de, diğeri 3'te ise, bağırsalar da duyamazlar.
Gönderen ve alan
Radyoda her zaman iki rol vardır:
- Gönderen (sender): Bir olay olunca (düğmeye basınca) mesaj yollar.
- Alan (receiver): Mesaj geldiğinde onu ekranda gösterir.
Bu projede bir kart hep gönderen, diğeri hep alan olacak. İkisi de aynı gruba ayarlanmalı.
Değişken: skoru hatırlamak
Skor bir sayıdır ve düğmeye her basışta 1 artmalı. Bu sayıyı saklamak için bir değişken kullanırız. Değişken, içine bir değer koyduğumuz ve sonra değiştirebildiğimiz isimli bir kutudur. Adına skor diyeceğiz ve başlangıçta 0 yapacağız.
Adım adım: skor sistemini kur
1. Gönderen kart (kumanda)
MakeCode bloklarıyla gönderen kartın mantığı şöyle:
başlangıçta
radyo grubunu 7 yap
skor = 0
A düğmesine basıldığında
skor'u 1 artır
radyoyla sayı gönder: skor
skor sayısını göster
Aynı program MicroPython ile:
from microbit import *
import radio
radio.config(group=7)
radio.on()
skor = 0
while True:
if button_a.was_pressed():
skor += 1
radio.send(str(skor))
display.show(skor)
Burada radio.send metin gönderdiği için sayıyı str(skor) ile metne çeviriyoruz.
2. Alan kart (tabela)
Alan kartın tek işi vardır: mesaj gelince onu göstermek.
başlangıçta
radyo grubunu 7 yap
radyo sayı alındığında (alınanSayı)
alınanSayı sayısını göster
MicroPython ile:
from microbit import *
import radio
radio.config(group=7)
radio.on()
while True:
mesaj = radio.receive()
if mesaj:
display.scroll(mesaj)
radio.receive() yeni bir mesaj yoksa None döndürür; bu yüzden if mesaj: ile sadece gerçek bir mesaj geldiğinde ekrana yazdırıyoruz.
3. İki kartı da programla
İki micro:bit'e iki farklı program yüklemen gerekir: birine gönderen, diğerine alan programını. İkisinin de grubu 7 olduğuna dikkat et.
Test etme: gerçekten çalışıyor mu?
Bir projeyi yazmak yetmez; farklı durumları deneyerek doğrulamak gerekir. Şu senaryoları sırayla test et:
- İlk basış: Gönderen kartta A'ya bir kez bas. Alan kartta
1görünmeli. - Sayma: A'ya art arda beş kez bas. Alan kart
1, 2, 3, 4, 5diye ilerlemeli. - Mesafe: Kartları birkaç metre ayır ve tekrar dene. Radyo hâlâ çalışmalı.
- Grup ayrımı: Bir arkadaşının kartı 3. grupta olsun. Onun basışları senin tabelanı değiştirmemeli.
Her senaryoda beklediğin sonucu önceden yaz, sonra gerçekte ne olduğunu gör. İkisi farklıysa bir hata var demektir.
Bir hata ve düzeltmesi
İlk denememde alan kartın ekranı hiç değişmedi. Gönderen kartta 1, 2, 3 sayıları görünüyordu ama tabela boştu.
Beklenen ile gerçek sonucu karşılaştırdım:
Amaç: Gönderen kart A'ya basınca alan kartta sayı görünsün
Sorun: Gönderen doğru sayıyor ama alan kart hiç tepki vermiyor
Kontrol: Gönderen kartın grubu 7, alan kartın grubu 1 yazılmış
Düzeltme: Alan kartın grubunu da 7 yap
Sorun, iki kartın farklı radyo grubunda olmasıydı. Farklı kanaldaki iki telsiz gibi, mesajlar gidiyordu ama karşı taraf o kanalı dinlemiyordu. İki grubu da 7 yapınca skor anında görünmeye başladı.
Bu hata çok yaygındır ve iyi bir hatırlatma sunar: kablosuz bir sistem çalışmıyorsa, önce iki tarafın aynı grupta olup olmadığını kontrol et.
Projeyi geliştir
Temel sistem çalışınca basketbolun kurallarına yaklaştırabilirsin:
İki farklı puan
Basketbolda serbest atış 1, normal basket 2 sayıdır. B düğmesine 2 puan ekleyelim:
A düğmesine basıldığında
skor'u 1 artır
radyoyla sayı gönder: skor
B düğmesine basıldığında
skor'u 2 artır
radyoyla sayı gönder: skor
Sallayarak sıfırlama
Yeni maç için skoru sıfırlamak istersin. micro:bit'in ivmeölçeri sayesinde kartı sallamak bir olay olarak kullanılabilir:
sallandığında
skor = 0
radyoyla sayı gönder: skor
Bu ekleme, önceki modüllerde tanıdığın ivmeölçerin bu projeye nasıl bağlandığını gösterir.
Mini uygulama
Bir arkadaşınla iki micro:bit alın ve şu görevi tamamlayın:
- Birine gönderen, diğerine alan programını yükleyin (grup 7).
- Bir kişi puanı tutsun, diğeri odanın öbür ucundaki tabelayı izlesin.
- Beş basıştan sonra tabelada doğru sayı var mı kontrol edin.
- Ardından B düğmesiyle 2 puan eklemeyi ve sallayarak sıfırlamayı ekleyin.
Kayıt tut: Hangi grup numarasını kullandın? İlk denemede çalıştı mı, yoksa bir şeyi mi düzelttin? Bu notlar, bir sonraki projede aynı hataya düşmeni engeller.
Projeyi güçlendirme planı
Proje: Kablosuz Skor Sistemi 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 ışık ve sıcaklık değerlerini LED matriste gösteren ölçer bağlamını kullanarak simülatörde ve kart üzerinde denenmiş micro:bit programı ile test notları oluştur. Dersin hedefi “İki micro:bit ve radyoyla çalışan kablosuz bir skor sistemi 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. Radyo nasıl çalışır? ile Gönderen ve alan 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: Kablosuz Skor Sistemi” 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: Kablosuz Skor Sistemi” 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; Radyo nasıl çalışır? veya Gönderen ve alan 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: Kablosuz Skor Sistemi” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, ışık ve sıcaklık değerlerini LED matriste gösteren ölçer 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
İki kartı farklı gruba ayarlamak
En sık görülen hata budur. Gönderen ve alan aynı grupta değilse mesaj asla ulaşmaz. Her iki programda da grup numarasının aynı olduğundan emin ol.
Radyoyu açmayı unutmak
MicroPython'da radio.on() yazmazsan radyo kapalı kalır ve hiçbir mesaj gidip gelmez. MakeCode'da radyo grubu bloğunu koymak radyoyu otomatik açar.
Sayıyı metne çevirmeden göndermek
MicroPython'da radio.send metin bekler. radio.send(skor) yazarsan hata alırsın; radio.send(str(skor)) yazmalısın.
Skoru döngü içinde sıfırlamak
skor = 0 satırını yanlışlıkla sürekli çalışan bölüme koyarsan skor her turda sıfırlanır ve hiç artmaz. Sıfırlama yalnız başlangıçta olmalı.
Güvenlik notu
- micro:bit'i pil kutusuyla çalıştıracaksan, pilleri bir yetişkinle birlikte tak ve yalnız karta uygun düşük gerilimli (AAA) pil kullan.
- Kartları giysine veya bir tabelaya sabitleyeceksen sağlam biçimde tuttur; sarkan kablolar takılmaya yol açabilir.
- Radyo yalnız düşük güçlü, kısa menzilli bir sinyaldir; kimseye zarar vermez, ama kartın metal uçlarını prize ya da başka güç kaynağına değdirme.
- Kartları sallayarak sıfırlama eklerken çevrende kırılabilecek eşya olmamasına dikkat et.
Ders özeti
- İki micro:bit, aynı radyo grubuna ayarlandığında birbirine kablosuz mesaj yollayabilir.
- Radyoda her zaman bir gönderen ve bir alan rolü vardır; ikisi de aynı grupta olmalıdır.
- Skoru saklamak için bir değişken kullanırız ve düğmeye basınca hem artırıp hem göndeririz.
- MicroPython'da
radio.sendmetin gönderir, bu yüzden sayıyıstr()ile çeviririz;radio.receive()mesaj yoksaNonedöndürür. - Kablosuz bir sistem çalışmıyorsa ilk kontrol edilecek şey iki tarafın aynı grupta olup olmadığıdır.
Kontrol soruları
- İki micro:bit'in birbirini duyabilmesi için hangi ayarın aynı olması gerekir?
- Gönderen kart hangi olayda mesaj yollar, alan kart ne zaman ekranı değiştirir?
- MicroPython'da
radio.send(skor)yerine nedenradio.send(str(skor))yazarız? - Alan kart hiç tepki vermiyorsa ve gönderen doğru sayıyorsa, ilk kontrol edeceğin şey nedir?
- B düğmesiyle 2 puan eklemek için programa hangi olay bloğunu eklersin?
Cevaplar
- Radyo grubu aynı olmalıdır. Farklı gruplardaki kartlar, farklı kanaldaki telsizler gibi birbirini duymaz.
- Gönderen kart A düğmesine basıldığında mesaj yollar; alan kart radyoyla sayı alındığında ekranı değiştirir.
- Çünkü
radio.sendmetin bekler. Sayıyı doğrudan gönderirsek hata alırız;str(skor)sayıyı metne çevirir. - İki kartın aynı radyo grubunda olup olmadığını kontrol ederim; bu en sık görülen hatadır.
- B düğmesine basıldığında bloğunu eklerim; içinde skoru 2 artırıp güncel skoru radyoyla gönderirim.
Kaynak ve doğrulama notu
“Proje: Kablosuz Skor Sistemi” dersi için doğrulama odağı Radyo nasıl çalışır? ile Gönderen ve alan 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: Bisiklet Güvenlik Işığı Prototipi: micro:bit'i giyilebilir bir güvenlik cihazına dönüştürerek karanlıkta görünürlüğü artıran bir ışık sistemi tasarlıyoruz.