Automatic
Sorter
This project is an Automatic Sorting Machine built using an Arduino Uno. It detects and sorts objects based on colour using a colour sensor. Once an object is detected, the Arduino activates a servo motor and positions it at a certain angle based on colour. This type of project is commonly used for educational purposes and DIY recycling or automation systems.
​
How It Works
Objects are placed one at a time on a conveyor or slide where a sensor reads a specific property — for example, a colour sensor (TCS3200), an IR distance sensor, or a metal detector coil. Based on the sensor’s output, the Arduino classifies the item and moves a servo motor or actuator to direct it to the correct destination
Materials
To build an Automatic Sorter project with an Arduino Uno, you'll need the following materials:
Components:
​
1) Arduino Uno
The microcontroller that reads sensor data and controls sorting
​
2) TCS3200 Colour Sensor
Detects object colour (can be replaced with IR or metal sensor)
​
3) IR Sensor or Limit Switch
Detects when an object is present
4) Servo Motor (e.g. SG90 or MG996R)
Moves a flap or arm to direct the item​
​
5)Breadboard and jumper wires
-
Connect components to the Arduino
​​​​
6) USB Cable (Type-A to Type-B)
-
To connect Arduino to a computer for programming and power.
Basic Setup
TCS3200 Colour Sensor Module:
-
VCC → Connect to 5V on the Arduino
-
GND → Connect to GND on the Arduino
-
OUT → Connect to digital pin 2
-
S0 → Connect to digital pin 3
-
S1 → Connect to digital pin 4
-
S2 → Connect to digital pin 5
-
S3 → Connect to digital pin 6
-
LED → Connect to digital pin 8 (so Arduino can control when the lights turn on)
​
IR Object Detector (or IR Sensor Module):
-
VCC → Connect to 5V on the Arduino
-
GND → Connect to GND on the Arduino
-
OUT → Connect to digital pin 7
​
Servo Motor:
-
Signal → Connect to digital pin 9
-
VCC → Connect to 5V (or external power if needed)
-
GND → Connect to Arduino GND (shared ground)
​
Software Setup
Install Servo.h library, this is already native to the Arduino IDE and doesn't need to be installed manually.
CODE BREAK-DOWN
const int leds[4] = {4, 5, 6, 7};
-
Defines an array containing the digital pin numbers for the 4 LEDs. Each index corresponds to one LED.
​
const int buttons[4] = {8, 9, 10, 11};
-
Defines an array with the pin numbers for the 4 buttons, each paired with an LED by index.
​
const int buzzer = 3;
-
Assigns pin 3 to the buzzer. This will be used to output tones during the game.
​
int sequence[100];
-
Creates an array to store up to 100 values representing the LED sequence the player must remember.
​
int level = 0;
-
Keeps track of the current game level (or sequence length). Starts at 0 and increases as the player succeeds.
​
void setup() {
-
Starts the setup section, which runs once when the Arduino powers on or resets.
​
for (int i = 0; i < 4; i++) { pinMode(leds[i], OUTPUT); pinMode(buttons[i], INPUT); }
-
Loops through all 4 LEDs and buttons, setting the LED pins as OUTPUT and button pins as INPUT (for reading presses).
​
pinMode(buzzer, OUTPUT);
-
Sets the buzzer pin as an output so tones can be played.
​
randomSeed(analogRead(0));
Seeds the random number generator using noise from analog pin 0 for better randomness.
​
nextRound();
-
Calls the function to start the first round and generate the first LED in the sequence.
​
void loop() {
-
Begins the main game loop, which runs continuously.
​
if (!playSequence()) { gameOver(); nextRound(); }
-
Plays the current sequence. If the player gets it wrong, the game over sequence plays and a new game starts.
​
delay(500);
-
Pauses for half a second between rounds.
​
level++;
-
Increases the level after a successful round.
​
sequence[level] = random(0, 4);
-
Adds a new random LED to the sequence, choosing a number from 0 to 3 (representing the 4 LEDs).
​
bool playSequence() {
-
Starts a function that plays the sequence and checks player input.
​
for (int i = 0; i <= level; i++) { lightLED(sequence[i]); delay(250); clearLEDs(); delay(250); }
-
Loops through the sequence, lights each LED briefly, and clears it to show the pattern to the player.
​
for (int i = 0; i <= level; i++) { int guess = waitForButton(); if (guess != sequence[i]) { return false; } }
-
Waits for player input, one button at a time. If any input doesn’t match the stored sequence, the function returns false (indicating a mistake).
​
return true;
-
If the player completed the whole sequence correctly, return true.
​
int waitForButton() {
-
Starts a function that waits until one of the buttons is pressed.
​
while (true) { for (int i = 0; i < 4; i++) { if (digitalRead(buttons[i]) == HIGH) {
-
Loops forever until any one of the 4 buttons reads HIGH (pressed).
​
lightLED(i); delay(200); clearLEDs();
-
Lights the matching LED for feedback and clears it shortly after.
​
while (digitalRead(buttons[i]) == HIGH);
-
Waits until the player releases the button (prevents multiple counts from one press).
​
return i;
-
Returns the index of the button that was pressed.
​
void lightLED(int i) {
-
Lights up the LED at index i and plays a tone based on its index.
​
digitalWrite(leds[i], HIGH);
-
Turns on the selected LED.
​
tone(buzzer, 200 + i * 100, 150);
-
Plays a short tone using the buzzer. The frequency depends on which LED is lit.
​
void clearLEDs() {
-
Turns off all the LEDs.
​
for (int i = 0; i < 4; i++) { digitalWrite(leds[i], LOW); }
-
Loops through all LED pins and turns them off.
​
void gameOver() {
-
Plays a game over pattern of lights and sound.
​
for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { digitalWrite(leds[j], HIGH); }
-
Flashes all LEDs on.
​
tone(buzzer, 200, 300); delay(300); clearLEDs(); delay(300); }
-
Plays a low tone, waits, turns off LEDs, and pauses briefly — repeated 3 times.
​
level = 0;
-
Resets the level to start a new game.
​
void nextRound() {
-
Prepares for the next game session or restarts the first round.
​
sequence[0] = random(0, 4);
-
Creates the first item in the new LED sequence.
​
level = 0;
-
Sets the level back to zero.
