ESP8266 Cảm biến màu TCS3200D/TCS230

Hướng dẫn này sẽ giúp bạn sử dụng ESP8266 với cảm biến màu TCS3200D/TCS230 để phát hiện màu chính xác và đo màu RGB.

Chi tiết, chúng ta sẽ học:

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×TCS3200D/TCS230 Color Recognition Sensor Module
1×breadboard
1×dây jumper
1×(Tùy chọn) DC Power Jack
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm biến màu TCS3200D/TCS230

Cảm biến màu TCS3200D/TCS230 sử dụng một lưới gồm 64 quang điốt được sắp xếp thành ma trận 8×8 để phát hiện màu thông qua lọc theo bước sóng cụ thể. Trong mảng này, 16 quang điốt tích hợp bộ lọc bước sóng đỏ, 16 dùng bộ lọc bước sóng xanh lá, 16 dùng bộ lọc bước sóng xanh lam, và 16 hoạt động mà không có lọc (đáp ứng trong suốt). Việc đo màu diễn ra bằng cách chọn các bộ lọc cụ thể và đánh giá tần số của tín hiệu đầu ra.

Các mô-đun TCS3200D phổ biến có mảng LED trắng tích hợp cung cấp ánh sáng mục tiêu nhất quán, đảm bảo tính ổn định của phép đo bất kể sự biến động của ánh sáng từ bên ngoài và tăng độ nhạy trong điều kiện ánh sáng yếu.

Sơ đồ chân

Cấu hình chân của module cảm biến TCS3200D/TCS230:

  • VCC pin: Đầu vào nguồn cấp (+5V).
  • GND pin: Điểm tham chiếu đất (0V).
  • S0, S1 pins: Các chân S0, S1: Bộ chọn tỉ lệ tần số đầu ra.
  • S2, S3 pins: Các chân S2, S3: Bộ chọn bộ lọc kênh màu.
  • OUT pin: Đầu ra sóng vuông điều biến tần số.
  • OE pin: Đầu vào kích hoạt đầu ra (kích hoạt khi ở mức LOW). Các mô-đun tiêu chuẩn thường được nối cứng với GND ở bên trong. Nếu không được kết nối, hãy nối thủ công tới GND.
sơ đồ chân của mô-đun cảm biến màu tcs3200/tcs230 cho biết các chân vcc, gnd, s0, s1, s2, s3 và out.

Cách hoạt động

Hoạt động của cảm biến phụ thuộc vào hai điều khiển chính: chọn nhóm bộ lọc photodiode để kích hoạt và phạm vi tần số đầu ra cần tạo. Hai cặp chân điều khiển quản lý các chức năng này:

Điều khiển điều chỉnh tần số (các chân S0 và S1):

  • S0=LOW, S1=LOW: trạng thái tắt nguồn
  • S0=LOW, S1=HIGH: hệ số tỉ lệ 2%
  • S0=HIGH, S1=LOW: hệ số tỉ lệ 20%
  • S0=HIGH, S1=HIGH: hệ số tỉ lệ 100% (tốc độ tối đa)

Lựa chọn kênh màu (các chân S2 và S3):

  • S2=THẤP, S3=THẤP: Các diode quang đỏ đang hoạt động
  • S2=THẤP, S3=CAO: Các diode quang xanh dương đang hoạt động
  • S2=CAO, S3=THẤP: Các diode quang trong suốt đang hoạt động (không lọc)
  • S2=CAO, S3=CAO: Các diode quang xanh lá đang hoạt động

Chân OUT phát ra các tần số vuông dao động từ khoảng 2 Hz đến 500 kHz. Độ sáng cao hơn tạo ra đầu ra có tần số cao hơn. Hàm pulseIn() của ESP8266 đo thời lượng xung, và nó có mối quan hệ nghịch — ánh sáng sáng hơn sẽ cho thời lượng ngắn hơn. Các phép đo đã được hiệu chuẩn chuyển sang định dạng RGB 0-255 thông dụng.

