Arduino
OKUDUĞUNUZ KONU
Arduino Renk Sensörü Uygulaması
1

Arduino Renk Sensörü Uygulaması

Yazar : Murat Duran5 Ağustos 2015

Renk sensörü robotik ve elektronikte sık kullanılan sensörlerdendir.Yüksek hassasiyette renk algılayabilirler.Kaynak ışıktan RGB verilerini filtrelemek ve ışık yoğunluğu ile doğru orantılı frekanslı bir kare dalgaya dönüştürmektedir.

S0 = D6  –  OUT = D2
S1 = D5   –  VCC  = VCC
S2 = D4   –  GND = GND
S3 = D3   –  OE = GND

#include <TimerOne.h>

#define S0 6
#define S1 5
#define S2 4
#define S3 3
#define OUT 2

int g_count = 0; // count the frequecy
int g_array[3]; // store the RGB value
int g_flag = 0; // filter of RGB queue
float g_SF[3]; // save the RGB Scale factor

// Init TSC230 and setting Frequency.
void TSC_Init()
{
 pinMode(S0, OUTPUT);
 pinMode(S1, OUTPUT);
 pinMode(S2, OUTPUT);
 pinMode(S3, OUTPUT);
 pinMode(OUT, INPUT);

 digitalWrite(S0, LOW); // OUTPUT FREQUENCY SCALING 2%
 digitalWrite(S1, HIGH);
}

// Select the filter color
void TSC_FilterColor(int Level01, int Level02)
{
 if(Level01 != 0)
 Level01 = HIGH;

 if(Level02 != 0)
 Level02 = HIGH;

 digitalWrite(S2, Level01);
 digitalWrite(S3, Level02);
}

void TSC_Count()
{
 g_count ++ ;
}

void TSC_Callback()
{
 switch(g_flag)
 {
 case 0:
 Serial.println("->WB Start");
 TSC_WB(LOW, LOW); //Filter without Red
 break;
 case 1:
 Serial.print("->Frequency R=");
 Serial.println(g_count);
 g_array[0] = g_count;
 TSC_WB(HIGH, HIGH); //Filter without Green
 break;
 case 2:
 Serial.print("->Frequency G=");
 Serial.println(g_count);
 g_array[1] = g_count;
 TSC_WB(LOW, HIGH); //Filter without Blue
 break;

 case 3:
 Serial.print("->Frequency B=");
 Serial.println(g_count);
 Serial.println("->WB End");
 g_array[2] = g_count;
 TSC_WB(HIGH, LOW); //Clear(no filter)
 break;
 default:
 g_count = 0;
 break;
 }
}

void TSC_WB(int Level0, int Level1) //White Balance
{
 g_count = 0;
 g_flag ++;
 TSC_FilterColor(Level0, Level1);
 Timer1.setPeriod(1000000); // set 1s period
}

void setup()
{
 TSC_Init();
 Serial.begin(9600);
 Timer1.initialize(); // defaulte is 1s
 Timer1.attachInterrupt(TSC_Callback);
 attachInterrupt(0, TSC_Count, RISING); 

 delay(4000);

 for(int i=0; i<3; i++)
 Serial.println(g_array[i]);

 g_SF[0] = 255.0/ g_array[0]; //R Scale factor
 g_SF[1] = 255.0/ g_array[1] ; //G Scale factor
 g_SF[2] = 255.0/ g_array[2] ; //B Scale factor

 Serial.println(g_SF[0]);
 Serial.println(g_SF[1]);
 Serial.println(g_SF[2]);

}

void loop()
{
 g_flag = 0;
 for(int i=0; i<3; i++)
 Serial.println(int(g_array[i] * g_SF[i]));
 delay(4000);

}
SİZCE NASIL OLMUŞ?
Beğendim
56%
İlginç
11%
Eh İşte
0%
Anlamadım
33%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
1 YORUMLAR
  • pat
    19 Mart 2016 at 15:32

    merhaba hocam, bu proje için jumper kabloları nasıl olacak? dişi, erkek falan?

YORUM YAP