Bu projede Raspberry Pi ile TCS3200 Renk Sensör Modülünü kullanarak Renkleri Algılayacağız. Burada, TCS3200 sensörünü kullanarak renkleri tespit etmek için Raspberry Pi için Python kodunu kullandık. Bir RGB LED kullandığımız renk algılamayı göstermek için, bu RGB LED, nesnenin sensörün yanında sunulduğu aynı renkte parlayacaktır. Şu anda Raspberry Pi'yi yalnızca Kırmızı, Yeşil ve mavi renkleri algılayacak şekilde programladık. Ancak, her renk bu RGB bileşenlerinden oluştuğundan, RGB değerlerini aldıktan sonra herhangi bir rengi algılayacak şekilde programlayabilirsiniz. Sonunda demo videosunu kontrol edin.
Arduino ile aynı TCS3200'ü kullanarak renklerin RGB değerlerini daha önce okuduk ve görüntüledik. Daha ileri gitmeden önce, TCS3200 Renk Sensörü hakkında bilgi verelim.
TCS3200 Renk Sensörü:
TCS3200, doğru programlama ile herhangi bir sayıda rengi algılayabilen bir Renk Sensörüdür. TCS3200, RGB (Kırmızı Yeşil Mavi) dizileri içerir. Şekilde mikroskobik seviyede gösterildiği gibi, sensör üzerinde gözün içindeki kare kutular görülebilir. Bu kare kutular, RGB matris dizileridir. Bu kutuların her biri Kırmızı, Yeşil ve Mavi ışık yoğunluğunu algılamak için üç sensör içerir.
Yani aynı katmanda Kırmızı, Mavi ve Yeşil dizilerimiz var. Bu nedenle, rengi tespit ederken üç elementi aynı anda tespit edemiyoruz. Bu sensör dizilerinin her biri, rengi tespit etmek için birbiri ardına ayrı ayrı seçilecektir. Modül, belirli rengi algılayacak ve diğerlerini bırakacak şekilde programlanabilir. Bu seçim amacı için daha sonra açıklanacak olan pimleri içerir. Filtre modu olmayan dördüncü mod vardır; filtre modu olmadığında sensör beyaz ışığı algılar.
Bu sensörü Raspberry Pi'ye bağlayacağız ve Raspberry Pi'yi renge bağlı olarak uygun yanıt verecek şekilde programlayacağız.
Gerekli Bileşenler:
Burada Raspbian Jessie OS ile Raspberry Pi 2 Model B kullanıyoruz. Tüm temel Donanım ve Yazılım gereksinimleri daha önce tartışılmıştır, ihtiyaç duyduğumuz dışında, Raspberry Pi Tanıtımı ve Raspberry PI LED Yanıp Sönüyor bölümlerine bakabilirsiniz:
- Önceden yüklenmiş işletim sistemine sahip Raspberry Pi
- TCS3200 renkli sensör
- CD4040 sayaç çipi
- RGB LED
- 1KΩ direnç (3 adet)
- 1000uF kapasitör
Devre Şeması ve Bağlantılar:
Renk Sensörünün Raspberry Pi ile bağlanması için yapılan bağlantılar aşağıdaki tabloda verilmiştir:
Sensör Pimleri |
Ahududu Pi Pimleri |
Vcc |
+ 3.3v |
GND |
zemin |
S0 |
+ 3.3v |
S1 |
+ 3.3v |
S2 |
GPIO6 / PI |
S3 |
GPIO5 / PI |
OE |
GPIO22 / PI |
DIŞARI |
CLK / CD4040 |
Raspberry Pi ile CD4040 sayacının bağlantıları aşağıdaki tabloda verilmiştir:
CD4040 Pinleri |
Ahududu Pi Pimleri |
Vcc16 |
+ 3.3v |
Gnd8 |
gnd |
Clk10 |
Sensör dışı |
Sıfırla11 |
GPIO26 / PI |
Q0 |
GPIO21 / PI |
Q1 |
GPIO20 / PI |
S2 |
GPIO16 / PI |
S3 |
PI için GPIO12 |
Q4 |
GPIO25 / PI |
S5 |
GPIO24 / PI |
S6 |
GPIO23 / PI |
Q7 |
PI GPIO18 |
S8 |
Bağlantı yok |
S9 |
Bağlantı yok |
S10 |
Bağlantı yok |
S11 |
Bağlantı yok |
Raspberry Pi ile Arayüz Renk Sensörünün tam devre şeması aşağıdadır:
Çalışma Açıklaması:
Her renk üç renkten oluşur: Kırmızı, Yeşil ve Mavi (RGB). Ve eğer herhangi bir renkteki RGB yoğunluğunu bilirsek, o rengi tespit edebiliriz. Bu RGB değerlerini daha önce Arduino kullanarak okuduk.
TCS3200 Renk Sensörünü kullanarak Kırmızı, Yeşil ve Mavi ışığı aynı anda tespit edemiyoruz, bu yüzden onları tek tek kontrol etmemiz gerekiyor. Renk Sensörü tarafından algılanması gereken renk, iki pin S2 ve S3 tarafından seçilir. Bu iki pim ile sensöre hangi renk ışık yoğunluğunun ölçüleceğini söyleyebiliriz.
Diyelim ki Kırmızı renk yoğunluğunu hissetmemiz gerekiyorsa, her iki pini de DÜŞÜK olarak ayarlamamız gerekiyor. KIRMIZI ışığı ölçtükten sonra, mavi ışığı ölçmek için S2 LOW ve S3 HIGH ayarlarını yapacağız. Sırayla S2 ve S3 mantıklarını değiştirerek, aşağıdaki tabloya göre Kırmızı, Mavi ve Yeşil ışık yoğunluklarını ölçebiliriz:
S2 |
S3 |
Fotodiyot Tipi |
Düşük |
Düşük |
Kırmızı |
Düşük |
Yüksek |
Mavi |
Yüksek |
Düşük |
Filtre yok (beyaz) |
Yüksek |
Yüksek |
Yeşil |
Sensör, RGB bileşenlerinin yoğunluğunu algıladığında, değer aşağıdaki şekilde gösterildiği gibi modül içindeki kontrol sistemine gönderilir. Dizi tarafından ölçülen ışık yoğunluğu, modülün içindeki Akımdan Frekansa dönüştürücüye gönderilir. Frekans dönüştürücü, frekansı dizi tarafından gönderilen değerle doğru orantılı olan bir kare dalga üretir. ARRAY'den daha yüksek bir değerle, Akımdan Frekansa dönüştürücü, daha yüksek frekansın kare dalgasını üretir.
Renk sensörü modülünün çıkış sinyali frekansı dört seviyeye ayarlanabilir. Bu seviyeler, aşağıdaki şekilde gösterildiği gibi sensör modülünün S0 ve S1'i kullanılarak seçilir.
S0 |
S1 |
Çıkış Frekansı Ölçeklendirmesi (f0) |
L |
L |
Gücü kesmek |
L |
H |
% 2 |
H |
L |
% 20 |
H |
H |
100% |
Bu özellik, bu modülü sisteme düşük saat hızıyla bağladığımızda işe yarar. Raspberry Pi ile% 100 seçeceğiz. Burada, gölgenin altında, Renk Sensör Modülünün her bir renk için maksimum frekansı 2500Hz (% 100 ölçekleme) olan bir kare dalga çıkışı oluşturduğunu unutmayın.
Modül, frekansı yüzeyine düşen ışık şiddeti ile doğru orantılı olan çıkış kare dalgasını sağlasa da bu modül sayesinde her rengin ışık yoğunluğunu hesaplamanın kolay bir yolu yoktur. Ancak her renk için ışık yoğunluğunun artıp azalmadığını söyleyebiliriz. Ayrıca modül yüzeyinde önceden ayarlanmış nesnenin ışık rengini veya rengini algılamak için Kırmızı, Yeşil, Mavi değerlerini hesaplayabilir ve karşılaştırabiliriz. Yani bu, Işık Şiddeti Sensörü modülünden ziyade daha çok Renk Sensörü modülüdür.
Şimdi bu Kare dalga çıktısını Raspberry Pi'ye besleyeceğiz ancak doğrudan PI'ye veremiyoruz çünkü Raspberry Pi'nin dahili sayaçları yok. Bu yüzden önce bu çıkışı CD4040 İkili Sayıcıya vereceğiz ve Raspberry Pi'yi 100msn periyodik aralıklarla sayaçtan frekans değerini alacak şekilde programlayacağız.
Dolayısıyla PI, her KIRMIZI, YEŞİL ve MAVİ renk için 2500/10 = 250 max değerini okur. Raspberry Pi'yi ışık yoğunluklarını temsil eden bu değerleri aşağıda gösterildiği gibi ekrana yazdıracak şekilde programladık. Değerler, sıfıra ulaşmak için varsayılan değerlerden çıkarılır. Bu, renge karar verirken kullanışlıdır.
Burada varsayılan değerler, sensörün önüne herhangi bir nesne koymadan alınan RGB değerleridir. Çevresindeki ışık koşullarına bağlıdır ve bu değerler çevreye göre farklılık gösterebilir. Temel olarak sensörü standart okumalar için kalibre ediyoruz. Bu yüzden önce herhangi bir nesne koymadan programı çalıştırın ve okumaları not edin. Bu değerler sıfıra yakın olmayacaktır çünkü sensörü nereye koyarsanız koyun her zaman bir miktar ışık düşecektir. Ardından, test edilecek bir nesne yerleştirdikten sonra alacağımız okumalarla bu okumaları çıkarın. Bu şekilde standart okumalar elde edebiliriz.
Raspberry Pi ayrıca sensörün yanına yerleştirilen nesnenin rengini belirlemek için R, G ve B değerlerini karşılaştırmak üzere programlanmıştır. Bu sonuç, Raspberry Pi'ye bağlı parlak RGB LED ile gösterilir.
Yani özetle,
1. Modül, yüzeye yakın yerleştirilen nesnenin yansıttığı ışığı algılar.
2. Renk Sensörü Modülü, Raspberry Pi tarafından S2 ve S3 Pinleri aracılığıyla sırayla seçilen R veya G veya B için çıkış dalgası sağlar.
3. CD4040 Sayacı dalgayı alır ve frekans değerini ölçer.
4. PI, her 100ms'de her renk için sayaçtan frekans değerini alır. Değeri her aldıktan sonra PI, bir sonraki değeri tespit etmek için sayacı sıfırlar.
5. Raspberry Pi bu değerleri ekrana yazdırır ve nesnenin rengini algılamak için bu değerleri karşılaştırır ve son olarak nesnenin rengine bağlı olarak RGB LED'i uygun renkte yakar.
Python Kodumuzda yukarıdaki sırayı takip ettik. Programın tamamı aşağıda bir Tanıtım Videosu ile verilmiştir.
Burada Raspberry Pi yalnızca üç rengi algılayacak şekilde programlanmıştır, beğeninize göre daha fazla rengi algılamak için R, G ve B değerlerini buna göre eşleştirebilirsiniz.