Renk Sensörleri

0
711

Renkleri Anlamak

Aslında renk yoktur, sadece hayal ürünüdür. Bir elektromanyetik dalga olan ışık farklı dalga boylarında olabilir. Bu dalga boyları göze girer ve gözün arkasındaki hücreler tarafından emilir. Bu ışık enerjisi birkaç yüz milyon özel nöronlar tarafından işlenerek kimyasal enerjiye dönüştürülür ve bir saniyeden daha az bir zaman diliminde şaşırtıcı bir şekilde beynimiz bize 450 nm. dalga boyunun mavi ve 520 nm. dalga boyunun yeşil olduğunu söyler.

Bilinç düzeyinde bu dalga boylarını gerçekten asla göremeyiz, sadece beynimizin işlemiş olduklarını görürüz. Bu süreç diğer dalga boylarının çoğu için tamamen geçersizdir, örneğin kızılötesi veya ultraviyole için de. Halbuki bu dalga boyları var; sadece göremiyoruz.

Buradaki tutarsız nokta ne? Işığı görünür bir şey olarak düşünmeyi bırak ve renkler olarak düşünmeye başla; görülebilen ve görülemeyen olarak. Yeşil bir renk ama kızılötesi de bir renk. Hemen yeşil rengin cep telefonunun yaydığı elektromanyetik dalgalardan farklı olmadığını fark et sonrasında bir robotun nasıl ‘görebildiğini’ anlamaya başlayacaksın. Mesela maviyi, yeşili ve sarıyı değil de kızılötesini görebildiğimiz bir dünya nasıl bir şey olurdu?

1

Cisimlerin Rengi

Cisimler gerçekten herhangi bir renge sahip değil, onlar bir hayal ürünü. Örneğin, kırmızı bir elmaya baktığında elma aslında kırmızı değil. Şöyle ki, elma üzerindeki moleküler yüzeyden yansıyan dalga boyları beynimizde kırmızı olarak algılanır ve diğer dalga boylarını moleküler bir şekilde soğurduğundan diğer renkleri göremeyiz.

Robotunun kırmızı bir elmayı görmesini isteseydin, bunu nasıl yapardın? Bahse girerim bunu tahmin edersin: “Kırmızı rengi görebilen bir sensöre ihtiyacım var.” Hayır! Aslında kırmızı ile diğer renkler arasındaki farkı söyleyebilen bir sensöre ihtiyacın var. Örneğin, farz et ki sensörün kırmızıyı göremiyor ama diğer bütün renkleri görebiliyor. Eğer bu sensör hiçbir şey göremeseydi, o halde kırmızıyı görüyor olurdu.

Renk Sensörü Prensibi

Foto direnç, üzerine düşen ışığın şiddetine göre direncini ters orantılı olarak ayarlayabilen bir optik sensördür. Foto direnç gibi, çoğu farklı rengi görebilen bir sensörün olduğunu düşün. Bu sensörü kırmızı ve yeşil elmayı algılamak için nasıl kullanırdın? Parlaklık karşılaştırmaklarını göz önünde bulundur.

Kırmızı elmalar, kırmızı ışığı yansıtır; yeşil ışığı soğurur. Yeşil elmalar, yeşil ışığı yansıtır; kırmızı ışığı soğurur.

Her iki elmanın üzerine kırmızı bir LEDin yaydığı ışık gibi kırmızı bir ışık saçarsan, kırmızı elma yeşil elmadan çok daha fazla ışığı yansıtacak. Dolayısıyla sensörüne en parlak görünen elma kırmızı elma olacak. Eğer her iki elmanın üzerine yeşil bir LEDin yaydığı ışık gibi yeşil bir ışık saçarsan, yeşil elma daha parlak görünecek.

Bazı şekerlemelerin olduğunu düşün ve mavi, yeşil, sarı, turuncu şekerlemeler arasındaki farkı söyleyen robotunu kaybettiğini farz et. Bu durumda bunu nasıl yapacaksın? Birer tane mavi, yeşil ve kırmızı LED al. Her seferinde biri olmak üzere her bir LEDi şekerlemelerin üzerine tut ve parlaklık değerlerini kaydet.

