산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기

부품 및 소모품

부품수량
아두이노 나노 R31
TCS3200 컬러 센서 모듈1
16x2 I2C LCD 디스플레이 (흰색 텍스트, 파란 백라이트)1
브레드보드1
점퍼 와이어여러 개

필요한 소프트웨어

프로젝트 개요

이 튜토리얼에서는 아두이노와 TCS3200 센서를 사용하여 물체의 색상을 감지하고 LCD에 표시하는 방법을 다룹니다. 이 프로젝트는 물체 색상에 따라 적절한 동작을 수행하는 로봇 팔 프로젝트의 일부로 기획되었습니다.

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
주요 구성 요소 블록 다이어그램

1단계: 부품 목록 (BoM)

아래 가격은 참고용입니다.

2단계: TCS3200 컬러 센서 이해하기

데이터시트에 따르면 TCS3200은 프로그래머블한 컬러 라이트-투-주파수 컨버터로, 구성 가능한 실리콘 포토다이오드와 전류-주파수 컨버터가 단일 CMOS 집적 회로에 결합되어 있습니다.

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
TCS3200 컬러 센서 모듈

출력은 50% 듀티 사이클의 사각파이며, 주파수는 빛 강도(조도)에 정비례합니다. 전체 스케일 출력 주파수는 두 개의 제어 입력 핀(S0, S1)을 통해 세 가지 프리셋 값 중 하나로 조정 가능합니다. 디지털 입출력은 마이크로컨트롤러나 기타 로직 회로와 직접 인터페이스할 수 있습니다.

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
8x8 포토다이오드 배열 구조

TCS3200 내부에는 8x8 배열로 총 64개의 포토다이오드가 있습니다:

핀 S2와 S3로 활성화할 포토다이오드 그룹(레드, 그린, 블루, 클리어)을 선택합니다. 각 포토다이오드 크기는 110μm x 110μm이며, 중심 간 간격은 134μm입니다.

OE(출력 인에이블) 핀은 GND(LOW)에 연결해야 합니다. 센서는 2.7~5.5V DC로 구동되며, 아두이노의 5V 출력을 사용합니다. 측면 광원을 차단하기 위해 센서에 작은 고무 링을 장착하고 핫글루로 고정하는 것이 좋습니다.

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
측면 광원 차단을 위한 고무 링 장착

3단계: 하드웨어 연결

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
TCS3200 및 I2C LCD 연결도

TCS3200 센서 연결

센서 핀아두이노 나노 핀
S0D4
S1D5
S2D6
S3D7
OUTD8
ENGND
VCC+5V
GNDGND

I2C LCD 1602 연결

LCD 핀아두이노 나노 핀
SDAA4
SCLA5

아두이노 나노를 브레드보드에 장착하고, 나노의 5V 출력과 GND를 양쪽 전원 레일에 연결합니다.

4단계: 아두이노 코드

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
아두이노 IDE에서의 코드 모습

주파수 스케일링 설정

S0, S1 핀으로 출력 주파수 스케일링을 설정합니다. 여기서는 둘 다 HIGH(100%)로 설정합니다:

digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);

색상 성분 읽기

S2, S3 핀으로 읽을 색상(레드, 그린, 블루)을 선택합니다. 포토다이오드가 병렬로 연결되어 있어 S2, S3의 조합으로 다른 그룹을 선택할 수 있습니다:

// 레드 성분 읽기
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
red = pulseIn(outPin, LOW);

// 그린 성분 읽기
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
grn = pulseIn(outPin, LOW);

// 블루 성분 읽기
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
blu = pulseIn(outPin, LOW);

실제 코드에서는 각 RGB 성분을 여러 번 읽어 평균을 내어 오차를 줄입니다.

색상 판별 로직

RGB 세 성분을 얻은 후, 미리 캘리브레이션된 임계값과 비교하여 색상을 판별합니다. 알려진 색상의 테스트 용지나 물체로 RGB 값을 측정해 두어야 합니다. 제 환경에서의 예시 코드입니다:

void getColor() {
  readRGB();
  if (red > 8 && red < 18 && grn > 9 && grn < 19 && blu > 8 && blu < 16)
    color = "WHITE";
  else if (red > 80 && red < 125 && grn > 90 && grn < 125 && blu > 80 && blu < 125)
    color = "BLACK";
  else if (red > 12 && red < 30 && grn > 40 && grn < 70 && blu > 33 && blu < 70)
    color = "RED";
  else if (red > 50 && red < 95 && grn > 35 && grn < 70 && blu > 45 && blu < 85)
    color = "GREEN";
  else if (red > 10 && red < 20 && grn > 10 && grn < 25 && blu > 20 && blu < 38)
    color = "YELLOW";
  else if (red > 65 && red < 125 && grn > 65 && grn < 115 && blu > 32 && blu < 65)
    color = "BLUE";
  else
    color = "NO_COLOR";
}

위 코드에서는 흰색, 검은색, 빨강, 초록, 노랑, 파랑 6가지 색상을 미리 정의했습니다. 주변 광량이 줄어들면 임계값이 높아지는 경향이 있습니다.

loop() 함수에서는 1초마다 LCD에 판별된 색상을 표시합니다. 전체 코드는 GitHub에서 확인할 수 있습니다.

5단계: 결론

아두이노 나노와 TCS3200 센서로 물체 색상 감지하기
작동 중인 컬러 디텍터

이 프로젝트가 전자공학, 로봇공학, IoT의 흥미로운 세계로 여러분을 안내하는 데 도움이 되길 바랍니다!

남반구에서 인사드립니다! 다음 튜토리얼에서 뵙겠습니다.

감사합니다,
Marcelo

코드 및 회로도

전체 코드: GitHub 저장소

회로도 (Fritzing): Color Detector.fzz

제조공정

  1. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  2. 아두이노 우노와 OLED 디스플레이로 클래식 퐁(Pong) 게임 만들기: 단계별 튜토리얼
  3. 아두이노 오디오 주파수 감지기 - 고감도 사운드 모듈로 최대 음량 피크 주파수 측정
  4. 직접 만드는 아두이노 다마고치: 디지털 펫 DIY 프로젝트
  5. 스마트 무선 조명 스위치 컨트롤러: 아두이노 기반 원격 스위치 조작기
  6. 아두이노 틱택토 게임 - MAX7219 LED 매트릭스와 골판지 케이스
  7. 아두이노 나노로 만든 스마트 모션 감지 물총
  8. 스파크펀 7-세그먼트 디스플레이로 신뢰할 수 있는 아두이노 카운트다운 타이머 만들기
  9. 아두이노 RGB LED 컬러 믹서: 입문자 친화적 DIY 프로젝트
  10. 아두이노 해바라기: 태양을 추적하는 전자 해바라기 만들기