본문 바로가기
아두이노 센서

[센서/컬러] 눈앞에 색을 인식하는 TCS3200 IC기반의 Color(RGB 색깔) sensor 인 GY-31을 실습해보자.

by 작동미학 2015. 6. 18.
반응형

TCS3200 기반 칼라 센서인 GY-31을 사용해보자.

 

▶ 이 가이드를 따라하면

- RGB 색을 감지하여 활용할 수 있다.

 

▶ 먼저 읽으면 좋은 글

- Arduino 일반 : http://bbangpan.tistory.com/1

- TCS32725 : http://bbangpan.tistory.com/85 

  

 

▶ 부품 설명 및 회로 구성

GY-31은 RGB색을 감지해낼 수 있는 센서 모듈이다. 내부의 광다이오드를 통해 RGB값을 읽어 낼 수 있다. 실제로 보면 빛을 투사하기 위하여 LED 4개와 함께 제공되는데 상황에 따라 켜고 껼수 있다(LED pin High=ON). 최적의 색 감지 거리는 1cm로 바로 가까이 물체를 가져가야 하며, 3.3V~5V 모두 작동하고, 소요전류는 LED를 다 켜도 25mA수준이다.

<GY-31/TCS3200 센서 기반 칼라 센서>

모듈의 핀 중 S2~S3는 광다이오드의 유형을 선택하고, S0~S1은 출력 주파수의 범위를 결정하는데 쓰이며, OUT은 감지된 색 출력, LED는 LED On/Off제어에 사용된다. 세부 핀 연결은 소스코드를 참조로 한다.

<센서와 Arduino UNO와의 연결>

실제 사용시에는 빛과 물체 거리에 대한 민감도가 크므로, 이를 잘 제어할 필요가 있다. 관련 소스 등은 http://www.dfrobot.com/wiki/index.php/TCS3200_Color_Sensor_(SKU:SEN0101) 를 참조하여 진행했다.


▶ 소스 코드 입력 및 구동

Arduino Sketch 1.7.4버전에서 테스트하였으나 별도 라이브러리가 없으므로 어디서나 컴파일해서 사용할 수 있다.

앞서 밝힌 대로 http://www.dfrobot.com/wiki/index.php/TCS3200_Color_Sensor_(SKU:SEN0101)) 에서 발췌한 소스이다.

특이한 것은 attachInterrupt함수인데, 이 함수는 특정 핀 상태가 변경하면 지정된 함수를 능동적으로 호출한다(인터럽트 호출이라고 보통 말한다).

 

-------------------------------------------------------------------------------------------------------------

int s0=6,s1=5,s2=4,s3=3;

int out=2;

int flag=0;

byte counter=0;

byte countR=0,countG=0,countB=0;

byte TCCR2A;

byte TCCR2B;   //the clock frequency source 1024 points

int TCNT2;    //10 ms overflow again

byte TIMSK2; //allow interrupt


void setup()

{

Serial.begin(115200);

pinMode(s0,OUTPUT);

pinMode(s1,OUTPUT);

pinMode(s2,OUTPUT);

pinMode(s3,OUTPUT);

 

}

void TCS()

{

flag=0;

digitalWrite(s1,HIGH);

digitalWrite(s0,HIGH);

digitalWrite(s2,LOW);

digitalWrite(s3,LOW);

attachInterrupt(0, ISR_INTO, CHANGE);

timer0_init();

 

}

void ISR_INTO()

{

counter++;

}

void timer0_init(void)

{

TCCR2A=0x00;

TCCR2B=0x07; //the clock frequency source 1024 points

TCNT2= 100; //10 ms overflow again

TIMSK2 = 0x01; //allow interrupt

}

int i=0;

ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function

{

TCNT2=100;

flag++;

if(flag==1)

{

countR=counter;

Serial.print("red=");

Serial.println(countR,DEC);

digitalWrite(s2,HIGH);

digitalWrite(s3,HIGH);

}

else if(flag==2)

{

countG=counter;

Serial.print("green=");

Serial.println(countG,DEC);

digitalWrite(s2,LOW);

digitalWrite(s3,HIGH);

}

else if(flag==3)

{

countB=counter;

Serial.print("blue=");

Serial.println(countB,DEC);

Serial.println("\n");

digitalWrite(s2,LOW);

digitalWrite(s3,LOW);

 

}

else if(flag==4)

{

flag=0;

}

counter=0;

}

void loop()

{

TCS();

while(1);

}

 

상기 소스를 구동하면, red,green,blue값이 시리얼 모니터에 출력되는데 아래와 같이 실험해보자.

<해당 대상 색에 센서를 가까이 가져다 댄다/1cm이하>

아래 각각의 색에 노출했을 때 센서 값이 변화를 확인한다.

<blue,green,red에 노출했을때의 센서값>

 

▶ 구매 가이드

Color Sensor 모듈: http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150617073422&isPremium=y&SearchText=TCS3200+color ($5~$10)

 

강의 키워드

Arduino UNO, 아두이노 우노, GY-31, TCS3200, color sensor, 칼라 센서, 색 센서

반응형