top of page
IMG_0959.heic

การใช้งานเซนเซอร์ TCS34725 ร่วมกับ Board Model NanoPlus และเทคนิควิเคราะห์ค่าสัดส่วนสี

เซ็นเซอร์ตรวจจับแสงสีพื้นผิววัตถุ TCS3472 RGB

เป็นโมดูลตรวจจับสีที่มีความแม่นยำสูง ภายในประกอบด้วยไดโอดรับแสง (Photodiodes) ที่มีฟิลเตอร์ตัดแสงอินฟราเรด (IR blocking filter) ช่วยให้การวัดค่าสีมีความใกล้เคียงกับการมองเห็นของมนุษย์มากที่สุด ตัวเซนเซอร์ให้ข้อมูลออกมา 4 ช่องสัญญาณ ได้แก่ Red, Green, Blue และ Clear Channel ผ่านการสื่อสารแบบ I2C

เซ็นเซอร์ตรวจจับแสงสีพื้นผิววัตถุ TCS3472 RGB
เซ็นเซอร์ตรวจจับแสงสีพื้นผิววัตถุ TCS3472 RGB

Board Model NanoPlus

Board Model NanoPlus คือบอร์ดไมโครคอนโทรลเลอร์ที่ได้รับการพัฒนาต่อยอดมาจากสถาปัตยกรรมตระกูล Arduino Nano โดยเน้นการเพิ่มประสิทธิภาพในด้านการเชื่อมต่อและการจัดการพลังงาน เพื่อให้เหมาะสมกับการใช้งานในโปรเจกต์ระบบฝังตัว (Embedded Systems) และงานด้านหุ่นยนต์ที่ต้องการความเสถียรสูง


FriendRobot Board Model NanoPlus
FriendRobot Board Model NanoPlus


คุณสมบัติดังนี้

หน่วยประมวลผล Arduno Nano Atmega328 (USB Type C)

จุดต่อไฟขาเข้า 6V - 12V แบบขันน๊อตได้ ใช้กับแบตเตอรี่ลิเธียมโพลีเมอร์ได้ (7.4V สูงสุดไม่เกิน 12.6V)

จุดต่อมอเตอร์แบบ DC จำนวน 2 พอร์ต รองรับกระแสไฟฟ้าต่อเนื่อง 1.5A ต่อช่อง สูงสุดไม่เกิน 2A

หน้าจอแสดงผลแบบ OLED ขนาด 1.3 นิ้ว

จุดต่อ servo motor จำนวน 3 พอร์ต

พอร์ต analog แรงดัน 5V จำนวน 5 พอร์ต และจำนวน 3 พอร์ตร่วมกัน

พอร์ต digital I/O แรงดัน 5V จำนวน 2 พอร์ต และจำนวน 6 พอร์ตร่วมกัน

พอร์ต IC2 การต่อแบบ GROVE จำนวน 2 พอร์ต

ตัวต้านทานปรับค่าได้ หรือ Knob สำหรับปรับค่าแรงดันไฟฟ้า ในพอร์ต A6

วงจรสวิตซ์กด หรือ SW_OK

ลำโพงเปียโซสำหรับขับเสียง

วงจรสวิตซ์กด RESET เพื่อเปิด-ปิด บอร์ดใหม่

แจ็คต่อแหล่งจ่ายไฟ 5.5 MM

สวิตซ์ เปิด-ปิด บอร์ด


หลักการทำงานของระบบ (System Working Principle)

ในโปรเจกต์นี้ เราใช้การทำงานร่วมกันระหว่างฮาร์ดแวร์และซอฟต์แวร์ที่ออกแบบมาเพื่อจัดการความแปรปรวนของแสง โดยมีลำดับการประมวลผลดังนี้:

  1. การตรวจจับเชิงแสง (Optical Sensing): เซนเซอร์ TCS34725 จะรับแสงสะท้อนจากวัตถุผ่านฟิลเตอร์ IR Blocking เพื่อตัดสัญญาณรบกวน และแปลงเป็นข้อมูลดิจิทัล 16 บิต ส่งผ่านพอร์ต I2C (GROVE) เข้าสู่บอร์ด NanoPlus

  2. การประมวลผลข้อมูล (Data Processing): บอร์ด NanoPlus รับค่า Raw Data มาคำนวณเป็นค่าเปอร์เซ็นต์ (RGB Percentage) เพื่อหาอัตราส่วนของสีที่เสถียรที่สุด แม้ในสภาวะความเข้มแสงที่แตกต่างกัน

  3. การวิเคราะห์ด้วย Clear Channel: ระบบใช้ค่าจากช่องสัญญาณ Clear (C) เป็นตัวตัดสินเด็ดขาด (Threshold) เพื่อแยกสีขาวและดำออกจากกลุ่มสี (RGB) เพื่อป้องกันความผิดพลาดเนื่องจากสีทั้งสองมีสัดส่วนเปอร์เซ็นต์ที่ใกล้เคียงกัน

    • ถ้าค่า C > 3000: มั่นใจได้ว่าเป็นวัตถุสีขาว (White) ที่สะท้อนแสงได้ดีมาก

    • ถ้าค่า C < 200: มั่นใจได้ว่าเป็นวัตถุสีดำ (Black) ที่ดูดซับแสงแทบทั้งหมด

  4. การแสดงผล (Visual Feedback): ข้อมูลทั้งหมดจะถูกส่งไปแสดงผลที่ หน้าจอ OLED ขนาด 1.3 นิ้ว บนบอร์ด NanoPlus เพื่อให้ผู้ใช้งานสามารถ Debug ค่าสีได้ทันที


การต่อวงจรและเตรียมอุปกรณ์

สำหรับผู้ใช้ที่ใช้งานบอร์ดFriendRobot ครั้งแรกจำเป็นต้อง ติดตั้งไลบารี่ Friend Robot ใน วิธีติดตั้งไลบารี่ Friend Robot ในโปรแกรม Arduino IDE

บอร์ด NanoPlus มีพอร์ต I2C แบบ GROVE มาให้ในตัว โดยใช้สาย I2C Grove 4 Pin เชื่อมต่อจากเซนเซอร์เข้าที่พอร์ต I2C ของบอร์ดได้ทันที


ซอฟต์แวร์และการเขียนโปรแกรมควบคุม

การบริหารจัดการข้อมูลด้วย Struct เพื่อจัดเก็บค่าอ้างอิงของแต่ละสี และใช้ฟังก์ชันคณิตศาสตร์ในการหาค่าความต่างที่น้อยที่สุด (Minimal Distance)

ตัวอย่างโค้ดโปรแกรม (Full Source Code):

#include "ModelNanoPlus.h"
#include <Wire.h>
#include <Adafruit_TCS34725.h>
uint16_t r, g, b, c;
uint32_t sum;
int rp, gp, bp;
// ตั้งค่า Integration Time และ Gain ของเซนเซอร์
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
// โครงสร้างข้อมูลสำหรับเก็บค่าสีอ้างอิง
struct ColorRef {
  int r;
  int g;
  int b;
  String name;
};
// ตารางค่าอ้างอิงเปอร์เซ็นต์สีที่ผ่านการ Calibrate แล้ว
ColorRef colors[5] = {
  {58, 21, 20, "RED"},    
  {25, 47, 26, "GREEN"},  
  {29, 30, 40, "BLUE"},   
  {33, 33, 33, "WHITE"},  
  {36, 36, 27, "BLACK"}   
};
void setup() {
  XIO(); // เริ่มต้นการทำงานของบอร์ด NanoPlus
  if (tcs.begin()) {
    oled(0, 40, "TCS34725 Connected");
  } else {
    oled(0, 40, "Check Connections!");
    while (1);
  }
  oledClear();
}
int detectColor(int r, int g, int b) {
  int minDist = 9999;
  int index = -1;
  for (int i = 0; i < 5; i++) {
    // คำนวณหาความต่างระหว่างค่าที่อ่านได้กับค่าอ้างอิง
    int d = abs(r - colors[i].r) + abs(g - colors[i].g) + abs(b - colors[i].b);
    if (d < minDist) {
      minDist = d;
      index = i;
    }
  }
  return index;
}
void loop() {
  tcs.getRawData(&r, &g, &b, &c);
  sum = r + g + b;
  if (sum == 0) return;
  // แปลงค่า Raw Data เป็นสัดส่วนเปอร์เซ็นต์
  rp = (int)((long)r * 100 / sum);
  gp = (int)((long)g * 100 / sum);
  bp = (int)((long)b * 100 / sum);
  int colorIndex = detectColor(rp, gp, bp);
  // แสดงผลข้อมูลบนจอ OLED 1.3"
  oled(0, 0, "ClearC  : %d", c);
  oled(0, 10, "R:%d G:%d B:%d", rp, gp, bp);
  // ตรรกะตัดสินใจด้วย Clear Channel สำหรับสีขาวและดำ
  if (c > 3000) {
    oled(0, 30, "Result: WHITE");
  } else if (c < 200) {
    oled(0, 30, "Result: BLACK");
  } else {
    oled(0, 30, "Result: %s", colors[colorIndex].name.c_str());
  }
  delay(100);
}

บทสรุปและการนำไปต่อยอด

จากการทดสอบพบว่า การใช้ Board Model NanoPlus ร่วมกับเซนเซอร์ TCS34725 โดยใช้เทคนิค Clear Channel Analysis ช่วยให้การจำแนกสีมีความแม่นยำสูงขึ้นอย่างเห็นได้ชัด โดยเฉพาะการกำจัดปัญหาความสับสนระหว่างสีขาวและสีดำ


แนวทางการต่อยอด:

  • หุ่นยนต์คัดแยกของ: ใช้พอร์ต Motor 2 ช่อง และ Servo บน NanoPlus เพื่อสร้างแขนกลคัดแยกวัตถุตามสี

  • หุ่นยนต์เดินตามเส้นสี: ใช้การอ่านค่าสีเพื่อเปลี่ยนความเร็ว (Turbo Mode) หรือเปลี่ยนเส้นทางการวิ่งตามเครื่องหมายบนพื้น

ด้วยประสิทธิภาพของบอร์ด NanoPlus ที่มีหน้าจอ OLED และลำโพงในตัว ทำให้การพัฒนาโปรเจกต์นี้ทำได้ง่ายขึ้น และพร้อมนำไปใช้งานได้จริงในทันที

สั่งซื้อสินค้า



ความคิดเห็น


bottom of page