Belli ki, mavi LED yandığında mavi şekerleme en yüksek parlaklığa sahip olacak fakat diğer renklerde çok düşük parlaklıklar gösterecek. Yeşil ve sarı şekerleme de kendi renklerindeki ve diğer renkle rdeki ışığa karşı benzer bir durum gösterecek. Peki sarı ve turuncu şekerlemeler arasındaki farkı nasıl söyleyeceksin? Turuncu olan ışık spektrumunda kırmızıya daha yakın ve benzer şekilde kırmızı ışığı sarıdan daha fazla yansıtacak.

Ancak biraz daha karmaşık halde… Öncelikle, foto dirençler farklı renklere farklı düzeyde duyarlılık gösterirler. Karakteristik olarak foto dirençler 520nm. civarında en yüksek verimi elde ederler. Hedefe uzak mesafelere de duyarlı olabilmektedirler. Görüldüğü üzere, bu özellikteki sensör hedefi kolay bir şekilde algılayabilir ve dolayısıyla yaklaşık 30cm. uzakta en iyi okumaları yapar. Bu bilgi datasheetlerden sağlanabilir.

2

Cismi farklı bir konuma taşırsan veya cismin açısını değiştirirsen okunan değerler de değişir.

Işık ortamı (örneğin, pencereden içeriye güneş ışınının girmesi) gün boyunca değişebilir. Sensörlerini bu değişimden koruman gerekecek.

Farklı renklerde yanan LEDler farklı dalga boyları ve farklı parlaklıklarda yanacak ama sık sık aynı bazı dalga boylarında yayılım da yaparlar. (datasheetlerden elde edilen)

Aslında sensörlerini çalıştırmadan önce kalibre etmelisin. Yani cismi algılaması için sensörlerini kullan, değerleri kaydet ve bu verileri kullanarak bir grafik çiz. Bu sayede robotun cismi algılayabilir, kalibre değerleriyle yeni değerlerinin benzerliklerini karşılaştırabilirsin. (Sensörünün ideal özelliklerini datasheetlerden bulabilirsin):

sensors_color_LED_output

Benzerlik Eşleştirme ve Eşikleme

Örneğin, farz et ki robotun gri bir zemin üzerinde beyaz bir çizgiyi takip etmekle görevli olsun. Sensörün, analog bir değeri algılaması için bir mikroişlemci kullanırsınız. Kalibre durumundayken robotun gri zemin için 95 analog değerini, beyaz çizgi için 112 analog değerini ölçmüş olsun ve bu değerleri hafızasında saklasın. Şimdi robotun çizgi üzerinde olsun ve bir sensör 108 değerini okusun. Bunun anlamı nedir? Robotun çizgi üzerinde mi, değil mi?

Eşikleme metodunu kullanırken, kalibre olmuş sensörünün okuduğu iki değeri topla ve ikiye böl. Örneğin, (95+112)/2=eşik. Yani bu iki değerin ortalaması bize eşik değerini verecek. Robotun bu eşik değerinin yukarısındaki herhangi bir değerde beyaz çizgide; aşağısındaki herhangi bir değerde gri zeminde olacak.

Fakat üç veya dört renk için eşikleme değerini nasıl bulacağız? Eşikleme metodu yerine benzerlik eşleştirme diye adlandırılan bir metodu kullanarak aynı işi yapabiliriz. Bu sayede cismin her rengini kalibre değerine nasıl benzeteceğimizi belirleriz. Beyaz çizgi örneğimizde kalıp, benzerlik eşleştirmeyi kullanarak küçük bir hesap yapalım:

Eşitlik:

(yeni değer-kalibrasyon değeri)/kalibrasyon değeri*100=benzerlik

Örneğimizdeki değerleri kullanırsak:

