Cảm biến màu TCS3200 ( 5C5.2 )

109.000₫

Hết hàng


Ứ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("                ");

 }

02363 899 354