Membuat Pemisah Warna Arduino: Panduan Sederhana dengan TCS3200 & Servo
Dalam artikel ini, saya akan menunjukkan bagaimana Anda dapat membuat Pemisah Warna Arduino. Anda dapat menonton video di bawah ini atau membaca tulisan yang ada di bawahnya.
Desain
Yang dibutuhkan untuk proyek Arduino ini adalah satu sensor warna (TCS3200) dan dua motor servo hobi, sehingga proyek ini cukup sederhana namun sangat menyenangkan untuk dibuat. Pertama, menggunakan perangkat lunak pemodelan 3D Solidworks, saya membuat desain pemisah warna dan berikut adalah prinsip kerjanya:
Awalnya, skittle berwarna yang tersimpan di pengisi jatuh ke platform yang terpasang pada motor servo atas.
Selanjutnya, motor servo memutar dan membawa skittle ke sensor warna yang mendeteksi warnanya.
Setelah itu, motor servo bawah memutar ke posisi tertentu dan kemudian motor servo atas memutar lagi sampai skittle jatuh ke rel panduan.
Di sini Anda dapat mengunduh model 3D, serta gambar teknik dengan semua ukuran yang diperlukan untuk membangun proyek Arduino ini.
Anda dapat menemukan dan mengunduh model 3D ini, serta menjelajahnya di browser Anda melalui Thangs.
Unduh model 3D rangkaian di Thangs.
Gambar teknik berikut dapat digunakan untuk pemotongan laser semua bagian untuk casing:
Membangun Pemisah Warna Arduino
Bahan yang saya gunakan untuk proyek ini adalah papan serat tebal 3 mm. Saya menggambar ulang bagian-bagian pada papan serat sesuai dengan gambar teknik dan menggunakan gergaji tangan kecil untuk memotong semua bagian sesuai ukuran.
Setelah semua bagian siap, saya mulai merakitnya. Pertama, saya merakit bagian luar menggunakan pistol lem.
Selanjutnya, menggunakan lem universal, saya melekatkan dua motor servo pada platform mereka dan menyatukannya dengan rangkaian.
Setelah itu, lagi menggunakan lem, saya melekatkan rel panduan pada motor servo bawah serta dukungan dan platform yang diperlukan untuk motor servo atas.
Selanjutnya, saya memasang saklar dan stop kontak daya untuk memadamkan Arduino dengan adaptor 5V dan pada platform ketiga saya memasang sensor warna.
Saya menghubungkan komponen-komponen bersama-sama sesuai skema rangkaian berikut.
Anda dapat mendapatkan komponen yang diperlukan untuk proyek Arduino ini dari tautan di bawah ini:
TCS230 TCS3200 Sensor Warna…….
Arduino Nano …………………………….
Breadboard dan Kabel Jumper ………
Motor Servo ……………………………….
Saklar………………………………….……..
Stop Kontak Daya…………………………….……
Kode Sumber Pemisah Warna Arduino
Pada titik ini, pertama-tama kita perlu memprogram Arduino dan kemudian menyelesaikan rangkaian. Berikut adalah Kode Arduino:
/* Arduino Project - Color Sorting Machine * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #include <Servo.h> #define S0 2 #define S1 3 #define S2 4 #define S3 5 #define sensorOut 6 Servo topServo; Servo bottomServo; int frequency = 0; int color=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); topServo.attach(7); bottomServo.attach(8); Serial.begin(9600); } void loop() { topServo.write(115); delay(500); for(int i = 115; i > 65; i--) { topServo.write(i); delay(2); } delay(500); color = readColor(); delay(10); switch (color) { case 1: bottomServo.write(50); break; case 2: bottomServo.write(75); break; case 3: bottomServo.write(100); break; case 4: bottomServo.write(125); break; case 5: bottomServo.write(150); break; case 6: bottomServo.write(175); break; case 0: break; } delay(300); for(int i = 65; i > 29; i--) { topServo.write(i); delay(2); } delay(200); for(int i = 29; i < 115; i++) { topServo.write(i); delay(2); } color=0; } // Custom Function - readColor() int readColor() { // Setting red filtered photodiodes to be read digitalWrite(S2, LOW); digitalWrite(S3, LOW); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); int R = frequency; // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(50); // Setting Green filtered photodiodes to be read digitalWrite(S2, HIGH); digitalWrite(S3, HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); int G = frequency; // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(50); // Setting Blue filtered photodiodes to be read digitalWrite(S2, LOW); digitalWrite(S3, HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); int B = frequency; // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(50); if(R<45 & R>32 & G<65 & G>55){ color = 1; // Red } if(G<55 & G>43 & B<47 &B>35){ color = 2; // Orange } if(R<53 & R>40 & G<53 & G>40){ color = 3; // Green } if(R<38 & R>24 & G<44 & G>30){ color = 4; // Yellow } if(R<56 & R>46 & G<65 & G>55){ color = 5; // Brown } if (G<58 & G>45 & B<40 &B>26){ color = 6; // Blue } return color; }Code language: Arduino (arduino)
Deskripsi kode:
Jadi, kita perlu menyertakan pustaka “Servo.h”, mendefinisikan pin tempat sensor warna akan terhubung, membuat objek servo dan mendeklarasikan beberapa variabel yang diperlukan untuk program. Di bagian setup kita perlu mendefinisikan pin sebagai Output dan Input, mengatur pengalaman frekuensi untuk sensor warna, mendefinisikan pin servo dan memulai komunikasi serial untuk mencetak hasil pembacaan warna pada monitor serial.
Di bagian loop, program kita dimulai dengan memindahkan motor servo atas ke posisi pengisi skittle. Perhatikan bahwa nilai 115 ini sesuai dengan bagian dan motor servo saya, jadi Anda harus menyesuaikan nilai ini serta nilai berikutnya untuk motor servo sesuai dengan pembangunan Anda.
Selanjutnya menggunakan perulangan “for” kita akan memutar dan membawa skittle ke posisi sensor warna. Kita menggunakan perulangan “for” sehingga kita dapat mengontrol kecepatan putaran dengan mengubah waktu penundaan dalam loop.
Selanjutnya, setelah penundaan setengah detik, menggunakan fungsi kustom readColor() kita akan membaca warna skittle. Berikut adalah kode fungsi kustom. Menggunakan empat pin kontrol dan pin keluaran frekuensi dari sensor warna kita membaca warna skittle. Sensor membaca 3 nilai berbeda untuk setiap skittle, Merah, Hijau dan Biru dan berdasarkan nilai-nilai ini kita memberi tahu warna sebenarnya. Untuk detail lebih lanjut tentang cara kerja sensor warna TCS3200 Anda dapat memeriksa tutorial terperinci saya sebelumnya tentangnya.
Berikut adalah nilai RGB yang saya peroleh dari sensor untuk setiap skittle. Perhatikan bahwa nilai-nilai ini dapat bervariasi karena sensor tidak selalu akurat. Oleh karena itu, menggunakan pernyataan “if” ini kita membiarkan sensor memiliki kesalahan sekitar +-5 dari nilai yang diuji untuk warna tertentu. Jadi misalnya jika kita memiliki skittle Merah, pernyataan “if” pertama akan benar dan variabel “color” akan mendapatkan nilai 1. Itulah yang dilakukan fungsi kustom readColor() dan setelah itu menggunakan pernyataan “switch-case” kita memutar motor servo bawah ke posisi tertentu. Di akhir kita memutar lebih jauh motor servo atas sampai skittle jatuh ke rel panduan dan kembali mengirimkannya ke posisi awal sehingga proses dapat diulang.
Menyelesaikan Desain
Setelah mengunggah kode saya mengamankan Papan Arduino menggunakan pistol lem.
Selanjutnya menggunakan botol plastik transparan saya membuat pengisi dan bersama dengan bagian atas melem menatkannya ke rangkaian dan menyelesaikan proyek.
Jangan ragu untuk bertanya apa pun di bagian komentar di bawah.