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, 칼라 센서, 색 센서
'아두이노 센서' 카테고리의 다른 글
[센서/먼지] 공기의 탁함, 먼지 농도 등을 측정하는 샤프(sharp)의 GP2Y1010AU 센서 (7) | 2015.06.26 |
---|---|
[센서/무게,하중] 1kg미만의 무게를 측정 가능한 무게 센서(weight sensor) (4) | 2015.06.25 |
[센서/초음파 거리측정] 물체와의 거리를 측정해주는 초음파 센서(ultra sonic sensor) (0) | 2015.06.24 |
[센서/터치] 정전식 터치 센서를 통해 손가락 터치를 감지한다 (0) | 2015.06.22 |
[센서/진동] 약한 진동까지 감지할 수 있는Piezo Disk Vibration Sensor(피에조 디스크 진동 센서) (12) | 2015.06.22 |
[센서/진동] 충격을 감지해주는 digital vibration sensor (0) | 2015.06.17 |
[센서/가속도,자이로 센서] MPU-6050으로 만나는 각종 위치 및 움직임 관련 정보 센싱 (2) | 2015.06.17 |
[센서/온도] 접촉없는 원격 온도 측정, 적외선 기반 TM006 모듈 (0) | 2015.04.29 |
[센서/심박] 광학식으로 심박수를 측정하는 Pulse heart rate sensor (0) | 2015.04.01 |
[센서/마이크] 소리 세기/소음 측정 하는 마이크 센서(MAX4466) (6) | 2015.03.30 |