Nhận biết màu sắc dùng cảm biến màu TCS3200

0
13325
Cảm biến màu sắc TCS3200

Trong bài viết này, tôi sẽ hướng dẫn các bạn thiết kế một ứng dụng nhận biết màu sắc đơn giản dùng module cảm biến màu TCS3200 kết hợp với Arduino. TCS3200 được sử dụng để nhận biết màu sắc bằng cách đo phản xạ 3 màu sắc cơ bản từ vật thể là đỏ, xanh lá và xanh dương từ đó xuất ra tần số xung tương ứng với 3 màu này qua các chân tín hiệu, đo 3 tần số xung này và qua 1 vài bước chuyển đổi nhất định là bạn sẽ có được thông tin màu sắc của vật thể.

Giới thiệu module cảm biến màu TCS3200

Module cảm biến màu TCS3200 là một module cảm biến phát hiện đầy đủ màu sắc, bao gồm cả cảm biến TCS3200 với khả năng nhận biết 3 màu cơ bản RGB và 4 led màu trắng. Các TCS3200 có thể phát hiện và đo lường gần như tất cả màu sắc có thể nhìn thấy. Các bộ lọc màu bên trong TCS3200 được phân bố đều khắp các mảng để loại bỏ sai lệch vị trí giữa các điểm màu. Bên trong là một bộ dao động tạo ra sóng vuông ở ngõ ra tỉ lệ với cường độ màu sắc.  

Hình dạng của cảm biến màu TCS3200

Sơ đồ chân

Sơ đồ chân cảm biến màu TCS3200

Tên chân Mô tả
S1,S0 (1,2) Ngõ vào chọn tỉ lệ tần số ngõ ra
OE (3) Ngõ vào cho phép xuất tần số ở chân OUT (tích cực mức thấp)
GND (4) Chân nối đất
VDD (5) Chân cấp nguồn (2,7 – 5,5V)
OUT (6) Ngõ ra là tần số thay đổi phụ thuộc cường độ và màu sắc.
S2, S3 (7,8) Ngõ vào chọn loại photodiode

Thông số kỹ thuật

  • Chuyển đổi cường độ ánh sáng thành tần số có độ phân giải cao.
  • Lập trình lựa chọn bộ lọc màu sắc khác nhau và dạng tần số xuất ra.
  • Giao tiếp trực tiếp với vi điều khiển.
  • Điện áp  2.7 – 5.5V.
  • Kích thước: 28.4 x 28.4mm.
  • Tần số ngõ ra có độ rộng xung 50%
  • Tần số tỉ lệ với ánh sáng có cường độ và màu sắc khác nhau.
  • Tần số ngõ ra nằm trong khoảng 2 Hz- 500KHz.

Nguyên lý hoạt động

Cảm biến màu TCS3200 gồm 2 khối như hình vẽ phía dưới:

Sơ đồ khối cảm biến màu TCS3200

Khối đầu tiên là mảng ma trận 8×8 gồm các photodiode. Photodiode đơn giản là một linh kiện bán dẫn chuyển đổi ánh sáng thành dòng điện.
  • 16 photodiode có thể lọc màu đỏ (red)
  • 16 photodiode có thể lọc màu xanh lá (green)
  • 16 photodiode có thể lọc màu xanh dương (blue)
  • 16 photodiode trắng không lọc (clear)

Bản chất của 4 loại photodiode trên như là các bộ lọc ánh sáng có màu sắc khác nhau. Khi lựa chọn một bộ lọc màu nào nó sẽ cho phép chỉ nhận biết 1 màu và các màu khác sẽ bị chặn. Ví dụ, khi lựa chọn bộ lọc màu xanh lá (green) thì chỉ có ánh sáng tới màu xanh lá mới có thể được thông qua, màu đỏ và màu xanh dương sẽ bị chặn lại như hình minh họa bên dưới. Vì vậy, chúng ta có thể nhận được cường độ ánh sáng màu xanh lá. Tương tự như vậy, khi lựa chọn các bộ lọc màu khác thì chúng ta có thể nhận được ánh sáng màu đỏ (red) hoặc màu xanh dương (blue).

Lọc màu

