Hướng dẫn sử dụng Moudule cảm biến màu sắc TCS3200

Ứng dụng:Áp dụng để phân loại màu sắc, cảm ứng và hiệu chuẩn ánh sang mặt trời, kiểm tra dải đọc, kiểm tra màu sắc phù hợp.
Thông số kỹ thuật:
     + Điện áp cung cấp: (2.7V đến 5.5V)
     + Chuyển đổi từ cường độ ánh sáng sang tần số với độ 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.
     + Điện năng tiêu thụ thấp. Giao tiếp trực tiếp với vi điều khiển
Chức năng chân:
+ S0,S1 : Đầu vào chọn tỉ lệ tần số đầu ra .
+ S2,S3 : Đầu vào chọn kiểu photodiode.
+ OE : Đầu vào cho phép xuất tần số ở chân OUT.
+ OUT : Đầu ra là tần số thay đổi phụ thuộc cường độ và màu sắc.
+Linh kiện điện tử Module cảm biến màu TCS3200 với khả năng nhận biết 3 mầu cơ bản RGB và 4 đèn LED 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. Ứng dụng bao gồm kiểm tra đọc dải, phân loại theo màu sắc, cảm biến ánh sáng xung quanh và hiệu chuẩn, và kết hợp màu sắc, đó chỉ là một vài ứng dụng. TCS3200 có các bộ tách sóng quang, có 2 bộ lọc màu sắc là bộ lọc màu đỏ, xanh dương, hoặc màu xanh lá, hoặc không có bộ lọc ( rõ ràng). Các bộ lọc của mỗi màu đượ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 đầu ra sóng vuông có tần số là tỷ lệ thuận với cường độ của màu sắc lựa chọn. 
Nguyên lý hoạt động cảm biến mầu của linh kiện điện tử TCS3200 :
      + Cấu tạo cảm biến TCS3200 gồm 2 khối như hình vẽ phía dưới:
 
 
       + Khối đầu tiên là mảng ma trận 8x8 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ủa linh kiện điện tử TCS3200 trong khoảng 2HZ~500KHZ. Tần số đầu ra có dạng xung vuông với tần số khác nhau khi mà màu sắc khác nhau và cường độ sáng là khác nhau.
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 của linh kiện điện tử TCS 3200:
Á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 .
+ sơ đồ đấu chân với Arduino:
 
 
Ứng dụng minh họa: Thiết bị cảm nhận màu sắc RGB, hiển thị thông số của RGB.
Chuẩn bị phần cứng
- 1 Arduino Uno R3.
- 1 LCD 1206 Keypad Shield.
- 1 Color Sensor.
- Dây cắm.
Bạn có thể  xem hình sau đây
 
 
 Sau khi kết nối ta được như hình sau:
 
- Cắm dây USB 5V vào Arduino. Như vậy ta đã chuẩn bị xong phần cứng.
Phần lập trình , các bạn mở Arduino IDE lên và copy đoạn code dưới vào.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
#include <TimerOne.h>
#include <LiquidCrystal.h>     
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);                                        // configuration lcd
 
#define S0     13                                                                     // Please notice the Pin's define
#define S1     12
#define S2     11
#define S3     3
#define OUT    2 
#define ledRed    A1
#define ledBlu    A2
#define ledGreen  A3
 
int   g_count = 0;                                                                       // count the frequecy
int   g_array[3];                                                                          // store the RGB value
int   g_flag = 0;                                                                           // filter of RGB queue
float g_SF[3];                                                                              // save the RGB Scale factor
 
 // Init TSC230 and setting Frequency.
