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

Arduino 색상 분류기 프로젝트

<메인 클래스="사이트 메인" id="메인">

이 기사에서는 Arduino 색상 분류기를 만드는 방법을 보여 드리겠습니다. 다음 동영상을 보거나 아래에 작성된 기사를 읽을 수 있습니다.

디자인

이 Arduino 프로젝트에 필요한 것은 컬러 센서(TCS3200) 1개와 취미용 서보 모터 2개뿐입니다. 이 덕분에 이 프로젝트는 매우 간단하지만 구축하는 것은 매우 재미있습니다. 먼저 Solidworks 3D 모델링 소프트웨어를 사용하여 색상 분류기의 디자인을 만들었고 작동 원리는 다음과 같습니다.

<그림 클래스="aligncenter">

여기에서 3D 모델과 이 Arduino 프로젝트를 구축하는 데 필요한 모든 치수의 도면을 다운로드할 수 있습니다.

이 3D 모델을 찾아 다운로드할 수 있을 뿐만 아니라 Thangs의 브라우저에서 탐색할 수도 있습니다.

Thangs에서 어셈블리 3D 모델을 다운로드하십시오.

다음 도면은 케이스의 모든 부품을 레이저 절단하는 데 사용할 수 있습니다.

Arduino 색상 분류기 구축

이 프로젝트에 사용한 재료는 3mm 눈금 섬유판입니다. 나는 그림에 따라 섬유판에 부품을 다시 그리고 작은 손톱을 사용하여 모든 부품을 크기에 맞게 자릅니다.

<그림 클래스="aligncenter">

모든 부품이 준비되면 조립을 시작했습니다. 먼저 글루건을 사용하여 외부 부품을 조립했습니다.

<그림 클래스="aligncenter">

그런 다음 다목적 접착제를 사용하여 두 개의 서보 모터를 플랫폼에 붙이고 어셈블리에 부착했습니다.

그 후 다시 접착제를 사용하여 하단 서보 모터에 가이드 레일을 부착하고 상단 서보 모터에 필요한 지지대와 플랫폼을 부착했습니다.

<그림 클래스="aligncenter">

다음으로 5V 어댑터로 Arduino에 전원을 공급하기 위한 스위치와 전원 잭을 삽입하고 세 번째 플랫폼에는 컬러 센서를 삽입했습니다.

<그림 클래스="aligncenter">

다음 회로도에 따라 구성 요소를 함께 연결했습니다.

아래 링크에서 이 Arduino 프로젝트에 필요한 구성요소를 얻을 수 있습니다.

Arduino 색상 분류기 소스 코드

이 시점에서 먼저 Arduino를 프로그래밍한 다음 어셈블리를 완료해야 합니다. Arduino 코드는 다음과 같습니다.

/*     Arduino Project - Color Sorting Machine
 *
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *
 */
#include <Servo.h>

#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6

Servo topServo;
Servo bottomServo;

int frequency = 0;
int color=0;

void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);

  // Setting frequency-scaling to 20%
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);

  topServo.attach(7);
  bottomServo.attach(8);

  Serial.begin(9600);
}

void loop() {

  topServo.write(115);
  delay(500);
  
  for(int i = 115; i > 65; i--) {
    topServo.write(i);
    delay(2);
  }
  delay(500);
  
  color = readColor();
  delay(10);  

  switch (color) {
    case 1:
    bottomServo.write(50);
    break;

    case 2:
    bottomServo.write(75);
    break;

    case 3:
    bottomServo.write(100);
    break;

    case 4:
    bottomServo.write(125);
    break;

    case 5:
    bottomServo.write(150);
    break;

    case 6:
    bottomServo.write(175);
    break;
    
    case 0:
    break;
  }
  delay(300);
  
  for(int i = 65; i > 29; i--) {
    topServo.write(i);
    delay(2);
  } 
  delay(200);
  
  for(int i = 29; i < 115; i++) {
    topServo.write(i);
    delay(2);
  }
  color=0;
}

