#TCS3200 #cambienmau
Cảm biến màu TCS3200 có thể phát hiện nhiều loại màu dựa trên bước sóng. Cảm biến này đặc biệt hữu ích cho các dự án nhận dạng màu sắc như phát hiện màu sắc, sắp xếp dựa vào màu sắc, đọc mã màu ..
Cảm biến màu TCS3200 - hiển thị trong hình bên dưới - sử dụng chip cảm biến TAOS TCS3200 RGB để phát hiện màu. Có bốn đèn LED trắng làm sáng đối tượng cần phát hiện màu.
Thông số kỹ thuật
- Điện áp: 2.7V đến 5.5V
- Kích thước: 28,4 × 28,4mm (1,12 × 1,12)
- Giao diện: TTL
- Độ phân giải cao và đo toàn dải màu.
Cảm biến TCS3200 hoạt động như thế nào?
TCS3200 có một loạt các photodiode với 4 bộ lọc khác nhau. Một photodiode chỉ đơn giản là một thiết bị bán dẫn chuyển đổi ánh sáng thành dòng điện. Cảm biến có:
- 16 photodiode với bộ lọc màu đỏ - nhạy cảm với bước sóng đỏ
- 16 photodiode với bộ lọc màu xanh lá cây - nhạy cảm với bước sóng xanh
- 16 photodiode với bộ lọc màu xanh - nhạy cảm với bước sóng màu xanh
- 16 photodiode không lọc
Nếu bạn nhìn kỹ hơn vào chip TCS3200, bạn có thể thấy các bộ lọc khác nhau.
Bằng cách chọn lọc chọn lọc bộ lọc photodiode, bạn có thể phát hiện ra cường độ của các màu khác nhau. Cảm biến có bộ chuyển đổi tần số hiện tại chuyển đổi các lần đọc photodiodes thành sóng vuông với tần số là
tỷ lệ với cường độ ánh sáng của màu được chọn. Tần số này là sau đó, đọc bởi Arduino - điều này được thể hiện trong hình dưới đây.
Cách nối chân
Chân cảm biến | Input/Output | Mô tả |
GND | | Chân GND |
OE(3) | I | Cho phép đầu ra (Output Enable) |
OUT(6) | O | Chân tần số đầu ra |
S0, S1 (7,8) | I | Chọn Thang đo (scale) cho tần số ra |
S2, S3 (7,8) | I | Chọn loại PhotoDiode đầu vào |
VDD (5) | | Nguồn cấp |
Thang đo tần số (Scale)
Các chân S0 và S1 được sử dụng để điều chỉnh tần số đầu ra. Nó có thể được giảm lại với giá trị đặt trước sau: 100%, 20% hoặc 2%. Chia tỷ lệ tần số đầu ra rất hữu ích để có thể đọc được bởi các loại MCU khác nhau, vì có một số loại có thể không đáp ứng được với các tần số quá cao. Sử dụng bảng dưới đây:
Thang đo tần số đầu ra | S1 | S0 |
Không có nguồn cấp | L | L |
2% | L | H |
20% | H | L |
100% | H | H |
Đối với Arduino mức scale thường là 20% thì Arduino có thể đáp ứng được.
Cảm biến màu với Arduino và TCSP3200
Sơ đồ mạch
Cách nối chân
Chân cảm biến | Chân Arduino |
S0 | Digital pin 4 |
S1 | Digital pin 5 |
VCC | 5V |
S3 | Digital pin 6 |
S4 | Digital pin 7 |
OUT | Digital pin 8 |
Chương trình
Có 2 ví dụ cho cảm biến màu
- Đọc và hiển thị tần số đầu ra trên Serial Monitor. Bạn cần ghi lại các giá trị tần số khi bạn đặt các màu sắc khác nhau phía trước cảm biến.
- Phân biệt giữa các màu khác nhau. Trong phần này, bạn sẽ chèn giá trị tần số được chọn trước đó (ví dụ 1) trên mã của bạn, để cảm biến của bạn có thể phân biệt giữa các màu khác nhau. Chúng ta sẽ phát hiện màu đỏ, xanh lá cây và xanh dương.
1. Đọc tần số đầu ra
/*********
Rui Santos
Complete project details at http://randomnerdtutorials.com
*********/
// Định nghĩa các chân nối
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
// Các tần số được đọc bởi các màu
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
void setup() {
// Cấu hình chân
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// sensorOut là input
pinMode(sensorOut, INPUT);
// Thang đo tần số là 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Begins serial communication
Serial.begin(9600);
}
void loop() {
// Chọn đọc photodiodes đỏ (RED)
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Đọc tần số
redFrequency = pulseIn(sensorOut, LOW);
// Ghi ra Serial
Serial.print("R = ");
Serial.print(redFrequency);
delay(100);
// Chọn đọc photodiodes xanh (GREEN)
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Đọc tần số
greenFrequency = pulseIn(sensorOut, LOW);
// in ra GREEN (G)
Serial.print(" G = ");
Serial.print(greenFrequency);
delay(100);
// Chọn đọc photodiodes BLUE
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Đọc tần số
blueFrequency = pulseIn(sensorOut, LOW);
// In ra giá trị BLUE (B)
Serial.print(" B = ");
Serial.println(blueFrequency);
delay(100);
}
Đầu ra trên Serial Monitor
Khi chúng ta đặt đối tượng màu xanh trước cảm biến, các giá trị tần số màu xanh (B) dao động trong khoảng từ 59 đến 223 (xem các giá trị được tô sáng).
Lưu ý: bạn có thể sử dụng các giá trị tần số này (59 và 223) trong mã của mình, bạn nên đo màu sắc cho đối tượng cụ thể của bạn với cảm biến màu của riêng bạn. Sau đó, lưu lại giới hạn tần số trên và dưới của bạn cho màu xanh lam, vì bạn sẽ cần chúng sau đó. Lặp lại quá trình này với các đối tượng màu xanh lá cây và màu đỏ và viết xuống giới hạn tần số trên và dưới cùng cho mỗi màu.
2. Phân biệt giữa các màu khác nhau
Ví dụ này ánh xạ các giá trị tần số thành các giá trị RGB (nằm trong khoảng từ 0 đến 255).
Ở bước trước, tần số tối đa cho màu xanh là 233 và mức tối thiểu là 59. Vì vậy, 59 trong tần số tương ứng với 255 (trong RGB) và 223 ở tần số là 0 (trong RGB). Chúng tôi sẽ làm điều này với chức năng Arduino map (). Trong hàm map () bạn cần để thay thế các tham số XX bằng các giá trị của riêng bạn.
/*********
Rui Santos
Complete project details at http://randomnerdtutorials.com
*********/
// TCS230 or TCS3200 pins wiring to Arduino
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
// Stores frequency read by the photodiodes
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
// Stores the red. green and blue colors
int redColor = 0;
int greenColor = 0;
int blueColor = 0;
void setup() {
// Setting the outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Setting the sensorOut as an input
pinMode(sensorOut, INPUT);
// Setting frequency scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Begins serial communication
Serial.begin(9600);
}
void loop() {
// Setting RED (R) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Đọc tần số đầu ra
redFrequency = pulseIn(sensorOut, LOW);
// Map lại các giá trị sao cho giao động từ 0, 255.
// Thay thế XX, XX thành các giá trị của bạn, Màu đỏ là từ 70 đến 120
// redColor = map(redFrequency, 70, 120, 255,0);
redColor = map(redFrequency, XX, XX, 255,0);
// long map(long x, long in_min, long in_max, long out_min, long out_max) {
// return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
// }
// Printing the RED (R) value
Serial.print("R = ");
Serial.print(redColor);
delay(100);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
greenFrequency = pulseIn(sensorOut, LOW);
// Remaping the value of the GREEN (G) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// greenColor = map(greenFrequency, 100, 199, 255, 0);
greenColor = map(greenFrequency, XX, XX, 255, 0);
// Printing the GREEN (G) value
Serial.print(" G = ");
Serial.print(greenColor);
delay(100);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
blueFrequency = pulseIn(sensorOut, LOW);
// Remaping the value of the BLUE (B) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// blueColor = map(blueFrequency, 38, 84, 255, 0);
blueColor = map(blueFrequency, XX, XX, 255, 0);
// Printing the BLUE (B) value
Serial.print(" B = ");
Serial.print(blueColor);
delay(100);
// Kiểm tra mã màu
//
if(redColor > greenColor && redColor > blueColor){
Serial.println(" - RED detected!");
}
if(greenColor > redColor && greenColor > blueColor){
Serial.println(" - GREEN detected!");
}
if(blueColor > redColor && blueColor > greenColor){
Serial.println(" - BLUE detected!");
}
}
Để phân biệt các màu khác nhau, chúng ta có ba điều kiện:
Khi R là giá trị tối đa (trong các tham số RGB), chúng tôi biết rằng chúng tôi có một vật màu đỏ
Khi G là giá trị tối đa, chúng ta biết rằng chúng ta có một đối tượng màu xanh lá cây
Khi B là giá trị tối đa, chúng ta biết rằng chúng ta có một đối tượng màu xanh
Bây giờ, đặt một cái gì đó ở phía trước của cảm biến. Nó sẽ in trong màn hình nối tiếp của bạn màu sắc được phát hiện: đỏ, xanh lá cây hoặc xanh dương. Cảm biến của bạn cũng có thể phát hiện các màu khác với nhiều hơn nếu có các thông số để đối sánh.