void TSC_Init()
{
  pinMode(S0, OUTPUT); // set ouput, input 
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(OUT, INPUT); 
  pinMode(ledRed, OUTPUT);
  pinMode(ledBlu, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  digitalWrite(S0, LOW);// OUTPUT FREQUENCY SCALING 2%
  digitalWrite(S1, HIGH); 
}
 
// Select the filter color
void TSC_FilterColor(int Level01, int Level02)
{
  if(Level01 != 0)
    Level01 = HIGH;
    
  if(Level02 != 0)
    Level02 = HIGH;
    
  digitalWrite(S2, Level01); 
  digitalWrite(S3, Level02); 
}
void TSC_Count()
{
  g_count ++ ;
}
void TSC_Callback()
{
  switch(g_flag)
  {
    case 0:
      Serial.println("->WB Start");
      TSC_WB(LOW, LOW);                                                       //Filter without Red         
      break;
    case 1:
      Serial.print("->Frequency R=");
      Serial.println(g_count);
      g_array[0] = g_count;
      TSC_WB(HIGH, HIGH);                                                     //Filter without Green        
      break;    
    case 2:
      Serial.print("->Frequency G=");        
      Serial.println(g_count);
      g_array[1] = g_count;
      TSC_WB(LOW, HIGH);                                                      //Filter without Blue
      break; 
    case 3:
      Serial.print("->Frequency B=");
      Serial.println(g_count);
      Serial.println("->WB End");
      g_array[2] = g_count;
      TSC_WB(HIGH, LOW);                                                        //Clear(no filter)   
      break;
    default:     
      g_count = 0;        
      break; 
  }
 
 void TSC_WB(int Level0, int Level1)                                    //White Balance
 {
   g_count = 0;
   g_flag ++;
   TSC_FilterColor(Level0, Level1);
   Timer1.setPeriod(1000000);
 }
 void setup()
 {
   lcd.begin(16,2);                                                                         // lcd 16x2
   TSC_Init();
   Serial.begin(9600); 
   Timer1.initialize();                                                                     // defaulte is 1s
   Timer1.attachInterrupt(TSC_Callback);  
   attachInterrupt(0, TSC_Count, RISING);   
   delay(4000); 
   for(int i=0; i<3; i++)
   Serial.println(g_array[i]);
   g_SF[0] = 255.0/ g_array[0];                                                    //R Scale factor
   g_SF[1] = 255.0/ g_array[1] ;                                                   //G Scale factor
   g_SF[2] = 255.0/ g_array[2] ;                                                   //B Scale factor
   Serial.println(g_SF[0]);
   Serial.println(g_SF[1]);
   Serial.println(g_SF[2]); 
 }
 void loop()
 {
   g_flag = 0;
   for(int i=0; i<3; i++)
   Serial.println(int(g_array[i] * g_SF[i]));
  // display result on LCD
   lcd.setCursor(0,0);
   lcd.print("RED");
   lcd.setCursor(5,0);
   lcd.print("GREEN");
   lcd.setCursor(12,0);
   lcd.print("BLU");
   lcd.setCursor(0,1);
   lcd.print(g_array[0]);
   lcd.setCursor(5,1);
   lcd.print(g_array[1]);
   lcd.setCursor(12,1);
   lcd.print(g_array[2]);
 
   // led light
   if(g_array[0]> 300 && g_array[0]< 1700 &&  g_array[0] > g_array[1] && g_array[0] > g_array[2]){
    digitalWrite(ledRed, HIGH);
    digitalWrite(ledBlu, LOW);
    digitalWrite(ledGreen, LOW);
    }
   if(g_array[1]> 300 && g_array[1]< 1700 && g_array[1] > g_array[0] && g_array[1] > g_array[2]){
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
    digitalWrite(ledBlu, LOW);
    }
   if(g_array[2]> 300 && g_array[2]< 1700 && g_array[2] > g_array[1] && g_array[2] > g_array[0]){
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledBlu, HIGH);
    }
   delay(4000); 
  // reset led
   digitalWrite(ledRed, LOW);
   digitalWrite(ledBlu, LOW);
   digitalWrite(ledGreen, LOW);
   lcd.setCursor(0,0);
   lcd.print("                ");
   lcd.setCursor(0,1);
   lcd.print("                ");
 }
 
Kết quả: https://www.youtube.com/watch?v=Yut-6E_sX0s
 

Hướng dấn add thư viện Arduino

 Tạo thư mục có tên giống như tên thư viện vào trong thư mực libraries của thư mục chứa Arduino , sau đó nén file có định dạnh Zip.

  Tiếp đó mở Arduno chọn Sketch tiếp chọn Include Library rồi chọn Add.Zip Library.. :

  Sau đó chọn file .Zip bạn đã nén và Open.. và chờ đợi kết quả ^.^

Đây là link thư viện TimeOne… tại đây

 

Bạn có thể tham khảo mua hàng tại đây

Viết đánh giá

Họ và tên:


Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML!

Bình chọn: Dở            Hay

Nhập mã bảo vệ: