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

컬러 센서 프로토타입:물체에서 색상 이름 감지

구성품 및 소모품

Arduino UNO
× 1
RGB 확산 공통 양극
공통 음극 또는 양극... 가지고 있는 것을 사용
× 1
포토 저항기
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
LiquidCrystal Arduino 라이브러리와 함께 사용할 수 있는 모든 것
× 1
저항 10k 옴
촉각 스위치 및 CdS 셀용
× 2
저항 100옴
RGB LED의 빨간색 핀용 150옴 및 녹색 및 파란색 핀용 2x 100옴
× 3
SparkFun 푸시버튼 스위치 12mm
× 1
점퍼 와이어(일반)
× 1
브레드보드(일반)
× 1

앱 및 온라인 서비스

MLP 토폴로지 워크벤치
Arduino의 Neurona 라이브러리와 함께 사용하기 위해 신경망을 재교육하는 데 사용되는 도구입니다.

이 프로젝트 정보

이 프로젝트를 쉽게 복제할 수 있도록 단순성을 위해 전체 기사의 단순화된 버전입니다. 구현에 대한 자세한 내용은 내 블로그에서 이 프로젝트도 확인하세요.

이 기사는 오른쪽 메뉴에 나열된 섹션으로 나뉩니다. 기술적인 세부 사항으로 이동하려면 오른쪽 목차를 확인하거나 GitHub 저장소에서 코드를 다운로드하세요. 계속 읽기 전에 프로젝트 비디오를 확인하여 이 프로젝트의 진정한 의미를 확인하세요 :)

프로젝트 개요

인간의 눈의 색각과 유사하고 빛을 기반으로 하는 RGB 모델은 1,600만 가지 이상의 색상으로 구성됩니다. , 3D 공간에 배열 , 여기서 0부터 255까지의 R(Red), G(Green), B(Blue) 성분의 정수값이 이 공간의 좌표를 구성한다. 이 모델에서 빛 관련 전자 부품 및 기계 학습 메커니즘으로 색상 감지 및 인식을 수행했습니다.; 본질적으로 RGB LED와 CdS 셀(광 센서 또는 LDR)의 조합으로, 둘 다 주변광과 격리됩니다. . 이러한 구성 요소는 각각 특정 색상의 물체에서 반사된 각 빛(빨간색, 녹색 및 파란색)의 강도를 방출하고 감지합니다.

다층 퍼셉트론

MLP(Multi-Layer Perceptron)는 인공 신경망의 피드포워드 아키텍처로 입력(비신경) 레이어, 은닉 레이어 및 출력 레이어가 있습니다. 이 네트워크는 지도 학습(예제 학습)을 수행하는 역전파 알고리즘에 의해 훈련됩니다.

이 컬러 센서의 경우 위에 표시된 신경망은 3개의 입력(RGB 값)을 수신합니다. , 6개의 뉴런이 있는 은닉층 1개 및 10개의 뉴런이 있는 출력 레이어 - 그냥 상기:출력 레이어는 이진화된 출력에 대해 동일한 수의 클래스(이 경우 색상)를 가져야 합니다. 이 튜토리얼에서 네트워크는 이미 훈련되어 있고 색상을 인식할 수 있습니다. :) 훈련 단계와 이에 사용된 예시 데이터셋에 대한 자세한 내용은 내 블로그의 전체 게시물을 확인하세요.

색상 인식

이 작업은 훈련된 MLP 네트워크를 사용하여 수행할 수 있습니다. 공간적으로 분리 가능한 패턴의 분류 및 인식을 허용합니다. 이 경우에 매우 유용합니다. 훈련 단계에서 네트워크는 아래 그림과 같은 RGB 색상 공간의 영역을 매핑하여 모든 초평면으로 격리된 영역이 색상을 나타내도록 합니다. . 따라서 모든 새로운 RGB 색상 패턴(3D 포인트로 표시)은 특정 영역에 속하며 해당 색상으로 분류됩니다.

RGB 패턴의 좋은 인식을 위해 MLP로 일반화를 얻으려면 훈련 단계를 위해 훈련 세트(위에서 설명한 3D 공간에서 원하는 출력을 가진 색상의 예)를 네트워크에 제시해야 합니다. 이 프로젝트에 사용된 교육 세트는 프로젝트의 GitHub에서 사용할 수 있습니다. 저장소. 신경망에 관심이 있다면 이 섹션을 계속 읽고 내가 개발한 이 Playground를 확인하십시오. 데이터 세트를 사용하여 네트워크를 직접 훈련하고 코드에서 사용할 수 있습니다. :) 그렇지 않으면 구현 세부정보로 건너뛰기 .

