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

Arduino 색상 감지

구성품 및 소모품

Arduino Nano R3
× 1
컬러 센서 모듈 색상 인식
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
× 1
브레드보드(일반)
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

프로젝트

이것은 Arduino와 TCS 3200과 같은 센서를 사용하여 색상을 읽는 방법을 탐구하는 간단한 튜토리얼입니다. 아이디어는 물체 색상을 감지하고 LCD에 표시하는 것입니다. 이 프로젝트는 물체의 색상에 따라 적절한 동작을 선택하는 로봇 팔이 될 더 큰 프로젝트의 구성 요소입니다. 위의 블록 다이어그램은 주요 구성 요소를 보여줍니다.

아래 비디오는 작업 중인 최종 프로젝트를 보여줍니다.

1단계:BoM

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

<울>
  • 아두이노 나노(US$ 8.00)
  • <울>
  • TCS3200 컬러 센서 모듈(US$ 9.00)
  • <울>
  • IIC/I2C/TWI 1602 직렬 파란색 백라이트 LCD 모듈(US$ 8.00)
  • <울>
  • 브레드보드(US$ 2.00)
  • <울>
  • 케이블
  • 2단계:TSC 3200 컬러 센서

    데이터시트에 설명된 대로 TCS3200은 단일 모놀리식 CMOS 집적 회로에 구성 가능한 실리콘 포토다이오드와 전류-주파수 변환기를 결합한 프로그래밍 가능한 컬러 광-주파수 변환기입니다.

    출력은 광도(조도)에 정비례하는 주파수를 갖는 구형파(50% 듀티 사이클)입니다. 전체 범위 출력 주파수는 2개의 제어 입력 핀(S0 및 S1)을 통해 3개의 사전 설정 값 중 하나로 조정될 수 있습니다. 디지털 입력 및 디지털 출력을 통해 마이크로컨트롤러 또는 기타 논리 회로에 직접 인터페이스할 수 있습니다.

    출력 활성화(OE)는 마이크로컨트롤러 입력 라인의 다중 장치 공유를 위해 출력을 고임피던스 상태로 설정합니다. TCS3200에서 광-주파수 변환기는 8 x 8 어레이의 포토다이오드를 읽습니다.

    <울>
  • 16개의 포토다이오드에 파란색 필터가 있음
  • <울>
  • 16개의 포토다이오드에 녹색 필터가 있음
  • <울>
  • 16개의 포토다이오드에 빨간색 필터가 있음
  • <울>
  • 16개의 포토다이오드는 필터 없이 투명합니다.
  • 핀 S2 및 S3은 활성 광다이오드 그룹(빨간색, 녹색, 파란색, 투명)을 선택하는 데 사용됩니다. 포토다이오드는 크기가 110μm x 110μm이고 134μm 중심에 있습니다.

    OE(Enable)는 GND(LOW)에 연결해야 합니다.

    센서는 캡슐화되어 있으며 2.7 ~ 5.5VDC 사이에서 전원이 공급되어야 합니다. 5V Arduino 출력을 사용하여 센서에 전원을 공급합니다. 센서를 올바르게 사용하기 위해 작은 고무 링을 설치하여 센서를 측광으로부터 격리합니다. 나는 그것을 고칠 때 뜨거운 접착제를 사용했습니다.

    3단계:하드웨어 연결

    다음과 같이 TSC3200 센서를 연결합니다.

    <울>
  • S0 ==> 나노 핀 D4
  • <울>
  • S1 ==> 나노 핀 D5
  • <울>
  • S2 ==> 나노 핀 D6
  • <울>
  • S3 ==> 나노 핀 D7
  • <울>
  • OUT ==> 나노 핀 D8
  • <울>
  • EN ==> GND
  • <울>
  • VCC ==> +5V
  • <울>
  • GND ==> GND
  • I2C LCD 2/16 직렬 디스플레이 연결:

    <울>
  • SDA ==> 나노 핀 A4
  • <울>
  • SCL ==> 나노 핀 A5
  • 브레드보드에 아두이노 나노를 설치합니다. 두 전원 레일에서 Nano 5V 출력과 GND를 연결합니다.

    4단계:Arduino 코드

    가장 먼저 정의할 것은 위의 표에 정의된 주파수 스케일링입니다. 이를 위해 핀 S0 및 S1이 사용됩니다. 출력 주파수를 스케일링하면 다양한 주파수 카운터 또는 마이크로컨트롤러에 대한 센서 판독값을 최적화하는 데 유용합니다. S0과 S1을 모두 HIGH(100%)로 설정합니다.

    <사전><코드> digitalWrite(s0,HIGH); digitalWrite(s1,HIGH);

    다음으로 할 일은 포토다이오드에서 읽을 색상(빨간색, 녹색 또는 파란색)을 선택하는 것입니다. 이를 위해 제어 핀 S2 및 S3을 사용합니다. 포토다이오드가 병렬로 연결되어 있기 때문에 S2와 S3를 LOW와 HIGH를 서로 다른 조합으로 설정하면 위의 표와 같이 서로 다른 포토다이오드를 선택할 수 있습니다.

     digitalWrite(s2, LOW); 디지털 쓰기(s3, LOW); 빨간색 =pulseIn(outPin, LOW); // 색상의 RED 컴포넌트 읽기 digitalWrite(s2, HIGH); 디지털 쓰기(s3, 높음); grn =펄스 입력(outPin, LOW); // 색상의 GREEN 구성 요소 읽기 digitalWrite(s2, LOW); 디지털 쓰기(s3, 높음); 블루 =펄스 입력(outPin, LOW); // 색상의 BLUE 구성 요소 읽기 

    최종 코드에서 RGB 구성요소를 각각 몇 번씩 읽고 평균을 취하므로 판독값 중 하나가 잘못된 경우 오류를 줄일 수 있습니다.

    3가지 구성요소(RGB)가 있으면 색상을 정의해야 합니다. 이전에 프로젝트를 보정하기 위해 수행하는 방법입니다. 알려진 색의 시험지나 물체를 사용하여 생성된 3가지 구성 요소를 읽을 수 있습니다.

    광산에서 시작하여 조명 수준에 대한 매개변수를 변경할 수 있습니다.

    <사전><코드> 무효 getColor(){ readRGB(); if (빨간색> 8 &&빨간색 <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="흰색"; else if (red> 80 &&red <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; else if (빨간색> 12 &&빨간색 <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; else if (빨간색> 50 &&빨간색 <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="녹색"; else if (빨간색> 10 &&빨간색 <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="노란색"; else if (빨간색> 65 &&빨간색 <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="파란색"; 다른 색상 ="NO_COLOR";}

    위에서 볼 수 있듯이 흰색, 검정색, 빨간색, 녹색, 노란색 및 파란색의 6가지 색상을 미리 정의했습니다. 주변광이 낮아지면 매개변수가 높아지는 경향이 있습니다.

    loop() 내부에서 1초마다 LCD의 디스플레이 판독값을 정의합니다.

    전체 코드는 내 GitHub에서 찾을 수 있습니다.

    5단계:결론

    항상 그렇듯이 이 프로젝트가 다른 사람들이 전자, 로봇 및 IoT의 흥미진진한 세계에서 길을 찾는 데 도움이 되기를 바랍니다.

    업데이트된 파일을 보려면 내 GitHub를 방문하세요:Color Detector

    더 많은 프로젝트를 보려면 제 블로그를 방문하십시오:MJRoBot.org

    세계 남쪽에서 온 살루도스!

    다음 튜토리얼에서 만나요!

    감사합니다.

    마르셀로

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 코드 스니펫 #2
  • 코드 스니펫 #3
  • 코드 스니펫 #2일반 텍스트
    <사전> digitalWrite(s2, LOW); 디지털 쓰기(s3, LOW); 빨간색 =pulseIn(outPin, LOW); // 색상의 RED 컴포넌트 읽기 digitalWrite(s2, HIGH); 디지털 쓰기(s3, 높음); grn =펄스 입력(outPin, LOW); // 색상의 GREEN 구성 요소 읽기 digitalWrite(s2, LOW); 디지털 쓰기(s3, 높음); 블루 =펄스 입력(outPin, LOW); // 색상의 BLUE 구성 요소 읽기
    코드 스니펫 #3일반 텍스트
    <사전> 무효 getColor(){ readRGB(); if (빨간색> 8 &&빨간색 <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="흰색"; else if (red> 80 &&red <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; else if (빨간색> 12 &&빨간색 <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; else if (빨간색> 50 &&빨간색 <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="녹색"; else if (빨간색> 10 &&빨간색 <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="노란색"; else if (빨간색> 65 &&빨간색 <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="파란색"; 다른 색상 ="NO_COLOR";}
    깃허브
    https://github.com/Mjrovai/Color-Detectorhttps://github.com/Mjrovai/Color-Detector

    회로도

    https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzz

    제조공정

    1. Arduino를 사용하여 모니터 Ambilight 만들기
    2. Arduino Pong 게임 - OLED 디스플레이
    3. 오디오 주파수 감지기
    4. Arduino Tamagotchi 클론 - 디지털 애완동물
    5. 무선 조명 스위치 조작기
    6. Tech-TicTacToe
    7. 모션 센서 물총
    8. Arduino 카운트다운 타이머
    9. Arduino RGB 컬러 믹서
    10. Arduino Sunflower:일렉트로닉 썬댄서