Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Malzeme Bilgisi => Konuyu başlatan: XX_CİHAN_XX - 07 Nisan 2013, 12:31:09

Başlık: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: XX_CİHAN_XX - 07 Nisan 2013, 12:31:09
Bu sensörü daha önce kullanan olduysa sensörün non-lineer çıkışını nasıl değerlendirdiklerini merak ediyorum?
(http://reipooom.files.wordpress.com/2011/07/tcs3200spectrals.jpg)
Sensörü çalıştırdım ve grafikte gözüken R-G-B ve Filtresiz çıkış değerlerini elde ettim.
Fakat bu değerlere bakarak hangi rengi ölçtüğümü nasıl anlayacağımı bulamadım.

Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Analyzer - 07 Nisan 2013, 14:30:57
Selam,

Sensörü kullanmadım ancak tablo ve enterpolasyon yapmanız gerektiğini düşünüyorum. Gerçi hazır yapılmış tablolar vardır ancak hiç bir kaynak bulunamaz ise, ufak bir program yazıp; sensörün önüne RGB led koyarsanız ve her rengi pwm ile tonlayıp tablo oluşturursanız sensörü başarılı şekilde okuyabileceğinizi düşünüyorum.

Analyzer
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: XX_CİHAN_XX - 07 Nisan 2013, 14:57:45
Selam hocam,

İlk aklıma gelen bahsettiğiniz tablo yöntemiydi nette de baya aradım fakat bulamadım. RGB ledi pwm ile değiştirip ölçüm alma fikri hoşuma gitti ama 16 milyon renk için 3x255 tane veri barındıran bir tablo yapmak gerçekten kolay değil.
Niyetim en azından birkaç milyon renge kadar ölçüm yapabilen bir şey yapmak. Her renk için 8 bit R,G,B değerini  elde edebilmek. Tablo dan başka bir şekilde mümkün olabilir mi sizce? Bu grafiği bir şekilde formulize etmek mümkün değil midir?
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: superconductor - 07 Nisan 2013, 21:42:30
Bu tür lineerizasyon işlerini curve expert pro ile yapıyorum.Grafiği çiziyorsunuz size polinomunu çıkarıyor.Polinomu direk kullanabilirsiniz.Yada bu polinoma istediğiniz kadar örnek vererek tabloda oluşturabilirsiniz.
Başlık: Re: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: mehmet - 07 Nisan 2013, 21:50:54
www.berik.net adresinde bir örnek var.
Ben denemedim. Renk sensör farklı.
Örnek olur umarım...
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Analyzer - 07 Nisan 2013, 22:21:10
Selam,

Grafiğe göre fonksiyonunu çıkaran program var mı bilmiyorum ancak böyle bir grafik için detaylı bir fonksiyon gerekebilir diye düşünüyorum. 8 bit size yeterli geliyorsa 3x255 oluşturmak aslında çok da uzun olmayabilir. Sensörü incelemeye üşendim :) Sensör her bir renk için tek tek çıkış mı veriyor? Eğer öyleyse pwm ile oluşturulan renk tablosu işe yarayabilir. Şöyle yapalım, sensörü ne için kullanmayı düşünüyorsunuz? Ona göre bir fikir yürütelim.

Analyzer
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: XX_CİHAN_XX - 07 Nisan 2013, 23:12:24
Alıntı yapılan: Analyzer - 07 Nisan 2013, 22:21:10
Selam,

Grafiğe göre fonksiyonunu çıkaran program var mı bilmiyorum ancak böyle bir grafik için detaylı bir fonksiyon gerekebilir diye düşünüyorum. 8 bit size yeterli geliyorsa 3x255 oluşturmak aslında çok da uzun olmayabilir. Sensörü incelemeye üşendim :) Sensör her bir renk için tek tek çıkış mı veriyor? Eğer öyleyse pwm ile oluşturulan renk tablosu işe yarayabilir. Şöyle yapalım, sensörü ne için kullanmayı düşünüyorsunuz? Ona göre bir fikir yürütelim.

Analyzer

