Em đang tìm hiểu về con cảm biến này, trên mạng thì em chỉ thấy có 1 đoạn code mẫu dành cho arduino. Do không học arduino nên em có một số đoạn không rõ lắm. Đọc datasheet của con này lúc đầu thấy cũng khá đơn giản, nhưng đến lúc lập trình cho nó em cảm thấy mông lung vì không biết cần phải bắt đầu từ đâu. Vậy có bác nào rành về cái này và đã dùng con này trên 8051, AVR hoặc ARM thì có thể giúp em được không ạ.
Đây là vài dòng giới thiệu về em nó:
Module cảm biến màu TCS3200 là một modulecảm biến phát hiện đầy đủ màu sắc, bao gồm cả 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, hoặc màu xanh, 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.
Module cảm biến màu TCS3200
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
Có khả năng lập trình để nhận biết đầy đủ các màu sắc
Điện năng tiêu thụ thấp
Giao tiếp trực tiếp với vi điều khiển
S0 ~ S1: Dùng để lựa chọn tỉ lệ tần số đầu ra
S2 ~ S3: Dùng để lựa chọn kiểu photodiode
OUT Pin: Đầu ra tần số
OE Pin: Tần số đầu ra cho phép hoạt động (hoạt động ở mức thấp).
Hỗ trợ đèn LED bổ sung và kiểm soát ánh sáng
Kích thước: 28.4x28.4mm
Nguyên tắc nhận biết màu
TCS3200 có bộ lọc màu, khi lựa chọn một bộ lọc màu 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 các bộ lọc màu đỏ, Chỉ có ánh sáng tới màu đỏ có thể được thông qua, màu xanh và màu xanh lá cây sẽ được ngăn chặn. Vì vậy chúng ta có thể nhận được cường độ ánh sáng màu đỏ. Tương tự như vậy, khi lựa chọn các bộ lọc khác mà chúng ta có thể nhận được ánh sáng màu xanh hoặc màu xanh lá cây.
Cách thiết lập màu sắc cho TCS3200
Tần số đầu ra của 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.
Chúng ta có thể lựa chọn tỉ lệ giữa cừng độ sáng và màu sắc theo bảng sau:
Trên module này cũng có chân LED EN đây là chân điều khiển đèn LED để tắt hoặc bật
Cách thiết lập tần số cho TCS3200
Đây là code mẫu cho arduino
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int flag=0;
byte counter=0;
byte countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(115200);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
}
void TCS()
{
flag=0;
digitalWrite(s1,HIGH);
digitalWrite(s0,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
attachInterrupt(0, ISR_INTO, LOW);
timer0_init();
}
void ISR_INTO()
{
counter++;
}
void timer0_init(void)
{
TCCR2A=0x00;
TCCR2B=0x07; //the clock frequency source 1024 points
TCNT2= 100; //10 ms overflow again
TIMSK2 = 0x01; //allow interrupt
}
int i=0;
ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt
executive function
{
TCNT2=100;
flag++;
if(flag==1)
{
countR=counter;
Serial.print("red=");
Serial.println(countR,DEC);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
else if(flag==2)
{
countG=counter;
Serial.print("green=");
Serial.println(countG,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
else if(flag==3)
{
countB=counter;
Serial.print("blue=");
Serial.println(countB,DEC);
Serial.println("\n");
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
else if(flag==4)
{
flag=0;
}
counter=0;
}
void loop()
{
TCS();
while(1);
}
Đây là vài dòng giới thiệu về em nó:
Module cảm biến màu TCS3200 là một modulecảm biến phát hiện đầy đủ màu sắc, bao gồm cả 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, hoặc màu xanh, 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.
Module cảm biến màu TCS3200
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
Có khả năng lập trình để nhận biết đầy đủ các màu sắc
Điện năng tiêu thụ thấp
Giao tiếp trực tiếp với vi điều khiển
S0 ~ S1: Dùng để lựa chọn tỉ lệ tần số đầu ra
S2 ~ S3: Dùng để lựa chọn kiểu photodiode
OUT Pin: Đầu ra tần số
OE Pin: Tần số đầu ra cho phép hoạt động (hoạt động ở mức thấp).
Hỗ trợ đèn LED bổ sung và kiểm soát ánh sáng
Kích thước: 28.4x28.4mm
Nguyên tắc nhận biết màu
TCS3200 có bộ lọc màu, khi lựa chọn một bộ lọc màu 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 các bộ lọc màu đỏ, Chỉ có ánh sáng tới màu đỏ có thể được thông qua, màu xanh và màu xanh lá cây sẽ được ngăn chặn. Vì vậy chúng ta có thể nhận được cường độ ánh sáng màu đỏ. Tương tự như vậy, khi lựa chọn các bộ lọc khác mà chúng ta có thể nhận được ánh sáng màu xanh hoặc màu xanh lá cây.
Cách thiết lập màu sắc cho TCS3200
Tần số đầu ra của 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.
Chúng ta có thể lựa chọn tỉ lệ giữa cừng độ sáng và màu sắc theo bảng sau:
Trên module này cũng có chân LED EN đây là chân điều khiển đèn LED để tắt hoặc bật
Cách thiết lập tần số cho TCS3200
Đây là code mẫu cho arduino
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int flag=0;
byte counter=0;
byte countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(115200);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
}
void TCS()
{
flag=0;
digitalWrite(s1,HIGH);
digitalWrite(s0,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
attachInterrupt(0, ISR_INTO, LOW);
timer0_init();
}
void ISR_INTO()
{
counter++;
}
void timer0_init(void)
{
TCCR2A=0x00;
TCCR2B=0x07; //the clock frequency source 1024 points
TCNT2= 100; //10 ms overflow again
TIMSK2 = 0x01; //allow interrupt
}
int i=0;
ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt
executive function
{
TCNT2=100;
flag++;
if(flag==1)
{
countR=counter;
Serial.print("red=");
Serial.println(countR,DEC);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
else if(flag==2)
{
countG=counter;
Serial.print("green=");
Serial.println(countG,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
else if(flag==3)
{
countB=counter;
Serial.print("blue=");
Serial.println(countB,DEC);
Serial.println("\n");
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
else if(flag==4)
{
flag=0;
}
counter=0;
}
void loop()
{
TCS();
while(1);
}