TCS3200 컬러 감지 센서
: RFG 감도 주파수 출력 센서
TCS230 업그레이드 버전, TCS3200 칩 탑재.
S2, S3 = High / Low 로 포토다이오드 R, G, B 선택 → S0, S1 = 최대 출력 주파수 선택, 색상 판별.
이 과정 * 3번 = R, G, B 각 값을 읽은 후 조합 = 칼라값 감지.
- 메인칩 : TCS3200
- 전원 공급 : 3~5V
- 출력주파수 : 12KHz, 120KHz, 600KHz 선택
- 조명 : 화이트 LED
- 인터페이스 : TTL 마이컴직결 또는 주파수 카운터
- 감도최적거리 : 10mm
회로
센서 모드 선택 S0, S1 핀 = HIGH 공급 → 제일 높은 해상도 감지 모드 (=굳이 아두이노와 연결할 필요 없음)
전원 공급 2군데 (한 곳만 공급해도 동작)
+5V & GND 연결
S2 = D12
S3 = D11
LED = D13
OUT = D5 (출력 주파수를 측정 위해)
아두이노 우노 = D5번 핀 / 아두이노 메가 = 47번 핀
VCC = V5
GND = GND
라이브러리 설치
스케치 - 라이브러리 포함하기 - 라이브러리 관리 (Ctrl + Shift+ I)
MD_TCS230
FreqCount
스케치 (영점 조절)
/*
TCS230 sensor calibration (TCS230 센서 영점 조정)
영점 조정 진행, 영점 조정 위한 상수 값 = 시리얼 모니터 출력
*/
#include <MD_TCS230.h>
#include <FreqCount.h>
#define BLACK_CAL 0
#define WHITE_CAL 1
// 연결된 핀 번호들: S0_OUT <-> 8, S1_OUT <-> 9
#define S2_OUT 12
#define S3_OUT 11
#define LED 13 // HIGH = ENABLED
MD_TCS230 CS(S2_OUT, S3_OUT, /* S0_OUT, S1_OUT, */ LED);
sensorData sdBlack;
sensorData sdWhite;
void setup()
{
Serial.begin(9600);
Serial.print(F("\n[TCS230 영점 조정 예제]"));
// 컬러 센서 초기화
CS.begin();
}
char getChar()
// 시리얼 포트 문자 받아 대문자로 바꿔 리턴
{
while (Serial.available() == 0); //0이 아니면 while문 벗어남
return (toupper(Serial.read())); //toupper = 대문자 변경
}
void clearInput()
// 시리얼 포트 데이터 읽고 삭제
{
while (Serial.read() != -1); //-1이면 while문 벗어남
}
void outputHeader(void)
// 영점 조정 값+컬러 & RGB 감지 값 = 헤더 파일 사용, 시리얼 모니터 출력
{
Serial.print(F("\n\n// 영점 조정 데이터"));
Serial.print(F("\nsensorData sdBlack = { "));
Serial.print(sdBlack.value[0]); Serial.print(F(", "));
Serial.print(sdBlack.value[1]); Serial.print(F(", "));
Serial.print(sdBlack.value[2]); Serial.print(F(" };"));
Serial.print(F("\nsensorData sdWhite = { "));
Serial.print(sdWhite.value[0]); Serial.print(F(", "));
Serial.print(sdWhite.value[1]); Serial.print(F(", "));
Serial.print(sdWhite.value[2]); Serial.print(F(" };"));
}
uint8_t fsmReadValue(uint8_t state, uint8_t valType)
//unitx_t = 문자가 아닌 숫자 담겠다, x=bit
{
static uint8_t selChannel;
static uint8_t readCount;
switch (state) {
case 0: // Prompt for the user to start
Serial.print(F("\n\n값을 읽는 중: "));
switch (valType) {
case BLACK_CAL: Serial.print(F("검정색 영점 조정")); break;
case WHITE_CAL: Serial.print(F("하얀색 영점 조정")); break;
default: Serial.print(F("??")); break;
}
clearInput();
Serial.print(F("\n시작하려면 어떤 키든 눌러주세요 ..."));
getChar();
clearInput();
state++;
break;
case 1: // 센서 값 읽기 시작
CS.read();
state++;
break;
case 2: // 값 읽어 들일 때까지 기다림
if (CS.available()) {
switch (valType) {
case BLACK_CAL:
CS.getRaw(&sdBlack);
CS.setDarkCal(&sdBlack);
break;
case WHITE_CAL:
CS.getRaw(&sdWhite);
CS.setWhiteCal(&sdWhite);
break;
}
state++;
}
break;
default: // reset fsm
state = 0;
break;
}
return (state);
}
void loop()
{
static uint8_t runState = 0;
static uint8_t readState = 0;
switch (runState) {
case 0: // 검정색 영점 조정
readState = fsmReadValue(readState, BLACK_CAL);
if (readState == 0) runState++;
break;
case 1: // 하얀색 영점 조정
readState = fsmReadValue(readState, WHITE_CAL);
if (readState == 0) runState++;
break;
case 2: // 헤더 파일 사용위해 시리얼 모니터 출력
outputHeader();
runState++;
break;
default: // 잘못되었다면 다시 시작
runState = 0;
}
}
시리얼 모니터 결과값
검정색 대고 영점 조정
그 다음 흰색을 대고 영점 조정
https://m.blog.naver.com/msyang59/220161793024
색 감지 센서 TCS3200 모듈을 붙이다 - 1
아두이노 보드에 컬러(색)를 감지하여 감지한 컬러에 따라 각기 다른 주파수를 갖는 파형(波形)으로 변환하...
blog.naver.com
참고사이트
'Arduino' 카테고리의 다른 글
프로세싱 설치 (Install Processing) (1) | 2022.08.30 |
---|---|
TCS3200 컬러 감지 센서 2 (0) | 2022.08.29 |
로터리형 엔코더 모듈 (Encoder Sensor) (0) | 2022.08.29 |
피에조 부저 (0) | 2022.08.19 |
리드 스위치 모듈 KY-025 (Dry Reed Switch Sensor) (0) | 2022.08.19 |