Học Arduino_Dự án 68: Thiết kế hệ thống phân loại màu dùng cảm biến màu sắc TCS2300

No Comments

Trong dự án này ta sẽ

Thiết kế một mô hình có thể phân biệt màu sắc bằng cảm biến TCS2300,kết hợp với cơ cấu đẩy và băng trượt sản phẩm sau khi phân loại cụ thể.

Một ống những hạt skittles theo màu được giữ ở đầu kệ và gắn trên motor servo nằm trên cùng

Sản phẩm đưa xuống  sẽ được servo ở phía trên sẽ quay và đưa sản phẩm vào lỗ để rơi xuống cầu trượt.Khi sản phẩm vừa đến lỗ,cảm biến màu TCS3200 sẽ nhận biết sản phẩm theo màu nào,khi đó servo thứ 2 sẽ quay và đưa cầu trượt đến  khay tròn chứa những hạt theo màu,tương ứng với góc quay mà ta chọn của servo.Để có thể thực hiện dự án,ta phải kết nối các cấu kiện tạo thành 1 cơ cấu hoàn thiện cho việc phân loại sản phẩm,dưới đây là bản vẽ đã có sẵn.

Phần cứng cụ thể

theo chiều kim đồng hồ từ trên xuống ta sẽ có Arduino Nano,cảm biến màu TCS2300,servo SG90,trong dự án này ta dùng 2 servo SG90. Tất cả các linh kiện trên có thể được tìm thấy trong những bộ KIT về arduino hay trong những cửa hàng bán linh kiện điện tử.

Vật liệu sử dụng cho bộ cơ cấu có thể là mica,gỗ,nhưng ở đây,ta sử dụng miếng gỗ ép dày khoảng 3mm. Tất cả các chi tiết được cắt theo đúng kích thước bản vẽ để sau đó có thể ghép lại

Sau khi đã cắt tất cả xong,ta sẽ bắt đầu lắp ráp và cố định các chi tiết bằng keo,ta chia cơ cấu ra 3 ngăn,từ dưới lên là ngăn 1,2,3
 
Sau đó ta sẽ dùng keo,dán tiếp các thiết bị,trước tiên là hai động cơ servo ở ngăn 1 và 2 được dán cố định vào để tạo thành cơ cấu xoay- phân loại.

 
Ta sẽ dán tiếp tục ở ngăn thứ 3 là cảm biến và các mạch điều khiển,ở đây 4 mắt nhận của sensor sẽ đưa xuống ngăn thứ 2 để nhận biết màu,board Arduino Nano được đăt ở ngăn trên, 1 jack cắm sẽ được gắn cố định vào thành kèm theo dây điện để kết nối nguồn cho  board Arduino.

Kết nối mạch

Dựa trên các chi tiết và linh kiện đã được gắn lên cơ cấu,ta sẽ kết nối các dây nguồn và dây tín hiệu theo sơ đồ sau.


code điều khiển

/*     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;  
}

Nguồn tham khảo

https://howtomechatronics.com/arduino-projects/

Sản phẩm được quan tâm

Nhận bài viết mới

Các bài viết chia sẻ đến cộng đồng rất chât lượng, mang lại rất nhiều kiến thức mới. Đừng bỏ lỡ bất kỳ bài viết nào của chung tối, hãy đăng ký để nhận bài viết mới qua Mail của bạn

Đăng ký để không bỏ lỡ bài viết nào!

Fields marked with an * are required

Danh mục




More from our blog

See all posts
No Comments
 

Leave a Comment