Modul sensor warna TCS3200 merupakan sensor yang digunakan untuk mendeteksi jenis warna berdasarkan panjang gelombang warna tersebut. Sensor warna TCS 3200 mampu mengkonversi warna yang akan dideteksi menjadi frekuensi yang akan diolah oleh mikrokontroler. Oleh karena itu, sensor ini juga dikenal sebagai programmable converter color light sensor to frequency.

Sensor warna TCS3200 memiliki komponen yang berasal dari gabungan antara silicon phothodiode dan IC CMOS single monolithic yang berfungsi sebagai pengkonversi arus menjadi frekuensi. Selain itu, sensor ini juga memiliki 4 lampu LED yang akan menyala pada saat sensor aktif. Lampu LED tersebut digunakan untuk menyinari objek terutama pada lingkungan gelap agar gelombang warna yang terpancar dari objek lebih terlihat jelas, sehingga memudahkan sensor untuk melakukan pembacaan warna objek tersebut.
Pada dasarnya, cahaya putih merupakan bentuk spektrum warna atau kumpulan berbagai jenis warna yang tampak menjadi satu. Cahaya putih terdiri dari tiga warna premier yaitu Merah, Hijau, dan Biru yang memiliki panjang gelombang yang berbeda. Kombinasi dari beberapa warna premier inilah nantinya membentuk variasi warna baru, seperti warna kuning (merah + hijau), magenta (merah+biru), cyan (hijau + biru).
Ketika cahaya putih jatuh pada suatu objek atau permukaan apapun, beberapa panjang gelombang cahaya tersebut dapat diserap atau dipantulkan kembali. Warna yang tampak oleh penglihatan manusia merupakan hasil dari panjang gelombang cahaya yang dipantulkan kembali ke mata kita. Perlakuan terhadap gelombang cahaya tersebut bergantung pada sifat material. Sebagai contoh material berwarna hitam yang terlihat gelap karena bersifat menyerap cahaya. Sedangkan, material berwarna putih terlihat lebih terang bahkan silau karena sifatnya yang memantulkan cahaya.

Sensor warna TCS3200 memiliki komponen berupa kisi-kisi filter yang peka terhadap warna, dikenal sebagai Filter Bayer dan dibawahnya terdapat deretan photodiode, keduanya digunakan untuk mendeteksi warna atau gelombang cahaya yang dipantulkan. Filter bayer tersusun atas 16 pola bayer. Pola bayer merupakan susunan piksel yang terdiri dari 4 filter, yaitu satu merah, satu hijau, satu biru, dan satu filter bening (tanpa filter).

Setiap filter pada pola bayer tersebut selalu melewatkan satu jenis cahaya warna ke photodiode di bawahnya, kecuali filter bening yang melewatkan semua cahaya yang didapat. Sebagai contoh pada gambar di bawah ini, filter merah hanya meneruskan cahaya merah saja dari semua jenis cahaya yang masuk.
Setelah cahaya yang dipantulkan objek melewati proses filtering oleh filter bayer, chip pemrosesan selanjutnya menangani setiap photodiode (satu warna pada satu waktu) dan mengukur intensitas cahaya. Karena susunan photodiode terdiri dari beberapa jenis filter, maka hasil filter yang didapat dirata-rata. Dengan mengukur tingkat relatif cahaya merah, hijau, dan biru, warna objek dapat ditentukan. Sebagai contoh, apabila setelah diratakan, filter merah memiliki intensitas cahaya paling besar dibanding dengan filter lainnya, maka objek dapat dinyatakan sebagai warna merah.
Sensor warna TCS3200 berfungsi mengubah masukan gelombang cahaya yang dibaca oleh photodiode menjadi rangkaian gelombang sinyal kotak, dimana besar frekuensinya sebanding dengan intensitas warna yang dipilih. Rentang frekuensi keluarannya berkisar antara 2 Hz – 500 KHz. Besar skala frekuensi keluaran tersebut dapat diatur menggunakan pin S0 dan S1 modul sensor warna TCS3200. Penskalaan frekuensi bertujuan untuk menyesuaikan perhitungan dengan berbagai mikrokontroler ataupun perangkat lain. Untuk mikrokontroler Arduino penskalaan yang digunakan biasanya sebesar 20%.

