
CIRCUITRY
This is how we wired our prototype to recognize the color of the package and sort it into the appropriate safe

CODE
This is the code we used to recognize the color of the package and sort it into the appropriate safe
// The Mailroom Marvels - EDNS151 Project
// Color Recognition and Sorting of Packages
// Code by Amanda Aurigemma
#include <Servo.h>
#include <Adafruit_TCS34725.h>
Servo Servo0;
Servo Servo1;
Servo Servo2;
Servo Servo3;
Servo Servo4;
int frequency = 0;
int color=0;
Adafruit_TCS34725 tcs = Adafruit_TCS34725 ( TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X );
void setup() {
Serial.begin(9600);
Servo0.attach(7);
Servo1.attach(12);
Servo2.attach(11);
Servo3.attach(10);
Servo4.attach(9);
Servo0.write(45);
Servo1.write(45);
Servo2.write(60);
Servo3.write(60);
Servo4.write(60);
}
void loop() {
uint16_t clearcol, red, green, blue;
float average, r, g, b;
delay ( 100 );
tcs.getRawData ( & red, & green, & blue, & clearcol );
average = ( red + green + blue ) / 3;
r = red / average;
g = green / average;
b = blue / average;
if ( ( r > 1.4 ) && ( g < 0.9 ) && ( b < 0.9 ) ) { // red
Servo1.write(0); // activate sorting gate
delay(1000);
Servo0.write(10); // lower platform
delay(1000);
Servo1.write(15); // slowly close sorting gate
delay(500);
Servo1.write(30);
delay(500);
Servo1.write(45);
Servo0.write(45); // return platform to original position
}
else if ( ( r < 0.95 ) && ( g > 1.4 ) && ( b < 0.9 ) ) { // green
Servo2.write(0);
delay(1000);
Servo0.write(10);
delay(1000);
Servo2.write(15);
delay(500);
Servo2.write(30);
delay(500);
Servo2.write(45);
delay(500);
Servo2.write(60);
Servo0.write(45);
}
else if ( ( r < 0.8 ) && ( g < 1.2 ) && ( b > 1.2 ) ) { // blue
Servo3.write(5);
delay(1000);
Servo0.write(10);
delay(1500);
Servo3.write(15);
delay(500);
Servo3.write(30);
delay(500);
Servo3.write(45);
delay(500);
Servo3.write(60);
Servo0.write(45);
}
else if ( ( r > 1.15 ) && ( g > 1.15 ) && ( b < 0.7 ) ) { // yellow
Servo4.write(5);
delay(1000);
Servo0.write(10);
delay(3000);
Servo4.write(15);
delay(500);
Servo4.write(30);
delay(500);
Servo4.write(45);
delay(500);
Servo4.write(60);
Servo0.write(45);
}
else{ //if input isn’t recognized, motor positions reset - future iterations should improve on this
Servo0.write(45);
Servo1.write(45);
Servo2.write(60);
Servo3.write(60);
Servo4.write(60);
}
}