Hocam 8 bit çözünürlük işimi görüyor. Sadece muhtelif yerlerde kullanmak üzere genel amaçlı renk ölçüm cihazı yapmak istiyorum.
Sensör kullanımı oldukça basit çok kısaca yapısını anlataym.
Sensörde Kırmızı, yeşil ve mavi olmak üzere üç tane filtreli ve bir tanede filtresiz (her renge duyarlı) olmak üzere 4 adet foto diyot bölgesi bulunmaktadır. 2 bit ile bu 4 fotodiyot bölgesi anahtarlanıyor(seçiliyor)
Seçilen foto diyot bölgesinin üzerine düşen ışığın rengine göre sensör frekans çıkışı veriyor.
Yani bu sensör %50 duty cycle ile renge göre değişen bir frekans veriyor. Ben bu frekansı ölçerek renk tespiti yapacağım.
Sensörden çıkan sinyalin periyodunu timer kullanarak çok rahat bir şekilde ölçüyorum.
Her renk için sensör üzerindeki 4 foto diyot bölgesinden 4 ayrı frekans ölçümü alıp değerlendiriyorum.
Örneğin; R:255, G:0, B:0 yani tam kırmızı renk için şu ölçümleri aldım sensörden:
Kırmızı filtreli Foto diyot bölgesinden çıkan frekans: 57,97KHz
Yeşil filtreli Foto diyot bölgesinden çıkan frekans: 20,35KHz
Mavi filtreli Foto diyot bölgesinden çıkan frekans: 27,30KHz
Filtresiz Foto diyot bölgesinden çıkan frekans: 100KHz

