Kuasai Deteksi Warna Arduino dengan Sensor TCS230/TCS3200 – Panduan Langkah demi Langkah
Dalam tutorial Arduino ini kita akan mempelajari cara mendeteksi warna menggunakan Arduino dan Sensor Warna TCS230 / TCS3200. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini untuk detail selengkapnya.
Cara Kerja Sensor Warna TCS230 / TCS3200
TCS230 mencermati cahaya warna dengan bantuan array 8 x 8 fotodioda. Kemudian menggunakan Konverter Arus-ke-Frekuensi, pembacaan dari fotodioda dikonversikan menjadi gelombang persegi dengan frekuensi yang berbanding lurus dengan intensitas cahaya. Terakhir, menggunakan Papan Arduino kita dapat membaca keluaran gelombang persegi dan mendapatkan hasil untuk warna.
Jika kita memperhatikan lebih dekat sensor, kita dapat melihat bagaimana ia mendeteksi berbagai warna. Fotodioda memiliki tiga filter warna yang berbeda. Enam belas memiliki filter merah, lagi enam belas memiliki filter hijau, lagi enam belas memiliki filter biru dan enam belas fotodioda lainnya jelas tanpa filter.
Setiap enam belas fotodioda terhubung secara paralel, jadi menggunakan dua pin kontrol S2 dan S3 kita dapat memilih mana yang akan dibaca. Jadi misalnya, jika kita ingin mendeteksi warna merah, kita dapat hanya menggunakan enam belas fotodioda dengan filter merah dengan mengatur kedua pin ke tingkat logika rendah sesuai dengan tabel.
Sensor memiliki dua pin kontrol lainnya, S0 dan S1 yang digunakan untuk menskalakan frekuensi keluaran. Frekuensi dapat discale ke tiga nilai preset berbeda yaitu 100 %, 20 % atau 2%. Fungsi penskalaan frekuensi ini memungkinkan keluaran sensor untuk dioptimalkan untuk berbagai penghitung frekuensi atau mikrokontroler.
Sekarang kita siap untuk melanjutkan dan menghubungkan sensor TCS230 ke papan Arduino. Berikut skema rangkaiannya.
Anda dapat mendapatkan komponen yang diperlukan untuk tutorial Arduino ini dari tautan di bawah ini:
Sensor Warna TCS230 TCS3200…….
Papan Arduino ……………………………
Breadboard dan Kabel Jumper ………
Kode Sumber Sensor Warna TCS230
Deskripsi: Pertama-tama kita perlu mendefinisikan pin tempat sensor terhubung dan mendefinisikan variabel untuk membaca frekuensi. Di bagian setup kita perlu mendefinisikan empat pin kontrol sebagai output dan keluaran sensor sebagai input Arduino. Di sini kita juga perlu mengatur penskalaan frekuensi, untuk contoh ini saya akan mengatur ke 20%, dan memulai komunikasi serial untuk menampilkan hasil di Serial Monitor.
Di bagian loop, kita akan mulai dengan membaca fotodioda yang difilter merah. Untuk tujuan itu kita akan mengatur dua pin kontrol S2 dan S3 ke tingkat logika rendah. Kemudian menggunakan fungsi “pulseIn()” kita akan membaca frekuensi keluaran dan menempatkannya ke variabel “frequency”. Menggunakan fungsi Serial.print() kita akan mencetak hasil di serial monitor. Prosedur yang sama untuk dua warna lain, kita hanya perlu menyesuaikan pin kontrol untuk warna yang sesuai.
/* Arduino Color Sensing Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 int frequency = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Setting frequency-scaling to 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); } void loop() { // Setting red filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Blue filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); }Bahasa kode: Arduino (arduino)
Sekarang jika kita menjalankan Serial Monitor kita akan mulai mendapatkan beberapa nilai. Nilai-nilai ini tergantung pada penskalaan frekuensi yang dipilih, serta dari pencahayaan di sekitar.
Perhatikan bahwa tiga nilai berbeda karena sensitivitas yang berbeda dari setiap jenis fotodioda, seperti yang terlihat dari diagram respons spektral fotodioda dari datasheet sensor.
Namun, sekarang mari kita lihat bagaimana nilai bereaksi ketika kita mendekatkan berbagai warna ke depan sensor. Jadi misalnya, jika kita mendekatkan warna merah, nilai awal akan turun, dalam kasus saya dari sekitar 70 menjadi sekitar 25.
Jadi sekarang jika kita ingin mewakili warna yang terdeteksi dengan Model RGB yang memiliki nilai dari 0 hingga 255, kita akan menggunakan fungsi map() untuk memetakan atau mengonversi pembacaan ke nilai dari 0 hingga 255.
//Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,70,255,0);
Nilai 70 akan dipetakan ke 0, dan nilai 25 ke 255. Prosedur yang sama untuk dua warna lain.
Berikut kode sumber akhir untuk contoh ini:
/* Arduino Color Sensing Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 int frequency = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Setting frequency-scaling to 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); } void loop() { // Setting red filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,72,255,0); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 30,90,255,0); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Blue filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,70,255,0); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); }Bahasa kode: Arduino (arduino)
Perhatikan bahwa warna tidak begitu akurat tetapi masih cukup baik untuk proyek sederhana. Sebagai contoh lain dari sensor warna TCS230 dalam video saya selanjutnya kita akan mempelajari cara membuat Mesin Pengelola Warna Otomatis berbasis Arduino.
Silakan ajukan pertanyaan apa pun di bagian komentar di bawah ini dan jangan lupa untuk memeriksa koleksi Proyek Arduino saya.