Bir cümlelik özet
Işık sensörü, üzerine düşen ışığın miktarını ölçüp bunu bir elektrik değerine çevirir; biz de bu değeri okuyarak "karanlık mı, aydınlık mı?" sorusuna karar verebiliriz.
Neden önemli?
Etrafımızdaki birçok cihaz aslında ışığı "hisseder". Sokak lambaları hava kararınca kendiliğinden yanar, sabah aydınlanınca söner. Telefonunun ekranı güneşin altında parlaklaşır, karanlık odada kısılır. Bahçe fıskiyeleri, otomatik kapılar ve oyuncak robotlar da çevredeki ışığa göre davranış değiştirir. Bir çizgi izleyen robot bile, zeminin açık mı koyu mu olduğunu ışıkla anlar.
Bir önceki derste sinyallerin dijital (yalnız açık/kapalı) veya analog (yavaşça değişen) olabildiğini gördük. Işık sensörü tam da bu yüzden güzel bir örnektir: ışık birden değil, kademeli olarak azalır ya da artar. Bu yüzden onu çoğunlukla analog bir değer olarak okuruz. Bu dersi bitirdiğinde, bir sensörden gelen değeri okumayı ve bir eşik (sınır) belirleyip karar vermeyi öğrenmiş olacaksın. Bu, robotik projelerinin çevreyi "algılamasının" ilk adımıdır.
Işık sensörü nedir ve nasıl çalışır?
LDR: ışığa göre değişen direnç
En yaygın ışık sensörü LDR'dir. Açılımı "Light Dependent Resistor", yani "ışığa bağlı direnç"tir. Bazen "foto direnç" de denir. Küçük, yassı, üzerinde kıvrımlı bir desen olan bir parçadır.
LDR'nin görevi tek bir fikre dayanır:
- Üzerine çok ışık düşerse direnci azalır.
- Üzerine az ışık düşerse (karanlıkta) direnci artar.
Direnç, elektriğin geçişine karşı gösterilen zorluk gibidir. Direnç yüksekken akım zor geçer, düşükken kolay geçer. LDR bu direncini ışığa göre değiştirdiği için, ona bağlı devredeki elektrik değeri de değişir. İşte kartımız bu değişimi okur.
Değeri sayıya çevirmek
Kartlar (micro:bit, Arduino gibi) direnci doğrudan "ohm" olarak okumaz. Bunun yerine LDR'yi bir devreye bağlarız ve karttaki analog giriş ucundan bir sayı okuruz. Bu sayı genellikle bir aralıktadır:
- Arduino'da genellikle 0–1023 arası.
- micro:bit'te genellikle 0–1023 arası (ışık için hazır blok kullanırsan 0–255 arası).
Önemli olan kesin sayı değil, mantıktır: aydınlıkta bir uç değer, karanlıkta başka bir uç değer okuruz. Değer büyüyüp küçülürken, ışığın da arttığını ya da azaldığını anlarız.
Sensörü okumak: analog değer
Günlük örnek: gece lambası
Bir gece lambası düşün. Odada ışık varken sönük durur, oda karardığında yanar. İçinde küçük bir ışık sensörü vardır. Sürekli çevreyi ölçer ve "yeterince karanlık mı?" diye kontrol eder.
Mantığı sözde kod (pseudocode) olarak şöyle yazabiliriz:
Başla
Sürekli tekrarla:
isik_degeri = ışık sensörünü oku
Eğer isik_degeri < esik ise
LED'i yak
Değilse
LED'i söndür
Burada esik bizim belirlediğimiz bir sınır sayısıdır. Ondan küçük değerler "karanlık", büyük değerler "aydınlık" anlamına gelir.
Eşik değeri nasıl seçilir?
Eşik hazır bir sayı değildir; onu deneyerek buluruz. Yöntem basittir:
- Önce sensörü aydınlık odada oku, değeri not et.
- Sonra sensörün üstünü elinle kapat, karanlıktaki değeri not et.
- İki değerin ortasına yakın bir sayı seç. İşte senin eşiğin bu olur.
Örneğin aydınlıkta 800, elle kapatınca 200 okuyorsan, eşiği 450–500 civarı seçebilirsin.
micro:bit tarzı okuma
micro:bit'in kendi ekranında ışık ölçen bir özelliği vardır (LED'lerini sensör gibi kullanır). Blok yerine metin koduyla mantığı şöyle görebiliriz:
from microbit import *
while True:
isik = display.read_light_level() # 0-255 arası bir değer
if isik < 50: # 50, seçtiğimiz eşik
display.show(Image.HEART) # karanlıkta kalbi göster
else:
display.clear() # aydınlıkta ekranı temizle
sleep(200)
Arduino tarzı okuma
Arduino'da LDR'yi bir analog pine bağlar ve analogRead ile okuruz:
esik = 500
Sürekli tekrarla:
isik_degeri = A0 pinini oku // 0-1023 arası
Eğer isik_degeri < esik ise
13 numaralı LED'i yak // karanlık: ışığı aç
Değilse
13 numaralı LED'i söndür // aydınlık: ışığı kapat
200 milisaniye bekle
Dikkat et: TR ve Arduino sürümünde de mantık aynı. Sadece sayı aralığı ve pin adları değişiyor. Öğrenmen gereken şey mantık: oku, karşılaştır, karar ver.
Mini uygulama
Kağıt üstünde çalışan bir "akıllı sokak lambası" tasarla. Malzeme gerektirmez; sadece mantığı yaz.
- Sensörünün aydınlıkta 900, karanlıkta 150 okuduğunu varsay.
- Bir eşik değeri seç ve neden onu seçtiğini bir cümleyle yaz.
- Aşağıdaki boşlukları doldurarak sözde kodu tamamla:
esik = ____
Sürekli tekrarla:
deger = ışık sensörünü oku
Eğer deger < esik ise
lambayı ____
Değilse
lambayı ____
- Şimdi kuralı ters çevir: "Aydınlıkta yanan, karanlıkta sönen" bir uyarı ışığı için kodu nasıl değiştirirsin? (İpucu:
<işaretini düşün.)
Bir yetişkinle birlikte gerçek bir LDR de deneyebilirsin. Sensörün değerini ekrana yazdır, elini üstünde gezdir ve sayının nasıl değiştiğini izle.
Uygulama laboratuvarı: Işık Sensörü
Işık Sensörü 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 Işık sensörü nedir ve nasıl çalışır? ile Değeri sayıya çevirmek arasındaki ilişkiyi kullanarak ölçüm tablosu, kalibrasyon kararı ve güvenli çıktı davranışı 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: sıcaklık değişimini ölçüp eşik aşımını bildiren düzenek. Dersin ana hedefi “Işık sensörünü okuyup bir eşikle karanlıkta LED yakmayı öğ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
- 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ı?
“Işık Sensörü” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın sıcaklık değişimini ölçüp eşik aşımını bildiren düzenek senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Işık sensörü nedir ve nasıl çalışır? ve Değeri sayıya çevirmek ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
Ters mantık kurmak
LDR karanlıkta büyük değil, çoğu devrede küçük değer verir (çünkü direnç artınca bağlı okunan gerilim düşebilir). Kod çalışmıyorsa önce aydınlık ve karanlık değerlerini gerçekten ölçüp not al, sonra < mı > mı gerektiğine karar ver.
Eşiği rastgele seçmek
"500 iyidir herhalde" demek yerine, kendi odanda ölçüm yap. Işık koşulları her ortamda farklıdır; senin eşiğin senin odana özeldir.
Sensörün üstünü kapatmayı unutmak
Test ederken parmağınla ışığı engellemezsen değerin değişmediğini görürsün. Değişimi görmek için mutlaka aydınlık ve karanlık iki durumu da dene.
Bekleme koymamak
Değeri saniyede binlerce kez okuyup ekrana yazarsan sayılar okunmaz akar. Aralara küçük bir bekleme (örneğin 200 ms) koymak okumayı rahatlatır.
Güvenlik notu
- Bu derste yalnız düşük gerilimli ve güvenli kaynaklar kullanılır: pil, USB, micro:bit ya da Arduino. Şebeke (priz) elektriği kesinlikle kullanılmaz.
- LDR'yi LED ile birlikte kullanırken LED'e uygun bir direnç bağlamayı unutma; direnç olmadan LED zarar görebilir.
- Bağlantıları yaparken kartın gücünü kapat. Devreyi bitirince gücü ver.
- Elektronik bağlantıları ve ilk denemeyi bir yetişkinle birlikte yap.
- Bir parça ısınır, garip bir koku gelir ya da bir şey yanlış görünürse gücü hemen kes ve yardım iste.
Ders özeti
- Işık sensörü (en yaygın olarak LDR), üzerine düşen ışık miktarını ölçer.
- LDR'nin direnci ışıkla değişir: aydınlıkta azalır, karanlıkta artar.
- Bu değişimi kart üzerinden bir analog sayı olarak okuruz.
- Bir eşik belirleyip "karanlık mı?" kararını veririz; eşiği ölçerek buluruz.
- Mantık her kartta aynıdır: oku, karşılaştır, karar ver — yalnız sayı aralığı ve pin adı değişir.
Kontrol soruları
- LDR'nin açılımı nedir ve ne ölçer?
- Karanlıkta LDR'nin direnci artar mı, azalır mı?
- Işık sensörünün değerini neden dijital değil analog olarak okuruz?
- "Eşik" nedir ve onu nasıl belirleriz?
- Aydınlıkta yanan, karanlıkta sönen bir ışık için sözde koddaki karşılaştırmayı nasıl değiştirirsin?
Cevaplar
- LDR, "Light Dependent Resistor" yani "ışığa bağlı direnç"tir. Üzerine düşen ışık miktarını ölçer (direncini ışığa göre değiştirerek).
- Karanlıkta direnci artar; aydınlıkta azalır.
- Çünkü ışık birden değil, kademeli olarak değişir. Analog okuma, "biraz karanlık" ile "çok karanlık" arasındaki farkı bir sayı aralığıyla gösterir.
- Eşik, "karanlık" ile "aydınlık" arasında seçtiğimiz sınır sayısıdır. Aydınlık ve karanlık değerlerini ölçüp ikisinin ortasına yakın bir sayı seçerek belirleriz.
- Karşılaştırmayı ters çeviririz:
deger < esikyerinedeger > esikyazarız. Böylece ışık artınca lamba yanar.
Kaynak ve doğrulama notu
“Işık Sensörü” dersi için doğrulama odağı Işık sensörü nedir ve nasıl çalışır? ile Değeri sayıya çevirmek 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
Sıcaklık Sensörü