일반화는 훈련 세트를 구성하는 도메인에서 발생하므로 최소값과 최대값에 주의를 기울일 가치가 있습니다. 공간의 각 구성 요소! 이 도메인 외부의 패턴을 네트워크에 제공하지 마십시오. 그렇지 않으면 출력이 올바르게 작동하지 않을 것으로 예상됩니다.

데이터 세트(모든 예)에는 0에서 1까지 범위의 색상 패턴에 대한 75개의 인스턴스가 포함되어 있습니다. 초기에 0에서 255까지의 범위에서 이러한 인스턴스는 0 <=x1, x2, x3 <=1이 되도록 각 값을 255로 간단히 나누어 크기를 조정했습니다. 데이터 세트에서 볼 수 있듯이 출력 레이어의 뉴런 하나만 출력 1을 해야 하고 나머지 뉴런은 0을 출력해야 한다는 점을 지적하는 것이 중요합니다. 훈련된 네트워크가 float 값을 출력한다는 사실 때문에 후처리는 다음과 같이 수행됩니다.

여기서 yi는 i번째 뉴런의 출력이고 max(y)는 가장 큰 출력 값입니다. 실용적인 측면에서 가장 큰 출력을 갖는 뉴런은 1을 출력으로 제공하고 나머지 뉴런은 0을 제공합니다. 간단합니다.

전자 회로

물체에서 발생하는 모든 감지 절차는 Arduino 보드에 연결된 Atmega328에서 실행되는 계산 활동을 포함하는 전자 회로에서 발생합니다. 아래 회로도에서 배선을 확인하십시오.

코드는 공통 양극을 사용하는 위의 체계를 따릅니다. RGB LED. 즉, RGB LED가 공통 양극인지 확인하고, 그렇지 않으면 코드의 논리를 반전시키기만 하면 됩니다. .

또 다른 중요한 세부 사항은 RGB LED와 함께 하나의 저항만 사용하고 있다는 것입니다. 한 번에 한 가지 색상이 켜지므로 있어야 하는 저항의 평균 저항과 함께 공통 양극에 저항을 넣습니다. 음극으로 - 그것은 게으르다. 나는 알고 있고 미안하다! 프로젝트 부품을 사러 갔을 때 필요한 모든 것이 없었습니다. 그러나 컴퓨터의 RGB 값과 관련하여 수집된 RGB 값의 충실도를 유지하려면 음극과 함께 올바른 저항기를 사용하는 것이 매우 중요합니다. 패턴이 왜곡되지 않기 때문에 내가 한 방법은 그렇게 나쁘지 않습니다. 그것들은 우리가 컴퓨터 화면에서 보는 것과 같은 색상이 아닙니다(인간의 눈으로 포착할 때).

RGB LED와 CdS Cell 사이의 인접도에서 알 수 있습니다. 이는 주변광과 격리되어야 하기 때문에(오래된 검은색 필름 튜브가 완벽한 조각임) 보정(프로그래밍에서 설명) 및 인식을 수행할 수 있습니다. 프로젝트 비디오를 확인하여 이러한 구성요소가 주변광과 분리되어 있는지 확인하세요.

색상 이론

전자 회로에서 수행되는 색상 인식은 색상 이론 개념을 기반으로 합니다. 관련 렌즈가 (아직) 없기 때문에 불투명한(무광택) 재질의 물체만 고려해야 합니다 , LED의 정반사 처리를 피합니다. 반면에 확산 반사는 조명으로 색상 감지를 수행하는 핵심입니다. 입사광에서 불규칙한 표면에 반사되어 CdS 셀의 기능을 망치는 빛나는 효과를 생성하지 않습니다.

실제 색상 이론으로 돌아가서 (특정 색상의) 빛이 물체에 도달하면 해당 물체의 색상 속성에 따라 반사됩니다. 예를 들어, 노란색 물체에 도달하는 빨간색 빛은 노란색의 구성에 빨간색이 얼마나 많이 존재하는지에 따라 반사됩니다. 기억하세요. 우리는 빛에 대해 이야기하고 있습니다! - 따라서 많은 빨간색 빛이 반사될 것으로 예상됩니다. 노란색(기본적으로 빨간색과 녹색)의 RGB 구성을 생각할 때 의미가 있는 것입니다. 그러나 파란색 빛이 노란색 물체에 도달하면 색 구성에서 파란색의 존재가 낮기 때문에 강한 반사가 예상되지 않습니다.

