Tentang proyek ini
Proyek
Ini adalah tutorial sederhana, di mana kita akan mengeksplorasi cara membaca warna menggunakan Arduino dan sensor seperti TCS 3200. Idenya adalah mendeteksi warna objek, dan menampilkannya di LCD. Proyek ini merupakan komponen dari proyek yang lebih besar yang akan menjadi Lengan Robot yang memilih tindakan yang tepat berdasarkan warna objek. Diagram blok di atas menunjukkan komponen utama.
Video di bawah ini menunjukkan pengerjaan proyek akhir:
Langkah 1:BoM
Tautan dan harga di bawah ini hanya untuk referensi.
- Modul Sensor Warna TCS3200 (US$9.00)
- IIC/I2C/TWI 1602 Modul LCD Lampu Latar Biru Serial (US$ 8.00)
Langkah 2:Sensor Warna TSC 3200
Seperti yang dijelaskan pada Datasheet-nya, TCS3200 adalah konverter cahaya-ke-frekuensi warna yang dapat diprogram yang menggabungkan fotodioda silikon yang dapat dikonfigurasi dan konverter arus-ke-frekuensi pada sirkuit terpadu CMOS monolitik tunggal.
Outputnya adalah gelombang persegi (50% duty cycle) dengan frekuensi berbanding lurus dengan intensitas cahaya (iradiansi). Frekuensi output skala penuh dapat diskalakan dengan salah satu dari tiga nilai preset melalui dua pin input kontrol (S0 dan S1). Input digital dan output digital memungkinkan antarmuka langsung ke mikrokontroler atau sirkuit logika lainnya.
Output enable (OE) menempatkan output dalam status impedansi tinggi untuk berbagi beberapa unit saluran input mikrokontroler. Di TCS3200, konverter cahaya-ke-frekuensi membaca array fotodioda 8 x 8.
- Enam belas fotodioda memiliki filter biru
- 16 fotodioda memiliki filter hijau
- 16 fotodioda memiliki filter merah
- 16 fotodioda jernih tanpa filter.
Pin S2 dan S3 digunakan untuk memilih grup fotodioda (merah, hijau, biru, bening) yang aktif. Fotodioda berukuran 110 m x 110 m dan berada di pusat 134 m.
OE (Aktifkan) harus terhubung ke GND (RENDAH).
Sensor dienkapsulasi dan harus diberi daya antara 2,7 dan 5,5 VDC. Kami akan menggunakan output Arduino 5V untuk menyalakan sensor. Untuk menggunakan sensor dengan benar, kami akan memasang cincin karet kecil untuk mengisolasi sensor dari cahaya lateral. Saya menggunakan lem panas untuk memperbaikinya.
Langkah 3:Menghubungkan HW
Hubungkan Sensor TSC3200 seperti di bawah ini:
Hubungkan Layar Serial 2/16 LCD I2C:
Instal Arduino Nano di BreadBoard. Hubungkan output Nano 5V dan GND di kedua rel daya.
Langkah 4:Kode Arduino
Hal pertama yang harus ditentukan adalah penskalaan frekuensi seperti yang didefinisikan pada tabel yang ditunjukkan di atas. Pin S0 dan S1 digunakan untuk itu. Penskalaan frekuensi keluaran berguna untuk mengoptimalkan pembacaan sensor untuk berbagai penghitung frekuensi atau mikrokontroler. Kami akan mengatur S0 dan S1, keduanya dalam TINGGI (100%):
digitalWrite(s0,HIGH); digitalWrite(s1,HIGH);
Selanjutnya yang harus dilakukan adalah memilih warna yang akan dibaca oleh photodiode (Merah, Hijau, atau Biru), kita menggunakan pin kontrol S2 dan S3 untuk itu. Karena fotodioda dihubungkan secara paralel, pengaturan S2 dan S3 LOW dan HIGH dalam kombinasi yang berbeda memungkinkan Anda untuk memilih fotodioda yang berbeda, seperti yang ditunjukkan pada tabel di atas.
digitalWrite(s2, LOW); digitalWrite(s3, RENDAH); merah =pulseIn(pin keluar, RENDAH); // Membaca komponen MERAH dari digitalWrite(s2, HIGH); digitalWrite(s3, TINGGI); grn =pulseIn(pin keluar, RENDAH); // Membaca komponen HIJAU warna digitalWrite(s2, LOW); digitalWrite(s3, TINGGI); blu =pulseIn(pin keluar, RENDAH); // Membaca komponen warna BIRU
Pada kode terakhir, kita akan membaca beberapa kali setiap komponen RGB dan mengambil rata-ratanya, sehingga kita dapat mengurangi kesalahan jika salah satu pembacaannya buruk.
Setelah kita memiliki 3 komponen (RGB), kita harus menentukan warna apa itu. Caranya dengan mengkalibrasi proyek sebelumnya. Anda dapat menggunakan kertas atau benda uji berwarna yang diketahui dan membaca 3 komponen yang dihasilkan.
Anda dapat mulai dengan milik saya, mengubah parameter untuk tingkat cahaya Anda:
void getColor(){ readRGB(); if (merah> 8 &&merah <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="WHITE"; lain jika (merah> 80 &&merah <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="HITAM"; lain jika (merah> 12 &&merah <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; lain jika (merah> 50 &&merah <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="HIJAU"; lain jika (merah> 10 &&merah <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="KUNING"; lain jika (merah> 65 &&merah <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="BLUE"; warna lain ="NO_COLOR";}
Seperti yang Anda lihat di atas, saya telah menetapkan 6 warna:putih, hitam, merah, hijau, kuning, dan biru. Saat cahaya sekitar padam, parameternya cenderung lebih tinggi.
Di dalam loop(), saya mendefinisikan pembacaan tampilan pada LCD setiap 1 detik.
Kode lengkapnya dapat ditemukan di GitHub saya.
Langkah 5:Kesimpulan
Seperti biasa, saya berharap proyek ini dapat membantu orang lain menemukan jalan mereka di dunia elektronik, robotika, dan IoT yang mengasyikkan!
Silakan kunjungi GitHub saya untuk file yang diperbarui:Detektor Warna
Untuk proyek lainnya, silakan kunjungi blog saya:MJRoBot.org
Saludos dari selatan dunia!
Sampai jumpa di tutorial saya berikutnya!
Terima kasih,
Marcelo
Kode
- Cuplikan kode #2
- Cuplikan kode #3
Cuplikan kode #2Teks biasa
digitalWrite(s2, LOW); digitalWrite(s3, RENDAH); merah =pulseIn(pin keluar, RENDAH); // Membaca komponen MERAH dari digitalWrite(s2, HIGH); digitalWrite(s3, TINGGI); grn =pulseIn(pin keluar, RENDAH); // Membaca komponen HIJAU warna digitalWrite(s2, LOW); digitalWrite(s3, TINGGI); blu =pulseIn(pin keluar, RENDAH); // Membaca komponen warna BIRU
Cuplikan kode #3Teks biasa
void getColor(){ readRGB(); if (merah> 8 &&merah <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="WHITE"; lain jika (merah> 80 &&merah <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="HITAM"; lain jika (merah> 12 &&merah <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; lain jika (merah> 50 &&merah <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="HIJAU"; lain jika (merah> 10 &&merah <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="KUNING"; lain jika (merah> 65 &&merah <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="BLUE"; warna lain ="NO_COLOR";}
Github
https://github.com/Mjrovai/Color-Detectorhttps://github.com/Mjrovai/Color-Detector Skema
Hw
https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzz