Arduino ve Tcs34725 ile sesli renk okuma

bbs2006

Üye
Katılım
13 Kas 2006
Mesajlar
244
Puanları
1
Yaş
47
Merhaba
arduino ve dfplayer mini mp3 modülü ile renk okuma yapıyorum. tcs34725 renk okuma yaptığım zaman bir çok renk kodları çakışma yapıyor. bazı renk kodlarını halletim ancak diğer renk kodları çakışıyor. bu konuda yardımcı olursanız sevinirim.
Kod:
/* Yazan: Barış Bilir SOYLU
   2017-2018 Eğitim Öğretim Yılı
   Tübitak 4006 Projesi
*/
#include <Wire.h>
#include <DFRobot_TCS34725.h>
#include <DFPlayer_Mini_Mp3.h>
#include <SoftwareSerial.h>
DFRobot_TCS34725 tcs = DFRobot_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); // Renk sensörü tanımlama
//Adafruit_TCS34725 tcs =Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); // Renk sensörü tanımlama
//SoftwareSerial mySoftwareSerial(10,11);     //RX ve TX
uint16_t temizle,kirmizi,yesil,mavi;         // Renk değerleri için tanımlamalar
float ortalama,r,g,b;                        // renk hesaplamaları için tanımlamalar


void setup () {
 //mySoftwareSerial.begin(9600);
 Serial.begin (9600);
 mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
 mp3_set_volume (10);
 if(tcs.begin()){         // Renk sensörüne bağlandıysa veri almaya başla.
 Serial.println("Sensör Algılandı");
 }
 else{Serial.println("Sensör Alğılanamadı");
 while(true);}  //Durma işlemi gerçekleşiyor.
  }
 
void loop () {       

renk_oku();       // Renk okuma algoritmasını çalıştır.
rengi_goster();   // Renk göster algoritmasını çalıştır.
delay(500);       // 500 ms bekle.
}

void renk_oku(){   // Renk okuma Algoritması

tcs.getRGBC(&kirmizi,&yesil,&mavi,&temizle);
ortalama=((kirmizi+yesil+mavi)/3);                     //Renk degerlerini topla ve ortalamasını al.
r=kirmizi/ortalama;
g=yesil/ortalama;
b=mavi/ortalama;
Serial.println("\tOrtalama:\t"); Serial.print(ortalama);
Serial.print("\tKIRMIZI:\t"); Serial.print(r);
Serial.print("\tYEŞİL:\t");   Serial.print(g);
Serial.print("\tMAVİ:\t");    Serial.print(b);
delay(50);                                              //50msn bekle
}

void rengi_goster(){
if ((r > 1.4) && (g < 0.9) && (b < 0.9)) {               // kırmızı renk olma durumu
    mp3_play (3);                                        // 0003.mp3 dosyasını çal. Kırmızı renk.
    delay (1000);                                        // 1sn bekle.
}

else if ((r < 0.98) && (g < 1.4) && (b < 0.9)) {         // yeşil renk olma durumu
    mp3_play (1);                                        // 0001.mp3 dosyasını çal. Yeşil renk.
    delay (1000);                                        // 1sn bekle.
}

else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) {          // mavi renk olma durumu
    mp3_play (2);                                        // 0002.mp3 dosyasını çal. mavi renk.
    delay (1500);                                        // 1sn bekle.
 
}
else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) {        // sarı renk olma durumu
    mp3_play (5);                                        // 0005.mp3 dosyasını çal. sarı renk.
    delay (1000);                                        // 1sn bekle.
 }
/*
else if ((r >= 1.6) && (g < 0.7) && (b < 0.8)) {          // turuncu renk olma durumu
    mp3_play (6);                                        // 0006.mp3 dosyasını çal. turuncu renk.
    delay (1000);                                        // 1sn bekle.
 }
*/
else if ((r>1.0) && (g < 1.0) && (b>0.92)) {             // siyah renk olma durumu
    mp3_play (4);                                        // 0004.mp3 dosyasını çal. siyah renk.
    delay (1000);                                        // 1sn bekle.
 }
/*
else if ((r>0.70 ) && (g > 1.03) && (b< 1.23)) {         // Beyaz renk olma durumu
    mp3_play (8);                                        // 0008.mp3 dosyasını çal. Beyaz renk.
    delay (1000);                                        // 1sn bekle.
 }
*/
else if ((r> 0.70) && (g <0.78 ) && (b< 1.3)) {          // Mor renk olma durumu
    mp3_play (9);                                        // 0009.mp3 dosyasını çal. Mor renk.
    delay (1000);                                        // 1sn bekle.
 }
else if ((r> 1.0) && (g < 1.00) && (b< 1.0)) {           //  Pembe renk olma durumu
    mp3_play (10);                                       //  0010.mp3 dosyasını çal. Pembe renk.
    delay (1000);                                        // 1sn bekle.
 }







}
 
Kodlarını yazarken kod blokları ve girintiler konusuna dikkat edersen kodun daha anlaşılır olur. Burada R, G, B değerlerinin ortalamasını almış olman çok da doğru bir yöntem değil bana göre, çok daha sağlıklı çalışan kodlar var.

Örneğin şu linkteki kodu bir incele istersen.
http://forum.arduino.cc/index.php?topic=58830.0

Yada "RGB values to named color" diye aratırsan daha sağlıklı kodlara ulaşman mümkün.

Şu linkteki tablo işini görebilir.

https://web.njit.edu/~kevin/rgb.txt.html
 
teşekkür ederim. kodlar çok karışık görünüyor.Daha anlaşılır şekilde kodlar bulabilir miyiz. Çok profosyonel bir iş için kullanmayacağım..internette araştırmamda bu şekilde çalışma yapmışlar. ben tcs34725 sensörü kullandım.
 

Forum istatistikleri

Konular
128,123
Mesajlar
915,187
Kullanıcılar
449,828
Son üye
berkayerdem

Yeni konular

Geri
Üst