흰색과 검은색이 각각 모든 색상의 존재와 부재인 가산 색상 시스템을 고려하면(자세한 내용은 여기 ), (CdS 셀을 사용하여) 컬러 물체에 도달하는 RGB LED의 각 빛의 최대 및 최소 반사를 측정할 수 있습니다. 즉, 회로에 관련된 전자 부품에서 교정을 수행할 수 있습니다. 이는 패턴의 안정적인 감지(이상값 방지)를 보장할 뿐만 아니라 감지 정확도를 얻는 또 다른 열쇠입니다. 여기 황금 팁이 있습니다. :보정 후에는 전자 부품(특히 브레드보드에 배치된 경우)이나 사용 중인 부품(반드시 사용해야 함)을 움직이거나 만지지 않도록 하십시오.> US_plugins_acrobat_en_motion_education_colorTheory.pdf

프로그래밍

보정 및 인식을 위해 컬러 센서는 컬러 개체가 RGB LED 및 CdS 셀에 노출되면 3번의 반복을 실행합니다. 첫 번째 반복에서 빨간색 빛이 물체를 비추고 프로그램은 CdS 셀이 감지를 안정화하기를 기다립니다. 그런 다음 아날로그 입력을 읽고 빨간색 빛의 반사를 저장합니다. 프로그램은 녹색과 파란색에 대해 두 번 더 반복합니다. 색상 이론에 표시된 그림은 이 반복적인 프로세스를 시각적으로 잘 설명합니다.

보정과 관련하여 위에서 언급한 반복 프로세스는 검은색에 대해 한 번, 흰색에 대해 한 번, 두 번 수행됩니다. 색상 이론에서 설명했듯이 이것은 최대값과 최소값을 감지하기 위한 것입니다. 처음에는 0에 가까운 1024에 가까움 , 판독 해상도에 따라 - 빨강, 녹색 및 파랑 빛의 반사, 간격 [0, 255](정보 제공용) 및 [0, 1](신경망에 공급하기 위한 실제 입력 ).

대기 시간 광 센서의 판독값을 설정하려면 다양할 수 있습니다. 각 전자 부품에 따라, 따라서 안정적인 감지를 보장하기 위해 좋은 지연을 주는 것이 좋습니다. 제 경우에는 500ms의 지연 시간을 주었지만 처음에는 더 큰 값을 사용한 다음 비정상 동작 직전까지 줄이는 것이 좋습니다.

감지 시 수집된 RGB 값(0에서 1 사이)은 실제 색상 인식을 수행하는 MLP에 공급됩니다. Arduino에서 실행되는 MLP의 경우 Neurona를 사용하고 있습니다. - arduino에서 ANN을 쉽게 사용하기 위해 작성한 라이브러리로 Arduino IDE에서 Library Manager로 설치할 수 있습니다. 이 게시물도 확인하세요. 자세한 내용은.

앞서 언급했듯이 네트워크는 이미 훈련되었으며 프로젝트 코드에서 감지할 준비가 되었습니다. 내가 개발한 Playground를 사용하여 훈련되었으며, 조정된 가중치를 코드에 포함하여 Neurona 라이브러리가 네트워크를 작동할 준비가 되도록 합니다.

테스트

정보 제공을 위해 데이터 세트에서 일부 색상을 추출하여 일부 인식 테스트를 수행했습니다.

그림 밖의 숫자는 식별을 위해 사용되고 그림 안의 숫자는 오분류를 나타내며 대신 어떤 색상이 분류되었는지 나타냅니다. 이 색상은 잉크젯 프린터로 아황산지에 인쇄되었습니다. 이 게시물의 시작 부분에 있는 비디오에서 작은 종이 사각형을 확인하세요. 따라서 개체 색상 감지에 적합한 불투명한 재질로 구성됩니다.

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

코드

컬러 센서 프로토타입
arduino로 보낼 코드는 colorSensor 폴더 안에 있습니다. 전자 회로가 제시된 회로도에 따라 구축되었고 Neurona 라이브러리가 제대로 설치되었는지 확인하십시오(Arduino 라이브러리 관리자에서 설치할 수 있음).https://github.com/moretticb/ColorSensor/

회로도

LCD 디스플레이의 지침에 따라 푸시 버튼을 사용하십시오.

제조공정

  1. 저항기 색상 코드
  2. 갈증 경보 식물 알람
  3. 이탈리아어 단어 시계
  4. Arduino를 사용한 간단한 장애물 센서
  5. Sigfox kWh 미터
  6. 블루투스 온도 모니터
  7. 제스처 제어 잠금
  8. 컴패니언 IC
  9. Arduino용 절연 아날로그 입력
  10. 반응 시간 측정