Automatic Color Sorter Prototype 1.0
This prototype serves to group objects according to their respective colors.
Components and supplies
1
color sensor tcs3200
2
SG90 Micro-servo motor
1
Arduino UNO
Tools and machines
1
Hot glue gun (generic)
1
Solder Wire, Lead Free
1
Soldering iron (generic)
Apps and platforms
1
Arduino IDE
Project description
Code
sketch on Arduino IDE
arduino
1// TCS230 or TCS3200 pins wiring to Arduino 2#include <Servo.h> 3#define S0 2 4#define S1 3 5#define S2 4 6#define S3 7 7#define sensorOut 8 8 9Servo myser1; 10Servo myser2; 11int pos = 00; 12 13// Stores frequency read by the photodiodes 14int red = 0; 15int green = 0; 16int blue = 0; 17int benar=0, warna=0; 18 19void setup() { 20 myser1.attach(5); 21 myser2.attach(6); 22 23 // Setting the outputs 24 pinMode(S0, OUTPUT); 25 pinMode(S1, OUTPUT); 26 pinMode(S2, OUTPUT); 27 pinMode(S3, OUTPUT); 28 29 // Setting the sensorOut as an input 30 pinMode(sensorOut, INPUT); 31 32 // Setting frequency scaling to 20% 33 digitalWrite(S0,HIGH); 34 digitalWrite(S1,LOW); 35 36 // Begins serial communication 37 Serial.begin(9600); 38} 39void loop() { 40 myser2.write(0); //servo2 menulis arah 0 41 delay(1000); //jeda 500ms 42 while(benar==0) //benar = 0 43 { 44 detectcolor(); //deteksi warna 45 posservo(); //posisi servo 46 delay(100); //jeda 100 ms 47 } 48delay(200); //jeda 100 ms 49 myser2.write(70); //servo2 menulis 90 50 benar=0; //benar =0 51 delay(1000); //jeda 500 ms 52} 53 54 //detectcolor(); 55 56 57 58void detectcolor() 59{ 60 // Setting RED (R) filtered photodiodes to be read 61 digitalWrite(S2,LOW); 62 digitalWrite(S3,LOW); 63 64 // Reading the output frequency 65 red = pulseIn(sensorOut, LOW); 66 67 // Printing the RED (R) value 68 Serial.print("R = "); 69 Serial.print(red); 70 delay(100); 71 72 // Setting GREEN (G) filtered photodiodes to be read 73 digitalWrite(S2,HIGH); 74 digitalWrite(S3,HIGH); 75 76 // Reading the output frequency 77 green = pulseIn(sensorOut, LOW); 78 79 // Printing the GREEN (G) value 80 Serial.print(" G = "); 81 Serial.print(green); 82 delay(100); 83 84 // Setting BLUE (B) filtered photodiodes to be read 85 digitalWrite(S2,LOW); 86 digitalWrite(S3,HIGH); 87 88 // Reading the output frequency 89 blue = pulseIn(sensorOut, LOW); 90 91 // Printing the BLUE (B) value 92 Serial.print(" B = "); 93 Serial.println(blue); 94 delay(100); 95if(blue<60 && red<150 && green<90){ //ketentuan range RGB 96 warna=1; //warna =1 97 Serial.println("biru"); //menampilkan biru 98 } 99else if((50<red&&red<83) && (110<green && green<150) && blue<100){ //ketentuan range RGB 100 warna=2; //warna 2 101 Serial.println("Merah"); 102 } 103 else if((120<red&&red<150) && (70<green&&green<90) && (60<blue&&blue<85)){ //ketentuan range RGB 104 warna=3; //warna 3 105 Serial.println("Hijau"); 106 } 107else if((43<red && red<70) && (55<green&&green<80) && (60<blue && blue<80)){ //ketentuan range RGB 108 warna=4; //warna 4 109 Serial.println("Kuning"); 110 } 111else if((90<red && red<105) && (90<green&&green<115) && blue<55){ //ketentuan range RGB 112 warna=5; //warna 5 113 Serial.println("Ungu"); 114 } 115 else 116 { 117 warna=0; //Tidak mendeteksi 118 Serial.println("tidak mendeteksi"); 119 } 120} 121 122void posservo() 123{ 124 if(warna==1) //jika warna = 1 125 { 126 myser1.write(30); //myser1 menulis 30 127 benar=1; 128 } 129 else if(warna==2) 130 { 131 myser1.write(60); 132 benar=1; 133 } 134 else if(warna==3) 135 { 136 myser1.write(90); 137 benar=1; 138 } 139 else if(warna==4) 140 { 141 myser1.write(120); 142 benar=1; 143 } 144 else if(warna==5) 145 { 146 myser1.write(150); 147 benar=1; 148 } 149} 150
sketch on Arduino IDE
arduino
1// TCS230 or TCS3200 pins wiring to Arduino 2#include <Servo.h> 3#define 4 S0 2 5#define S1 3 6#define S2 4 7#define S3 7 8#define sensorOut 8 9 10Servo 11 myser1; 12Servo myser2; 13int pos = 00; 14 15// Stores frequency read by the 16 photodiodes 17int red = 0; 18int green = 0; 19int blue = 0; 20int benar=0, warna=0; 21 22void 23 setup() { 24 myser1.attach(5); 25 myser2.attach(6); 26 27 // Setting the 28 outputs 29 pinMode(S0, OUTPUT); 30 pinMode(S1, OUTPUT); 31 pinMode(S2, OUTPUT); 32 33 pinMode(S3, OUTPUT); 34 35 // Setting the sensorOut as an input 36 pinMode(sensorOut, 37 INPUT); 38 39 // Setting frequency scaling to 20% 40 digitalWrite(S0,HIGH); 41 42 digitalWrite(S1,LOW); 43 44 // Begins serial communication 45 Serial.begin(9600); 46} 47void 48 loop() { 49 myser2.write(0); //servo2 menulis arah 0 50 delay(1000); //jeda 51 500ms 52 while(benar==0) //benar = 0 53 { 54 detectcolor(); //deteksi warna 55 56 posservo(); //posisi servo 57 delay(100); //jeda 100 ms 58 } 59delay(200); 60 //jeda 100 ms 61 myser2.write(70); //servo2 menulis 90 62 benar=0; //benar 63 =0 64 delay(1000); //jeda 500 ms 65} 66 67 //detectcolor(); 68 69 70 71void 72 detectcolor() 73{ 74 // Setting RED (R) filtered photodiodes to be read 75 digitalWrite(S2,LOW); 76 77 digitalWrite(S3,LOW); 78 79 // Reading the output frequency 80 red = pulseIn(sensorOut, 81 LOW); 82 83 // Printing the RED (R) value 84 Serial.print("R = "); 85 86 Serial.print(red); 87 delay(100); 88 89 // Setting GREEN (G) filtered photodiodes 90 to be read 91 digitalWrite(S2,HIGH); 92 digitalWrite(S3,HIGH); 93 94 // 95 Reading the output frequency 96 green = pulseIn(sensorOut, LOW); 97 98 // 99 Printing the GREEN (G) value 100 Serial.print(" G = "); 101 Serial.print(green); 102 103 delay(100); 104 105 // Setting BLUE (B) filtered photodiodes to be read 106 107 digitalWrite(S2,LOW); 108 digitalWrite(S3,HIGH); 109 110 // Reading the output 111 frequency 112 blue = pulseIn(sensorOut, LOW); 113 114 // Printing the BLUE (B) 115 value 116 Serial.print(" B = "); 117 Serial.println(blue); 118 delay(100); 119if(blue<60 120 && red<150 && green<90){ //ketentuan range RGB 121 warna=1; //warna =1 122 Serial.println("biru"); 123 //menampilkan biru 124 } 125else if((50<red&&red<83) && (110<green && green<150) 126 && blue<100){ //ketentuan range RGB 127 warna=2; //warna 2 128 Serial.println("Merah"); 129 130 } 131 else if((120<red&&red<150) && (70<green&&green<90) && (60<blue&&blue<85)){ 132 //ketentuan range RGB 133 warna=3; //warna 3 134 Serial.println("Hijau"); 135 136 } 137else if((43<red && red<70) && (55<green&&green<80) && (60<blue && blue<80)){ 138 //ketentuan range RGB 139 warna=4; //warna 4 140 Serial.println("Kuning"); 141 142 } 143else if((90<red && red<105) && (90<green&&green<115) && blue<55){ //ketentuan 144 range RGB 145 warna=5; //warna 5 146 Serial.println("Ungu"); 147 } 148 else 149 150 { 151 warna=0; //Tidak mendeteksi 152 Serial.println("tidak mendeteksi"); 153 154 } 155} 156 157void posservo() 158{ 159 if(warna==1) //jika warna = 1 160 { 161 162 myser1.write(30); //myser1 menulis 30 163 benar=1; 164 } 165 else if(warna==2) 166 167 { 168 myser1.write(60); 169 benar=1; 170 } 171 else if(warna==3) 172 { 173 174 myser1.write(90); 175 benar=1; 176 } 177 else if(warna==4) 178 { 179 myser1.write(120); 180 181 benar=1; 182 } 183 else if(warna==5) 184 { 185 myser1.write(150); 186 187 benar=1; 188 } 189} 190
Downloadable files
wiring on fritzing
wiring on fritzing

wiring on fritzing
wiring on fritzing

Documentation
design on SketchUP
design on SketchUP

Comments
Only logged in users can leave comments