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.
Sơ đồ chân
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:
- 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).
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 |
S0 | S1 | Tỷ lệ tần số ngõ ra |
L | L | Power down |
L | H | 2% |
H | L | 20% |
H | H | 100% |
- 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
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.