Tại một thời điểm chỉ có 1 bộ lọc màu được chọn. Việc chọn bộ lọc màu được thực hiện thông qua 2 chân S2 và S3 như bảng dưới đây.

S2 S3 Loại bộ lọc
L L Red
L H Blue
H L Clear (no filter)
H H Green
Khối thứ hai trong cảm biến màu TCS3200 là bộ chuyển đổi dòng điện sang tần số. Các giá trị đọc từ photodiode được chuyển đổi thành sóng vuông có tần số tỷ lệ thuận với cường độ ánh sáng phản xạ khỏi bề mặt của vật thể. Cuối cùng, chúng ta dùng vi điều khiển đề đọc sóng vuông ngõ ra và lấy kết quả màu sắc.
Các chân S0 và S1 được sử dụng để điều chỉnh tần số đầu ra. Nó có thể được chia tỷ lệ thành các giá trị đặt trước sau: 2%, 20% hoặc 100%. Các bộ vi điều khiển khác nhau có cấu hình cho bộ định thời khác nhau. Chức năng chia tỷ lệ tần số về cơ bản cho phép ngõ ra của cảm biến được tối ưu hóa cho các bộ vi điều khiển khác nhau.
 
S0 S1 Tỷ lệ tần số ngõ ra
L L Power down
L H 2%
H L 20%
H H 100%
Tần số ngõ ra của module cảm biến màu TCS3200 trong khoảng 2 Hz ~ 500 kHz. Tần số ngõ ra có dạng xung vuông với tần số khác nhau tương ứng với màu sắc và cường độ sáng là khác nhau.
Chúng ta có thể lựa chọn tỉ lệ tần số ngõ ra ở các mức khác nhau như bảng trên cho phù hợp với phần cứng đo tần số .
Ví dụ :
  • Khi S0 = L, S1 = L thì fout = 0
  • Khi S0 = L, S1 = H thì fout = 10Khz
  • Khi S0 = H, S1 = L thì fout = 100Khz
  • Khi S0 = H, S1 = H thì fout = 500Khz

Download datasheet cảm biến màu TCS3200 tại đây.

Mạch ứng dụng nhận biết màu sắc dùng Arduino và cảm biến màu TCS3200

Trong ví dụ này, bạn sẽ thấy cách thực hiện để phát hiện màu sắc dùng Arduino và module cảm biến màu TCS3200. Mặc dù cảm biến này không chính xác lắm, nhưng hoạt động tốt để phát hiện màu sắc trong các ứng dụng đơn giản.

Linh kiện cần thiết

Số TT Tên linh kiện Số lượng
1 ARDUINO UNO R3 1
2 Module cảm biến màu TCS3200 1
3 LCD 16×2 1
4 Testboard 1
5 Dây cắm tesboard  

Sơ đồ mạch

Kết nối cảm biến màu TCS3200 và Arduino

Chương trình

// Kết nối chân TCS3200 với Arduino

#define S1 4

#define S0 5

#define S3 6

#define S2 7

#define sensorOut 8

// Lưu trữ tần số được đọc bởi các photodiode

int redFrequency = 0;

int greenFrequency = 0;

int blueFrequency = 0;

void setup() {

     // Thiết lập các chân ngõ ra

     pinMode(S0, OUTPUT);

     pinMode(S1, OUTPUT);

     pinMode(S2, OUTPUT);

     pinMode(S3, OUTPUT);

     // Thiết lập sensorOut là ngõ vào

     pinMode(sensorOut, INPUT);

     // Thiết lập tỷ lệ tần số là 20%

     digitalWrite(S0,HIGH);

     digitalWrite(S1,LOW);

     // Thiết lập tốc độ cho giao tiếp nối tiếp

     Serial.begin(9600);

}