// Custom Function - readColor()
int readColor() {
  // Setting red filtered photodiodes to be read
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int R = frequency;
  // Printing the value on the serial monitor
  Serial.print("R= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(50);

  // Setting Green filtered photodiodes to be read
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int G = frequency;
  // Printing the value on the serial monitor
  Serial.print("G= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(50);

  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int B = frequency;
  // Printing the value on the serial monitor
  Serial.print("B= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.println("  ");
  delay(50);

  if(R<45 & R>32 & G<65 & G>55){
    color = 1; // Red
  }
  if(G<55 & G>43 & B<47 &B>35){
    color = 2; // Orange
  }
  if(R<53 & R>40 & G<53 & G>40){
    color = 3; // Green
  }
  if(R<38 & R>24 & G<44 & G>30){
    color = 4; // Yellow
  }
  if(R<56 & R>46 & G<65 & G>55){
    color = 5; // Brown
  }
  if (G<58 & G>45 & B<40 &B>26){
    color = 6; // Blue
  }
  return color;  
}Code language: Arduino (arduino)

코드 설명:

따라서 "Servo.h" 라이브러리를 포함하고, 컬러 센서가 연결될 핀을 정의하고, 서보 객체를 생성하고, 프로그램에 필요한 일부 변수를 선언해야 합니다. 설정 섹션에서 핀을 출력 및 입력으로 정의하고, 컬러 센서에 대한 주파수 스케일링을 설정하고, 서보 핀을 정의하고, 직렬 모니터에서 색상 판독 결과를 인쇄하기 위해 직렬 통신을 시작해야 합니다.

루프 섹션에서 프로그램은 상단 서보 모터를 스키틀 차저 위치로 이동하는 것으로 시작합니다. 이 값 115는 내 부품과 서보 모터에 적합하므로 빌드에 따라 이 값과 서보 모터에 대한 다음 값을 조정해야 합니다.

다음으로 "for" 루프를 사용하여 스키틀을 회전하고 컬러 센서의 위치로 가져옵니다. 루프의 지연 시간을 변경하여 회전 속도를 제어할 수 있도록 "for" 루프를 사용하고 있습니다.

다음으로 0.5초 지연 후 맞춤형 함수인 readColor()를 사용하여 스키틀의 색상을 읽습니다. 다음은 사용자 정의 함수의 코드입니다. 4개의 제어 핀과 컬러 센서의 주파수 출력 핀을 사용하여 스키틀의 색상을 읽습니다. 센서는 각 스키틀(빨강, 녹색, 파랑)에 대해 3가지 다른 값을 읽고 이 값에 따라 실제 색상이 무엇인지 알려줍니다. TCS3200 컬러 센서의 작동 방식에 대한 자세한 내용은 이에 대한 이전의 자세한 자습서를 참조하십시오.

<그림 클래스="aligncenter">

다음은 각 스키틀에 대해 센서에서 얻은 RGB 값입니다. 센서가 항상 정확하지 않기 때문에 이러한 값은 다를 수 있습니다. 따라서 이러한 "if" 문을 사용하여 특정 색상에 대해 테스트된 값의 약 +-5 정도의 센서 오류를 허용합니다. 예를 들어 Red Skittle이 있는 경우 첫 번째 "if" 문은 true이고 변수 "color"는 값 1을 얻습니다. 이것이 readColor() 사용자 정의 함수가 하는 일이며 그 후에 "switch-case ” 문에서 하단 서보를 특정 위치로 회전시킵니다. 끝에서 우리는 스키틀이 가이드 레일에 떨어질 때까지 상단 서보 모터를 더 회전시키고 프로세스를 반복할 수 있도록 다시 초기 위치로 다시 보냅니다.

디자인 마무리


코드를 업로드한 후 글루건으로 아두이노 보드를 고정했습니다.

<그림 클래스="aligncenter">

그런 다음 투명한 플라스틱 병을 사용하여 충전기를 만들고 상단 부분과 함께 조립에 접착하여 프로젝트를 완료했습니다.

<그림 클래스="aligncenter">

아래 댓글 섹션에서 언제든지 질문하세요.


제조공정

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