Problem Statement:
A recycling firm needs a machine that is capable of sorting 3-4 different types of materials into bins (sorting 3-4 different types of marbles). Design and build a fully automated machine capable of sorting four various types of marbles in four separate bins (sorting recyclable materials).
Constraints:
- Separation process must be fully automated
- Must successfully separate commingled recyclable materials (marbles) into individual bins
- Three to four different marble types
- A speedy sorter will receive extra points, however, accuracy is vital
Brainstorming:
- Tunnel hopper using two, zip-tie-attached VEX components
- Rotor that allows one marble at a time to exit the hopper and enter the sensor region
- Plastic water bottle serves as the hopper
- Conveyor belt hopper
- Sifting hopper using VEX motor
- Platform funnel for hopper
- VEX tank treads with dividers serve as the rotor that allows only a marble at a time to exit the hopper and enter the sensor region
- Two arms serve as a sorter after the marbles are read by the sensor
- Pusher pushes the marble down to the sorting arm after the marbles are read by the sensor
- Two “feeding” rotor VEX components act as the “semi-permeable membrane” entrance to the sensor
- Motor turns a gear that is meshed with two other gears that are attached to the same axle as the “Feeding” rotors
- Two ates open and close alternately to feed one marble at a time from the feeder and to the sensor region
My group and I took all of the above ideas and narrowed it down to the two designs listed here.
Design 1
A bottle hopper directs the marbles into a slide. Two motorized arms then isolate one marble at a time over a light sensor. The rotating cup bins then rotate to the correct position, and the last arm lifts and frees the marble.
Design 2
A hopper composed of VEX components directs the marbles to a tunnel. Just before the tunnel, two "feeders" grab one marble at a time and put it over the light sensor. A ramp at the end of the tunnel then rotates to the correct stationary bin and the marble is released to roll down the slide and into its bin.
Design 1
A bottle hopper directs the marbles into a slide. Two motorized arms then isolate one marble at a time over a light sensor. The rotating cup bins then rotate to the correct position, and the last arm lifts and frees the marble.
Design 2
A hopper composed of VEX components directs the marbles to a tunnel. Just before the tunnel, two "feeders" grab one marble at a time and put it over the light sensor. A ramp at the end of the tunnel then rotates to the correct stationary bin and the marble is released to roll down the slide and into its bin.
Decision Matrix
To decide upon which design would be better to build, my team made this decision matrix and chose to build design 1.
To decide upon which design would be better to build, my team made this decision matrix and chose to build design 1.
Calculations:
My team decided to build and program design 1. Below is a sketch.
Program Calculation and Brainstorming
Program Brainstorming (rough draft)
If green then rotate to position 1 Else if light blue then rotate to position 2 Else if dark blue then rotate to position 3 Else if clear then rotate to position 4 If light blue then position 2 Else if dark blue then position 3 Else if clear then position 4 Else if green then position 1 If dark blue then position 3 Else if clear then position 4 Else if green then position 1 Else if light blue then position 2 If Clear then position 4 Else if green then position1 Else if light blue then position 2 Else if dark blue then position 3 |
Program Brainstorming (fine draft)
task main() { //Program begins, insert code within curly braces while (1==1);//loop program infinitely { turnFlashlightOn(port4,power);//turn on the flashlight setServo(port1, position);//gate 1 opens to allow a marble to enter the sensor chamber if(SensorValue(lightSensor)==#);//if the marble is green { setServo(port1, position);//close gate 1 startMotor(port3, speed);//rotate the bins untilEncoderCounts(distance, port#);//until position 1 setServo(port2, position);//open gate 2 setServo(port2, position);//close gate 2 } else { if(SensorValue(lightSensor)==#);//if the marble is light blue { setServo(port1, position);//close gate 1 startMotor(port3, speed);//rotate the bins untilEncoderCounts(distance, port#);//until position 2 setServo(port2, position);//open gate 2 setServo(port2, position);//close gate 2 } else { if(SensorValue(lightSensor)==#);//if the marble is dark blue { setServo(port1, position);//close gate 1 startMotor(port3, speed);//rotate the bins untilEncoderCounts(distance, port#);//until position 3 setServo(port2, position);//open gate 2 setServo(port2, position);//close gate 2 } else { if(SensorValue(lightSensor)==#);//if marble is clear { setServo(port1, position);//close gate 1 startMotor(port3, speed);//rotate bins untilEncoderCounts(distance, port#);//until position 4 setServo(port2, position);//open gate 2 setServo(port2, position);//close gate 2 } } |
Final Program:
task main()
{
startMotor(port10,127); //turns on the flashlight
SensorValue[dgtl1] = 0; //resets encoder count
setServo(port6, 10);
setServo(port7, 20);
untilTouch(dgtl3); //waits to start until button is pressed
while (1==1) //loop program infinitely
{
wait1Msec(500);
setServo(port7, 5); //gate 1 opens to allow a marble to enter the sensor chamber
wait1Msec(200);
setServo(port7, 20); //close gate 1
wait1Msec(1000);
if(SensorValue(in1)>350) //if the marble is <aluminum>
{
setServo(port6, 30); //open gate 2
wait1Msec(200);
setServo(port6, 10); //close gate 2
} //end color one sort
else
{
if(SensorValue(in1)>88) //if the marble is <dark blue>
{
startMotor(port1, 30); //rotate the bins
untilEncoderCounts(85, dgtl1); //until position 2
stopMotor(port1); //stop motor
startMotor(port1, -30);
wait1Msec(80);
stopMotor(port1);
wait1Msec(500);
setServo(port6, 30); //open gate 2
wait1Msec(200);
setServo(port6, 10); //close gate 2
wait1Msec(200);
startMotor(port1, -30); //rotate the bins
untilEncoderCounts(-85, dgtl1); //until position 2
stopMotor(port1); //stop motor
startMotor(port1, 30);
wait1Msec(80);
stopMotor(port1);
} //end color two sort
else //if the marble is <clear>
{
startMotor(port1, 30); //rotate the bins
untilEncoderCounts(175, dgtl1); //until position 3
stopMotor(port1); //stop motor
startMotor(port1, -30);
wait1Msec(80);
stopMotor(port1);
wait1Msec(500);
setServo(port6, 30); //open gate 2
wait1Msec(200);
setServo(port6, 10); //close gate 2
wait1Msec(200);
startMotor(port1, -30); //rotate the bins
untilEncoderCounts(-175, dgtl1); //until position 2
stopMotor(port1); //stop motor
startMotor(port1, 30);
wait1Msec(80);
stopMotor(port1);
} //end color 3 sort
}
}
}
task main()
{
startMotor(port10,127); //turns on the flashlight
SensorValue[dgtl1] = 0; //resets encoder count
setServo(port6, 10);
setServo(port7, 20);
untilTouch(dgtl3); //waits to start until button is pressed
while (1==1) //loop program infinitely
{
wait1Msec(500);
setServo(port7, 5); //gate 1 opens to allow a marble to enter the sensor chamber
wait1Msec(200);
setServo(port7, 20); //close gate 1
wait1Msec(1000);
if(SensorValue(in1)>350) //if the marble is <aluminum>
{
setServo(port6, 30); //open gate 2
wait1Msec(200);
setServo(port6, 10); //close gate 2
} //end color one sort
else
{
if(SensorValue(in1)>88) //if the marble is <dark blue>
{
startMotor(port1, 30); //rotate the bins
untilEncoderCounts(85, dgtl1); //until position 2
stopMotor(port1); //stop motor
startMotor(port1, -30);
wait1Msec(80);
stopMotor(port1);
wait1Msec(500);
setServo(port6, 30); //open gate 2
wait1Msec(200);
setServo(port6, 10); //close gate 2
wait1Msec(200);
startMotor(port1, -30); //rotate the bins
untilEncoderCounts(-85, dgtl1); //until position 2
stopMotor(port1); //stop motor
startMotor(port1, 30);
wait1Msec(80);
stopMotor(port1);
} //end color two sort
else //if the marble is <clear>
{
startMotor(port1, 30); //rotate the bins
untilEncoderCounts(175, dgtl1); //until position 3
stopMotor(port1); //stop motor
startMotor(port1, -30);
wait1Msec(80);
stopMotor(port1);
wait1Msec(500);
setServo(port6, 30); //open gate 2
wait1Msec(200);
setServo(port6, 10); //close gate 2
wait1Msec(200);
startMotor(port1, -30); //rotate the bins
untilEncoderCounts(-175, dgtl1); //until position 2
stopMotor(port1); //stop motor
startMotor(port1, 30);
wait1Msec(80);
stopMotor(port1);
} //end color 3 sort
}
}
}
Reflection:
After our original concept, we decided to add the following: a roof to the tunnel, longer gate arms, and duct-tape onto the hopper. These were necessary and relatively easy-to-fix problems. When you notice that your original design concept is not going to work, return back to the beginning of the design cycle and make a new and better design.
Create a free website with
Weebly