Nội Dung Bài Viết
Cảm biến màu sắc TCS3200
Cảm biến màu TCS3200 tích hợp 1 dãy bộ dò ánh sáng quang bên trong, với mỗi cảm biến ứng với các màu đỏ, xanh lá, xanh dương. Các bộ lọc của mỗi màu được phân bố đều khắp cảm biến để loại bỏ sai lệch vị trí giữa các màu sắc. Bên trong cảm biến có bộ dao động tạo ra sóng vuông có tần số là tỷ lệ thuận với cường độ của màu sắc được lựa chọn.
Sơ đồ chân IC cảm biến màu sắc TCS3200.
Tên chân | I/O | Mô tả |
S0, S1 (1, 2) | I | dùng để chọn tỉ lệ tần số đầu ra |
OE (3) | I | cho phép xuất tần số ở chân OUT |
GND (4) | mass | |
VDD (5) | nguồn 2,7-5,5V | |
OUT (6) | O | đưa ra tín hiệu tần số |
S2, S3 (7, 8) | I | dùng để chọn kiểu photodiode |
Tính năng
- 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.
- Dễ dàng giao tiếp với vi điều khiển.
- Điện áp đầu vào 2.7-5.5V.
Cấu tạo cảm biến màu
+Khối đầu tiên là mảng ma trận 8×8 gồm các photodiode.Bao gồm 16 photodiode có thể lọc màu sắc xanh dương (Blue),16 photodiode có thể lọc màu đỏ (Red),16 photodiode có thể lọc màu xanh lá(Green) và 16 photodiode trắng không lọc (Clear).Tất cả photodiode cùng màu được kết nối song song với nhau ,và được đặt xen kẽ nhau nhằm mục đích chống nhiễu.
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 .Có nghĩa nó chỉ tiếp nhận các ánh sáng có cùng màu với loại photodiode tương ứng và không tiếp nhận các ánh sáng có màu sắc khác.
Việc lựa chọn 4 loại photodiode này thông qua 2 chân đầu vào S2,S3 :
+Khối thứ 2 là bộ chuyển đổi dòng điện từ đầu ra khối thứ nhất thành tần số.
Tần số đầu ra có độ rộng xung 50% và tỉ lệ với ánh sáng có cường độ và mầu sắc khác nhau.
Tần số đầu ra nằm trong khoảng 2Hz-500Khz .
Ta có thể lựa chọn tỉ lệ tần số đầu 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ụ : Tần số khi S0=H,S1=H -Fout=500Khz thì:
- S0=H,S1=L -Fout=100Khz
- S0=L,S1=H -Fout=10Khz
- S0=L,S1=L -Fout=0
Nguyên lí hoạt động
Ánh sáng trắng là hỗn hợp rất nhiều ánh sáng có bước sóng màu sắc khác nhau.
Khi ta chiếu ánh sáng trắng vào một vật thể bất kì .Tại bề mặt vật thể sẽ xảy ra hiện tượng hấp thụ và phản xạ ánh sáng .
Ví dụ : Một vật thể có màu sắc đỏ khi được chiếu ánh sáng trắng thì những ánh sáng không nằm trong dải bước sóng màu đỏ sẽ bị vật thể hấp thụ .Còn ánh sáng có bước sóng nằm trong dải màu đỏ sẽ bị phản xạ ngược trở lại .Và khiến mắt ta nhận biết vật thể đó là màu đỏ.
Dựa trên nguyên lý sự phản xạ , hấp thụ ánh sáng trắng của vật thể và sự phối chộn màu sắc bởi 3 màu cơ bản Blue,Green,Red thì TCS3200 có cấu tạo là 4 bộ lọc photodiode Blue,Green,Red và clear để nhận biết màu sắc vật thể.
Mạch sơ đồ nguyên lí module cảm biến màu sắc
Cách cấu hình các chân module để sử dụng
Module cảm biến màu sắc TCS3200 dùng để phát hiện màu sắc với sự hỗ trợ của vi điều khiển. Nhưng trên thực tế, vi điều khiển đang đo tần số đầu ra trên chân số 6.
Để xác định được màu sắc của đối tượng, chúng ta cần đo tần số đầu ra chân số 6 khi mỗi bộ lọc được kích hoạt.
- Đặt cả hai S2, S3 thành LOW, đo tần số. Bây giờ, chúng ta có được cường độ thành phần RED trong đối tượng.
- Đặt S2 thành LOW và S3 thành HIGH để có được cường độ của thành phần BLUE trong đối tượng.
- Đặt cả S2 và S3 thành HIGH và nhận được cường độ của thành phần GREEN trong đối tượng.
- So sánh tần số 3 thành phần này để xác định màu sắc thực tế của đối tượng.
Trong Arduino. chúng ta có thể sử dụng hàm “pulseIn” để xác định biến thiên tần số.
Ví dụ:
1 2 3 | digitalWrite(S2, LOW); digitalWrite(S3, LOW); //Activating photodiode with red filter red = pulseIn(outpin, LOW); |
Ở đây, ta nhận được giá trị tần số tương ứng với thành phần RED của đối tượng.
Tương tự, chúng ta thay đổi S2, S3 để lấy giá trị tần số tương ứng với thành phần GREEN, BLUE trong đối tượng.
Đối với một đối tượng màu RED, chúng ta nhận được giá trị xấp xỉ của red = 16, green = 53 và blue = 45
Cách lập trình
- Đầu tiên, kết nối các chân với module với vi điều khiển
- Đặt S0, S1 HIGH hoặc LOW để chọn tỉ lệ tần số đầu ra.
- Trong vòng lặp, chúng ta kích hoạt từng bộ lọc màu sắc bằng cách đặt S2, S3 HIGH hoặc LOW để đo tần sô trên chân 6 để có cường độ màu tương ứng. So sánh tần số của mỗi màu để xác định màu sắc của đối tượng.
Module cảm biến màu sắc TCS3200 với Arduino
Đối với Arduino, chọn tỉ lệ tần số đầu ra là 20%.
Mạch Schematic
Sơ đồ nối chân với Arduino
TCS3200 | Arduino |
VCC | 5V |
GND | GND |
S0 | D4 |
S1 | D5 |
S2 | D7 |
S3 | D6 |
OUT | D8 |
CODE
Chúng ta cần viết 2 chương trình
- Đọc và hiểu thị giá trị tần số ra màn hình serial monitor: Chúng ta cần ghi lại giá trị tần số khi đặt các màu sắc khác nhau trước cảm biến.
- Phân biệt màu sắc: Trong phần này, chúng ta cần chèn các giá trị tần số ghi lại vào chương trình để cảm biến có thể phân biệt màu khác nhau. Chúng ta sẽ phát hiện màu đỏ, xanh lục, xanh dương.
Đọc giá trị tần số
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | // 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; 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); // Reading the output frequency redFrequency = pulseIn(sensorOut, LOW); // Printing the RED (R) value Serial.print("R = "); Serial.print(redFrequency); delay(100); // Setting GREEN (G) filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency greenFrequency = pulseIn(sensorOut, LOW); // Printing the GREEN (G) value Serial.print(" G = "); Serial.print(greenFrequency); delay(100); // Setting BLUE (B) filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency blueFrequency = pulseIn(sensorOut, LOW); // Printing the BLUE (B) value Serial.print(" B = "); Serial.println(blueFrequency); delay(100); } |
Upload code xuống Arduino, mở màn hình serial monitor với baud rate ở 9600. Các bạn cần thực hiện hai phép đó: cảm biến ở xa đối tượng và cảm biến ở gần đối tượng. Ghi chép lại.
Phân biệt màu sắc
Trong chương trình này chúng ta sẽ dùng hàm map() để chuyển đổi giá trị tần số thành giá trị RGB (0-255). Trong hàm map() các bạn cần thay đổi giá trị XX thành giá trị thích hợp.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | // 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); // Reading the output frequency redFrequency = pulseIn(sensorOut, LOW); // Remaping the value of the RED (R) frequency from 0 to 255 // You must replace with your own values. Here's an example: // redColor = map(redFrequency, 70, 120, 255,0); redColor = map(redFrequency, XX, XX, 255,0); // 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); // Checks the current detected color and prints // a message in the serial monitor 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 giữa các màu khác nhau, có ba điều kiện:
- Khi R là giá trị lớn nhất (trong các tham số RGB), có một đối tượng màu đỏ
- Khi G là giá trị tối đa, có một đối tượng màu xanh lá cây
- Khi B là giá trị tối đa, có một vật thể màu xanh
Download file
Bài viết các bạn có thể tham khảo:
- Cảm biến SHT1x – SHT10, SHT11, SHT15
- Cảm ứng từ và điện dung – cảm biến công nghiệp
- Cảm biến quang: Thru -Beam, Diffuse Reflective, Retro – reflective