void loop() {

     // Thiết lập photodiode lọc màu đỏ

     digitalWrite(S2,LOW);

     digitalWrite(S3,LOW);

     // Đọc tần số ngõ ra

     redFrequency = pulseIn(sensorOut, LOW);

     // In giá trị đỏ (R)

     Serial.print(“R = “);

     Serial.print(redFrequency);

     delay(100);

     // Thiết lập photodiode lọc màu xanh lá cây

     digitalWrite(S2,HIGH);

     digitalWrite(S3,HIGH);

     // Đọc tần số ngõ ra

     greenFrequency = pulseIn(sensorOut, LOW);

     // In giá trị màu xanh lá cây

     Serial.print(” G = “);

     Serial.print(greenFrequency);

     delay(100);

     // Thiết lập photodiode lọc màu xanh dương

     digitalWrite(S2,LOW);

     digitalWrite(S3,HIGH);

     // Đọc tần số ngõ ra

     blueFrequency = pulseIn(sensorOut, LOW);

     // In giá trị màu xanh dương

     Serial.print(” B = “);

     Serial.println(blueFrequency);

     delay(100);

}

Khi chạy chương trình, trên màn hình Serial Monitor, chúng ta sẽ nhận được giá trị tần số của các màu khác nhau. Các giá trị này phụ thuộc vào tỷ lệ tần số đã chọn, cũng như cường độ của ánh sáng xung quanh.

Nếu bạn muốn hiển thị tần số của các màu trên LCD thì bạn có thể tham khảo sơ đồ kết nối và chương trình dưới đây.

Xem thêm bài viết: Giao tiếp LCD 16×2 với Arduino

// Chân 10 của Arduino kết nối với TCS3200

int OutPut= 10;

unsigned int frequency = 0;

#include <LiquidCrystal.h>   

// Khởi tạo thư viện LCD với các số của các chân giao tiếp

LiquidCrystal lcd(8, 9, 7, 11, 12, 13); //RS,EN,D4,D5,D6,D7

void setup()

{

                // Thiết lập số cột và hàng của LCD

                lcd.begin(16, 2);

                // Chân 2, 3, 4, 5 là các chân ngõ ra

                pinMode(2, OUTPUT);

                pinMode(3, OUTPUT);

                pinMode(4, OUTPUT);

                pinMode(5, OUTPUT);

                // Chân 10 là chân ngõ vào

                pinMode(10, INPUT);

               // Thiết lập tỷ lệ tần số là 20%

                digitalWrite(2,HIGH);

                digitalWrite(3,LOW);

}

void loop()

{

                //In ký tự R(red) – màu đỏ

                lcd.print(“R=”);

                //Thiết lập photodiode lọc màu đỏ

                digitalWrite(4,LOW);

                digitalWrite(5,LOW);

                //Đọc tần số

                frequency = pulseIn(OutPut, LOW);

                //Hiển thị tần số màu đỏ trên LCD

                lcd.print(frequency);

                lcd.print(”  “);

                //Di chuyển con trỏ đến vị trí 7

                lcd.setCursor(7, 0);

                delay(500);

               //In ký tự B(blue) – màu xanh dương

               lcd.print(“B=”);

              //Thiết lập photodiode lọc màu xanh dương

                digitalWrite(4,LOW);

                digitalWrite(5,HIGH);

                //Đọc tần số

                frequency = pulseIn(OutPut, LOW);

               //Hiển thị tần số màu xanh dương lên LCD

                lcd.print(frequency);

                lcd.print(”  “);

                lcd.setCursor(0, 1);

                delay(500);

               //In ký tự G(green) – màu xanh lá

               lcd.print(“G=”);

               //Thiết lập photodiode lọc màu xanh lá

                digitalWrite(4,HIGH);

                digitalWrite(5,HIGH);

                //Đọc tần số

                frequency = pulseIn(OutPut, LOW);

               //Hiển thị tần số màu xanh lá lên LCD

                lcd.print(frequency);

                lcd.print(”    “);

                lcd.setCursor(0, 0);

                delay(500);        

}   

Nếu bạn muốn dùng module cảm biến màu TCS3200 để nhận biết được nhiều màu hơn thay vì chỉ là 3 màu: đỏ, xanh lá, xanh dương thì bạn có thể tham khảo thêm bài viết này nhé.        

Ứng dụng

Cảm biến màu có nhiều ứng dụng trong các lĩnh vực xử lý hình ảnh, xử lý tín hiệu kỹ thuật số, phát hiện đối tượng, nhận dạng màu sắc, v.v.

Trong các ngành công nghiệp, cảm biến màu thường được sử dụng để phân loại các đối tượng dựa vào màu sắc.

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây