เซ็นเซอร์วัดค่าสี TCS3200 เป็นเซ็นเซอร์ที่มีการแปลงแสงเป็นค่าความถี่ อ่านได้จากค่า photodiodes ที่อยู่ในชิฟของ โมดูล TCS3200 ซึ่งค่าที่อ่านมาได้จะเป็นค่าความถี่ของแสง แดง เขียว ฟ้า ยังไม่ใช่ค่า RGB แต่ปัจจุบันได้มีการเขียนโค้ดแก้สมการทางแสงมาให้พร้อมใช้งานแล้ว
การควบคุมเซ็นเซอร์ โมดูล TCS3200 นี้ ทำได้โดยควบคุมจากขา s2 และ s3 และขา OUT จะให้ออกมาเป็นสัญญาณเวฟสี่เหลี่ยม (50% duty cycle) เป็นความถี่ที่อ่านได้จากเซ็นเซอร์แสงโดยตรง สามารถขยายความเข้มของค่าที่อ่านได้ โดยควบคุมอัตราขยายที่ขา s0 และ s1
ในขณะที่เซ็นเซอร์ทำงาน ตัว photodiode จะส่องแสงไปที่วัตถุเพื่อให้เกิดการสะท้อนกลับมา จากนั้นเซ็นเซอร์ที่อยู่ในโมดูลจะรับค่าแสงนั้นมาคำนวณและแปลงเป็น RGB
บทความนี้จะกล่าวถึงการใช้
Arduino Uno R3 ต่อกับเซ็นเซอร์สี TCS3200
หน้าตาเซ็นเซอร์ที่ใช้จะเป็นแบบนี้
- Share Knowledge-1.png (428.01 KiB) Viewed 1042 times
ต่อเซ็นเซอร์สีเข้ากับบอร์ด
Arduino uno ได้ดังนี้
ขา S2 ของเซ็นเซอร์ ต่อกับ ขา 2 ของบอร์ด
ขา S3 ของเซ็นเซอร์ ต่อกับ ขา 3 ของบอร์ด
ขา out ของเซ็นเซอร์ ต่อกับ ขา 5 ของบอร์ด
หรือปรับเปลี่ยนได้ตามโค๊ดของผู้ใช้ ( ***อย่าลืมต่อ Vcc กับ Gnd )
สามารถดาวน์โหลด library สำหรับแปลงค่าแสงเป็น RGB ได้
ที่นี่
จากนั้นลองรันโค๊ดใน ArduinoIDE
โค้ด: เลือกทั้งหมด
#include <MD_TCS230.h>
#include <FreqCount.h>
#define BLACK_CAL 0
#define WHITE_CAL 1
#define READ_VAL 2
#define S2_OUT 2
#define S3_OUT 3
#define OE_OUT 12 // LOW = ENABLED
int led = 11; //สามารถเขียนโค๊ดทำให้เปิด-ปิดได้
MD_TCS230 CS(S2_OUT, S3_OUT, OE_OUT);
void setup()
{
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(57600);
Serial.print(F("\n[TCS230 Calibrator Example]"));
CS.begin();
}
char getChar()
{
while (Serial.available() == 0)
;
return(toupper(Serial.read()));
}
void clearInput()
{
while (Serial.read() != -1)
;
}
uint8_t fsmReadValue(uint8_t state, uint8_t valType, uint8_t maxReads)
{
static uint8_t selChannel;
static uint8_t readCount;
static sensorData sd;
switch(state)
{
case 0:
digitalWrite(led,0);
Serial.print(F("\n\nReading value for "));
switch(valType)
{
case BLACK_CAL: Serial.print(F("BLACK calibration")); break;
case WHITE_CAL: Serial.print(F("WHITE calibration")); break;
case READ_VAL: Serial.print(F("DATA")); break;
default: Serial.print(F("??")); break;
}
Serial.print(F("\nPress any key to start ..."));
state++;
break;
case 1:
getChar();
clearInput();
state++;
break;
case 2:
digitalWrite(led,1);
CS.read();
state++;
break;
case 3:
if (CS.available())
{
sensorData sd;
colorData rgb;
switch(valType)
{
case BLACK_CAL:
CS.getRaw(&sd);
CS.setDarkCal(&sd);
break;
case WHITE_CAL:
CS.getRaw(&sd);
CS.setWhiteCal(&sd);
break;
case READ_VAL:
CS.getRGB(&rgb);
Serial.print(F("\nRGB is ["));
Serial.print(rgb.value[TCS230_RGB_R]);
Serial.print(F(","));
Serial.print(rgb.value[TCS230_RGB_G]);
Serial.print(F(","));
Serial.print(rgb.value[TCS230_RGB_B]);
Serial.print(F("]"));
break;
}
state++;
digitalWrite(led,0);
}
break;
default:
state = 0;
break;
}
return(state);
}
void loop()
{
static uint8_t runState = 0;
static uint8_t readState = 0;
switch(runState)
{
case 0:
readState = fsmReadValue(readState, BLACK_CAL, 2);
if (readState == 0) runState++;
break;
case 1:
readState = fsmReadValue(readState, WHITE_CAL, 2);
if (readState == 0) runState++;
break;
case 2:
readState = fsmReadValue(readState, READ_VAL, 1);
break;
default:
runState = 0;
}
}
เริ่มโปรแกรมให้นำเซ็นเซอร์ไปที่สีดำ และสีขาวก่อน เพื่อให้เซ็นเซอร์ทำการ detect ค่าสี จากนั้นให้นำไปที่วัตถุที่ต้องการทราบค่าสีแล้วกด send ค่าสีที่เป็น RGB จะแสดงขึ้นมาใน Serial port
บทความที่เกี่ยวข้อง
ส่วนประกอบ Arduino UNO R3
การติดตั้ง Library บน Arduino IDE
การติดตั้งโปรแกรม และการใช้งาน ArduinoIDE
[b]เซ็นเซอร์วัดค่าสี TCS3200[/b] เป็นเซ็นเซอร์ที่มีการแปลงแสงเป็นค่าความถี่ อ่านได้จากค่า photodiodes ที่อยู่ในชิฟของ โมดูล TCS3200 ซึ่งค่าที่อ่านมาได้จะเป็นค่าความถี่ของแสง แดง เขียว ฟ้า ยังไม่ใช่ค่า RGB แต่ปัจจุบันได้มีการเขียนโค้ดแก้สมการทางแสงมาให้พร้อมใช้งานแล้ว
การควบคุมเซ็นเซอร์ โมดูล TCS3200 นี้ ทำได้โดยควบคุมจากขา s2 และ s3 และขา OUT จะให้ออกมาเป็นสัญญาณเวฟสี่เหลี่ยม (50% duty cycle) เป็นความถี่ที่อ่านได้จากเซ็นเซอร์แสงโดยตรง สามารถขยายความเข้มของค่าที่อ่านได้ โดยควบคุมอัตราขยายที่ขา s0 และ s1
ในขณะที่เซ็นเซอร์ทำงาน ตัว photodiode จะส่องแสงไปที่วัตถุเพื่อให้เกิดการสะท้อนกลับมา จากนั้นเซ็นเซอร์ที่อยู่ในโมดูลจะรับค่าแสงนั้นมาคำนวณและแปลงเป็น RGB
บทความนี้จะกล่าวถึงการใช้ [url]Arduino Uno R3[/url] ต่อกับเซ็นเซอร์สี TCS3200
หน้าตาเซ็นเซอร์ที่ใช้จะเป็นแบบนี้
[attachment=0]Share Knowledge-1.png[/attachment]
ต่อเซ็นเซอร์สีเข้ากับบอร์ด [url=https://www.mindphp.com/%E0%B8%84%E0%B8%B9%E0%B9%88%E0%B8%A1%E0%B8%B7%E0%B8%AD/73-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/3632-arduino-%E0%B8%AD%E0%B8%B2%E0%B8%94%E0%B8%B9%E0%B9%82%E0%B8%99%E0%B9%88-%E0%B8%AB%E0%B8%A3%E0%B8%B7%E0%B8%AD-%E0%B8%AD%E0%B8%B2%E0%B8%94%E0%B8%B9%E0%B8%A2%E0%B8%AD%E0%B8%B5%E0%B9%82%E0%B8%99%E0%B9%88-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3.html]Arduino uno[/url] ได้ดังนี้
ขา S2 ของเซ็นเซอร์ ต่อกับ ขา 2 ของบอร์ด
ขา S3 ของเซ็นเซอร์ ต่อกับ ขา 3 ของบอร์ด
ขา out ของเซ็นเซอร์ ต่อกับ ขา 5 ของบอร์ด
หรือปรับเปลี่ยนได้ตามโค๊ดของผู้ใช้ ( ***อย่าลืมต่อ Vcc กับ Gnd )
สามารถดาวน์โหลด library สำหรับแปลงค่าแสงเป็น RGB ได้ [url=http://www.mediafire.com/file/e9a269a9s0pjvlt/MD_TCS230_v1.0_20130222.zip/file]ที่นี่[/url]
จากนั้นลองรันโค๊ดใน ArduinoIDE
[code]#include <MD_TCS230.h>
#include <FreqCount.h>
#define BLACK_CAL 0
#define WHITE_CAL 1
#define READ_VAL 2
#define S2_OUT 2
#define S3_OUT 3
#define OE_OUT 12 // LOW = ENABLED
int led = 11; //สามารถเขียนโค๊ดทำให้เปิด-ปิดได้
MD_TCS230 CS(S2_OUT, S3_OUT, OE_OUT);
void setup()
{
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(57600);
Serial.print(F("\n[TCS230 Calibrator Example]"));
CS.begin();
}
char getChar()
{
while (Serial.available() == 0)
;
return(toupper(Serial.read()));
}
void clearInput()
{
while (Serial.read() != -1)
;
}
uint8_t fsmReadValue(uint8_t state, uint8_t valType, uint8_t maxReads)
{
static uint8_t selChannel;
static uint8_t readCount;
static sensorData sd;
switch(state)
{
case 0:
digitalWrite(led,0);
Serial.print(F("\n\nReading value for "));
switch(valType)
{
case BLACK_CAL: Serial.print(F("BLACK calibration")); break;
case WHITE_CAL: Serial.print(F("WHITE calibration")); break;
case READ_VAL: Serial.print(F("DATA")); break;
default: Serial.print(F("??")); break;
}
Serial.print(F("\nPress any key to start ..."));
state++;
break;
case 1:
getChar();
clearInput();
state++;
break;
case 2:
digitalWrite(led,1);
CS.read();
state++;
break;
case 3:
if (CS.available())
{
sensorData sd;
colorData rgb;
switch(valType)
{
case BLACK_CAL:
CS.getRaw(&sd);
CS.setDarkCal(&sd);
break;
case WHITE_CAL:
CS.getRaw(&sd);
CS.setWhiteCal(&sd);
break;
case READ_VAL:
CS.getRGB(&rgb);
Serial.print(F("\nRGB is ["));
Serial.print(rgb.value[TCS230_RGB_R]);
Serial.print(F(","));
Serial.print(rgb.value[TCS230_RGB_G]);
Serial.print(F(","));
Serial.print(rgb.value[TCS230_RGB_B]);
Serial.print(F("]"));
break;
}
state++;
digitalWrite(led,0);
}
break;
default:
state = 0;
break;
}
return(state);
}
void loop()
{
static uint8_t runState = 0;
static uint8_t readState = 0;
switch(runState)
{
case 0:
readState = fsmReadValue(readState, BLACK_CAL, 2);
if (readState == 0) runState++;
break;
case 1:
readState = fsmReadValue(readState, WHITE_CAL, 2);
if (readState == 0) runState++;
break;
case 2:
readState = fsmReadValue(readState, READ_VAL, 1);
break;
default:
runState = 0;
}
}
[/code]
เริ่มโปรแกรมให้นำเซ็นเซอร์ไปที่สีดำ และสีขาวก่อน เพื่อให้เซ็นเซอร์ทำการ detect ค่าสี จากนั้นให้นำไปที่วัตถุที่ต้องการทราบค่าสีแล้วกด send ค่าสีที่เป็น RGB จะแสดงขึ้นมาใน Serial port
บทความที่เกี่ยวข้อง
[url=https://www.mindphp.com/forums/viewtopic.php?f=215&t=61980&p=170743&hilit=arduino#p170743]ส่วนประกอบ Arduino UNO R3[/url]
[url=https://www.mindphp.com/forums/viewtopic.php?f=215&t=44183]การติดตั้ง Library บน Arduino IDE[/url]
[url=https://www.mindphp.com/forums/viewtopic.php?f=215&t=44181&p=110062&hilit=arduino#p110062]การติดตั้งโปรแกรม และการใช้งาน ArduinoIDE[/url]