Sensörün datasheet inde aslında bir takım yüzdeler vermiş ancak sensörden çıkan frekans değerleri nedense aşağıdaki yüzdelerle örtüşmedi.
(http://c1304.hizliresim.com/18/7/lvvwk.jpg) (http://bit.ly/c25MCx)


mesaj birleştirme:: 07 Nisan 2013, 23:14:56

@mehmet hocam,
Bahsettiğiniz http://www.berik.net/0517tcs230.php (http://www.berik.net/0517tcs230.php) adresinde sensörü anlatmış. Benzer bir sensör ama faydalanamadım çünkü orada yöntemi anlatmamış. Kabaca frekansı 0-255 arası 8 bite oranlarız demiş geçmiş nasıl oranladığından bahsetmemiş yada kod vermemiş.

mesaj birleştirme:: 07 Nisan 2013, 23:28:17

Ek olarak sensör gelen ışığın yansıma şiddetine göre de frekansını az da olsa değiştiriyor.
Parlak a4 kağıdına aldığım renk çıktısı üzerinden ölçüm yapıyorum
ardından normal a4 kağıdına aldığım çıktı üzerinden ölçüm yapıyorum.
Parlak olan kağıttaki renklerden ölçtüğüm frekans değeri ötekinden biraz daha yüksek oluyor.
Yani 3x255 tane ölçüm alırken referansım ne olmalı nasıl bir tölerans girmeliyim bunlar da belirsiz oluyor.
Birazda o yüzden çekindim tablo çıkarmaktan.
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Analyzer - 08 Nisan 2013, 01:33:02
Selam,

Tablodan anladığım kadarıyla clear olan kanal burada anahtar rolünde. Sizin de fark ettiğiniz üzere ışık akısı değiştiğinde frekans da değişiyor. Yani ölçüm yapmadan önce clear kanalından bir frekans almalı; ardından her bir kanalın frekansı, bu değerle modifiye edilmeli ve tablodan okunmalı diye düşünüyorum. Ancak şu aklıma geliyor. Bu sensörün tekrar edebilme yeteneği nasıl? Yani sabit ışık akısında, sabit ışık renginde hep aynı frekans değerini mi veriyor? Eğer böyle ise ışık akısı clear kanaldan okunup, renk kanallarının frekansı yorumlanabilir. Zaten şu da var. Örneğin kırmızı led'i 1 cm uzaklıktan dik şekilde göstermek ile 10 cm uzaktan açılı gösterme arasında "ışık akısı" bakımından fark olur. Belli bir akı değerinin altına düşerse de, o durum sensör için "karanlık" olacaktır. O halde önce şuna bakmak lazım. Tüm ledleri kullanarak 8 bit pwm ile clear kanalın parlaklık tablosunu oluşturun. Ardından RGB led ile renkleri oluşturun. Aradaki koralasyon muhtemelen "katsayı" şeklinde olacağını düşünüyorum. Parlaklık ile renklerin frekansına ekleyip çıkarıp tablo oluşturabileceğinizi düşünüyorum.

Anayzer
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: XX_CİHAN_XX - 08 Nisan 2013, 02:48:24
Hocam 10 temel renk ile ilgili frekans ölçümleri aldım.
Bahsettiğiniz türden bir katsayı aradım ama tam olarak her renk için uygun bir katsayı mantığı oturtamadım renkler arasında.
Ölçümlerim şu şekilde;
(http://b1304.hizliresim.com/18/8/lw12h.jpg) (http://bit.ly/c25MCx)

Bu arada frekans kararlılığı var yani aynı ortamda aynı renk için hep aynı frekanslar çıkıyor.
Burada işin içinden çıkamadığım nokta şu;
Örneğin R:255 konumu için çıkan frekans değeri sadce R değerine bağlı değil diğer renklerin kombinasyonuna göre hep değişmiş.
Bir başka değişle aslında dediğiniz gibi Clear değerine göre hep değişmiş ama Clear/red katsayısı atıyorum RED in her 255 olduğu konumda aynı olması gerekirdi ama aynı değil diğer renklerde sanki birbirine belirli yüzdelerle etki ediyor.  :o

mesaj birleştirme:: 08 Nisan 2013, 02:51:01

Bu arada her ölçümde R,G ve B frekans değerlerinin toplamının 'yaklaşık eşit' Clear frekansına eşit olduğu görülmekte. Yani Clear gerçekten de ölçülen toplam ışık yoğunluğunu yansıtıyor.
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Erhan YILMAZ - 08 Nisan 2013, 12:55:39
Bende benzeri olan tcs230 ile bir uygulama yapmıştım. Sensör çevresini ışıktan iyi izole etmek gerekiyor. Deodorant şişesinin kapağıyla yalıtıp onlu el işi kağıtlarından alıp hepsini değerlerini tanıtmışım. O şekilde okutmayı sağlamıştım onun dışındaki renkler tanımsız dı. Birde aynı renkte olsa parlak yüzeylerde w değeri yani filtresiz değeri yüksek çıkıyordu yanlış hatırlamıyorsam. Ona da dikkat etmek lazım. Resimde lcd de görülen değerle 10ms de gelen puls değerleridir.

(http://img534.imageshack.us/img534/9230/20130217203409.jpg)
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: XX_CİHAN_XX - 08 Nisan 2013, 13:00:06
Güzel uygulama olmuş hocam bende şöyle bir modül kullanıyorum hazır
(http://cloud7.lbox.me/images/384x384/201209/tcs3200-color-sensor-module_vafegg1348481034833.jpg)
Etrafı kapalı olduğu için direk kullanıyorum ama siz deodorant kapağı kullanmışsınız ancak hiç bir ışık olmayan bir ortamda ölçüm albilmesine şaşırdım.
Birde ben tüm renkleri ölçmek istiyorum hepsini tanımlamak baya zor olacak gibi   :(
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Erhan YILMAZ - 08 Nisan 2013, 13:24:46
Yok hocam ışıksız olur mu.:) Bende benzer bir modül kullanmıştım üzerinde 4 adet led vardı. Fakat ortam ışığından çok etkilendiği için kapağın içine monte ettim sensörü bu sayede ortamın ışık seviyesi  ve nesne ile sensör arasında ki mesafe sabit kalıyor. Açıkta iken değerler çok değişken oluyordu. Öncelikle sağlıklı bir ölçüm düzeneği kurmak lazım. Sonrasında tabloma, enterpolasyon v.s. yöntemler uygulanabilir.
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: ens_azl - 26 Nisan 2013, 02:36:16
hocam kolay gelsin bu devrenin kodunu alma imkanımız var mı acaba
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: serter - 12 Mayıs 2015, 20:53:59
umarım görürsün mesajı :)
bende bu sensörle uğraşmaya karar verdimde renk aralıkları konusunda sıkıntı çekiyorum nasıl bulabilirim renk aralıklarını
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: universitelim54 - 18 Mart 2016, 23:28:25
Hocam renk sensörün çıkısındakı frekansı nasıl hesap ettınız.Bununla ılgılı kodu paylasırmısınız.frekans metre ıcın bu kodları arastırıyorum


Saygılarımla
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: kimlenbu - 19 Mart 2016, 09:44:20
Okuldayken rgb led kullanarak fotodirenç + adc ile yansıyan ışığa göre renk bulan bir uygulama yapmıştık, bu sensörde nasıldır bilmem ama örneğin kırmızı bir a4 veya kırmızı bir cips jelatini çok farklı sonuçlar veriyor.

Yansıma katsayısı göz önüne alınarak her renk için normalizasyon gerekli bence yüksek çözünürlük için.
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Mucit23 - 30 Kasım 2017, 20:43:59
Selamlar

Bu sensörün çıkışını nasıl değerlendiriyorsunuz? Ana renkler dışında birkaç farklı rengi tespit etmeye çalışıyorum. STM32F4 de timer input capture moduna ayarladım

Her Renk için bir değer okuyorum ama nasıl yorumlanacak? Bunun kolay bir yolu varmı?
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: apsis - 01 Aralık 2017, 01:30:25
Ben tcs34725 ile çokça deney yaptım hatta bir kart basıp okulda konveyor üzerinde kutuları ayrıştırdım. Frekans modunda çıktı verenler için sanırım 0-255 , 0-1024 gibi aralığa skala etmek gerekiyor. l2 ve l3 den zaten okunacak kanalar seçiliyor. clear kanalından aldığın değer filitre olarak kullanılır. Bu kanal ortamın ışık şiddetini algılamanı sağlar. Dökümanlarda algoritmalar var. İstersen bende de uygulama kodları var(tcs34725 için ama okunan değerleri ölçekleyebilisen aynen kullanılabilir).
http://ams.com/eng/Products/Light-Sensors/Color-Sensors/TCS3200
buradaki dökümanlardan çok yararlandım belki işinizi görür.
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: Mucit23 - 01 Aralık 2017, 17:34:48
Teşekkürler.
Ölçeklemeyi nasıl yapmam gerekiyor onu anlamadım. Sizin kodu incelemem mümkün olursa bir fikir edinebilirim. Birde ortam ışığı yani clear i Nasıl degerlendirecegim?
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: apsis - 02 Aralık 2017, 20:30:14
Main kısmını paylaşıyorum asıl iş burada
int main()
{
        unsigned int id,clear,red,green,blue,gammatable[256];
unsigned long int sum;

float r,g,b;
int i=0;
  for (i=0; i<256; i++) {
    float x = i;
    x /= 255;
    x = pow(x, 2.5);
    x *= 255;
    gammatable[i] = 255 - x;     
  }
i2c1_init();
init_tim1();
id=TCS_test();
 

while(1)
{

TCS_interrupt(0);
Delay(60);
ColRawData(&red, &green, &blue, &clear);
TCS_interrupt(1);

r=red;    r/=clear; 
g=green;  g/=clear;
b=blue ;  b/=clear;
r*=256; g*=256; b*=256;
red=r; green=g; blue=b;

TIM1->CCR1 = gammatable[color=red]*39;
TIM1->CCR2 = gammatable[color=green]*39;
TIM1->CCR3 = gammatable[color=blue]*39;
}


Kodların geri kalan kısmı I2C ve timerlardan oluşuyor. İstersen özelden atarım. Burada çok yer kaplamasın diye koymadım.

Clear aslında referans noktandır. Okunan değer buna bölünür 256 ile çarpılır. Daha sonra oluşturulan gamma tablosundan renk içi aradığınız sayısal değer gözükür. Zaten genelde renkler 0-255 arası değerlerde gösterir (r-g-b için ayrı ayrı). Buradaki gamma tablosuda 0-255 arası değerleri verir.
Ben okuduğum değeri rgb led ile göstermiştim.

Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: XX_CİHAN_XX - 04 Aralık 2017, 08:57:26
@apsis, elde ettiğiniz bu R,G,B değerlerinin doğruluğunu hiç kontrol edebildiniz mi? Örneğin R,G,B değerleri net bilinen renkleri ölçüp aynı değerleri elde edebildiniz mi?
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: apsis - 04 Aralık 2017, 13:00:39
Evet kontrol ettim. Yüksek bir yaklaşıklıkla doğru veriyor. Hatta kazancıyla oynayarak mesafeye göre bunu değiştirebiliyorsunuz.(tcs34725 için) ben yanlış hatırlamıyorsam 5 cm kadar ölçmüştüm. Ama birazda ola sapma yapıyordu. 3cm kadar iyi sonuç veriyor.
Başlık: Ynt: TCS3200 Renk Ölçüm Sensörü Kullanımı Hakkında
Gönderen: serter - 06 Aralık 2017, 12:24:27
@universitelim54 Ben bu proje ile 2.5 sene uğraşmıştım. O günkü yazmış olduğum yazılımı yükleyeyim. Sen lazım olanları alırsın oradan.
//.......buzzer.............
int Buzzer = 12;

int CountTone =1;
int CountTone2 =2;
int CountTone3 =3;
int tones1[] = {10};
int tones2[] = {100};
int tones3[] = {1000};
int tones4[] = {10, 100};
int tones5[] = {100, 1000};
int tones6[] = {10 , 1000};
int tones7[] = {10, 100 ,1000};
int tones8[] = {50,500,5000 };
int tones9[] = {100,1000,10000};
//...............................
int S2=7;
int S3=8;
int outpin=4;

int kirmizirenk;
int yesilrenk;
int mavirenk;
int kirmizifark;
int yesilfark;

unsigned int pulseWidth;

void setup ()
{
   
  Serial.begin(9600);
 
  pinMode (S2,OUTPUT);
  pinMode (S3,OUTPUT);
  pinMode (outpin,INPUT);
 
}

void loop()

{
  kirmizifark = kirmizirenk-mavirenk;
  yesilfark = yesilrenk - mavirenk;
 
//.......kırmızı ıcın.................
   digitalWrite (S2,LOW);
   digitalWrite (S3,LOW);
   
   pulseWidth = pulseIn(outpin,LOW);
   kirmizirenk = pulseWidth/400. -1;
   kirmizirenk = (255 - kirmizirenk);
   
//.......yesil için.................
    digitalWrite (S2,HIGH);
   digitalWrite (S3,HIGH);
   
   pulseWidth = pulseIn(outpin,LOW);
   yesilrenk = pulseWidth/400. -1;
   yesilrenk = (255 - yesilrenk);
   
//.......mavi için.................

        digitalWrite (S2,LOW);
   digitalWrite (S3,HIGH);
   
   pulseWidth = pulseIn(outpin,LOW);
   mavirenk = pulseWidth/400. -1;
   mavirenk = (255 - mavirenk);
   
   Serial.print(kirmizirenk);
   Serial.print(" , ");
   Serial.print(yesilrenk);
   Serial.print(" , ");
   Serial.println(mavirenk);
   Serial.println("");
   
   
   if ( kirmizirenk>mavirenk && mavirenk>yesilrenk && kirmizifark>2 )
   {
   
   Serial.println("kirmizi");
   Serial.println("");
   for (int i = 0; i < CountTone; i++)
{
tone(Buzzer, tones1[i]);
delay(600);
}
noTone(Buzzer);
   
   }
   else  if ( kirmizirenk>yesilrenk && mavirenk<yesilrenk && yesilfark <= 2)
   {
   
   Serial.println("turuncu");
   Serial.println("");
    for (int i = 0; i < CountTone; i++)
{
tone(Buzzer, tones2[i]);
delay(600);
}
noTone(Buzzer);
   
   }
   
    else  if ( yesilrenk<=kirmizirenk && mavirenk<kirmizirenk && yesilfark >= 2)
   {
   
   Serial.println("sari");
   Serial.println("");
         for (int i = 0; i < CountTone; i++)
{
tone(Buzzer, tones3[i]);
delay(600);
}
noTone(Buzzer);

   
   }
   
   else  if ( mavirenk<=kirmizirenk && yesilrenk<kirmizirenk && kirmizirenk>245 )
   {
   
   Serial.println("pembe");
   Serial.println("");
      for (int i = 0; i < CountTone2; i++)
{
tone(Buzzer, tones6[i]);
delay(600);
}
noTone(Buzzer);

   
   }
   
   else  if ( mavirenk>yesilrenk && yesilrenk>kirmizirenk )
   {
   
   Serial.println("mavi");
   Serial.println("");
      for (int i = 0; i < CountTone2; i++)
{
tone(Buzzer, tones5[i]);
delay(600);
}
noTone(Buzzer);
   
   }
   
   else  if ( mavirenk>=yesilrenk && yesilrenk<kirmizirenk && kirmizirenk<245 && kirmizirenk>230)
   {
   
   Serial.println("kahverengi");
   Serial.println("");
      for (int i = 0; i < CountTone2; i++)
{
tone(Buzzer, tones4[i]);
delay(600);
}
noTone(Buzzer);
   
   }
   
   else  if ( mavirenk<yesilrenk && mavirenk<=kirmizirenk )
   {
   
   Serial.println("yesil");
   Serial.println("");
      for (int i = 0; i < CountTone3; i++)
{
tone(Buzzer, tones7[i]);
delay(600);
}
noTone(Buzzer);
   
   }
   
   else  if ( mavirenk==yesilrenk && mavirenk==kirmizirenk )
   {
   
   Serial.println("beyaz");
   Serial.println("");
      for (int i = 0; i < CountTone3; i++)
{
tone(Buzzer, tones8[i]);
delay(600);
}
noTone(Buzzer);   
   }
   
   else  if ( kirmizirenk>yesilrenk && mavirenk>kirmizirenk && kirmizirenk<230 )
   {   
   Serial.println("siyah");
   Serial.println("");
      for (int i = 0; i < CountTone3; i++)
{
tone(Buzzer, tones9[i]);
delay(600);
}
noTone(Buzzer);
   
   }     
   delay (1000);
}