[CODE title="Ortalama Renk Sensörü Kodu"]/* Sensör pinleri tanımlanıyor */
int S0 = 8;
int S1 = 9;
int S2 = 12;
int S3 = 11;
int OUT = 10;
int LED = 13;
/* Renk yüzdeleri tanımlanıyor
Bu sayılar ortama göre değişiklik gösterebilir
Bu yüzden sensörü kalibre etmek için sensörden okuduğunuz değerler ile bu sayıları güncelleyiniz
Dizi elemanları sırasıyla sensörden ölçülen Kırmızı,Mavi ve Yeşil frekanslarını göstermektedir
*/
int RenkYuzdesi[5][3] = {
{24,62,28}, // Mavi renk
{29,36,29}, // Beyaz renk
{66,26,25}, // Kırmızı renk
{46,27,44} }; // Yeşil renk
String Renkler[5] = { "Mavi", "Beyaz", "Kirmizi", "Yesil"};
/* Sensör hassasiyeti */
int aralik = 10;
/* Renk frekanslarının tutulduğu değişkenler */
int KirmiziYuzdesi, YesilYuzdesi, MaviYuzdesi;
void setup() {
Serial.begin(9600);
pinMode(S0,OUTPUT);
pinMode(S1,OUTPUT);
pinMode(S2,OUTPUT);
pinMode(S3,OUTPUT);
pinMode(LED,OUTPUT);
pinMode(OUT,INPUT);
}
void loop() {
RengiTanimla();
delay(1000);
}
void TCS3200_Ac() {
digitalWrite(LED,HIGH); // switch LED on
digitalWrite(S0,HIGH); // output frequency scaling (100%)
digitalWrite(S1,HIGH);
delay(5);
}
void TCS3200_Kapat() {
digitalWrite(LED,HIGH); // switch LED off
digitalWrite(S0,LOW); // power off sensor
digitalWrite(S1,LOW);
}
void Filtresiz() {
digitalWrite(S2,HIGH); // select no filter
digitalWrite(S3,LOW);
delay(5);
}
void KirmiziFiltre() {
digitalWrite(S2,LOW); // select red filter
digitalWrite(S3,LOW);
delay(5);
}
void YesilFiltre() {
digitalWrite(S2,HIGH); // select green filter
digitalWrite(S3,HIGH);
delay(5);
}
void MaviFiltre() {
digitalWrite(S2,LOW); // select blue filter
digitalWrite(S3,HIGH);
delay(5);
}
void RengiTanimla() {
float BeyazFrekansi, KirmiziFrekansi, YesilFrekansi, MaviFrekansi;
TCS3200_Ac();
Filtresiz();
BeyazFrekansi = float(pulseIn(OUT,LOW,40000));
KirmiziFiltre();
KirmiziFrekansi = float(pulseIn(OUT,LOW,40000));
YesilFiltre();
YesilFrekansi = float(pulseIn(OUT,LOW,40000));
MaviFiltre();
MaviFrekansi = float(pulseIn(OUT,LOW,40000));
TCS3200_Kapat();
KirmiziYuzdesi = int((BeyazFrekansi / KirmiziFrekansi) * 100.0);
YesilYuzdesi = int((BeyazFrekansi / YesilFrekansi) * 100.0);
MaviYuzdesi = int((BeyazFrekansi / MaviFrekansi) * 100.0);
RengiBul();
}
void RengiBul() {
Serial.println("Renk Yuzdeleri");
Serial.print("Kirmizi=");
Serial.print(KirmiziYuzdesi);
Serial.print("Mavi=");
Serial.print(MaviYuzdesi);
Serial.print("Yesil=");
Serial.println(YesilYuzdesi);
Serial.println();
Serial.print("Okunan Renk=");
int okunduMu=0;
for(int renk =0; renk < 5; renk ++){
if(KirmiziYuzdesi > RenkYuzdesi[renk][0] - 10 && KirmiziYuzdesi < RenkYuzdesi[renk][0] + 10 &&
MaviYuzdesi > RenkYuzdesi[renk][1] - 10 && MaviYuzdesi < RenkYuzdesi[renk][1] + 10 &&
YesilYuzdesi > RenkYuzdesi[renk][2] - 10 && YesilYuzdesi < RenkYuzdesi[renk][2] + 10 ){
Serial.println(Renkler[renk]);
okunduMu=1;
break;
}
}
if(okunduMu == 0)
Serial.println("Renk Algilanamadi");
Serial.println();
Serial.println();
}
[/CODE]
[CODE title="Eklemek İstediğim Servo Motor Kodu"]
void ServoM(){
if ( KirmiziYuzdesi > YesilYuzdesi > MaviYuzdesi || KirmiziYuzdesi > MaviYuzdesi > YesilYuzdesi )
{
servo_motor.write(30);
}
else if ( YesilYuzdesi > KirmiziYuzdesi > MaviYuzdesi || YesilYuzdesi > MaviYuzdesi > KirmiziYuzdesi )
{
servo_motor.write(60);
}
else if ( MaviYuzdesi > KirmiziYuzdesi > YesilYuzdesi || MaviYuzdesi > YesilYuzdesi > KirmiziYuzdesi )
{
servo_motor.write(120);
}
}
[/CODE]
Merhaba arkadaşlar,
Arduino da şekilleri renklerine göre ayıran bir sistem hazırlamaya çalışıyorum. TCS3200 renk sensörünü kullanıyorum ve başarılı şekilde çalışıyor. Gelen sinyalin ortalamasını alarak bana cismin hangi renk olduğunu söylüyor fakat sistemin sonuna bir servo motor koyarak çark şeklinde istediğim açıya gelmesini istiyorum bunu nasıl ayarlayabilirim. Kendi denemelerimde servo dönmüyor yada sürekli mavi renk algılayarak mavi rengin konumunda kalıyor. Kendi yazdığım servo motor kodunu sensöre nasıl entegre edebilirim ? Anlayan yardım eden olursa çok sevinirim.
int S0 = 8;
int S1 = 9;
int S2 = 12;
int S3 = 11;
int OUT = 10;
int LED = 13;
/* Renk yüzdeleri tanımlanıyor
Bu sayılar ortama göre değişiklik gösterebilir
Bu yüzden sensörü kalibre etmek için sensörden okuduğunuz değerler ile bu sayıları güncelleyiniz
Dizi elemanları sırasıyla sensörden ölçülen Kırmızı,Mavi ve Yeşil frekanslarını göstermektedir
*/
int RenkYuzdesi[5][3] = {
{24,62,28}, // Mavi renk
{29,36,29}, // Beyaz renk
{66,26,25}, // Kırmızı renk
{46,27,44} }; // Yeşil renk
String Renkler[5] = { "Mavi", "Beyaz", "Kirmizi", "Yesil"};
/* Sensör hassasiyeti */
int aralik = 10;
/* Renk frekanslarının tutulduğu değişkenler */
int KirmiziYuzdesi, YesilYuzdesi, MaviYuzdesi;
void setup() {
Serial.begin(9600);
pinMode(S0,OUTPUT);
pinMode(S1,OUTPUT);
pinMode(S2,OUTPUT);
pinMode(S3,OUTPUT);
pinMode(LED,OUTPUT);
pinMode(OUT,INPUT);
}
void loop() {
RengiTanimla();
delay(1000);
}
void TCS3200_Ac() {
digitalWrite(LED,HIGH); // switch LED on
digitalWrite(S0,HIGH); // output frequency scaling (100%)
digitalWrite(S1,HIGH);
delay(5);
}
void TCS3200_Kapat() {
digitalWrite(LED,HIGH); // switch LED off
digitalWrite(S0,LOW); // power off sensor
digitalWrite(S1,LOW);
}
void Filtresiz() {
digitalWrite(S2,HIGH); // select no filter
digitalWrite(S3,LOW);
delay(5);
}
void KirmiziFiltre() {
digitalWrite(S2,LOW); // select red filter
digitalWrite(S3,LOW);
delay(5);
}
void YesilFiltre() {
digitalWrite(S2,HIGH); // select green filter
digitalWrite(S3,HIGH);
delay(5);
}
void MaviFiltre() {
digitalWrite(S2,LOW); // select blue filter
digitalWrite(S3,HIGH);
delay(5);
}
void RengiTanimla() {
float BeyazFrekansi, KirmiziFrekansi, YesilFrekansi, MaviFrekansi;
TCS3200_Ac();
Filtresiz();
BeyazFrekansi = float(pulseIn(OUT,LOW,40000));
KirmiziFiltre();
KirmiziFrekansi = float(pulseIn(OUT,LOW,40000));
YesilFiltre();
YesilFrekansi = float(pulseIn(OUT,LOW,40000));
MaviFiltre();
MaviFrekansi = float(pulseIn(OUT,LOW,40000));
TCS3200_Kapat();
KirmiziYuzdesi = int((BeyazFrekansi / KirmiziFrekansi) * 100.0);
YesilYuzdesi = int((BeyazFrekansi / YesilFrekansi) * 100.0);
MaviYuzdesi = int((BeyazFrekansi / MaviFrekansi) * 100.0);
RengiBul();
}
void RengiBul() {
Serial.println("Renk Yuzdeleri");
Serial.print("Kirmizi=");
Serial.print(KirmiziYuzdesi);
Serial.print("Mavi=");
Serial.print(MaviYuzdesi);
Serial.print("Yesil=");
Serial.println(YesilYuzdesi);
Serial.println();
Serial.print("Okunan Renk=");
int okunduMu=0;
for(int renk =0; renk < 5; renk ++){
if(KirmiziYuzdesi > RenkYuzdesi[renk][0] - 10 && KirmiziYuzdesi < RenkYuzdesi[renk][0] + 10 &&
MaviYuzdesi > RenkYuzdesi[renk][1] - 10 && MaviYuzdesi < RenkYuzdesi[renk][1] + 10 &&
YesilYuzdesi > RenkYuzdesi[renk][2] - 10 && YesilYuzdesi < RenkYuzdesi[renk][2] + 10 ){
Serial.println(Renkler[renk]);
okunduMu=1;
break;
}
}
if(okunduMu == 0)
Serial.println("Renk Algilanamadi");
Serial.println();
Serial.println();
}
[/CODE]
[CODE title="Eklemek İstediğim Servo Motor Kodu"]
void ServoM(){
if ( KirmiziYuzdesi > YesilYuzdesi > MaviYuzdesi || KirmiziYuzdesi > MaviYuzdesi > YesilYuzdesi )
{
servo_motor.write(30);
}
else if ( YesilYuzdesi > KirmiziYuzdesi > MaviYuzdesi || YesilYuzdesi > MaviYuzdesi > KirmiziYuzdesi )
{
servo_motor.write(60);
}
else if ( MaviYuzdesi > KirmiziYuzdesi > YesilYuzdesi || MaviYuzdesi > YesilYuzdesi > KirmiziYuzdesi )
{
servo_motor.write(120);
}
}
[/CODE]
Merhaba arkadaşlar,
Arduino da şekilleri renklerine göre ayıran bir sistem hazırlamaya çalışıyorum. TCS3200 renk sensörünü kullanıyorum ve başarılı şekilde çalışıyor. Gelen sinyalin ortalamasını alarak bana cismin hangi renk olduğunu söylüyor fakat sistemin sonuna bir servo motor koyarak çark şeklinde istediğim açıya gelmesini istiyorum bunu nasıl ayarlayabilirim. Kendi denemelerimde servo dönmüyor yada sürekli mavi renk algılayarak mavi rengin konumunda kalıyor. Kendi yazdığım servo motor kodunu sensöre nasıl entegre edebilirim ? Anlayan yardım eden olursa çok sevinirim.