Gri zemin: (108-95)/95*100=13,7% fark

Beyaz çizgi: (108-112)/112*100=3,6% fark

Karşılaştırma: beyaz çizgi<gri zemin

Dolayısıyla sensör beyaz çizgiyi görür.

Bir Renk Sensörü Programlama

Sonsuz sayıdaki renk tonlarından iki rengi algılamak için sadece bir LED ve bir sensöre ihtiyacın var. Bunun için bir foto direnç ve yeşil bir LED kullanabilirsin. Renk sensörünü programlamak için sadece dijital bir çıkış piniyle bir LEDi yak, foto direncin bunu algılaması için yaklaşık 50ms bekle (foto dirençler kızılötesi sensörlerden çok çok daha yavaştır), analog bir pinle bir değeri al, LEDi söndür.

Robotunda üç farklı renkte LED kullanacaksan programın basitçe böyle bir gösterime benziyor olacak:

ac yesil LED

bekle 50ms

kaydet sensor degeri Y

kapat yesil LED

 

ac kırmızı LED

bekle 50ms

kaydet sensor degeri K

kapat kırmızı LED

 

ac mavi LED

bekle 50ms

kaydet sensor degeri M

kapat mavi LED

Şimdi kalibrasyon öncesi değerlerinle, benzerlik eşleştirme metodunu kullanarak, robotun hedefi tanıyabilir.

(Arduino ile renk sensörü programı örneği:

http://www.instructables.com/id/Introduction-29/step4/Step-3-Write-Code)

Renk Tonlarıyla Menzil Algılama

Parlak yeşil ile koyu yeşil arasındaki fark ne? Buradaki fark, parlak yeşilde algılanabilir olan veya yayılan daha fazla elektromanyetik dalganın olmasıdır. Mesela, yeşil bir elman olduğunu düşün ve robotunla ölçüm al, sonra elmayı yaklaşık 2.5cm. geriye koy ve yine öl çüm al. Bu durumda ne olur? 2.5cm. gerideki elmadan daha az yeşil ışık sensörüne ulaşacak. Peki bundan nasıl yararlanabiliriz? Menzil algılama!

Önceki grafiğine bakarak bir cisme olan mesafeyi nasıl hesaplayabileceğini anlayabilir misin?

4

Maalesef renk menzil sensörün LEDin parlaklığına bağlı olarak en fazla birkaç inçten (1 inç=2.54cm.) daha fazla menzile sahip olamayacak.

Elbette, maksimum menzil için yeşil bir lazer pointer kullanabilirsin veya sensör menzilini arttırmak için TV uzaktan kumandaları için de kullanılan bir metottan bahsedeceğim. Normalde bir LEDe büyük miktarda güç uygularsan parlaklığı artar. Fakat bunun yerine çok büyük miktarda gücü çok kısa bir zaman periyodunda tekrarlayarak uygularsan ne olur? O halde, menzilde yaklaşık 5 kat artış için 5 kat daha parlaklığın olması gerektiğini söyleyebilirsin.

Güç(Watt)=Voltaj×Akım. LEDleri yakmadan önce çalışma gücünü datasheetlerden kontrol edebilirsin çünkü her zaman bir LEDi yakabilmek için bir direnci LEDle seri bağlamalısın ve tipik bir LED sadece birkaç yüz miliwatt ile yanabilir.

Güç=Enerji/Zaman. Bir LEDi sadece 50ms yakarsak ne olur? (50ms=0,05s) Bu durumda 1/0,05=20 veya bir saniyenin 1/20i 0,05ms’dir. Bunun anlamı LEDi 50ms yakacaksak yaklaşık 10-20 kat daha fazla akım çekecek dolayısıyla yaklaşık 10-20 kat daha parlak yanacak. Bunu, birkaç LEDin yanmasını test ederek belirleyebilirsin.

 

Kaynak: http://www.societyofrobots.com/sensors_color.shtml#similarity_matching

 

Henüz Yorum Yok

CEVAPLA