Bir cümlelik özet
Bu projede bir ışık sensörü kullanarak ortam karardığında kendiliğinden yanan, aydınlandığında sönen küçük bir gece lambası kuracağız.
Neden önemli?
Şimdiye kadar sensörleri okumayı, motorları sürmeyi ve bir sensörü kalibre etmeyi ayrı ayrı öğrendik. Gerçek bir proje ise bu parçaları tek bir düzende birleştirmeyi ister: oku, karar ver, davran.
Otomatik gece lambası bunun için çok iyi bir ilk projedir. Girişi tek bir sensördür, çıkışı tek bir LED'dir ve mantığı tek bir koşuldan oluşur. Yani karmaşık değildir; ama gerçek dünyada karşılaşacağın her sorunu küçük ölçekte içinde barındırır: eşik seçmek, titremeyi engellemek, test etmek ve bir hatayı bulup düzeltmek.
Aynı fikir günlük hayatta her yerdedir:
- Akşam olunca kendiliğinden yanan sokak lambaları bir ışık sensörüyle çalışır.
- Bazı telefonlar ortam ışığına göre ekran parlaklığını otomatik ayarlar.
Bu projeyi bitirdiğinde, bu iki örneğin arkasındaki mantığı sen kurmuş olacaksın.
Projeyi tanıyalım
Ne yapacak?
Kuralımız tek cümleyle şu: Ortam belli bir seviyeden daha karanlıksa LED yansın, aydınlıksa sönsün.
Bunu yapabilmek için üç şeye ihtiyacımız var:
- Ortamın ne kadar aydınlık olduğunu ölçen bir ışık sensörü.
- Bir eşik (İngilizcesi *threshold*): "karanlık" ile "aydınlık" arasındaki sınır sayısı.
- Bu eşiğe göre LED'i açıp kapatan bir karar mantığı.
Malzeme listesi
- micro:bit veya Arduino kartı (dahili ışık sensörü olan bir kart işi kolaylaştırır)
- Işık sensörü: micro:bit'te LED ekranı sensör olarak çalışır; Arduino'da bir LDR (foto direnç) kullanılır
- 1 adet LED
- 1 adet 220–330 ohm direnç (LED'i korumak için)
- Breadboard ve birkaç jumper kablo
- Güç kaynağı: USB veya pil paketi (yalnızca düşük gerilim)
Devre şeması (metin olarak)
micro:bit dahili ışık sensörünü kullanıyorsak sensör için ekstra bir bağlantı gerekmez. LED tarafı şöyle düşünülür:
[Kart pini P0] ---> [220–330 ohm direnç] ---> [LED (+) uzun bacak]
|
[LED (−) kısa bacak]
|
[GND / toprak]
Direnç, LED'den geçen akımı sınırlar; onu koymazsan LED zamanla zarar görebilir. LED'in uzun bacağı artı (+), kısa bacağı eksi (−) tarafıdır.
Adım adım mantık
1. Sensörü oku
Işık sensörü bize bir sayı verir. micro:bit'te bu sayı genellikle 0 (çok karanlık) ile 255 (çok aydınlık) arasındadır. Önce bu sayıyı okuyup ekranda görmek isteriz, çünkü eşiği ancak gerçek değerleri görünce seçebiliriz.
Başla
sürekli tekrarla:
isik = ışık sensörünü oku
isik değerini ekrana/seri porta yaz
2. Eşiği kalibre et
Bir önceki derste kalibrasyonu öğrendik: sensörün gerçek ortamdaki değerlerini ölçüp buna göre sınır belirlemek. Burada tam olarak bunu yapıyoruz.
- Odayı aydınlatıp okunan değeri not et (örneğin 200).
- Sensörün üstünü elinle kapat, karanlık değeri not et (örneğin 40).
- Eşiği bu ikisinin ortasına yakın seç. Örneğin eşik = 100.
Eşik, senin odana özeldir. Başka bir odada ışık farklı olduğu için eşiği yeniden ölçmen gerekebilir.
3. Karar ver ve LED'i sür
Artık kuralı yazabiliriz. Sözde kod olarak:
esik = 100
sürekli tekrarla:
isik = ışık sensörünü oku
eğer isik < esik ise:
LED'i yak # ortam karanlık
değilse:
LED'i söndür # ortam aydınlık
micro:bit tarzı bir kodda aynı mantık şöyle görünür:
esik = 100
while True:
isik = display.read_light_level()
if isik < esik:
pin0.write_digital(1) # LED yansın
else:
pin0.write_digital(0) # LED sönsün
sleep(100)
Kodun biçimi değişse de mantık her yerde aynıdır: oku, eşikle karşılaştır, karar ver.
Titremeyi önlemek
Sorun neden çıkar?
Işık tam eşik değerinin etrafındayken sensör bir 99, bir 101 okuyabilir. O zaman LED çok hızlı yanıp söner; buna titreme (İngilizcesi *flicker*) denir. Şafak vaktinde ya da elinle sensörü yavaşça kapatırken bunu görebilirsin.
İki basit çözüm
1. Ortalama alma (yumuşatma): Tek bir okuma yerine birkaç okumanın ortalamasını al. Ani sıçramalar böylece yumuşar.
topla = 0
5 kez tekrarla:
topla = topla + ışık sensörünü oku
isik = topla / 5
2. İki eşik kullanma (histerezis): Yakması için bir sınır, söndürmesi için biraz farklı bir sınır koy. Böylece sensör tek bir sayının etrafında gidip gelse bile LED kararında durur.
alt = 90 # bunun altına düşünce yak
ust = 110 # bunun üstüne çıkınca söndür
Bu iki yöntem, gerçek gece lambalarının da kullandığı gerçek mühendislik çözümleridir.
Mini uygulama
Kendi gece lambanı kur ve şu test senaryolarını sırayla dene. Her senaryoda LED'in ne yaptığını bir kâğıda not et.
| Test | Ne yapılır | Beklenen sonuç |
|---|---|---|
| 1 | Oda aydınlık | LED sönük |
| 2 | Sensörü elinle kapat | LED yanar |
| 3 | Eli yavaşça çek | LED yumuşakça söner, titremez |
| 4 | Eşiği 100'den 60'a düşür | LED daha geç yanar |
Sonra tek bir şeyi değiştir ve tekrar test et: örneğin eşiği ya da ortalama alınan okuma sayısını. Bir seferde tek şeyi değiştirmek, hangi değişikliğin neyi etkilediğini görmeni sağlar.
Bir hata ve düzeltmesi
İlk denememizde çok sık karşılaşılan bir hata şudur: LED tam ters çalışır. Yani oda aydınlıkken yanar, karanlıkken söner.
Amaç: Karanlıkta LED yansın
Sorun: LED aydınlıkta yanıyor
Kontrol: Koşul "eğer isik > esik ise yak" yazılmış
Buradaki hata karşılaştırma yönünde: "büyükse yak" demişiz, ama ışık değeri büyükse ortam aydınlıktır. Düzeltme, işareti ters çevirmektir:
Düzeltme: Koşulu "eğer isik < esik ise yak" yap
Ders şu: Bir sensör beklenenin tersini yapıyorsa, çoğu zaman sorun bağlantıda değil, karşılaştırmanın yönündedir.
Projeyi güçlendirme planı
Proje: Otomatik Gece Lambası 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 karanlıkta açılıp aydınlıkta kapanan gece lambası bağlamını kullanarak ölçüm tablosu, kalibrasyon kararı ve güvenli çıktı davranışı oluştur. Dersin hedefi “Işık sensörü, eşik kalibrasyonu ve filtrelemeyle karanlıkta yanan bir gece lambası 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. Projeyi tanıyalım ile Malzeme listesi arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.
2. Kabul ölçütleri
- Sensör değeri farklı koşullarda kaydedildi mi?
- Eşik değeri tek ölçüme değil gözleme dayanıyor mu?
- Gürültülü veri filtreleniyor veya ortalanıyor mu?
- Aktüatör güvenli başlangıç durumunda mı?
- Sensör koparsa sistemin nasıl davranacağı tanımlı mı?
“Proje: Otomatik Gece Lambası” 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: Otomatik Gece Lambası” 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; Projeyi tanıyalım veya Malzeme listesi 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: Otomatik Gece Lambası” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, karanlıkta açılıp aydınlıkta kapanan gece lambası 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
Direnci unutmak
LED'i doğrudan pine bağlamak onu zamanla yakabilir. LED ile pin arasına daima 220–330 ohm bir direnç koy.
Eşiği tahminle seçmek
"100 olsun" demek yerine önce sensörün aydınlık ve karanlık değerlerini ölç, sonra eşiği aradan seç. Ölçmeden seçilen eşik başka odada çalışmaz.
Titremeyi görmezden gelmek
LED sınır ışıkta hızlı yanıp sönüyorsa bu bir arıza değildir; ortalama alma veya iki eşik ile kolayca çözülür.
LED'i ters bağlamak
LED yönü önemlidir. Uzun bacak artıya, kısa bacak toprağa bağlanır. Ters bağlanırsa LED hiç yanmaz.
Güvenlik notu
- Bu proje yalnızca düşük gerilimle çalışır: USB, micro:bit veya pil paketi. Prize, duvar elektriğine veya şebeke elektriğine asla bağlanmaz.
- LED küçük bir bileşendir ama direnci atlarsan ısınabilir. Direnci daima kullan.
- Devreyi kurarken veya kabloları takıp çıkarırken kartın gücünü kes. Bağlantıları kontrol ettikten sonra gücü ver.
- Pil ısınır, şişer veya kokarsa hemen çıkar ve bir yetişkine haber ver.
- Bu proje bir yetişkin gözetiminde uygulanmalıdır.
Işık eşiği ve kararlılık testi
Gece lambası tam eşik çevresinde hızla açılıp kapanabilir. Bunu sınamak için sensör değeri eşiğin biraz altına ve üstüne yavaşça getirilir, durum değişimlerinin sayısı kaydedilir. Açma ve kapatma için iki farklı eşik kullanmak ya da birkaç okumayı ortalamak titreşimi azaltabilir. Her değişiklikten sonra gündüz, loş ortam, kısa süreli gölge ve telefon feneri gibi farklı koşullar yeniden denenmelidir.
LED parlaklığı, kablo sıcaklığı ve güç kaynağı da gözlenir. Proje yalnız güvenli düşük gerilimli eğitim devresi olarak uygulanır; şebeke lambası veya priz kontrolü yapılmaz. Ölçüm hatasında ışığı sürekli açık bırakmak ile kapalı bırakmak arasındaki seçim kullanım senaryosuna göre açıkça gerekçelendirilir.
Ders özeti
- Otomatik gece lambası "oku, karar ver, davran" mantığının en sade örneğidir.
- Işık sensörü bir sayı verir; bu sayıyı bir eşikle karşılaştırıp LED'i sürer.
- Eşik ölçülerek kalibre edilir; tahminle değil, gerçek değerlerle seçilir.
- Titreme, ortalama alma veya iki eşik (histerezis) ile önlenir.
- Güvenli çalışmak için düşük gerilim, LED direnci ve yetişkin gözetimi şarttır.
Kontrol soruları
- Bu projede sensörün görevi nedir, LED'in görevi nedir?
- Eşiği doğrudan tahminle seçmek yerine neden ölçerek belirleriz?
- LED sınır ışıkta hızlı yanıp sönüyorsa buna ne denir ve iki çözüm nedir?
- LED oda aydınlıkken yanıp karanlıkken sönüyorsa hatayı nerede ararsın?
- Neden LED ile pin arasına bir direnç koyarız?
Cevaplar
- Sensör ortamın ne kadar aydınlık olduğunu ölçüp bir sayı verir; LED ise bu sayıya göre yanıp sönerek projenin çıktısını gösterir.
- Işık her odada farklı olduğu için tahmini bir eşik yanlış olabilir. Aydınlık ve karanlık değerleri ölçüp aralarından seçince eşik gerçek ortama uygun olur.
- Buna titreme (flicker) denir. Çözümler: birkaç okumanın ortalamasını almak veya yakma ve söndürme için iki farklı eşik (histerezis) kullanmak.
- Sorun büyük olasılıkla karşılaştırmanın yönündedir. "isik > esik" yerine "isik < esik" yazılmalıdır; ışık değeri büyükse ortam aydınlıktır.
- Direnç, LED'den geçen akımı sınırlar. Direnç olmadan fazla akım LED'e zarar verebilir.
Kaynak ve doğrulama notu
“Proje: Otomatik Gece Lambası” dersi için doğrulama odağı Projeyi tanıyalım ile Malzeme listesi arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Sensör değerleri modele, besleme gerilimine ve ortama göre değişebilir. Bu nedenle derslerdeki eşikler örnek kabul edilmeli; gerçek projede ölçüm tablosu oluşturularak kalibrasyon yapılmalıdır.
Sonraki ders
Proje: Mesafe Uyarı Sistemi