Trang chủ —› Bài giảng chương trình giáo dục phổ thông —› Cảm biến màu sắc TSC3200 – Trần Huỳnh Anh

Cảm biến màu sắc TSC3200 – Trần Huỳnh Anh

31 Tháng Mười Hai,2018 Đăng bởi: zero Trần

1. Giới thiệu

Người ta thường dùng các loại cảm biến màu sắc để phân loại các đối tượng dựa vào màu sắc, kiểm tra các màu sắc phù hợp. Trong bài viết này mình sẽ hướng dẫn các bạn sử dụng cảm biến màu TSC3200.

Hình 1: Module TSC3200

Cảm biến màu sắc được cấu tạo gồm một con photodiode dùng để lọc màu sắc, xung quanh con cảm biến này là 4 bóng đèn led dùng để chiếu sáng đối tượng cần nhận dạng màu. Cấu tạo của cảm biến này gồm 2 chân S2 và S3 dùng để lọc màu sắc khi nhận được tín hiệu điều khiển, cách điều khiển chúng như sau:


Cảm biến có 2 cổng dùng để chuyển đổi dòng điện đầu ra thành tần số của tín hiệu ra. Cách điều khiển hai cổng này như sau:


Trong bài viết này tôi sử dụng mức tần số 20%.

2. Chuẩn bị

Arduino UNO r3x1
Cảm biến TSC3200x1
Cáp kết nối Arduinox1
Cáp đực cáix6
Giấy màu để testx3

3. Nối dây và cài đặt

3.1. Cách nối dây:


Bảng các chân kết nối

Hình 2: Sơ đồ kết nối

3.2. Cài đặt

3.2.1 Nạp code chương trình

#define S0 6
#define S1 7
#define S2 8
#define S3 9
#define sensorOut 10
int r = 0;
int g = 0;
int b = 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);
}
int readColor()
{
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
r = pulseIn(sensorOut, LOW);
delay(50);
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
g = pulseIn(sensorOut, LOW);
delay(50);
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
b = pulseIn(sensorOut, LOW);
delay(50);
Serial.println("R = "+(String)r + " G = "+(String)g + " B = "+(String)b);
return -1;
}
void loop() {
readColor();
delay(1000);
}

Sau khi nạp chương trình thành công, ta bật cửa sổ Serial Monitor lên và đặt màu sắc vào cho hệ thống nhận dạng. Lúc này chương trình sẽ đưa ra màu sắc cho đối tượng của mình, nó sẽ thường dao động trong một khoảng nào  đó (hình 3). Lúc này ta sẽ dịch chuyển đối tượng qua lại gần cảm biến, sau đó xác định ngưỡng màu của đối tượng (hình 4).

Hình 3: Màu của đối tượng mà module phát hiện được

Hình 4: Xác định ngưỡng màu

Làm tương tự với các màu cần xác định và tìm ra ngưỡng màu của chúng để tìm ra giá trị nhỏ nhất và lớn nhất của mỗi màu R, G, B và đặt tên cho chúng.

3.2.2 Test chương trình với ngưỡng màu

Sau khi xác định xong các ngưỡng màu, ta nhập chúng vào đoạn code sau đây:
#define S0 6
#define S1 7
#define S2 8
#define S3 9
#define sensorOut 10
int r = 0;
int g = 0;
int b = 0;
int colors[3][6];
void initColor()
{
colors[0][0] = x;//Min R 14
colors[0][1] = x;//Max R 18
colors[0][2] = x;//Min G 17
colors[0][3] = x;//Max G 23
colors[0][4] = x;//Min B 27
colors[0][5] = x;//Max B 32
//---------------------------
colors[1][0] = x;//R
colors[1][1] = x;
colors[1][2] = x;///G
colors[1][3] = x;
colors[1][4] = x;//B
colors[1][5] = x;
//---------------------------
colors[2][0] = x;//R
colors[2][1] = x;
colors[2][2] = x;///G
colors[2][3] = x;
colors[2][4] = x;//B
colors[2][5] = x;
}
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);
initColor();
// Begins serial communication
Serial.begin(9600);
}
int readColor()
{
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
r = pulseIn(sensorOut, LOW);
delay(50);
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
g = pulseIn(sensorOut, LOW);
delay(50);
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
b = pulseIn(sensorOut, LOW);
delay(50);
//Serial.println("R = "+(String)r + " G = "+(String)g + " B = "+(String)b);
for(int i =0; i < 3; i++){
if(r >= colors[i][0] && r <= colors[i][1] &&
g >= colors[i][2] && g <= colors[i][3] &&
b >= colors[i][4] && b <= colors[i][5])
{
return i;
}
}
return -1;
}
void loop() {
int  c = readColor();
if(-1 < c){
if(c==0)
Serial.println("Đây là màu 1");
if(c==1)
Serial.println("Đây là màu 2");
if(c==2)
Serial.println("Đây là màu 3");
}
delay(1000);
}

Ở đây chúng ta có ba màu tương đương với colors[0], colors[1]colors[2]. Mỗi màu sẽ có 6 giá trị tương ứng với giá trị min và max của một màu đó. VD: colors[0][0] là giá trị min cho R của màu thứ nhất, colors[0][1] là giá trị max cho R của màu thứ nhất. Giá trị colors[0][2] là giá trị min cho G của màu thứ nhất.

Trong đoạn code trên, ta thay “x” bằng giá trị thực tế của màu ta cần xác định. Ví dụ như hình 4 thì phần màu 1 của ta sẽ là:
colors[0][0] = 14;
colors[0][1] = 18;
colors[0][2] = 17;
colors[0][3] = 23;
colors[0][4] = 27;
colors[0][5] = 32;

4. Bài tập

Xây dựng hệ thống phân loại màu sắc:

Mô tả hệ thống: Người ta có một lượng lớn sản phẩm gồm 6 nhóm màu khác nhau. Yêu cầu xây dựng một hệ thống để phân loại các sản phẩm ra thành 6 nhóm dựa vào màu sắc.

Hướng dẫn thực hiện: Xây dựng mô hình như hình xx. Khi đối tượng rớt xuống thì servo 1 sẽ kéo sang cảm biến màu. Cảm biến màu sẽ xác định xem đây là màu gì và sẽ điều khiển servo 2 xoay đến đúng vị trí tương ứng, sau đó servo 1 sẽ đưa đối tượng thả xuống theo máng trượt rơi xuống hộp tương ứng. Quá trình này sẽ được lặp đi lặp lại liên tục.


Notice: WP_Query được gọi với một tham số đã bị loại bỏ kể từ phiên bản 3.1.0! Hãy sử dụng ignore_sticky_posts thay cho caller_get_posts (sẽ sớm bị loại bỏ) in /home/lapt0260/public_html/wp-includes/functions.php on line 4080

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *