이 글에서는 아두이노 컬러 소터를 만드는 방법을 보여드리겠습니다. 아래 비디오를 시청하거나 작성된 글을 읽어보세요.
설계
이 아두이노 프로젝트에는 컬러 센서(TCS3200) 하나와 하비용 서보 모터 두 개만 필요하므로, 매우 간단하면서도 만들기 재미있는 프로젝트입니다. 우선 Solidworks 3D 모델링 소프트웨어를 사용해 컬러 소터의 설계를 만들었으며, 그 작동 원리는 다음과 같습니다:
초기에 충전부에 담겨 있던 색깔 있는 스키틀즈가 상단 서보 모터에 부착된 플랫폼으로 떨어집니다.
서보 모터가 회전하여 스키틀즈를 컬러 센서 위치로 가져가면 센서가 색상을 감지합니다.
그 후 하단 서보 모터가 해당 위치로 회전하고, 상단 서보 모터가 다시 회전하여 스키틀즈가 가이드 레일로 떨어지게 합니다.
여기서 이 아두이노 프로젝트 제작에 필요한 모든 치수가 포함된 3D 모델과 도면을 다운로드할 수 있습니다.
Thangs에서 이 3D 모델을 찾아 다운로드하거나 브라우저에서 탐색할 수 있습니다.
Thangs에서 조립 3D 모델을 다운로드하세요.
다음 도면은 케이스의 모든 부품을 레이저 커팅하는 데 사용할 수 있습니다:
아두이노 컬러 소터 제작
이 프로젝트에 사용한 재료는 3mm 두께의 파이버보드입니다. 도면에 따라 파이버보드에 부품을 다시 그리고 작은 톱으로 모든 부품을 크기에 맞게 잘랐습니다.
모든 부품이 준비되면 조립을 시작했습니다. 먼저 글루건을 사용해 외부 부품들을 조립했습니다.
그리고 만능 접착제로 두 서보 모터를 각 플랫폼에 붙이고 조립체에 부착했습니다.
그 후 다시 접착제를 사용해 하단 서보 모터에 가이드 레일을, 상단 서보 모터에 필요한 지지대와 플랫폼을 부착했습니다.
다음으로 아두이노에 5V 어댑터로 전원을 공급하기 위한 스위치와 파워 잭을 장착했고, 세 번째 플랫폼에는 컬러 센서를 장착했습니다.
다음 회로도에 따라 부품들을 연결했습니다.
이 아두이노 프로젝트에 필요한 부품은 아래 링크에서 구할 수 있습니다:
TCS230 TCS3200 컬러 센서
아두이노 나노
브레드보드와 점퍼 와이어
서보 모터
스위치
파워 잭
아두이노 컬러 소터 소스 코드
이 시점에서 먼저 아두이노를 프로그래밍한 후 조립을 마무리합니다. 아두이노 코드는 다음과 같습니다:
/* 아두이노 프로젝트 - 컬러 분류 기계
* 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);
// 주파수 스케일링을 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;
}
// 사용자 정의 함수 - readColor()
int readColor() {
// 적색 필터 포토다이오드 읽기 설정
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// 출력 주파수 읽기
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
// 시리얼 모니터에 값 출력
Serial.print("R= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
// 녹색 필터 포토다이오드 읽기 설정
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
Serial.print("G= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
// 청색 필터 포토다이오드 읽기 설정
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
Serial.print("B= ");
Serial.print(frequency);
Serial.println(" ");
delay(50);
if(R < 45 & R > 32 & G < 65 & G > 55) { color = 1; } // 빨강
if(G < 55 & G > 43 & B < 47 & B > 35) { color = 2; } // 주황
if(R < 53 & R > 40 & G < 53 & G > 40) { color = 3; } // 초록
if(R < 38 & R > 24 & G < 44 & G > 30) { color = 4; } // 노랑
if(R < 56 & R > 46 & G < 65 & G > 55) { color = 5; } // 갈색
if(G < 58 & G > 45 & B < 40 & B > 26) { color = 6; } // 파랑
return color;
}
코드 설명:
"Servo.h" 라이브러리를 포함하고, 컬러 센서가 연결될 핀을 정의하며, 서보 객체를 생성하고 프로그램에 필요한 변수를 선언합니다. 설정 섹션에서는 핀을 입출력으로 정의하고, 컬러 센서의 주파수 스케일링을 설정하며, 서보 핀을 정의하고 시리얼 통신을 시작해 컬러 판독 결과를 시리얼 모니터에 출력합니다.
루프 섹션에서는 프로그램이 상단 서보 모터를 스키틀즈 충전부 위치로 이동하는 것으로 시작합니다. 115라는 값은 저의 부품과 서보 모터에 맞는 값이므로, 서보 모터의 다음 값들도 여러분의 제작에 맞게 조정해야 합니다.
"for" 루프를 사용해 서보를 회전시켜 스키틀즈를 컬러 센서 위치로 가져옵니다. 루프의 지연 시간을 변경해 회전 속도를 제어하기 위해 "for" 루프를 사용했습니다.
0.5초 지연 후, 사용자 정의 함수 readColor()를 사용해 스키틀즈의 색상을 읽습니다. 컬러 센서의 4개 제어 핀과 주파수 출력 핀을 사용해 스키틀즈의 색상을 읽습니다. 센서는 각 스키틀즈마다 빨강, 녹색, 파랑 3가지 값을 읽고, 이 값들에 따라 실제 색상을 판단합니다. TCS3200 컬러 센서 작동 원리에 대한 자세한 내용은 이전 튜토리얼을 참조하세요.
위 이미지는 각 스키틀즈 색상에 대해 센서에서 얻은 RGB 값입니다. 센서가 항상 정확하지 않기 때문에 이 값들은 달라질 수 있습니다. 따라서 "if" 문을 사용해 특정 색상에 대한 테스트 값의 ±5 정도 오차를 허용합니다. 예를 들어 빨간 스키틀즈라면 첫 번째 "if" 문이 참이 되어 color 변수에 1이 저장됩니다. 이것이 readColor() 함수의 역할이며, 이후 "switch-case" 문을 사용해 하단 서보를 해당 위치로 회전시킵니다. 마지막에 상단 서보 모터를 더 회전시켜 스키틀즈가 가이드 레일로 떨어지게 한 후 초기 위치로 돌아가 과정을 반복합니다.
설계 마무리
코드 업로드 후 글루건으로 아두이노 보드를 고정했습니다.
투명 페트병으로 충전부를 만들고 상단 부분과 함께 글루건으로 조립체에 부착해 프로젝트를 완성했습니다.