Đạt được độ chính xác tối ưu

  • Giữ cảm biến ở vị trí cách mục tiêu đo 1–3 cm với căn chỉnh góc ổn định.
  • Sử dụng đèn LED trắng tích hợp làm nguồn sáng để đảm bảo ánh sáng nhất quán giữa các lần đo.
  • Che chắn cảm biến khỏi ánh sáng môi trường biến động nhằm tăng tính nhất quán của phép đo.

Sơ đồ đấu dây

Kết nối cảm biến màu TCS3200 với ESP8266 như sau:

TCS3200 Color SensorESP8266
VCC3V3
GNDGND
S0D6 (GPIO12)
S1D7 (GPIO13)
S2D2 (GPIO4)
S3D5 (GPIO14)
OUTD1 (GPIO5)
ESP8266 NodeMCU và sơ đồ nối dây cảm biến màu tcs3200

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Mã ESP8266 - Hiệu chuẩn cảm biến

Hiệu chuẩn loại bỏ nhiễu môi trường khỏi các phép đo thô. Các biến bao gồm cường độ phát xạ của LED, khoảng cách tới mục tiêu, độ phản xạ của vật liệu và ánh sáng trong phòng đều ảnh hưởng đến các giá trị đo được. Quy trình hiệu chuẩn xác định độ rộng xung tối thiểu và tối đa trên tất cả các kênh màu, thiết lập ranh giới tham chiếu để chuyển đổi dữ liệu thô thành các giá trị RGB từ 0–255 chính xác, phù hợp với môi trường triển khai của bạn.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 D6 // The ESP8266 pin GPIO12 connected to the S0 of the color module #define PIN_S1 D7 // The ESP8266 pin GPIO13 connected to the S1 of the color module #define PIN_S2 D2 // The ESP8266 pin GPIO4 connected to the S2 of the color module #define PIN_S3 D5 // The ESP8266 pin GPIO14 connected to the S3 of the color module #define PIN_sensorOut D1 // The ESP8266 pin GPIO5 connected to the OUT of the color module // Variables for Color Pulse Width Measurements int redPW = 0; int greenPW = 0; int bluePW = 0; // Variables to track min and max pulse widths for calibration int redMin = 10000, redMax = 0; int greenMin = 10000, greenMax = 0; int blueMin = 10000, blueMax = 0; void setup() { // Set S0 - S3 as outputs pinMode(PIN_S0, OUTPUT); pinMode(PIN_S1, OUTPUT); pinMode(PIN_S2, OUTPUT); pinMode(PIN_S3, OUTPUT); // Set Pulse Width scaling to 20% digitalWrite(PIN_S0, HIGH); digitalWrite(PIN_S1, LOW); // Set Sensor output as input pinMode(PIN_sensorOut, INPUT); // Setup Serial Monitor Serial.begin(9600); Serial.println("=== TCS3200 Calibration ==="); Serial.println("Point the sensor at different objects (white, black, colors)."); Serial.println("Min and Max values are tracked automatically."); Serial.println("When values look stable, note them down for the next code."); Serial.println("------------------------------------------"); } void loop() { // Read Red Pulse Width redPW = getRedPW(); // Delay to stabilize sensor delay(200); // Read Green Pulse Width greenPW = getGreenPW(); // Delay to stabilize sensor delay(200); // Read Blue Pulse Width bluePW = getBluePW(); // Delay to stabilize sensor delay(200); // Update min and max values if (redPW < redMin) redMin = redPW; if (redPW > redMax) redMax = redPW; if (greenPW < greenMin) greenMin = greenPW; if (greenPW > greenMax) greenMax = greenPW; if (bluePW < blueMin) blueMin = bluePW; if (bluePW > blueMax) blueMax = bluePW; // Print the pulse width values with min/max Serial.print("Red PW = "); Serial.print(redPW); Serial.print(" - Green PW = "); Serial.print(greenPW); Serial.print(" - Blue PW = "); Serial.println(bluePW); Serial.print(" Min -> R:"); Serial.print(redMin); Serial.print(" G:"); Serial.print(greenMin); Serial.print(" B:"); Serial.println(blueMin); Serial.print(" Max -> R:"); Serial.print(redMax); Serial.print(" G:"); Serial.print(greenMax); Serial.print(" B:"); Serial.println(blueMax); Serial.println("------------------------------------------"); delay(1000); } // Function to read Red Pulse Widths int getRedPW() { // Set sensor to read Red only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, LOW); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Green Pulse Widths int getGreenPW() { // Set sensor to read Green only digitalWrite(PIN_S2, HIGH); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Blue Pulse Widths int getBluePW() { // Set sensor to read Blue only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
  • Nối các thành phần như được hiển thị trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, chẳng hạn như (ví dụ NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng.
  • Sao chép mã hiệu chuẩn và mở nó trong Arduino IDE.
  • Nhấn nút Tải lên để biên dịch và tải lên cho ESP8266.
  • Mở Serial Monitor.
  • Hướng cảm biến tới các bề mặt khác nhau: trắng (giấy), đen và nhiều màu sắc.
  • Theo dõi các giá trị tối thiểu và tối đa tự động cập nhật.
  • Khi các giá trị ổn định (thông thường sau 10-20 giây), ghi lại tất cả sáu tham số hiệu chuẩn.
COM6
Send
=== TCS3200 Calibration === Point the sensor at different objects (white, black, colors). Min and Max values are tracked automatically. When values look stable, note them down for the next code. ------------------------------------------ Red PW = 42 - Green PW = 55 - Blue PW = 60 Min -> R:42 G:55 B:60 Max -> R:42 G:55 B:60 ------------------------------------------ Red PW = 210 - Green PW = 185 - Blue PW = 172 Min -> R:42 G:55 B:60 Max -> R:210 G:185 B:172 ------------------------------------------ Red PW = 44 - Green PW = 57 - Blue PW = 61 Min -> R:42 G:55 B:60 Max -> R:210 G:185 B:172 ------------------------------------------
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Các tham số hiệu chuẩn mẫu được trích xuất từ đầu ra ở trên:

  • Đỏ tối thiểu = 42, Đỏ tối đa = 210
  • Xanh lá cây tối thiểu = 55, Xanh lá cây tối đa = 185
  • Xanh lam tối thiểu = 60, Xanh lam tối đa = 172

Mã ESP8266 - Đọc các giá trị RGB

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp8266/esp8266-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 D6 // The ESP8266 pin GPIO12 connected to the S0 of the color module #define PIN_S1 D7 // The ESP8266 pin GPIO13 connected to the S1 of the color module #define PIN_S2 D2 // The ESP8266 pin GPIO4 connected to the S2 of the color module #define PIN_S3 D5 // The ESP8266 pin GPIO14 connected to the S3 of the color module #define PIN_sensorOut D1 // The ESP8266 pin GPIO5 connected to the OUT of the color module // Calibration Values // Replace these values with your actual calibration data from the previous step int redMin = 0; // Red minimum pulse width int redMax = 0; // Red maximum pulse width int greenMin = 0; // Green minimum pulse width int greenMax = 0; // Green maximum pulse width int blueMin = 0; // Blue minimum pulse width int blueMax = 0; // Blue maximum pulse width // Variables for Color Pulse Width Measurements int redPW = 0; int greenPW = 0; int bluePW = 0; // Variables for final Color values int redValue; int greenValue; int blueValue; void setup() { // Set S0 - S3 as outputs pinMode(PIN_S0, OUTPUT); pinMode(PIN_S1, OUTPUT); pinMode(PIN_S2, OUTPUT); pinMode(PIN_S3, OUTPUT); // Set Pulse Width scaling to 20% digitalWrite(PIN_S0, HIGH); digitalWrite(PIN_S1, LOW); // Set Sensor output as input pinMode(PIN_sensorOut, INPUT); // Setup Serial Monitor Serial.begin(9600); } void loop() { // Read Red value redPW = getRedPW(); // Map to value from 0-255 redValue = map(redPW, redMin, redMax, 255, 0); // Delay to stabilize sensor delay(200); // Read Green value greenPW = getGreenPW(); // Map to value from 0-255 greenValue = map(greenPW, greenMin, greenMax, 255, 0); // Delay to stabilize sensor delay(200); // Read Blue value bluePW = getBluePW(); // Map to value from 0-255 blueValue = map(bluePW, blueMin, blueMax, 255, 0); // Delay to stabilize sensor delay(200); // Print output to Serial Monitor Serial.print("Red = "); Serial.print(redValue); Serial.print(" - Green = "); Serial.print(greenValue); Serial.print(" - Blue = "); Serial.println(blueValue); } // Function to read Red Pulse Widths int getRedPW() { // Set sensor to read Red only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, LOW); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Green Pulse Widths int getGreenPW() { // Set sensor to read Green only digitalWrite(PIN_S2, HIGH); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Blue Pulse Widths int getBluePW() { // Set sensor to read Blue only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; }

Hướng dẫn từng bước

  • Tìm các biến hiệu chuẩn ở đầu mã nguồn:

Please provide the English text to translate inside the code block.

int redMin = 0; // Độ rộng xung tối thiểu cho màu đỏ

int redMax = 0; // Độ rộng xung tối đa cho màu đỏ

int greenMin = 0; // Độ rộng xung tối thiểu cho màu xanh

int greenMax = 0; // Chiều rộng xung tối đa của màu xanh

int blueMin = 0; // Độ rộng xung tối thiểu của màu xanh

int blueMax = 0; // Chiều rộng xung tối đa của màu xanh dương

No content provided to translate.

  • Thay thế toàn bộ sáu giá trị bằng 0 bằng dữ liệu hiệu chuẩn đã đo. Ví dụ với các giá trị redMin = 42, redMax = 210, greenMin = 55, greenMax = 185, blueMin = 60, blueMax = 172:

Please paste the English text you want translated into Vietnamese.

int đỏTốiThiểu = 42;

int redMax = 210;

int xanhToiThieu = 55;

int xanhToiDa = 185;

int xanhToiThieu = 60;

int blueMax = 172;

Please provide the English text to translate. The code block is currently empty.

  • Tải mã đã cập nhật lên ESP8266.
  • Đặt một vật thể có màu trước cảm biến.
  • Mở Serial Monitor để xem các giá trị RGB.
COM6
Send
Red = 210 - Green = 35 - Blue = 20 Red = 25 - Green = 200 - Blue = 40 Red = 30 - Green = 45 - Blue = 215
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Các giá trị RGB được hiển thị tuân theo thang đo chuẩn 0-255. Chiều rộng xung ngắn hơn (tín hiệu phản xạ sáng hơn) tạo ra đầu ra RGB cao hơn; chiều rộng xung dài hơn (phản xạ tối hơn) cho ra giá trị thấp hơn.

Từ các giá trị RGB, bạn có thể:

  • Xác định màu sắc cụ thể bằng cách so sánh tỷ lệ RGB
  • Sắp xếp các đối tượng theo nhận diện màu sắc
  • Ghép màu giữa các mẫu khác nhau
  • Kích hoạt các hành động dựa trên màu sắc được phát hiện

Các ứng dụng của dự án

Với khả năng đo RGB hoạt động, bạn có thể phát triển:

  • Hệ thống phân loại theo sắc màu: Phân loại các vật thể theo màu sắc (phân biệt đỏ/xanh lá/xanh lam)
  • Thiết bị xác nhận màu sắc: Xác nhận sự nhất quán về màu sắc giữa các mẫu
  • Robot theo đường màu: Các robot di chuyển dọc theo các dấu hiệu màu sắc
  • Kiểm tra chất lượng trực quan: Phát hiện khiếm khuyết sản phẩm thông qua phân tích màu sắc
  • Tự động hóa kích hoạt bởi màu sắc: Thực hiện các hành động khi phát hiện các sắc thái màu cụ thể

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Bài hướng dẫn liên quan