Selain itu, sensor warna TCS3200 ini juga dilengkapi fungsi untuk mengatur jenis photodiode yang akan digunakan, menggunakan pengkondisian pin S2 dan S3. Pengaturan jenis photodiode ini bertujuan untuk memilih pendeteksian terhadap suatu warna tertentu. Misalkan, sistem membutuhkan pendeteksian warna merah saja, maka berdasarkan tabel pengaturan jenis photodiode di samping, pin S2 dan S3 harus diatur dalam kondisi keduanya LOW.

Percobaan 53: Akses Sensor warna TCS320

.

.

- Hubungkan S1 dengan pin D9 ATMEGA 2560
- Hubungkan S0 dengan pin D8 ATMEGA 2560
- Hubungkan S3 dengan pin D21 ATMEGA 2560
- Hubungkan S2 dengan pin D20 ATMEGA 2560
- Hubungkan O dengan pin D52 ATMEGA 2560
- Hubungkan board ATMEGA 2560 dengan Komputer menggunakan kabel USB.
- Bukalah IDE Arduino, kemudian ketikkan kode program/sketch atau buka file SENSOR_WARNA_TCS3200 (Untuk Kalibrasi) dan SENSOR_WARNA_TCS3200_V2 (untuk Testing)
- Compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya error/kesalahan dalam pengetikan.
- Upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah pada jendela IDE arduino.
.
Code SENSOR_WARNA_TCS3200 (Untuk Kalibrasi):
Note:
Untuk memulai pendeteksian modul sensor, hadapkan sensor dengan objek berwarna hitam dan putih (catat nilai redPW, greenPW dan bluePW tiap-tiap warna). Hal ini diperlukan untuk kalibrasi sensor, sehingga sensor dapat membaca nilai maksimum dan minimum ketiga warna premier.
// Define color sensor pins
#define S0 8
#define S1 9
#define S2 20
#define S3 21
#define sensorOut 52
// Variables for Color Pulse Width Measurements
int redPW = 0;
int greenPW = 0;
int bluePW = 0;
void setup() {
// Set S0 - S3 as outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Set Pulse Width scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Set Sensor output as input
pinMode(sensorOut, INPUT);
// Setup Serial Monitor
Serial.begin(9600);
}
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);
// Print output to Serial Monitor
Serial.print("Red PW = ");
Serial.print(redPW);
Serial.print(" - Green PW = ");
Serial.print(greenPW);
Serial.print(" - Blue PW = ");
Serial.println(bluePW);
}
// Function to read Red Pulse Widths
int getRedPW() {
// Set sensor to read Red only
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
// Function to read Green Pulse Widths
int getGreenPW() {
// Set sensor to read Green only
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
// Function to read Blue Pulse Widths
int getBluePW() {
// Set sensor to read Blue only
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
Video Demo:
.
Code SENSOR_WARNA_TCS3200_V2 (untuk Testing):
Ubah konstanta nilai minimum dan maximum ketiga warna premier dengan nilai yang sudah diperoleh pada saat melakukan kalibrasi (nilai redPW, greenPW dan bluePW dari warna hitam dan putih).
// Define color sensor pins
#define S0 8
#define S1 9
#define S2 20
#define S3 21
#define sensorOut 52
// Calibration Values
// *Get these from Calibration Sketch
int redMin = 20; // Red minimum value
int redMax = 88; // Red maximum value
int greenMin =25; // Green minimum value
int greenMax = 95; // Green maximum value
int blueMin = 18; // Blue minimum value
int blueMax = 73; // Blue maximum value
// 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(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Set Sensor output as input
pinMode(sensorOut, INPUT);
// Set Frequency scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// 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(S2,LOW);
digitalWrite(S3,LOW);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
// Function to read Green Pulse Widths
int getGreenPW() {
// Set sensor to read Green only
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
// Function to read Blue Pulse Widths
int getBluePW() {
// Set sensor to read Blue only
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
Video Demo: